tdf#149711 sw_redlinenum DOCX: import moveTo paragraph mark
It was imported as an old paragraph with new content,
resulting that e.g. rejecting a moved list item left
an empty list item instead of removing the moved list
item completely.
Follow-up to commit 80694a8fcfeb86ed69425ab6954b353b9a0ae854
"tdf#149708 sw_redlinenum DOCX export: track inserted list items"
and commit d32d9a2b3c5e3963f4a18f6c7bbf50fab2e9b2be
"tdf#123460 DOCX track changes: moveFrom completely".
Change-Id: Ia1997aeffeb45f89bb738c6faa95fb2efc54fd7e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/136886
Tested-by: Jenkins
Reviewed-by: László Németh <nemeth@numbertext.org>
(cherry picked from commit ccd0cb2265c337c70c565f0e04cdf4019361d18c)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/136867
Tested-by: László Németh <nemeth@numbertext.org>
diff --git a/sw/qa/extras/layout/data/tdf149711.docx b/sw/qa/extras/layout/data/tdf149711.docx
new file mode 100644
index 0000000..d90efa7
--- /dev/null
+++ b/sw/qa/extras/layout/data/tdf149711.docx
Binary files differ
diff --git a/sw/qa/extras/layout/layout2.cxx b/sw/qa/extras/layout/layout2.cxx
index 9a366b0..0d9aa50 100644
--- a/sw/qa/extras/layout/layout2.cxx
+++ b/sw/qa/extras/layout/layout2.cxx
@@ -452,6 +452,23 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf149709_RedlineNumberingLevel)
assertXPathContent(pXmlDoc, "/metafile/push/push/push/textarray[8]/text", "2.");
}
CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf149711_importDOCXMoveToParagraphMark)
{
SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf149711.docx");
xmlDocUniquePtr pXmlDoc = parseLayoutDump();
assertXPath(pXmlDoc, "/root/page[1]/body/txt", 6);
// reject tracked insertion (moveTo)
SwEditShell* const pEditShell(pDoc->GetEditShell());
CPPUNIT_ASSERT_EQUAL(static_cast<SwRedlineTable::size_type>(2), pEditShell->GetRedlineCount());
pEditShell->RejectRedline(1);
discardDumpedLayout();
pXmlDoc = parseLayoutDump();
// This was 6 (not tracked paragraph mark of the moveTo list item)
assertXPath(pXmlDoc, "/root/page[1]/body/txt", 5);
}
CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testRedlineNumberInFootnote)
{
SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf85610.fodt");
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index fd1c79f..9543b91 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -2734,10 +2734,10 @@ void DomainMapper_Impl::appendTextPortion( const OUString& rString, const Proper
}
}
// reset moveFrom data of non-terminating runs of the paragraph
if ( m_pParaMarkerRedlineMoveFrom )
// reset moveFrom/moveTo data of non-terminating runs of the paragraph
if ( m_pParaMarkerRedlineMove )
{
m_pParaMarkerRedlineMoveFrom.clear();
m_pParaMarkerRedlineMove.clear();
}
CheckRedline( xTextRange );
m_bParaChanged = true;
@@ -3297,13 +3297,14 @@ void DomainMapper_Impl::CreateRedline(uno::Reference<text::XTextRange> const& xR
break;
case XML_moveTo:
bRedlineMoved = true;
m_pParaMarkerRedlineMove = pRedline.get();
[[fallthrough]];
case XML_ins:
sType = getPropertyName( PROP_INSERT );
break;
case XML_moveFrom:
bRedlineMoved = true;
m_pParaMarkerRedlineMoveFrom = pRedline.get();
m_pParaMarkerRedlineMove = pRedline.get();
[[fallthrough]];
case XML_del:
sType = getPropertyName( PROP_DELETE );
@@ -3372,14 +3373,14 @@ void DomainMapper_Impl::CheckParaMarkerRedline( uno::Reference< text::XTextRange
m_currentRedline.clear();
}
}
else if ( m_pParaMarkerRedlineMoveFrom )
else if ( m_pParaMarkerRedlineMove )
{
// terminating moveFrom redline removes also the paragraph mark
CreateRedline( xRange, m_pParaMarkerRedlineMoveFrom );
// terminating moveFrom/moveTo redline removes also the paragraph mark
CreateRedline( xRange, m_pParaMarkerRedlineMove );
}
if ( m_pParaMarkerRedlineMoveFrom )
if ( m_pParaMarkerRedlineMove )
{
m_pParaMarkerRedlineMoveFrom.clear();
m_pParaMarkerRedlineMove.clear();
}
}
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index c0a41b0..4072a64 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -576,8 +576,8 @@ private:
RedlineParamsPtr m_previousRedline;
RedlineParamsPtr m_pParaMarkerRedline;
bool m_bIsParaMarkerChange;
// redline data of the terminating run, if it's a moveFrom deletion
RedlineParamsPtr m_pParaMarkerRedlineMoveFrom;
// redline data of the terminating run, if it's a moveFrom deletion or a moveTo insertion
RedlineParamsPtr m_pParaMarkerRedlineMove;
// This is for removing workaround (double ZWSPs around the anchoring point) for track
// changed images anchored *to* character, if it's followed by a redline text run immediately.
// (In that case, the image is part of a tracked text range, no need for the dummy