summaryrefslogtreecommitdiff
path: root/xmloff/source/text/XMLTextMarkImportContext.cxx
diff options
context:
space:
mode:
authorMichael Stahl <Michael.Stahl@cib.de>2019-12-20 18:25:42 +0100
committerMichael Stahl <michael.stahl@cib.de>2019-12-23 12:01:36 +0100
commit027a7c8e02c6b023dcf9e26b68c0f339bd4c74c6 (patch)
tree98c11429d10bb0dc3f13bba16792fa716f858e8f /xmloff/source/text/XMLTextMarkImportContext.cxx
parent6d982294c62dd951b1d9cb106b50a2abb1056086 (diff)
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@cib.de>
Diffstat (limited to 'xmloff/source/text/XMLTextMarkImportContext.cxx')
-rw-r--r--xmloff/source/text/XMLTextMarkImportContext.cxx9
1 files changed, 9 insertions, 0 deletions
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&)