sw/qa/extras/ooxmlexport/data/n789482.docx |binary sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 20 ++++++++++++++++++++ sw/source/filter/ww8/docxattributeoutput.cxx | 13 ++++++++----- sw/source/filter/ww8/docxattributeoutput.hxx | 2 +- 4 files changed, 29 insertions(+), 6 deletions(-)
New commits: commit eac3e6e746300df379226941ba75c4e0ce1feb7a Author: Miklos Vajna <vmik...@suse.cz> Date: Wed Nov 14 19:03:05 2012 +0100 n#789482 DOCX: export track change data after w:hyperlink Change-Id: If204523d7da544b11b2d809993ada180476104ef diff --git a/sw/qa/extras/ooxmlexport/data/n789482.docx b/sw/qa/extras/ooxmlexport/data/n789482.docx new file mode 100755 index 0000000..493e8ee Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/n789482.docx differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx index 1a1c157..8fe1985 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx @@ -66,6 +66,7 @@ public: void testFdo47669(); void testTableBorders(); void testFdo51550(); + void testN789482(); CPPUNIT_TEST_SUITE(Test); #if !defined(MACOSX) && !defined(WNT) @@ -103,6 +104,7 @@ void Test::run() {"fdo47669.docx", &Test::testFdo47669}, {"table-borders.docx", &Test::testTableBorders}, {"fdo51550.odt", &Test::testFdo51550}, + {"n789482.docx", &Test::testN789482}, }; // Don't test the first import of these, for some reason those tests fail const char* aBlacklist[] = { @@ -482,6 +484,24 @@ void Test::testFdo51550() CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xDraws->getCount()); } +void Test::testN789482() +{ + // The problem was that w:del was exported before w:hyperlink, resulting in an invalid XML. + uno::Reference<text::XTextRange> xParagraph = getParagraph(1); + getRun(xParagraph, 1, "Before. "); + + CPPUNIT_ASSERT_EQUAL(OUString("Delete"), getProperty<OUString>(getRun(xParagraph, 2), "RedlineType")); + CPPUNIT_ASSERT_EQUAL(sal_True, getProperty<sal_Bool>(getRun(xParagraph, 2), "IsStart")); + + getRun(xParagraph, 3, "www.test.com"); + CPPUNIT_ASSERT_EQUAL(OUString("http://www.test.com/"), getProperty<OUString>(getRun(xParagraph, 3), "HyperLinkURL")); + + CPPUNIT_ASSERT_EQUAL(OUString("Delete"), getProperty<OUString>(getRun(xParagraph, 4), "RedlineType")); + CPPUNIT_ASSERT_EQUAL(sal_False, getProperty<sal_Bool>(getRun(xParagraph, 4), "IsStart")); + + getRun(xParagraph, 5, " After."); +} + CPPUNIT_TEST_SUITE_REGISTRATION(Test); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index 45abbf6..d69e2cc 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -461,8 +461,9 @@ void DocxAttributeOutput::EndParagraphProperties() void DocxAttributeOutput::StartRun( const SwRedlineData* pRedlineData, bool /*bSingleEmptyRun*/ ) { - // if there is some redlining in the document, output it - StartRedline( pRedlineData ); + // Don't start redline data here, possibly there is a hyperlink later, and + // that has to be started first. + m_pRedlineData = pRedlineData; // postpone the output of the start of a run (there are elements that need // to be written before the start of the run, but we learn which they are @@ -539,6 +540,9 @@ void DocxAttributeOutput::EndRun() m_startedHyperlink = true; } + // if there is some redlining in the document, output it + StartRedline(); + DoWriteBookmarks( ); WriteCommentRanges(); @@ -1237,12 +1241,11 @@ void DocxAttributeOutput::Redline( const SwRedlineData* /*pRedline*/ ) OSL_TRACE( "TODO DocxAttributeOutput::Redline( const SwRedlineData* pRedline )" ); } -void DocxAttributeOutput::StartRedline( const SwRedlineData* pRedlineData ) +void DocxAttributeOutput::StartRedline() { - m_pRedlineData = pRedlineData; - if ( !m_pRedlineData ) return; + const SwRedlineData* pRedlineData = m_pRedlineData; // FIXME check if it's necessary to travel over the Next()'s in pRedlineData diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx index b1302b6..f42ffdf 100644 --- a/sw/source/filter/ww8/docxattributeoutput.hxx +++ b/sw/source/filter/ww8/docxattributeoutput.hxx @@ -132,7 +132,7 @@ public: /// /// Start of the tag that encloses the run, fills the info according to /// the value of m_pRedlineData. - void StartRedline( const SwRedlineData* pRedlineData ); + void StartRedline(); /// Output redlining. /// _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits