summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@suse.cz>2012-04-24 12:47:16 +0200
committerMiklos Vajna <vmiklos@suse.cz>2012-04-24 12:55:04 +0200
commitef7cc64d8b5044251d6e31ca24aeb0ac11818e5d (patch)
tree21f8a43e40e496490864571af466e9b86485d674
parent836d56dd563523853e4b9d4bbe7e6f93c1710a2a (diff)
fdo#38176 fix RTF export of non-breaking space
-rw-r--r--sw/qa/extras/rtfexport/data/fdo38176.rtf3
-rw-r--r--sw/qa/extras/rtfexport/rtfexport.cxx30
-rw-r--r--sw/source/filter/ww8/rtfexport.cxx3
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();
}