sw/qa/extras/ooxmlexport/data/theme-preservation.docx |binary sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 10 +-- sw/source/filter/ww8/docxattributeoutput.cxx | 58 +++++++++++++----- sw/source/filter/ww8/docxattributeoutput.hxx | 1 4 files changed, 52 insertions(+), 17 deletions(-)
New commits: commit 1534c3363336003c4f84cfec1bf988fef6663f8a Author: Jacobo Aragunde Pérez <[email protected]> Date: Fri Jun 6 13:43:06 2014 +0200 fdo#79558: Do not overwrite w:shd value When a w:shd has some pattern with two colors, LO blends both to render the paragraph background. We must compare that blended color with the paragraph color on export to know if the user has edited it or not. We were using the w:fill attribute to compare, but that was incorrect. Modified an existing unit test to check this behaviour. The unit test had to be retouched because Word remove some redundant information from the original .docx file when I saved it again with some background changes. Change-Id: Ia2f1ddc4afd2637e1d87b6eccd441c26853045c4 diff --git a/sw/qa/extras/ooxmlexport/data/theme-preservation.docx b/sw/qa/extras/ooxmlexport/data/theme-preservation.docx index 1c94b47..2de4374 100644 Binary files a/sw/qa/extras/ooxmlexport/data/theme-preservation.docx and b/sw/qa/extras/ooxmlexport/data/theme-preservation.docx differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx index 4c6dcda..596c292 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx @@ -1930,9 +1930,7 @@ DECLARE_OOXMLEXPORT_TEST(testThemePreservation, "theme-preservation.docx") // check theme font color value has been preserved assertXPath(pXmlDocument, "/w:document/w:body/w:p[4]/w:r[1]/w:rPr/w:color", "themeColor", "accent3"); OUString sThemeShade = getXPath(pXmlDocument, "/w:document/w:body/w:p[4]/w:r[1]/w:rPr/w:color", "themeShade"); - CPPUNIT_ASSERT_EQUAL(sThemeShade.toInt32(16), sal_Int32(0xbf)); - assertXPath(pXmlDocument, "/w:document/w:body/w:p[7]/w:r[1]/w:rPr/w:color", "themeColor", "accent1"); - assertXPath(pXmlDocument, "/w:document/w:body/w:p[7]/w:r[1]/w:rPr/w:color", "themeTint", "99"); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0xbf), sThemeShade.toInt32(16)); // check the themeFontLang values in settings file xmlDocPtr pXmlSettings = parseExport("word/settings.xml"); @@ -1956,8 +1954,12 @@ DECLARE_OOXMLEXPORT_TEST(testThemePreservation, "theme-preservation.docx") CPPUNIT_ASSERT_EQUAL(OUString("Trebuchet MS"), getProperty<OUString>(getParagraph(5, "Major theme font"), "CharFontName")); - // check the paragraph background theme color has been preserved + // check the paragraph background pattern has been preserved including theme colors + assertXPath(pXmlDocument, "/w:document/w:body/w:p[6]/w:pPr/w:shd", "val", "thinHorzStripe"); assertXPath(pXmlDocument, "/w:document/w:body/w:p[6]/w:pPr/w:shd", "themeFill", "text2"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[6]/w:pPr/w:shd", "themeFillTint", "33"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[6]/w:pPr/w:shd", "themeColor", "accent1"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[6]/w:pPr/w:shd", "themeShade", "80"); } DECLARE_OOXMLEXPORT_TEST(testTableThemePreservation, "table-theme-preservation.docx") diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index f357a6f..d3cfad8 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -6867,14 +6867,13 @@ void DocxAttributeOutput::FormatBackground( const SvxBrushItem& rBrush ) } else if ( !m_rExport.bOutPageDescs ) { - if( !m_pBackgroundAttrList ) - m_pBackgroundAttrList = m_pSerializer->createAttrList(); - // compare fill color with the original fill color OString sOriginalFill = rtl::OUStringToOString( - m_pBackgroundAttrList->getOptionalValue( FSNS( XML_w, XML_fill ) ), RTL_TEXTENCODING_UTF8 ); - if( sOriginalFill.isEmpty() ) + m_sOriginalBackgroundColor, RTL_TEXTENCODING_UTF8 ); + + if( !m_pBackgroundAttrList ) { + m_pBackgroundAttrList = m_pSerializer->createAttrList(); m_pBackgroundAttrList->add( FSNS( XML_w, XML_fill ), sColor.getStr() ); m_pBackgroundAttrList->add( FSNS( XML_w, XML_val ), "clear" ); } @@ -6886,6 +6885,7 @@ void DocxAttributeOutput::FormatBackground( const SvxBrushItem& rBrush ) m_pBackgroundAttrList->add( FSNS( XML_w, XML_fill ), sColor.getStr() ); m_pBackgroundAttrList->add( FSNS( XML_w, XML_val ), "clear" ); } + m_sOriginalBackgroundColor = ""; } } @@ -7272,7 +7272,7 @@ void DocxAttributeOutput::ParaGrabBag(const SfxGrabBagItem& rItem) { uno::Sequence<beans::PropertyValue> aGrabBagSeq; i->second >>= aGrabBagSeq; - OUString sVal, sOriginalFill, sShdColor, + OUString sVal, sShdFill, sShdColor, sThemeColor, sThemeTint, sThemeShade, sThemeFill, sThemeFillTint, sThemeFillShade; for (sal_Int32 j=0; j < aGrabBagSeq.getLength(); ++j) @@ -7288,13 +7288,15 @@ void DocxAttributeOutput::ParaGrabBag(const SfxGrabBagItem& rItem) else if (aGrabBagSeq[j].Name == "themeShade") aGrabBagSeq[j].Value >>= sThemeShade; else if (aGrabBagSeq[j].Name == "fill") - aGrabBagSeq[j].Value >>= sOriginalFill; + aGrabBagSeq[j].Value >>= sShdFill; else if (aGrabBagSeq[j].Name == "themeFill") aGrabBagSeq[j].Value >>= sThemeFill; else if (aGrabBagSeq[j].Name == "themeFillTint") aGrabBagSeq[j].Value >>= sThemeFillTint; else if (aGrabBagSeq[j].Name == "themeFillShade") aGrabBagSeq[j].Value >>= sThemeFillShade; + else if (aGrabBagSeq[j].Name == "originalColor") + aGrabBagSeq[j].Value >>= m_sOriginalBackgroundColor; } AddToAttrList(m_pBackgroundAttrList, 9, FSNS(XML_w, XML_val), OUStringToOString(sVal, RTL_TEXTENCODING_UTF8).getStr(), @@ -7302,7 +7304,7 @@ void DocxAttributeOutput::ParaGrabBag(const SfxGrabBagItem& rItem) FSNS(XML_w, XML_themeColor), OUStringToOString(sThemeColor, RTL_TEXTENCODING_UTF8).getStr(), FSNS(XML_w, XML_themeTint), OUStringToOString(sThemeTint, RTL_TEXTENCODING_UTF8).getStr(), FSNS(XML_w, XML_themeShade), OUStringToOString(sThemeShade, RTL_TEXTENCODING_UTF8).getStr(), - FSNS(XML_w, XML_fill), OUStringToOString(sOriginalFill, RTL_TEXTENCODING_UTF8).getStr(), + FSNS(XML_w, XML_fill), OUStringToOString(sShdFill, RTL_TEXTENCODING_UTF8).getStr(), FSNS(XML_w, XML_themeFill), OUStringToOString(sThemeFill, RTL_TEXTENCODING_UTF8).getStr(), FSNS(XML_w, XML_themeFillTint), OUStringToOString(sThemeFillTint, RTL_TEXTENCODING_UTF8).getStr(), FSNS(XML_w, XML_themeFillShade), OUStringToOString(sThemeFillShade, RTL_TEXTENCODING_UTF8).getStr()); diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx index 9202121..9e01511 100644 --- a/sw/source/filter/ww8/docxattributeoutput.hxx +++ b/sw/source/filter/ww8/docxattributeoutput.hxx @@ -709,6 +709,7 @@ private: ::sax_fastparser::FastAttributeList *m_pColorAttrList; /// Attributes of the paragraph background ::sax_fastparser::FastAttributeList *m_pBackgroundAttrList; + OUString m_sOriginalBackgroundColor; OUString m_hyperLinkAnchor; bool m_endPageRef; ::docx::FootnotesList *m_pFootnotesList; commit 4f1684dc3724f9364f226fd0eb21b01ba07cf017 Author: Jacobo Aragunde Pérez <[email protected]> Date: Fri Jun 6 13:21:50 2014 +0200 fdo#79558: Preserve missing attributes in paragraph w:shd The missing attributes are w:val, w:color, w:themeColor, w:themeShade, w:themeTint, w:themeFillShade and w:themeFillTint. Change-Id: I67dd7c367d820216c1d11f82e3430fbf550cede8 diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index 095137f..f357a6f 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -6876,6 +6876,7 @@ void DocxAttributeOutput::FormatBackground( const SvxBrushItem& rBrush ) if( sOriginalFill.isEmpty() ) { m_pBackgroundAttrList->add( FSNS( XML_w, XML_fill ), sColor.getStr() ); + m_pBackgroundAttrList->add( FSNS( XML_w, XML_val ), "clear" ); } else if ( sOriginalFill != sColor ) { @@ -6883,8 +6884,8 @@ void DocxAttributeOutput::FormatBackground( const SvxBrushItem& rBrush ) delete m_pBackgroundAttrList; m_pBackgroundAttrList = m_pSerializer->createAttrList(); m_pBackgroundAttrList->add( FSNS( XML_w, XML_fill ), sColor.getStr() ); + m_pBackgroundAttrList->add( FSNS( XML_w, XML_val ), "clear" ); } - m_pBackgroundAttrList->add( FSNS( XML_w, XML_val ), "clear" ); } } @@ -7271,17 +7272,40 @@ void DocxAttributeOutput::ParaGrabBag(const SfxGrabBagItem& rItem) { uno::Sequence<beans::PropertyValue> aGrabBagSeq; i->second >>= aGrabBagSeq; - OUString sThemeFill, sOriginalFill; + OUString sVal, sOriginalFill, sShdColor, + sThemeColor, sThemeTint, sThemeShade, + sThemeFill, sThemeFillTint, sThemeFillShade; for (sal_Int32 j=0; j < aGrabBagSeq.getLength(); ++j) { - if (aGrabBagSeq[j].Name == "themeFill") - aGrabBagSeq[j].Value >>= sThemeFill; + if (aGrabBagSeq[j].Name == "val") + aGrabBagSeq[j].Value >>= sVal; + else if (aGrabBagSeq[j].Name == "color") + aGrabBagSeq[j].Value >>= sShdColor; + else if (aGrabBagSeq[j].Name == "themeColor") + aGrabBagSeq[j].Value >>= sThemeColor; + else if (aGrabBagSeq[j].Name == "themeTint") + aGrabBagSeq[j].Value >>= sThemeTint; + else if (aGrabBagSeq[j].Name == "themeShade") + aGrabBagSeq[j].Value >>= sThemeShade; else if (aGrabBagSeq[j].Name == "fill") aGrabBagSeq[j].Value >>= sOriginalFill; + else if (aGrabBagSeq[j].Name == "themeFill") + aGrabBagSeq[j].Value >>= sThemeFill; + else if (aGrabBagSeq[j].Name == "themeFillTint") + aGrabBagSeq[j].Value >>= sThemeFillTint; + else if (aGrabBagSeq[j].Name == "themeFillShade") + aGrabBagSeq[j].Value >>= sThemeFillShade; } - AddToAttrList(m_pBackgroundAttrList, 2, + AddToAttrList(m_pBackgroundAttrList, 9, + FSNS(XML_w, XML_val), OUStringToOString(sVal, RTL_TEXTENCODING_UTF8).getStr(), + FSNS(XML_w, XML_color), OUStringToOString(sShdColor, RTL_TEXTENCODING_UTF8).getStr(), + FSNS(XML_w, XML_themeColor), OUStringToOString(sThemeColor, RTL_TEXTENCODING_UTF8).getStr(), + FSNS(XML_w, XML_themeTint), OUStringToOString(sThemeTint, RTL_TEXTENCODING_UTF8).getStr(), + FSNS(XML_w, XML_themeShade), OUStringToOString(sThemeShade, RTL_TEXTENCODING_UTF8).getStr(), + FSNS(XML_w, XML_fill), OUStringToOString(sOriginalFill, RTL_TEXTENCODING_UTF8).getStr(), FSNS(XML_w, XML_themeFill), OUStringToOString(sThemeFill, RTL_TEXTENCODING_UTF8).getStr(), - FSNS(XML_w, XML_fill), OUStringToOString(sOriginalFill, RTL_TEXTENCODING_UTF8).getStr()); + FSNS(XML_w, XML_themeFillTint), OUStringToOString(sThemeFillTint, RTL_TEXTENCODING_UTF8).getStr(), + FSNS(XML_w, XML_themeFillShade), OUStringToOString(sThemeFillShade, RTL_TEXTENCODING_UTF8).getStr()); } else if (i->first == "SdtPr") { commit 06a5bbd720b89d629ebf6ccf0d9a62a77c2d9a28 Author: Jacobo Aragunde Pérez <[email protected]> Date: Thu Jun 5 19:17:13 2014 +0200 fdo#79691: Fix ppt files embedded in .docx documents Ensure that the proper media type and relation type are written in the .docx document for a .ppt presentation, because they are different from the ones for a .pptx file. Change-Id: Id91269e49c0effb35415ae8827ff949e69e7063f diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index 6c03014..095137f 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -4210,12 +4210,18 @@ void DocxAttributeOutput::WriteOLE( SwOLENode& rNode, const Size& rSize, const S sRelationType = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject"; sFileExtension = "xls"; } - else if( sProgID.startsWith("PowerPoint.Show") ) + else if( sProgID == "PowerPoint.Show.12" ) { sMediaType = "application/vnd.openxmlformats-officedocument.presentationml.presentation"; sRelationType = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/package"; sFileExtension = "pptx"; } + else if( sProgID.startsWith("PowerPoint.Show") ) + { + sMediaType = "application/vnd.ms-powerpoint"; + sRelationType = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject"; + sFileExtension = "ppt"; + } else { sMediaType = "application/vnd.openxmlformats-officedocument.oleObject";
_______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
