summaryrefslogtreecommitdiff
path: root/src/lines.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lines.cpp')
-rw-r--r--src/lines.cpp30
1 files changed, 25 insertions, 5 deletions
diff --git a/src/lines.cpp b/src/lines.cpp
index 3d93598..bacf048 100644
--- a/src/lines.cpp
+++ b/src/lines.cpp
@@ -2,9 +2,17 @@
TexoProducerLines::TexoProducerLines(TexoExporter &exporter):
- TexoProducer(exporter), newline(false)
+ TexoProducer(exporter), newline(true)
{}
+void TexoProducerLines::End()
+{
+ if (!newline) {
+ exporter.Put('\n');
+ newline = true;
+ }
+}
+
void TexoProducerLines::Put(const Texo &piece)
{
if (piece.c == '\n') {
@@ -20,19 +28,24 @@ void TexoProducerLines::Put(const Texo &piece)
void TexoProducerLines::Put(const TexoParagraph &piece)
{
- exporter.Put('\n');
- newline = true;
+ if (!newline) {
+ exporter.Put('\n');
+ newline = true;
+ }
}
void TexoProducerLines::Put(const TexoQuote &piece)
{
- exporter.Put("\n>");
+ if (!newline) {
+ exporter.Put('\n');
+ }
+ exporter.Put("> ");
newline = false;
}
TexoImporterLines::TexoImporterLines(TexoProducer &producer):
- TexoImporter(producer), newline(true)
+ TexoImporter(producer), newline(true), quote(false)
{}
void TexoImporterLines::Put(char c)
@@ -40,15 +53,22 @@ void TexoImporterLines::Put(char c)
if (c == '\n') {
if (!newline) {
newline = true;
+ quote = false;
}
} else if (newline) {
if (c == '>') {
producer.Put(TexoQuote());
+ quote = true;
} else {
producer.Put(TexoParagraph());
producer.Put(c);
}
newline = false;
+ } else if (quote) {
+ if (c != ' ') {
+ quote = false;
+ producer.Put(c);
+ }
} else {
producer.Put(c);
}