src/lib/CDROutputElementList.cpp | 81 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 80 insertions(+), 1 deletion(-)
New commits: commit 1ac63edbf85f72590b4601aa16e8fd75702c2530 Author: Fridrich Å trba <fridrich.st...@bluewin.ch> Date: Tue Dec 3 11:16:18 2013 +0100 Split spaces, tabs and lineBreaks from the text Change-Id: I6d7284b9a2b629f6ea609ebd726a4d421e571603 diff --git a/src/lib/CDROutputElementList.cpp b/src/lib/CDROutputElementList.cpp index 0491b8f..cfda29a 100644 --- a/src/lib/CDROutputElementList.cpp +++ b/src/lib/CDROutputElementList.cpp @@ -32,6 +32,85 @@ namespace libcdr { +namespace +{ + +static void separateTabsAndInsertText(librevenge::RVNGDrawingInterface *iface, const librevenge::RVNGString &text) +{ + if (!iface || text.empty()) + return; + librevenge::RVNGString tmpText; + librevenge::RVNGString::Iter i(text); + for (i.rewind(); i.next();) + { + if (*(i()) == '\t') + { + if (!tmpText.empty()) + { + if (iface) + iface->insertText(tmpText); + tmpText.clear(); + } + + if (iface) + iface->insertTab(); + } + else if (*(i()) == '\n') + { + if (!tmpText.empty()) + { + if (iface) + iface->insertText(tmpText); + tmpText.clear(); + } + + if (iface) + iface->insertLineBreak(); + } + else + { + tmpText.append(i()); + } + } + if (iface && !tmpText.empty()) + iface->insertText(tmpText); +} + +static void separateSpacesAndInsertText(librevenge::RVNGDrawingInterface *iface, const librevenge::RVNGString &text) +{ + if (!iface || text.empty()) + return; + librevenge::RVNGString tmpText; + int numConsecutiveSpaces = 0; + librevenge::RVNGString::Iter i(text); + for (i.rewind(); i.next();) + { + if (*(i()) == ' ') + numConsecutiveSpaces++; + else + numConsecutiveSpaces = 0; + + if (numConsecutiveSpaces > 1) + { + if (!tmpText.empty()) + { + separateTabsAndInsertText(iface, tmpText); + tmpText.clear(); + } + + if (iface) + iface->insertSpace(); + } + else + { + tmpText.append(i()); + } + } + separateTabsAndInsertText(iface, tmpText); +} + +} // anonymous namespace + class CDROutputElement { public: @@ -278,7 +357,7 @@ libcdr::CDRInsertTextOutputElement::CDRInsertTextOutputElement(const librevenge: void libcdr::CDRInsertTextOutputElement::draw(librevenge::RVNGDrawingInterface *painter) { if (painter) - painter->insertText(m_text); + separateSpacesAndInsertText(painter, m_text); } libcdr::CDRCloseSpanOutputElement::CDRCloseSpanOutputElement() {}
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits