diff options
| author | Miklos Vajna <vmiklos@suse.cz> | 2012-12-23 14:37:59 +0100 |
|---|---|---|
| committer | Miklos Vajna <vmiklos@suse.cz> | 2012-12-23 16:39:31 +0100 |
| commit | 99894610482eb8f631083c327ca2f0310391eb23 (patch) | |
| tree | fb4762f5d2876a45e25bdcfb9732dc4e922c80b9 | |
| parent | 1b8de5ffb509d37110b59f412e72e0c0ddde7138 (diff) | |
fdo#58076 fix import of RTF page margins vs partial section props
The problem was that \sbknone (being a section property) triggered
creating a section, but the document doesn't have multiple sections.
Make sure we don't send section properties as long as no \sect control
words present.
(cherry picked from commit 07c80d23fadcc2334fe7c6f9ce7b5dafeb88d623)
| -rw-r--r-- | sw/qa/extras/rtfimport/data/fdo58076.rtf | 5 | ||||
| -rw-r--r-- | sw/qa/extras/rtfimport/rtfimport.cxx | 12 | ||||
| -rw-r--r-- | writerfilter/source/rtftok/rtfdocumentimpl.cxx | 6 | ||||
| -rw-r--r-- | writerfilter/source/rtftok/rtfdocumentimpl.hxx | 2 |
4 files changed, 23 insertions, 2 deletions
diff --git a/sw/qa/extras/rtfimport/data/fdo58076.rtf b/sw/qa/extras/rtfimport/data/fdo58076.rtf new file mode 100644 index 000000000000..2acbfd8ec7d0 --- /dev/null +++ b/sw/qa/extras/rtfimport/data/fdo58076.rtf @@ -0,0 +1,5 @@ +{\rtf1 +\paperw11908\paperh16838\margl1276\margr993\margt360\margb360 +\sectd \sbknone\headery708\footery708 +\par +} diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx index a2fdf223bdd9..da5794f41751 100644 --- a/sw/qa/extras/rtfimport/rtfimport.cxx +++ b/sw/qa/extras/rtfimport/rtfimport.cxx @@ -130,6 +130,7 @@ public: void testFdo54473(); void testFdo49934(); void testFdo57886(); + void testFdo58076(); CPPUNIT_TEST_SUITE(Test); #if !defined(MACOSX) && !defined(WNT) @@ -210,6 +211,7 @@ void Test::run() {"fdo54473.rtf", &Test::testFdo54473}, {"fdo49934.rtf", &Test::testFdo49934}, {"fdo57886.rtf", &Test::testFdo57886}, + {"fdo58076.rtf", &Test::testFdo58076}, }; for (unsigned int i = 0; i < SAL_N_ELEMENTS(aMethods); ++i) { @@ -966,6 +968,16 @@ void Test::testFdo57886() CPPUNIT_ASSERT_EQUAL(OUString("int from {firstlower} to {firstupper} {firstbody}"), getFormula(getRun(getParagraph(1), 1))); } +void Test::testFdo58076() +{ + // An additional section was created, so the default page style didn't have the custom margins. + uno::Reference<beans::XPropertySet> xStyle(getStyles("PageStyles")->getByName(DEFAULT_STYLE), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2251), getProperty<sal_Int32>(xStyle, "LeftMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1752), getProperty<sal_Int32>(xStyle, "RightMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(635), getProperty<sal_Int32>(xStyle, "TopMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(635), getProperty<sal_Int32>(xStyle, "BottomMargin")); +} + CPPUNIT_TEST_SUITE_REGISTRATION(Test); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index 54390eaa8070..19b02519ea0b 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -275,7 +275,8 @@ RTFDocumentImpl::RTFDocumentImpl(uno::Reference<uno::XComponentContext> const& x m_bIgnoreNextContSectBreak(false), m_bNeedSect(true), m_bWasInFrame(false), - m_bHadPicture(false) + m_bHadPicture(false), + m_bHadSect(false) { OSL_ASSERT(xInputStream.is()); m_pInStream.reset(utl::UcbStreamHelper::CreateStream(xInputStream, sal_True)); @@ -526,7 +527,7 @@ void RTFDocumentImpl::sectBreak(bool bFinal = false) // Normally a section break at the end of the doc is necessary. Unless the // last control word in the document is a section break itself. - if (!bNeedSect) + if (!bNeedSect || !m_bHadSect) { RTFValue::Pointer_t pBreak = m_aStates.top().aSectionSprms.find(NS_sprm::LN_SBkc); // In case the last section is a continous one, we don't need to output a section break. @@ -1629,6 +1630,7 @@ int RTFDocumentImpl::dispatchSymbol(RTFKeyword nKeyword) break; case RTF_SECT: { + m_bHadSect = true; if (m_bIgnoreNextContSectBreak) m_bIgnoreNextContSectBreak = false; else diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.hxx b/writerfilter/source/rtftok/rtfdocumentimpl.hxx index 1df8de1ffcd2..283faec9b531 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.hxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.hxx @@ -590,6 +590,8 @@ namespace writerfilter { bool m_bWasInFrame; /// A picture was seen in the current paragraph. bool m_bHadPicture; + /// The document has multiple sections. + bool m_bHadSect; }; } // namespace rtftok } // namespace writerfilter |
