diff options
author | David Tardon <dtardon@redhat.com> | 2014-09-02 21:15:39 +0200 |
---|---|---|
committer | David Tardon <dtardon@redhat.com> | 2014-09-02 21:16:02 +0200 |
commit | 9fe48fbd9552db24d9ab76a7747826539a007ee3 (patch) | |
tree | 5b895d246f2a7388a09c33b1a488ac4536783ec8 | |
parent | 036cdf51e10fe1d6275057d3417471928331766a (diff) |
-rw-r--r-- | src/lib/SDFParser.cpp | 54 | ||||
-rw-r--r-- | src/lib/SDFParser.h | 3 |
2 files changed, 56 insertions, 1 deletions
diff --git a/src/lib/SDFParser.cpp b/src/lib/SDFParser.cpp index e5f7ff4..55143c3 100644 --- a/src/lib/SDFParser.cpp +++ b/src/lib/SDFParser.cpp @@ -85,7 +85,7 @@ void SDFParser::parseLine() spanPropList.insert("fo:font-style", "italic"); m_generator->openSpan(spanPropList); - m_generator->insertText(m_text.c_str()); + writeText(); m_generator->closeSpan(); m_text.clear(); @@ -124,6 +124,58 @@ unsigned char SDFParser::readText() return 0; } +void SDFParser::writeText() +{ + string text; + text.reserve(m_text.size()); + + bool wasSpace = false; + + for (string::const_iterator it = m_text.begin(); m_text.end() != it; ++it) + { + switch (*it) + { + case ' ' : + if (wasSpace) + { + insertText(text); + m_generator->insertSpace(); + } + else + { + text.push_back(*it); + wasSpace = true; + } + break; + case '\t' : + wasSpace = false; + insertText(text); + m_generator->insertTab(); + break; + case '\r' : + wasSpace = false; + insertText(text); + m_generator->insertLineBreak(); + break; + default : + wasSpace = false; + text.push_back(*it); + break; + } + } + + insertText(text); +} + +void SDFParser::insertText(std::string &text) +{ + if (!text.empty()) + { + m_generator->insertText(text.c_str()); + text.clear(); + } +} + } // namespace libsdf /* vim:set shiftwidth=2 softtabstop=2 expandtab: */ diff --git a/src/lib/SDFParser.h b/src/lib/SDFParser.h index fc0bdc8..617453f 100644 --- a/src/lib/SDFParser.h +++ b/src/lib/SDFParser.h @@ -41,6 +41,9 @@ private: */ unsigned char readText(); + void writeText(); + void insertText(std::string &text); + private: const RVNGInputStreamPtr_t m_input; librevenge::RVNGTextInterface *m_generator; |