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

Reply via email to