diff options
author | Miklos Vajna <vmiklos@suse.cz> | 2012-04-24 12:47:16 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@suse.cz> | 2012-04-24 12:55:04 +0200 |
commit | ef7cc64d8b5044251d6e31ca24aeb0ac11818e5d (patch) | |
tree | 21f8a43e40e496490864571af466e9b86485d674 | |
parent | 836d56dd563523853e4b9d4bbe7e6f93c1710a2a (diff) |
fdo#38176 fix RTF export of non-breaking space
-rw-r--r-- | sw/qa/extras/rtfexport/data/fdo38176.rtf | 3 | ||||
-rw-r--r-- | sw/qa/extras/rtfexport/rtfexport.cxx | 30 | ||||
-rw-r--r-- | sw/source/filter/ww8/rtfexport.cxx | 3 |
3 files changed, 35 insertions, 1 deletions
diff --git a/sw/qa/extras/rtfexport/data/fdo38176.rtf b/sw/qa/extras/rtfexport/data/fdo38176.rtf new file mode 100644 index 000000000000..c5126e4de447 --- /dev/null +++ b/sw/qa/extras/rtfexport/data/fdo38176.rtf @@ -0,0 +1,3 @@ +{\rtf1 +foo\~bar +\par} diff --git a/sw/qa/extras/rtfexport/rtfexport.cxx b/sw/qa/extras/rtfexport/rtfexport.cxx index 642544d8f828..607a39a99227 100644 --- a/sw/qa/extras/rtfexport/rtfexport.cxx +++ b/sw/qa/extras/rtfexport/rtfexport.cxx @@ -26,6 +26,7 @@ */ #include <com/sun/star/frame/XStorable.hpp> +#include <com/sun/star/text/XTextDocument.hpp> #include <com/sun/star/view/XViewSettingsSupplier.hpp> #include <test/bootstrapfixture.hxx> @@ -44,15 +45,19 @@ public: virtual void setUp(); virtual void tearDown(); void testZoom(); + void testFdo38176(); CPPUNIT_TEST_SUITE(RtfExportTest); #if !defined(MACOSX) && !defined(WNT) CPPUNIT_TEST(testZoom); + CPPUNIT_TEST(testFdo38176); #endif CPPUNIT_TEST_SUITE_END(); private: void roundtrip(const OUString& rURL); + /// Get the length of the whole document. + int getLength(); uno::Reference<lang::XComponent> mxComponent; }; @@ -69,6 +74,25 @@ void RtfExportTest::roundtrip(const OUString& rFilename) mxComponent = loadFromDesktop(aTempFile.GetURL()); } +int RtfExportTest::getLength() +{ + 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; + while (xParaEnum->hasMoreElements()) + { + uno::Reference<container::XEnumerationAccess> xRangeEnumAccess(xParaEnum->nextElement(), uno::UNO_QUERY); + uno::Reference<container::XEnumeration> xRangeEnum = xRangeEnumAccess->createEnumeration(); + while (xRangeEnum->hasMoreElements()) + { + uno::Reference<text::XTextRange> xRange(xRangeEnum->nextElement(), uno::UNO_QUERY); + aBuf.append(xRange->getString()); + } + } + return aBuf.getLength(); +} + void RtfExportTest::setUp() { test::BootstrapFixture::setUp(); @@ -97,6 +121,12 @@ void RtfExportTest::testZoom() CPPUNIT_ASSERT_EQUAL(sal_Int16(42), nValue); } +void RtfExportTest::testFdo38176() +{ + roundtrip("fdo38176.rtf"); + CPPUNIT_ASSERT_EQUAL(7, getLength()); +} + CPPUNIT_TEST_SUITE_REGISTRATION(RtfExportTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/source/filter/ww8/rtfexport.cxx b/sw/source/filter/ww8/rtfexport.cxx index d5a90ade29e0..15eec5e9299e 100644 --- a/sw/source/filter/ww8/rtfexport.cxx +++ b/sw/source/filter/ww8/rtfexport.cxx @@ -924,7 +924,8 @@ OString RtfExport::OutChar(sal_Unicode c, int *pUCMode, rtl_TextEncoding eDestEn } if (pStr) { aBuf.append(pStr); - aBuf.append(' '); + if (c != 0xa0) + aBuf.append(' '); } return aBuf.makeStringAndClear(); } |