diff options
author | Miklos Vajna <vmiklos@suse.cz> | 2013-07-10 12:12:55 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@suse.cz> | 2013-07-10 13:31:37 +0200 |
commit | 8422d1f5042de08e8b090a907889b41e133bda40 (patch) | |
tree | 1c3b06d0b765b36495b0dcb86a6e7c6742f234e5 | |
parent | 4721fbbccdb582449ac938fe36d01685cd650f1d (diff) |
fdo#66682 RTF export: fix level text of SVX_NUM_ARABIC
Even if level text is not ASCII, we should just write the placeholder
values (0x00, 0x01, etc.) in a hex encoded form, without Unicode.
Regression from 07d01742c69f1c0335bc7e1b57abd8341ce255e7.
Also, fix the import side, so the previous bad output now looks bad in
Writer as well.
Change-Id: I2f93892006c07eec243ec7dfcb23372d243a2db4
-rw-r--r-- | sw/qa/extras/rtfexport/data/fdo66682.rtf | 25 | ||||
-rw-r--r-- | sw/qa/extras/rtfexport/rtfexport.cxx | 21 | ||||
-rw-r--r-- | sw/source/filter/ww8/rtfattributeoutput.cxx | 2 | ||||
-rw-r--r-- | writerfilter/source/rtftok/rtfdocumentimpl.cxx | 5 |
4 files changed, 51 insertions, 2 deletions
diff --git a/sw/qa/extras/rtfexport/data/fdo66682.rtf b/sw/qa/extras/rtfexport/data/fdo66682.rtf new file mode 100644 index 000000000000..76128a2f722c --- /dev/null +++ b/sw/qa/extras/rtfexport/data/fdo66682.rtf @@ -0,0 +1,25 @@ +{\rtf1\ansi\deff4\adeflang1025 +{\*\listtable +{\list\listtemplateid1 +{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow0 +{\leveltext \'03 \'00 ;} +{\levelnumbers\'02;} +\fi-360\li720} +\listid1} +} +{\listoverridetable +{\listoverride\listid1\listoverridecount0\ls1} +} +\pard\plain \s0\sb0\sa113\nowidctlpar +\ilvl0\ls1 \li720\ri0\lin720\rin0\fi-360 +{\rtlch \ltrch\loch +This should be 1} +\par \pard\plain \s0\sb0\sa113\nowidctlpar +\ilvl0\ls1 \li720\ri0\lin720\rin0\fi-360 +{\rtlch \ltrch\loch +and 2} +\par \pard\plain \s0\sb0\sa113\nowidctlpar +\ilvl0\ls1 \li720\ri0\lin720\rin0\fi-360\sb0\sa113 +{\rtlch \ltrch\loch +and 3} +\par } diff --git a/sw/qa/extras/rtfexport/rtfexport.cxx b/sw/qa/extras/rtfexport/rtfexport.cxx index 0249426e2d8b..48db195cf4d1 100644 --- a/sw/qa/extras/rtfexport/rtfexport.cxx +++ b/sw/qa/extras/rtfexport/rtfexport.cxx @@ -66,6 +66,7 @@ public: void testTextframeGradient(); void testRecordChanges(); void testTextframeTable(); + void testFdo66682(); CPPUNIT_TEST_SUITE(Test); #if !defined(MACOSX) && !defined(WNT) @@ -121,6 +122,7 @@ void Test::run() {"textframe-gradient.rtf", &Test::testTextframeGradient}, {"record-changes.rtf", &Test::testRecordChanges}, {"textframe-table.rtf", &Test::testTextframeTable}, + {"fdo66682.rtf", &Test::testFdo66682}, }; // Don't test the first import of these, for some reason those tests fail const char* aBlacklist[] = { @@ -607,6 +609,25 @@ void Test::testTextframeTable() CPPUNIT_ASSERT_EQUAL(OUString("Last para."), getParagraphOfText(3, xText)->getString()); } +void Test::testFdo66682() +{ + uno::Reference<beans::XPropertySet> xPropertySet(getStyles("NumberingStyles")->getByName("WWNum1"), uno::UNO_QUERY); + uno::Reference<container::XIndexAccess> xLevels(xPropertySet->getPropertyValue("NumberingRules"), uno::UNO_QUERY); + uno::Sequence<beans::PropertyValue> aProps; + xLevels->getByIndex(0) >>= aProps; // 1st level + + OUString aSuffix; + for (int i = 0; i < aProps.getLength(); ++i) + { + const beans::PropertyValue& rProp = aProps[i]; + + if (rProp.Name == "Suffix") + aSuffix = rProp.Value.get<OUString>(); + } + // Suffix was '\0' instead of ' '. + CPPUNIT_ASSERT_EQUAL(OUString(" "), aSuffix); +} + CPPUNIT_TEST_SUITE_REGISTRATION(Test); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/source/filter/ww8/rtfattributeoutput.cxx b/sw/source/filter/ww8/rtfattributeoutput.cxx index d93fdd22ea6d..9890f0b1aa6e 100644 --- a/sw/source/filter/ww8/rtfattributeoutput.cxx +++ b/sw/source/filter/ww8/rtfattributeoutput.cxx @@ -1397,7 +1397,7 @@ void RtfAttributeOutput::NumberingLevel( sal_uInt8 nLevel, else { m_rExport.Strm() << "\\'" << msfilter::rtfutil::OutHex( rNumberingString.Len(), 2 ).getStr(); - m_rExport.Strm() << msfilter::rtfutil::OutString( rNumberingString, m_rExport.eDefaultEncoding ).getStr(); + m_rExport.Strm() << msfilter::rtfutil::OutString( rNumberingString, m_rExport.eDefaultEncoding, /*bUnicode =*/ false ).getStr(); } m_rExport.Strm() << ";}"; diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index 18b3f96173ba..b3374de9935a 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -1713,6 +1713,8 @@ int RTFDocumentImpl::dispatchSymbol(RTFKeyword nKeyword) { if (nKeyword != RTF_HEXCHAR) checkUnicode(/*bUnicode =*/ true, /*bHex =*/ true); + else + checkUnicode(/*bUnicode =*/ true, /*bHex =*/ false); setNeedSect(); RTFSkipDestination aSkip(*this); @@ -3111,7 +3113,8 @@ int RTFDocumentImpl::dispatchValue(RTFKeyword nKeyword, int nParam) if ((SAL_MIN_INT16 <= nParam) && (nParam <= SAL_MAX_UINT16)) { m_aUnicodeBuffer.append(static_cast<sal_Unicode>(nParam)); - m_aStates.top().nCharsToSkip = m_aStates.top().nUc; + if (m_aStates.top().nDestinationState != DESTINATION_LEVELTEXT) + m_aStates.top().nCharsToSkip = m_aStates.top().nUc; } break; case RTF_LEVELFOLLOW: |