summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@suse.cz>2012-04-20 12:42:23 +0200
committerMiklos Vajna <vmiklos@suse.cz>2012-04-20 12:58:12 +0200
commit69259c6509809c1064eb05690dcd9c19c840bae1 (patch)
tree7bb9872c8ec2ce1c92eb68afdf5e5b3d20e0ff2a
parent1dcab66d5c2579c4637891859736b02745fdf8bb (diff)
fdo#48356 fix RTF import of special unicode characters
The \'0d string should not be an exception when ignoring characters after the \u control word.
-rw-r--r--sw/qa/extras/rtftok/data/fdo48356.rtf3
-rw-r--r--sw/qa/extras/rtftok/rtftok.cxx20
-rw-r--r--writerfilter/source/rtftok/rtfdocumentimpl.cxx2
3 files changed, 24 insertions, 1 deletions
diff --git a/sw/qa/extras/rtftok/data/fdo48356.rtf b/sw/qa/extras/rtftok/data/fdo48356.rtf
new file mode 100644
index 000000000000..59d6cb021d5f
--- /dev/null
+++ b/sw/qa/extras/rtftok/data/fdo48356.rtf
@@ -0,0 +1,3 @@
+{\rtf1
+Ma\u269\'0dek
+\par }
diff --git a/sw/qa/extras/rtftok/rtftok.cxx b/sw/qa/extras/rtftok/rtftok.cxx
index fad769cfaef7..fa1321f25ef0 100644
--- a/sw/qa/extras/rtftok/rtftok.cxx
+++ b/sw/qa/extras/rtftok/rtftok.cxx
@@ -81,6 +81,7 @@ public:
void testFdo45182();
void testFdo44176();
void testFdo39053();
+ void testFdo48356();
CPPUNIT_TEST_SUITE(RtfModelTest);
#if !defined(MACOSX) && !defined(WNT)
@@ -104,6 +105,7 @@ public:
CPPUNIT_TEST(testFdo45182);
CPPUNIT_TEST(testFdo44176);
CPPUNIT_TEST(testFdo39053);
+ CPPUNIT_TEST(testFdo48356);
#endif
CPPUNIT_TEST_SUITE_END();
@@ -554,6 +556,24 @@ void RtfModelTest::testFdo39053()
CPPUNIT_ASSERT_EQUAL(1, nAsCharacter);
}
+void RtfModelTest::testFdo48356()
+{
+ load("fdo48356.rtf");
+
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XEnumerationAccess> xParaEnumAccess(xTextDocument->getText(), uno::UNO_QUERY);
+ uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration();
+ OUStringBuffer aBuf;
+ int i = 0;
+ while (xParaEnum->hasMoreElements())
+ {
+ xParaEnum->nextElement();
+ i++;
+ }
+ // The document used to be imported as two paragraphs.
+ CPPUNIT_ASSERT_EQUAL(1, i);
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(RtfModelTest);
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index e2fa851439e3..4a0eb2772063 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -765,7 +765,7 @@ int RTFDocumentImpl::resolveChars(char ch)
bool bSkipped = false;
while(!Strm().IsEof() && ch != '{' && ch != '}' && ch != '\\')
{
- if (ch != 0x0d && ch != 0x0a)
+ if (m_aStates.top().nInternalState == INTERNAL_HEX || (ch != 0x0d && ch != 0x0a))
{
if (m_aStates.top().nCharsToSkip == 0)
{