diff options
author | Aleksey Veresov <aleksey@veresov.pro> | 2019-09-27 18:09:07 +0300 |
---|---|---|
committer | Aleksey Veresov <aleksey@veresov.pro> | 2019-09-27 18:09:07 +0300 |
commit | 2eae362fd3f50325067fa3d7e13db6882df80e76 (patch) | |
tree | a6eff5f8f12b990e3d256d4b02fdb86d70d81eac /src/plain.cpp | |
download | texo-2eae362fd3f50325067fa3d7e13db6882df80e76.tar texo-2eae362fd3f50325067fa3d7e13db6882df80e76.tar.xz texo-2eae362fd3f50325067fa3d7e13db6882df80e76.zip |
Texo initial.
Diffstat (limited to 'src/plain.cpp')
-rw-r--r-- | src/plain.cpp | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/plain.cpp b/src/plain.cpp new file mode 100644 index 0000000..d8bc1b1 --- /dev/null +++ b/src/plain.cpp @@ -0,0 +1,55 @@ +#include "plain.hpp" + + +TexoPlainProducer::TexoPlainProducer(TexoExporter &exporter): + TexoProducer(exporter) +{} + +void TexoPlainProducer::Put(const Texo &piece) +{ + switch (piece.type) { + case Texo::character: exporter.Put(piece.c); + default: break; + } +} + + +TexoPlainImporter::TexoPlainImporter(TexoProducer &producer): + TexoImporter(producer), first(true), space(0), newline(false) +{} + +void TexoPlainImporter::Put(const char c) +{ + if (first) { + first = false; + producer.Put(Texo(Texo::paragraph_begin)); + } + if (c == ' ') { + ++space; + } else if (c == '\n') { + if (newline) { + newline = false; + producer.Put(Texo(Texo::paragraph_end)); + producer.Put(Texo(Texo::paragraph_begin)); + } else { + newline = true; + } + } else if (!c) { + producer.Put(Texo(Texo::paragraph_end)); + } else { + if (newline) { + newline = false; + if (space) { + space = 0; + producer.Put(Texo(Texo::newline)); + } else { + producer.Put(Texo(' ')); + } + } + while (space) { + producer.Put(Texo(' ')); + --space; + } + producer.Put(Texo(c)); + } +} |