summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@suse.cz>2012-06-15 16:15:07 +0200
committerMiklos Vajna <vmiklos@suse.cz>2012-06-15 17:04:13 +0200
commit629001d4795fd9cc16625d3b10705e06778aeb64 (patch)
treed0a486cdde74cc9c057399546fe0ed08780da7d3
parentFix pyuno.so name on Mac OS X (diff)
downloadcore-629001d4795fd9cc16625d3b10705e06778aeb64.tar.gz
core-629001d4795fd9cc16625d3b10705e06778aeb64.zip
fdo#50087 fix RTF import of Title, Subject, Comments document properties
Change-Id: I3358fad4949c2c21ecf63983a36b7c8428df9f06
-rw-r--r--sw/qa/extras/rtfexport/data/fdo50087.rtf8
-rw-r--r--sw/qa/extras/rtfexport/rtfexport.cxx13
-rw-r--r--writerfilter/source/rtftok/rtfdocumentimpl.cxx18
-rw-r--r--writerfilter/source/rtftok/rtfdocumentimpl.hxx5
4 files changed, 43 insertions, 1 deletions
diff --git a/sw/qa/extras/rtfexport/data/fdo50087.rtf b/sw/qa/extras/rtfexport/data/fdo50087.rtf
new file mode 100644
index 000000000000..f3716d85441a
--- /dev/null
+++ b/sw/qa/extras/rtfexport/data/fdo50087.rtf
@@ -0,0 +1,8 @@
+{\rtf1
+{\info
+{\title Title}
+{\subject Subject}
+{\doccomm First line.\'0aSecond line.}
+}
+\par
+}
diff --git a/sw/qa/extras/rtfexport/rtfexport.cxx b/sw/qa/extras/rtfexport/rtfexport.cxx
index a78fb9f3a3b2..6df0aec4c988 100644
--- a/sw/qa/extras/rtfexport/rtfexport.cxx
+++ b/sw/qa/extras/rtfexport/rtfexport.cxx
@@ -47,6 +47,7 @@ public:
void testFdo38176();
void testFdo49683();
void testFdo44174();
+ void testFdo50087();
CPPUNIT_TEST_SUITE(Test);
#if !defined(MACOSX) && !defined(WNT)
@@ -54,6 +55,7 @@ public:
CPPUNIT_TEST(testFdo38176);
CPPUNIT_TEST(testFdo49683);
CPPUNIT_TEST(testFdo44174);
+ CPPUNIT_TEST(testFdo50087);
#endif
CPPUNIT_TEST_SUITE_END();
@@ -116,6 +118,17 @@ void Test::testFdo44174()
CPPUNIT_ASSERT_EQUAL(OUString("First Page"), aValue);
}
+void Test::testFdo50087()
+{
+ roundtrip("fdo50087.rtf");
+
+ uno::Reference<document::XDocumentPropertiesSupplier> xDocumentPropertiesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<document::XDocumentProperties> xDocumentProperties(xDocumentPropertiesSupplier->getDocumentProperties());
+ CPPUNIT_ASSERT_EQUAL(OUString("Title"), xDocumentProperties->getTitle());
+ CPPUNIT_ASSERT_EQUAL(OUString("Subject"), xDocumentProperties->getSubject());
+ CPPUNIT_ASSERT_EQUAL(OUString("First line.\nSecond line."), xDocumentProperties->getDescription());
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(Test);
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index caff49110a1a..190b1bd4b0a0 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -968,6 +968,9 @@ void RTFDocumentImpl::text(OUString& rString)
case DESTINATION_FALT:
case DESTINATION_PARAGRAPHNUMBERING_TEXTAFTER:
case DESTINATION_PARAGRAPHNUMBERING_TEXTBEFORE:
+ case DESTINATION_TITLE:
+ case DESTINATION_SUBJECT:
+ case DESTINATION_DOCCOMM:
m_aStates.top().aDestinationText.append(rString);
break;
case DESTINATION_EQINSTRUCTION:
@@ -1377,6 +1380,15 @@ int RTFDocumentImpl::dispatchDestination(RTFKeyword nKeyword)
case RTF_PNTXTB:
m_aStates.top().nDestinationState = DESTINATION_PARAGRAPHNUMBERING_TEXTBEFORE;
break;
+ case RTF_TITLE:
+ m_aStates.top().nDestinationState = DESTINATION_TITLE;
+ break;
+ case RTF_SUBJECT:
+ m_aStates.top().nDestinationState = DESTINATION_SUBJECT;
+ break;
+ case RTF_DOCCOMM:
+ m_aStates.top().nDestinationState = DESTINATION_DOCCOMM;
+ break;
default:
SAL_INFO("writerfilter", OSL_THIS_FUNC << ": TODO handle destination '" << lcl_RtfToString(nKeyword) << "'");
// Make sure we skip destinations (even without \*) till we don't handle them
@@ -3275,6 +3287,12 @@ int RTFDocumentImpl::popState()
m_xDocumentProperties->setKeywords(comphelper::string::convertCommaSeparated(m_aStates.top().aDestinationText.makeStringAndClear()));
else if (m_aStates.top().nDestinationState == DESTINATION_COMMENT && m_xDocumentProperties.is())
m_xDocumentProperties->setGenerator(m_aStates.top().aDestinationText.makeStringAndClear());
+ else if (m_aStates.top().nDestinationState == DESTINATION_TITLE && m_xDocumentProperties.is())
+ m_xDocumentProperties->setTitle(m_aStates.top().aDestinationText.makeStringAndClear());
+ else if (m_aStates.top().nDestinationState == DESTINATION_SUBJECT && m_xDocumentProperties.is())
+ m_xDocumentProperties->setSubject(m_aStates.top().aDestinationText.makeStringAndClear());
+ else if (m_aStates.top().nDestinationState == DESTINATION_DOCCOMM && m_xDocumentProperties.is())
+ m_xDocumentProperties->setDescription(m_aStates.top().aDestinationText.makeStringAndClear());
else if (m_aStates.top().nDestinationState == DESTINATION_OPERATOR
|| m_aStates.top().nDestinationState == DESTINATION_COMPANY)
{
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.hxx b/writerfilter/source/rtftok/rtfdocumentimpl.hxx
index 9bb994d9fd35..5756b5a6aa11 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.hxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.hxx
@@ -114,7 +114,10 @@ namespace writerfilter {
DESTINATION_DRAWINGOBJECT,
DESTINATION_PARAGRAPHNUMBERING,
DESTINATION_PARAGRAPHNUMBERING_TEXTBEFORE,
- DESTINATION_PARAGRAPHNUMBERING_TEXTAFTER
+ DESTINATION_PARAGRAPHNUMBERING_TEXTAFTER,
+ DESTINATION_TITLE,
+ DESTINATION_SUBJECT,
+ DESTINATION_DOCCOMM
};
enum RTFBorderState