[Libreoffice-commits] core.git: xmloff/source

Michael Stahl (via logerrit) logerrit at kemper.freedesktop.org
Mon Dec 23 11:02:34 UTC 2019


 xmloff/source/text/XMLTextMarkImportContext.cxx |    9 +++++++++
 1 file changed, 9 insertions(+)

New commits:
commit 027a7c8e02c6b023dcf9e26b68c0f339bd4c74c6
Author:     Michael Stahl <Michael.Stahl at cib.de>
AuthorDate: Fri Dec 20 18:25:42 2019 +0100
Commit:     Michael Stahl <michael.stahl at cib.de>
CommitDate: Mon Dec 23 12:01:36 2019 +0100

    tdf#129520 xmloff: fix ODF import of multi-paragraph fieldmark
    
    The problem is that inserting PARAGRAPH_BREAK also calls
    AppendTextNode() internally, not SplitNode().
    
    (regression from 6eb1c2304d257d16858b7b51cad63f1dc2bde88b)
    
    Change-Id: I2d33819a973c956ea04925458c904ce36ccb55a3
    Reviewed-on: https://gerrit.libreoffice.org/85627
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.stahl at cib.de>

diff --git a/xmloff/source/text/XMLTextMarkImportContext.cxx b/xmloff/source/text/XMLTextMarkImportContext.cxx
index 4dd5c1e76f90..099eab945a2f 100644
--- a/xmloff/source/text/XMLTextMarkImportContext.cxx
+++ b/xmloff/source/text/XMLTextMarkImportContext.cxx
@@ -31,6 +31,7 @@
 #include <xmloff/odffields.hxx>
 #include <xmloff/xmlement.hxx>
 #include <com/sun/star/xml/sax/XAttributeList.hpp>
+#include <com/sun/star/text/ControlCharacter.hpp>
 #include <com/sun/star/text/XTextContent.hpp>
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
@@ -208,6 +209,12 @@ static auto InsertFieldmark(SvXMLImport & rImport,
         // move cursor after setFieldType as that may delete/re-insert
         rHelper.GetCursor()->gotoRange(xContent->getAnchor()->getEnd(), false);
         rHelper.GetCursor()->goLeft(1, false); // move before CH_TXT_ATR_FIELDEND
+        // tdf#129520: AppendTextNode() ignores the content index!
+        // plan B: insert a spurious paragraph break now and join
+        //         it in PopFieldmark()!
+        rHelper.GetText()->insertControlCharacter(rHelper.GetCursor(),
+                text::ControlCharacter::PARAGRAPH_BREAK, false);
+        rHelper.GetCursor()->goLeft(1, false); // back to previous paragraph
     }
 }
 
@@ -222,6 +229,8 @@ static auto PopFieldmark(XMLTextImportHelper & rHelper) -> void
         {
             try
             {   // skip CH_TXT_ATR_FIELDEND
+                rHelper.GetCursor()->goRight(1, true);
+                rHelper.GetCursor()->setString(OUString()); // undo AppendTextNode from InsertFieldmark
                 rHelper.GetCursor()->gotoRange(xField->getAnchor()->getEnd(), false);
             }
             catch (uno::Exception const&)


More information about the Libreoffice-commits mailing list