[Libreoffice-commits] libcdr.git: src/lib
Fridrich Å trba
fridrich.strba at bluewin.ch
Tue Dec 3 02:16:44 PST 2013
src/lib/CDROutputElementList.cpp | 81 ++++++++++++++++++++++++++++++++++++++-
1 file changed, 80 insertions(+), 1 deletion(-)
New commits:
commit 1ac63edbf85f72590b4601aa16e8fd75702c2530
Author: Fridrich Å trba <fridrich.strba at 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() {}
More information about the Libreoffice-commits
mailing list