sw/qa/extras/layout/data/tdf151954.docx |binary sw/qa/extras/layout/layout2.cxx | 17 +++++++++++++++++ writerfilter/source/dmapper/DomainMapper.cxx | 4 ++++ writerfilter/source/dmapper/DomainMapper_Impl.cxx | 14 +++++++++++++- writerfilter/source/dmapper/DomainMapper_Impl.hxx | 3 +++ writerfilter/source/ooxml/model.xml | 2 ++ 6 files changed, 39 insertions(+), 1 deletion(-)
New commits: commit febfa2d17e43e643b7c0cc694de5be9ae2fe6ec1 Author: László Németh <nem...@numbertext.org> AuthorDate: Thu Nov 24 13:28:34 2022 +0100 Commit: László Németh <nem...@numbertext.org> CommitDate: Fri Nov 25 09:01:51 2022 +0100 tdf#151954 DOCX import: fix text moving before paragraph end Tracked text moving before paragraph end was extended to the paragraph end, too. Follow-up to commit 11071d95f4f3cbe578c3393729c42b7cce011b45 "tdf#149711 sw_redlinenum DOCX: import moveTo paragraph mark" and commit d32d9a2b3c5e3963f4a18f6c7bbf50fab2e9b2be "tdf#123460 DOCX track changes: moveFrom completely". Change-Id: I668a3ef83482bded9ab94dcd0111f8ed05e8471c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143231 Tested-by: Jenkins Reviewed-by: László Németh <nem...@numbertext.org> (cherry picked from commit 386402ded6db4614c943c94f6e68bc1de1a38fe6) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143164 diff --git a/sw/qa/extras/layout/data/tdf151954.docx b/sw/qa/extras/layout/data/tdf151954.docx new file mode 100644 index 000000000000..64e4782f7ab9 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf151954.docx differ diff --git a/sw/qa/extras/layout/layout2.cxx b/sw/qa/extras/layout/layout2.cxx index 6bbda55706a4..1e0ec0eb97bd 100644 --- a/sw/qa/extras/layout/layout2.cxx +++ b/sw/qa/extras/layout/layout2.cxx @@ -469,6 +469,23 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf149711_importDOCXMoveToParagraphMar assertXPath(pXmlDoc, "/root/page[1]/body/txt", 5); } +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf151954) +{ + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf151954.docx"); + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + assertXPath(pXmlDoc, "/root/page[1]/body/txt", 2); + + // accept tracked insertion (moveTo) + SwEditShell* const pEditShell(pDoc->GetEditShell()); + CPPUNIT_ASSERT_EQUAL(static_cast<SwRedlineTable::size_type>(3), pEditShell->GetRedlineCount()); + pEditShell->AcceptRedline(0); + + discardDumpedLayout(); + pXmlDoc = parseLayoutDump(); + // This was 1 (moveFrom was extended to the paragraph mark) + assertXPath(pXmlDoc, "/root/page[1]/body/txt", 2); +} + CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testRedlineNumberInFootnote) { SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf85610.fodt"); diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 219c62cef04d..ca830860f4ac 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -2573,6 +2573,10 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext ) if (m_pImpl->hasTableManager()) m_pImpl->getTableManager().setMoved( OUString() ); break; + case NS_ooxml::LN_CT_ParaRPr_moveFrom: + case NS_ooxml::LN_CT_ParaRPr_moveTo: + m_pImpl->StartParaMarkerMove( ); + break; case NS_ooxml::LN_paratrackchange: m_pImpl->StartParaMarkerChange( ); [[fallthrough]]; diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 03ac1467426e..dabc55a89c55 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -358,6 +358,7 @@ DomainMapper_Impl::DomainMapper_Impl( m_bLineNumberingSet( false ), m_bIsInFootnoteProperties( false ), m_bIsParaMarkerChange( false ), + m_bIsParaMarkerMove( false ), m_bRedlineImageInPreviousRun( false ), m_bParaChanged( false ), m_bIsFirstParaInSection( true ), @@ -3378,7 +3379,7 @@ void DomainMapper_Impl::CheckParaMarkerRedline( uno::Reference< text::XTextRange m_currentRedline.clear(); } } - else if ( m_pParaMarkerRedlineMove ) + else if ( m_pParaMarkerRedlineMove && m_bIsParaMarkerMove ) { // terminating moveFrom/moveTo redline removes also the paragraph mark CreateRedline( xRange, m_pParaMarkerRedlineMove ); @@ -3386,6 +3387,7 @@ void DomainMapper_Impl::CheckParaMarkerRedline( uno::Reference< text::XTextRange if ( m_pParaMarkerRedlineMove ) { m_pParaMarkerRedlineMove.clear(); + EndParaMarkerMove(); } } @@ -3432,6 +3434,16 @@ void DomainMapper_Impl::EndParaMarkerChange( ) m_currentRedline.clear(); } +void DomainMapper_Impl::StartParaMarkerMove( ) +{ + m_bIsParaMarkerMove = true; +} + +void DomainMapper_Impl::EndParaMarkerMove( ) +{ + m_bIsParaMarkerMove = false; +} + void DomainMapper_Impl::StartCustomFootnote(const PropertyMapPtr pContext) { if (pContext == m_pFootnoteContext) diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx index 1707e171b379..c5f914b78b57 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx @@ -576,6 +576,7 @@ private: RedlineParamsPtr m_previousRedline; RedlineParamsPtr m_pParaMarkerRedline; bool m_bIsParaMarkerChange; + bool m_bIsParaMarkerMove; // 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 @@ -679,6 +680,8 @@ public: void StartParaMarkerChange( ); void EndParaMarkerChange( ); + void StartParaMarkerMove( ); + void EndParaMarkerMove( ); void ChainTextFrames(); void PushTextBoxContent(); diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml index bff00b41a925..134726d644af 100644 --- a/writerfilter/source/ooxml/model.xml +++ b/writerfilter/source/ooxml/model.xml @@ -18191,6 +18191,8 @@ <resource name="CT_ParaRPr" resource="Properties"> <element name="ins" tokenid="ooxml:CT_ParaRPr_ins"/> <element name="del" tokenid="ooxml:CT_ParaRPr_del"/> + <element name="moveFrom" tokenid="ooxml:CT_ParaRPr_moveFrom"/> + <element name="moveTo" tokenid="ooxml:CT_ParaRPr_moveTo"/> <element name="rPrChange" tokenid="ooxml:CT_ParaRPr_rPrChange"/> </resource> <resource name="CT_ParaTrackChange" resource="Properties">