[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    =?utf-8?q?=5Bcalligra=5D_libs/kotext/opendocument=3A_Fix_saving_?=
From:       Pierre Ducroquet <pinaraf () pinaraf ! info>
Date:       2011-04-14 23:03:59
Message-ID: 20110414230359.303F1A609B () git ! kde ! org
[Download RAW message or body]

Git commit a63ec41e3e4b32641acdfa0eeb6c80e21ce52da6 by Pierre Ducroquet.
Committed on 15/04/2011 at 01:03.
Pushed by ducroquet into branch 'master'.

Fix saving of texts

M  +40   -25   libs/kotext/opendocument/KoTextWriter.cpp     

http://commits.kde.org/calligra/a63ec41e3e4b32641acdfa0eeb6c80e21ce52da6

diff --git a/libs/kotext/opendocument/KoTextWriter.cpp \
b/libs/kotext/opendocument/KoTextWriter.cpp index d5ab385..76b33e8 100644
--- a/libs/kotext/opendocument/KoTextWriter.cpp
+++ b/libs/kotext/opendocument/KoTextWriter.cpp
@@ -383,6 +383,14 @@ int KoTextWriter::Private::openTagRegion(int position, \
ElementType elementType,  int changeId = 0, returnChangeId = 0;
 
     if (!changeTracker) {
+        if (tagInformation.name()) {
+            writer->startElement(tagInformation.name());
+            QPair<QString, QString> attribute;
+            foreach (attribute, tagInformation.attributes()) {
+                writer->addAttribute(attribute.first.toLocal8Bit(), \
attribute.second); +            }
+            openedTagStack.push(tagInformation.name());
+        }
         return changeId;
     }
 
@@ -1020,7 +1028,10 @@ void KoTextWriter::Private::saveParagraph(const QTextBlock \
&block, int from, int  writer->addTextSpan(text);
                 }
 
-                closeTagRegion(changeId);
+                if (changeTracker)
+                    closeTagRegion(changeId);
+                else if (fragmentTagInformation.name())
+                    writer->endElement();
             } // if (inlineObject)
 
             previousCharFormat = charFormat;
@@ -1034,36 +1045,40 @@ void KoTextWriter::Private::saveParagraph(const QTextBlock \
&block, int from, int  }
     }
 
-    if (changeTracker && changeTracker->saveFormat() == KoChangeTracker::DELTAXML) {
-        QTextBlock nextBlock = block.next();
-        if (nextBlock.isValid() && deleteMergeRegionOpened) {
-            QTextBlockFormat nextBlockFormat = nextBlock.blockFormat();
-            int changeId = \
                nextBlockFormat.intProperty(KoCharacterStyle::ChangeTrackerId);
-            if (changeId && changeTracker->elementById(changeId)->getChangeType() == \
                KoGenChange::DeleteChange) {
-                QTextFragment lastFragment = (--block.end()).fragment();
-                QTextCharFormat lastFragmentFormat = lastFragment.charFormat();
-                int lastFragmentChangeId = \
                lastFragmentFormat.intProperty(KoCharacterStyle::ChangeTrackerId);
-                if (changeTracker->isDuplicateChangeId(lastFragmentChangeId)) {
-                    lastFragmentChangeId = \
                changeTracker->originalChangeId(lastFragmentChangeId);
-                }
-                if (lastFragmentChangeId != changeId) {
-                    QString outputXml("<delta:removed-content \
                delta:removal-change-idref=\"" + changeTransTable.value(changeId) + \
                "\"/>");
-                    writer->addCompleteElement(outputXml.toUtf8());
+    if (changeTracker) {
+        if (changeTracker->saveFormat() == KoChangeTracker::DELTAXML) {
+            QTextBlock nextBlock = block.next();
+            if (nextBlock.isValid() && deleteMergeRegionOpened) {
+                QTextBlockFormat nextBlockFormat = nextBlock.blockFormat();
+                int changeId = \
nextBlockFormat.intProperty(KoCharacterStyle::ChangeTrackerId); +                if \
(changeId && changeTracker->elementById(changeId)->getChangeType() == \
KoGenChange::DeleteChange) { +                    QTextFragment lastFragment = \
(--block.end()).fragment(); +                    QTextCharFormat lastFragmentFormat = \
lastFragment.charFormat(); +                    int lastFragmentChangeId = \
lastFragmentFormat.intProperty(KoCharacterStyle::ChangeTrackerId); +                  \
if (changeTracker->isDuplicateChangeId(lastFragmentChangeId)) { +                     \
lastFragmentChangeId = changeTracker->originalChangeId(lastFragmentChangeId); +       \
} +                    if (lastFragmentChangeId != changeId) {
+                        QString outputXml("<delta:removed-content \
delta:removal-change-idref=\"" + changeTransTable.value(changeId) + "\"/>"); +        \
writer->addCompleteElement(outputXml.toUtf8()); +                    }
                 }
             }
         }
-    }
-
-    if (changeTracker && changeTracker->saveFormat() == KoChangeTracker::ODF_1_2) {
-        while (int change = changeStack.top()) {
-            writer->startElement("text:change-end", false);
-            writer->addAttribute("text:change-id", changeTransTable.value(change));
-            writer->endElement();
-            changeStack.pop();
+        if (changeTracker->saveFormat() == KoChangeTracker::ODF_1_2) {
+            while (int change = changeStack.top()) {
+                writer->startElement("text:change-end", false);
+                writer->addAttribute("text:change-id", \
changeTransTable.value(change)); +                writer->endElement();
+                changeStack.pop();
+            }
         }
     }
 
-    closeTagRegion(changeId);
+    if (changeTracker)
+        closeTagRegion(changeId);
+    else if (blockTagInformation.name())
+        writer->endElement();
 }
 
 //Check if the whole Block is a part of a single change


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic