sw/qa/extras/ooxmlexport/data/tdf123460.docx |binary sw/qa/extras/ooxmlexport/ooxmlexport11.cxx | 14 +++++++------- sw/qa/extras/ooxmlexport/ooxmlexport13.cxx | 20 ++++++++++++++++++++ writerfilter/source/dmapper/DomainMapper_Impl.cxx | 17 +++++++++++++++++ writerfilter/source/dmapper/DomainMapper_Impl.hxx | 4 +++- 5 files changed, 47 insertions(+), 8 deletions(-)
New commits: commit 4f279b95efbc113d3c1907a232a4e647e2b4054f Author: László Németh <nem...@numbertext.org> AuthorDate: Fri Apr 26 17:24:38 2019 +0200 Commit: László Németh <nem...@numbertext.org> CommitDate: Fri May 24 09:12:06 2019 +0200 tdf#123460 DOCX track changes: moveFrom completely also with the paragraph mark, not leaving an empty paragraph at the original place of the moved text. Note: as desktop version of MSO does, but its online version leaves empty paragraphs interestingly. Change-Id: I03dda8997df3efbc82e936bd31a3813323e6b5ab Reviewed-on: https://gerrit.libreoffice.org/71382 Reviewed-by: László Németh <nem...@numbertext.org> Tested-by: László Németh <nem...@numbertext.org> (cherry picked from commit d32d9a2b3c5e3963f4a18f6c7bbf50fab2e9b2be) Reviewed-on: https://gerrit.libreoffice.org/72718 Reviewed-by: Michael Stahl <michael.st...@cib.de> Tested-by: Jenkins diff --git a/sw/qa/extras/ooxmlexport/data/tdf123460.docx b/sw/qa/extras/ooxmlexport/data/tdf123460.docx new file mode 100644 index 000000000000..c3b723b4e5ad Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123460.docx differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx index 23958351a91b..018aa8ccfcb8 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx @@ -789,13 +789,13 @@ DECLARE_OOXMLIMPORT_TEST(testTdf104797, "tdf104797.docx") CPPUNIT_ASSERT_EQUAL(true,getProperty<bool>(getRun(getParagraph(1), 2), "IsStart")); CPPUNIT_ASSERT_EQUAL( OUString( "This is a filler sentence. Will this sentence be duplicated ADDED STUFF?" ), getParagraph( 2 )->getString()); - CPPUNIT_ASSERT_EQUAL( OUString( "This is a filler sentence." ), getRun( getParagraph( 2 ), 1 )->getString()); - CPPUNIT_ASSERT_EQUAL( OUString( "" ), getRun( getParagraph( 2 ), 2 )->getString()); - CPPUNIT_ASSERT_EQUAL( OUString( " Will this sentence be duplicated ADDED STUFF?" ), getRun( getParagraph( 2 ), 3 )->getString()); - CPPUNIT_ASSERT_EQUAL( OUString( "" ), getRun( getParagraph( 2 ), 4 )->getString()); - CPPUNIT_ASSERT(hasProperty(getRun(getParagraph(2), 5), "RedlineType")); - CPPUNIT_ASSERT_EQUAL(OUString("Insert"),getProperty<OUString>(getRun(getParagraph(2), 5), "RedlineType")); - CPPUNIT_ASSERT_EQUAL(false,getProperty<bool>(getRun(getParagraph(2), 5), "IsStart")); + CPPUNIT_ASSERT_EQUAL( OUString( "" ), getRun( getParagraph( 2 ), 1 )->getString()); + CPPUNIT_ASSERT_EQUAL( OUString( "This is a filler sentence." ), getRun( getParagraph( 2 ), 2 )->getString()); + CPPUNIT_ASSERT_EQUAL( OUString( "" ), getRun( getParagraph( 2 ), 3 )->getString()); + CPPUNIT_ASSERT(hasProperty(getRun(getParagraph(2), 3), "RedlineType")); + CPPUNIT_ASSERT_EQUAL(OUString("Insert"),getProperty<OUString>(getRun(getParagraph(2), 3), "RedlineType")); + CPPUNIT_ASSERT_EQUAL(true,getProperty<bool>(getRun(getParagraph(2), 3), "IsStart")); + CPPUNIT_ASSERT_EQUAL( OUString( " Will this sentence be duplicated ADDED STUFF?" ), getRun( getParagraph( 2 ), 4 )->getString()); } DECLARE_OOXMLEXPORT_TEST(testTdf113608_runAwayNumbering, "tdf113608_runAwayNumbering.docx") diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx index e610254b3b83..ca211e0e7eb9 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx @@ -91,6 +91,26 @@ DECLARE_OOXMLEXPORT_TEST(testTextInput, "textinput.odt") assertXPathContent(pXmlDoc, "/w:document/w:body/w:p/w:r[5]/w:t", "SomeText"); } +DECLARE_OOXMLIMPORT_TEST(testTdf123460, "tdf123460.docx") +{ + // check paragraph mark deletion at terminating moveFrom + CPPUNIT_ASSERT_EQUAL(true,getParagraph( 2 )->getString().startsWith("Nunc")); + CPPUNIT_ASSERT_EQUAL( OUString( "" ), getRun( getParagraph( 2 ), 1 )->getString()); + CPPUNIT_ASSERT(hasProperty(getRun(getParagraph(2), 1), "RedlineType")); + CPPUNIT_ASSERT_EQUAL(OUString("Delete"),getProperty<OUString>(getRun(getParagraph(2), 1), "RedlineType")); + CPPUNIT_ASSERT_EQUAL(true, getRun( getParagraph( 2 ), 2 )->getString().endsWith("tellus.")); + CPPUNIT_ASSERT_EQUAL( OUString( "" ), getRun( getParagraph( 2 ), 3 )->getString()); + bool bCaught = false; + try + { + getRun( getParagraph( 2 ), 4 ); + } + catch (container::NoSuchElementException&) + { + bCaught = true; + } + CPPUNIT_ASSERT_EQUAL(true, bCaught); +} CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index dcacd18b55f7..4a700758a574 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -1690,6 +1690,11 @@ void DomainMapper_Impl::appendTextPortion( const OUString& rString, const Proper } } + // reset moveFrom data of non-terminating runs of the paragraph + if ( m_pParaMarkerRedlineMoveFrom.get( ) ) + { + m_pParaMarkerRedlineMoveFrom.clear(); + } CheckRedline( xTextRange ); m_bParaChanged = true; @@ -2062,6 +2067,8 @@ void DomainMapper_Impl::CreateRedline(uno::Reference<text::XTextRange> const& xR sType = getPropertyName( PROP_INSERT ); break; case XML_moveFrom: + m_pParaMarkerRedlineMoveFrom = pRedline.get(); + SAL_FALLTHROUGH; case XML_del: sType = getPropertyName( PROP_DELETE ); break; @@ -2100,6 +2107,16 @@ void DomainMapper_Impl::CheckParaMarkerRedline( uno::Reference< text::XTextRange m_currentRedline.clear(); } } + else if ( m_pParaMarkerRedlineMoveFrom.get( ) ) + { + // terminating moveFrom redline removes also the paragraph mark + m_pParaMarkerRedlineMoveFrom->m_nToken = XML_del; + CreateRedline( xRange, m_pParaMarkerRedlineMoveFrom ); + } + if ( m_pParaMarkerRedlineMoveFrom.get( ) ) + { + m_pParaMarkerRedlineMoveFrom.clear(); + } } void DomainMapper_Impl::CheckRedline( uno::Reference< text::XTextRange > const& xRange ) diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx index 6006d2465f13..5d6f634bad10 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx @@ -505,6 +505,8 @@ private: RedlineParamsPtr m_currentRedline; RedlineParamsPtr m_pParaMarkerRedline; bool m_bIsParaMarkerChange; + // redline data of the terminating run, if it's a moveFrom deletion + RedlineParamsPtr m_pParaMarkerRedlineMoveFrom; /// If the current paragraph has any runs. bool m_bParaChanged; @@ -574,7 +576,7 @@ public: } void SetDocumentSettingsProperty( const OUString& rPropName, const css::uno::Any& rValue ); - static void CreateRedline(css::uno::Reference<css::text::XTextRange> const& xRange, const RedlineParamsPtr& pRedline); + void CreateRedline(css::uno::Reference<css::text::XTextRange> const& xRange, const RedlineParamsPtr& pRedline); void CheckParaMarkerRedline(css::uno::Reference<css::text::XTextRange> const& xRange); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits