fdo#63023 incorrect RTF background color in header
Change-Id: I33f5c8a856206860ac9cdb23dd6b5222cb785bf7
This commit is contained in:
@@ -198,10 +198,16 @@ protected:
|
||||
}
|
||||
|
||||
// Get paragraph (counted from 1), optionally check it contains the given text.
|
||||
uno::Reference<text::XTextContent> getParagraphOrTable(int number) 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;
|
||||
@@ -221,6 +227,12 @@ protected:
|
||||
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.
|
||||
uno::Reference<text::XTextRange> getRun(uno::Reference<text::XTextRange> xParagraph, int number, OUString content = OUString()) const
|
||||
{
|
||||
|
10
sw/qa/extras/rtfimport/data/fdo63023.rtf
Normal file
10
sw/qa/extras/rtfimport/data/fdo63023.rtf
Normal file
@@ -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
|
||||
}
|
@@ -151,6 +151,7 @@ public:
|
||||
void testFdo37716();
|
||||
void testFdo51916();
|
||||
void testFdo61193();
|
||||
void testFdo63023();
|
||||
|
||||
CPPUNIT_TEST_SUITE(Test);
|
||||
#if !defined(MACOSX) && !defined(WNT)
|
||||
@@ -274,6 +275,7 @@ void Test::run()
|
||||
{"fdo37716.rtf", &Test::testFdo37716},
|
||||
{"fdo51916.rtf", &Test::testFdo51916},
|
||||
{"hello.rtf", &Test::testFdo61193},
|
||||
{"fdo63023.rtf", &Test::testFdo63023},
|
||||
};
|
||||
header();
|
||||
for (unsigned int i = 0; i < SAL_N_ELEMENTS(aMethods); ++i)
|
||||
@@ -1233,6 +1235,13 @@ void Test::testFdo51916()
|
||||
// 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();
|
||||
|
@@ -578,9 +578,14 @@ void RTFDocumentImpl::seek(sal_uInt32 nPos)
|
||||
|
||||
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)
|
||||
|
Reference in New Issue
Block a user