[PATCH libreoffice-4-0] fdo#63023 incorrect RTF background color in header

Miklos Vajna (via Code Review) gerrit at gerrit.libreoffice.org
Thu Apr 18 08:11:12 PDT 2013


Hi,

I have submitted a patch for review:

    https://gerrit.libreoffice.org/3461

To pull it, you can do:

    git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/61/3461/1

fdo#63023 incorrect RTF background color in header

(cherry picked from commits 3d4fef85d05269e613316a7af6245f05d207d76e and
08dc5de900b2e5cca9d9443fc5d4ea7756842af9)

Change-Id: I33f5c8a856206860ac9cdb23dd6b5222cb785bf7
---
M sw/qa/extras/inc/swmodeltestbase.hxx
A sw/qa/extras/rtfimport/data/fdo63023.rtf
M sw/qa/extras/rtfimport/rtfimport.cxx
M writerfilter/source/rtftok/rtfdocumentimpl.cxx
4 files changed, 55 insertions(+), 9 deletions(-)



diff --git a/sw/qa/extras/inc/swmodeltestbase.hxx b/sw/qa/extras/inc/swmodeltestbase.hxx
index ae0af3d..a4e8213 100644
--- a/sw/qa/extras/inc/swmodeltestbase.hxx
+++ b/sw/qa/extras/inc/swmodeltestbase.hxx
@@ -29,6 +29,8 @@
 #include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
 #include <com/sun/star/text/XTextDocument.hpp>
 #include <com/sun/star/text/XTextRange.hpp>
+#include <com/sun/star/text/XTextTable.hpp>
+#include <com/sun/star/table/XCell.hpp>
 
 #include <test/bootstrapfixture.hxx>
 #include <unotest/macros_test.hxx>
@@ -189,19 +191,39 @@
     }
 
     // Get paragraph (counted from 1), optionally check it contains the given text.
-    uno::Reference< text::XTextRange > getParagraph( int number, OUString content = OUString() ) const
+    uno::Reference<text::XTextContent> getParagraphOrTable(int number, uno::Reference<text::XText> xText = uno::Reference<text::XText>()) const
     {
-        uno::Reference<text::XTextDocument> textDocument(mxComponent, uno::UNO_QUERY);
-        uno::Reference<container::XEnumerationAccess> paraEnumAccess(textDocument->getText(), uno::UNO_QUERY);
+        uno::Reference<container::XEnumerationAccess> paraEnumAccess;
+        if (xText.is())
+            paraEnumAccess.set(xText, uno::UNO_QUERY);
+        else
+        {
+            uno::Reference<text::XTextDocument> textDocument(mxComponent, uno::UNO_QUERY);
+            paraEnumAccess.set(textDocument->getText(), uno::UNO_QUERY);
+        }
         uno::Reference<container::XEnumeration> paraEnum = paraEnumAccess->createEnumeration();
         for( int i = 1;
              i < number;
              ++i )
             paraEnum->nextElement();
-        uno::Reference< text::XTextRange > paragraph( paraEnum->nextElement(), uno::UNO_QUERY );
+        uno::Reference< text::XTextContent> const xElem(paraEnum->nextElement(),
+                uno::UNO_QUERY_THROW);
+        return xElem;
+    }
+
+    uno::Reference< text::XTextRange > getParagraph( int number, OUString content = OUString() ) const
+    {
+        uno::Reference<text::XTextRange> const xParagraph(
+                getParagraphOrTable(number), uno::UNO_QUERY_THROW);
         if( !content.isEmpty())
-            CPPUNIT_ASSERT_EQUAL( content, paragraph->getString());
-        return paragraph;
+            CPPUNIT_ASSERT_EQUAL( content, xParagraph->getString());
+        return xParagraph;
+    }
+
+    uno::Reference<text::XTextRange> getParagraphOfText(int number, uno::Reference<text::XText> xText) const
+    {
+        uno::Reference<text::XTextRange> const xParagraph(getParagraphOrTable(number, xText), uno::UNO_QUERY_THROW);
+        return xParagraph;
     }
 
     /// Get run (counted from 1) of a paragraph, optionally check it contains the given text.
diff --git a/sw/qa/extras/rtfimport/data/fdo63023.rtf b/sw/qa/extras/rtfimport/data/fdo63023.rtf
new file mode 100644
index 0000000..c246dc6
--- /dev/null
+++ b/sw/qa/extras/rtfimport/data/fdo63023.rtf
@@ -0,0 +1,10 @@
+{\rtf1
+{\colortbl;\red0\green0\blue0;\red0\green0\blue128;\red92\green133\blue38;\red153\green153\blue255;\red220\green35\blue0;\red255\green255\blue153;\red128\green128\blue128;}
+{\header
+{\cf4\chcbpat6
+Yellow 2 Background with Violet Text}
+\pard\par
+}
+body text
+\pard\par
+}
diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx
index 246358e..c02dac5 100644
--- a/sw/qa/extras/rtfimport/rtfimport.cxx
+++ b/sw/qa/extras/rtfimport/rtfimport.cxx
@@ -146,6 +146,7 @@
     void testFdo37716();
     void testFdo51916();
     void testFdo61193();
+    void testFdo63023();
 
     CPPUNIT_TEST_SUITE(Test);
 #if !defined(MACOSX) && !defined(WNT)
@@ -262,6 +263,7 @@
         {"fdo37716.rtf", &Test::testFdo37716},
         {"fdo51916.rtf", &Test::testFdo51916},
         {"hello.rtf", &Test::testFdo61193},
+        {"fdo63023.rtf", &Test::testFdo63023},
     };
     for (unsigned int i = 0; i < SAL_N_ELEMENTS(aMethods); ++i)
     {
@@ -1205,6 +1207,13 @@
     // Complex nested table caused a crash.
 }
 
+void Test::testFdo63023()
+{
+    uno::Reference<text::XText> xHeaderText = getProperty< uno::Reference<text::XText> >(getStyles("PageStyles")->getByName(DEFAULT_STYLE), "HeaderText");
+    // Back color was black (0) in the header, due to missing color table in the substream.
+    CPPUNIT_ASSERT_EQUAL(sal_Int32(0xFFFF99), getProperty<sal_Int32>(getRun(getParagraphOfText(1, xHeaderText), 1), "CharBackColor"));
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(Test);
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index 954c08f..0a2348d 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -572,9 +572,14 @@
 
 sal_uInt32 RTFDocumentImpl::getColorTable(sal_uInt32 nIndex)
 {
-    if (nIndex < m_aColorTable.size())
-        return m_aColorTable[nIndex];
-    return 0;
+    if (!m_pSuperstream)
+    {
+        if (nIndex < m_aColorTable.size())
+            return m_aColorTable[nIndex];
+        return 0;
+    }
+    else
+        return m_pSuperstream->getColorTable(nIndex);
 }
 
 rtl_TextEncoding RTFDocumentImpl::getEncoding(sal_uInt32 nFontIndex)

-- 
To view, visit https://gerrit.libreoffice.org/3461
To unsubscribe, visit https://gerrit.libreoffice.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I33f5c8a856206860ac9cdb23dd6b5222cb785bf7
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: libreoffice-4-0
Gerrit-Owner: Miklos Vajna <vmiklos at suse.cz>



More information about the LibreOffice mailing list