summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sw/qa/extras/rtfexport/data/fdo66682.rtf25
-rw-r--r--sw/qa/extras/rtfexport/rtfexport.cxx21
-rw-r--r--sw/source/filter/ww8/rtfattributeoutput.cxx2
-rw-r--r--writerfilter/source/rtftok/rtfdocumentimpl.cxx5
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: