sw/qa/extras/rtfexport/data/abi10076.odt |binary sw/qa/extras/rtfexport/rtfexport.cxx | 5 +++++ sw/qa/extras/rtfimport/data/fdo82114.rtf | 14 ++++++++++++++ sw/qa/extras/rtfimport/rtfimport.cxx | 9 +++++++++ sw/source/filter/ww8/rtfattributeoutput.cxx | 7 +++---- writerfilter/source/dmapper/PropertyMap.cxx | 13 +++++++++---- 6 files changed, 40 insertions(+), 8 deletions(-)
New commits: commit 6ee0c2823f02376adf45291ce6e1aeab2687dc4f Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Thu Sep 11 12:23:18 2014 +0200 fdo#82114 RTF import: fix handling of first page in non-first section Change-Id: If06c6bcdda97447e6014223d997c7ff8abd64b48 (cherry picked from commit 04fe5e6a31c9701177a744bbc8a53b2f664fe71c) diff --git a/sw/qa/extras/rtfimport/data/fdo82114.rtf b/sw/qa/extras/rtfimport/data/fdo82114.rtf new file mode 100644 index 0000000..073d281 --- /dev/null +++ b/sw/qa/extras/rtfimport/data/fdo82114.rtf @@ -0,0 +1,14 @@ +{\rtf1 +\paperw11906\paperh16838\margl1134\margr567\margt1418\margb851\gutter0\ltrsect +\viewkind1\viewscale110\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nojkernpunct\rsidroot13516616\utinl \fet0 +\titlepg +{\headerr Right page header, section 1\par +} +{\headerf First page header, section 1\par +} +\pard\plain First page, section 1.\par\sect +\sectd\titlepg +{\headerf First page header, section 2\par +} +\pard\plain First page, section 2.\par +} diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx index 1c8f15d..69bbb3b 100644 --- a/sw/qa/extras/rtfimport/rtfimport.cxx +++ b/sw/qa/extras/rtfimport/rtfimport.cxx @@ -2102,6 +2102,15 @@ DECLARE_RTFIMPORT_TEST(testFdo79959, "fdo79959.rtf") CPPUNIT_ASSERT_EQUAL(true, static_cast<bool>(getStyles("ParagraphStyles")->hasByName("Test"))); } +DECLARE_RTFIMPORT_TEST(testFdo82114, "fdo82114.rtf") +{ + uno::Reference<text::XText> xHeaderText = getProperty< uno::Reference<text::XText> >(getStyles("PageStyles")->getByName("Converted1"), "HeaderText"); + OUString aActual = xHeaderText->getString(); + OUString aExpected("First page header, section 2"); + // This was 'Right page header, section 1'. + CPPUNIT_ASSERT_EQUAL(aExpected, aActual); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx index 5014d63..1ae318d 100644 --- a/writerfilter/source/dmapper/PropertyMap.cxx +++ b/writerfilter/source/dmapper/PropertyMap.cxx @@ -428,14 +428,18 @@ uno::Reference< beans::XPropertySet > SectionPropertyMap::GetPageStyle( m_aFirstPageStyle = uno::Reference< beans::XPropertySet > ( xTextFactory->createInstance("com.sun.star.style.PageStyle"), uno::UNO_QUERY); + + // Call insertByName() before GetPageStyle(), otherwise the + // first and the follow page style will have the same name, and + // insertByName() will fail. + if (xPageStyles.is()) + xPageStyles->insertByName( m_sFirstPageStyleName, uno::makeAny(m_aFirstPageStyle) ); + // Ensure that m_aFollowPageStyle has been created GetPageStyle( xPageStyles, xTextFactory, false ); // Chain m_aFollowPageStyle to be after m_aFirstPageStyle m_aFirstPageStyle->setPropertyValue("FollowStyle", uno::makeAny(m_sFollowPageStyleName)); - - if (xPageStyles.is()) - xPageStyles->insertByName( m_sFirstPageStyleName, uno::makeAny(m_aFirstPageStyle) ); } else if( !m_aFirstPageStyle.is() && xPageStyles.is() ) { @@ -462,8 +466,9 @@ uno::Reference< beans::XPropertySet > SectionPropertyMap::GetPageStyle( } } - catch( const uno::Exception& ) + catch( const uno::Exception& rException ) { + SAL_WARN("writerfilter", "SectionPropertyMap::GetPageStyle() failed: " << rException.Message); } return xRet; commit bacd7f92003991689c48806e2597456635d00c84 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Tue Sep 9 17:15:56 2014 +0200 abi#10076 RTF export: handle frames without a valid anchor point Ideally all frames have an anchor point in the maFrames vector, as provided by MSWordExportBase. If that's not the case, then we have no idea what would be a valid anchor point: just export those as inline, as we did before. Change-Id: I81134d9fb8dc4ca166084964d277ac02ceccde7b (cherry picked from commit 2f33111510c87ca310fde346e223bd6e750b2248) diff --git a/sw/qa/extras/rtfexport/data/abi10076.odt b/sw/qa/extras/rtfexport/data/abi10076.odt new file mode 100644 index 0000000..4ac6aa5 Binary files /dev/null and b/sw/qa/extras/rtfexport/data/abi10076.odt differ diff --git a/sw/qa/extras/rtfexport/rtfexport.cxx b/sw/qa/extras/rtfexport/rtfexport.cxx index d405b91..baca0a9 100644 --- a/sw/qa/extras/rtfexport/rtfexport.cxx +++ b/sw/qa/extras/rtfexport/rtfexport.cxx @@ -685,6 +685,11 @@ DECLARE_RTFEXPORT_TEST(testAbi10039, "abi10039.odt") CPPUNIT_ASSERT(text::TextContentAnchorType_AS_CHARACTER != getProperty<text::TextContentAnchorType>(getShape(1), "AnchorType")); } +DECLARE_RTFEXPORT_TEST(testAbi10076, "abi10076.odt") +{ + // Just make sure that we don't crash after exporting a fully calculated layout. +} + #endif CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/source/filter/ww8/rtfattributeoutput.cxx b/sw/source/filter/ww8/rtfattributeoutput.cxx index 20a49e2..bebfb71 100644 --- a/sw/source/filter/ww8/rtfattributeoutput.cxx +++ b/sw/source/filter/ww8/rtfattributeoutput.cxx @@ -3707,7 +3707,6 @@ void RtfAttributeOutput::FlyFrameGraphic(const SwFlyFrmFmt* pFlyFrmFmt, const Sw break; } } - assert(pFrame); /* If the graphic is not of type WMF then we will have to store two @@ -3716,7 +3715,7 @@ void RtfAttributeOutput::FlyFrameGraphic(const SwFlyFrmFmt* pFlyFrmFmt, const Sw a wmf already then we don't need any such wrapping */ bool bIsWMF = pBLIPType && std::strcmp(pBLIPType, OOO_STRING_SVTOOLS_RTF_WMETAFILE) == 0; - if (pFrame->IsInline()) + if (!pFrame || pFrame->IsInline()) { if (!bIsWMF) m_rExport.Strm().WriteCharPtr("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_SHPPICT); @@ -3748,7 +3747,7 @@ void RtfAttributeOutput::FlyFrameGraphic(const SwFlyFrmFmt* pFlyFrmFmt, const Sw m_rExport.Strm().WriteCharPtr("{" OOO_STRING_SVTOOLS_RTF_SP "{" OOO_STRING_SVTOOLS_RTF_SN " pib" "}{" OOO_STRING_SVTOOLS_RTF_SV " "); } - bool bWritePicProp = pFrame->IsInline(); + bool bWritePicProp = !pFrame || pFrame->IsInline(); if (pBLIPType) ExportPICT(pFlyFrmFmt, aSize, aRendered, aMapped, rCr, pBLIPType, pGraphicAry, nSize, m_rExport, &m_rExport.Strm(), bWritePicProp); else @@ -3763,7 +3762,7 @@ void RtfAttributeOutput::FlyFrameGraphic(const SwFlyFrmFmt* pFlyFrmFmt, const Sw ExportPICT(pFlyFrmFmt, aSize, aRendered, aMapped, rCr, pBLIPType, pGraphicAry, nSize, m_rExport, &m_rExport.Strm(), bWritePicProp); } - if (pFrame->IsInline()) + if (!pFrame || pFrame->IsInline()) { if (!bIsWMF) { _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits