include/oox/drawingml/textfont.hxx | 3 oox/source/drawingml/shape.cxx | 5 + oox/source/drawingml/textcharacterpropertiescontext.cxx | 12 +++ oox/source/drawingml/textfont.cxx | 8 ++ oox/source/export/drawingml.cxx | 16 +++- sw/qa/extras/ooxmlexport/data/dml-gradientfill-theme.docx |binary sw/qa/extras/ooxmlexport/data/nested-text-frames.odt |binary sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 44 +++++++++++-- sw/qa/extras/ooxmlimport/data/dml-groupshape-runfonts.docx |binary sw/qa/extras/ooxmlimport/ooxmlimport.cxx | 10 ++ 10 files changed, 88 insertions(+), 10 deletions(-)
New commits: commit b733190b0eae3177a30e09054a764eed4f616ba2 Author: Zolnai Tamás <tamas.zol...@collabora.com> Date: Thu Feb 20 11:57:09 2014 +0100 DOCX export tests: increase strength of testing nested text frames Change-Id: I370f22ee948f5a760ba01c98a8cfb5fac96f98b7 diff --git a/sw/qa/extras/ooxmlexport/data/nested-text-frames.odt b/sw/qa/extras/ooxmlexport/data/nested-text-frames.odt index 4c38e1f..d2106f9 100644 Binary files a/sw/qa/extras/ooxmlexport/data/nested-text-frames.odt and b/sw/qa/extras/ooxmlexport/data/nested-text-frames.odt differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx index bda5ea0..c68d3df 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx @@ -3280,11 +3280,21 @@ DECLARE_OOXMLEXPORT_TEST(testNestedTextFrames, "nested-text-frames.odt") // First problem was LO crashed during export (crash test) // Second problem was LO made file corruption, writing out nested text boxes, which can't be handled by Word. - // So test that all three exported text boxes are on the same level - xmlDocPtr pXmlDoc = parseExport("word/document.xml"); - if (!pXmlDoc) - return; - assertXPath(pXmlDoc,"/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:txbx/w:txbxContent/w:p/w:r/w:t", 3); + // Test that all three exported text boxes are anchored to the same paragraph and not each other. + uno::Reference<text::XTextContent> xTextContent(getShape(1), uno::UNO_QUERY); + uno::Reference<text::XTextRange> xRange(xTextContent->getAnchor(), uno::UNO_QUERY); + uno::Reference<text::XText> xText(xRange->getText(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Anchor point"), xText->getString()); + + xTextContent.set(getShape(2), uno::UNO_QUERY); + xRange.set(xTextContent->getAnchor(), uno::UNO_QUERY); + xText.set(xRange->getText(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Anchor point"), xText->getString()); + + xTextContent.set(getShape(3), uno::UNO_QUERY); + xRange.set(xTextContent->getAnchor(), uno::UNO_QUERY); + xText.set(xRange->getText(), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("Anchor point"), xText->getString()); } DECLARE_OOXMLEXPORT_TEST(testFloatingTablePosition, "floating-table-position.docx") commit 756d0b1dff3cb5c3cab10c1f14e4dae6ac3ba135 Author: Zolnai Tamás <tamas.zol...@collabora.com> Date: Thu Feb 20 13:22:33 2014 +0100 drawingML import: run fonts inside group shape Change-Id: Ib54fe868c11c0c22b85d8821fa7274c80918362c diff --git a/include/oox/drawingml/textfont.hxx b/include/oox/drawingml/textfont.hxx index a069057..d3361fc 100644 --- a/include/oox/drawingml/textfont.hxx +++ b/include/oox/drawingml/textfont.hxx @@ -39,6 +39,9 @@ public: /** Sets attributes from the passed attribute list. */ void setAttributes( const AttributeList& rAttribs ); + /** Sets font name and init other attributes. */ + void setAttributes( const OUString& rFontName ); + /** Overwrites this text font with the passed text font, if it is used. */ void assignIfUsed( const TextFont& rTextFont ); diff --git a/oox/source/drawingml/textcharacterpropertiescontext.cxx b/oox/source/drawingml/textcharacterpropertiescontext.cxx index 36bd255..8b6156e 100644 --- a/oox/source/drawingml/textcharacterpropertiescontext.cxx +++ b/oox/source/drawingml/textcharacterpropertiescontext.cxx @@ -132,6 +132,18 @@ ContextHandlerRef TextCharacterPropertiesContext::onCreateContext( sal_Int32 aEl case A_TOKEN( hlinkMouseOver ): // CT_Hyperlink return new HyperLinkContext( *this, rAttribs, mrTextCharacterProperties.maHyperlinkPropertyMap ); case OOX_TOKEN( doc, rFonts ): + if( rAttribs.hasAttribute(OOX_TOKEN(doc, ascii)) ) + { + mrTextCharacterProperties.maLatinFont.setAttributes(rAttribs.getString(OOX_TOKEN(doc, ascii), OUString())); + } + if( rAttribs.hasAttribute(OOX_TOKEN(doc, cs)) ) + { + mrTextCharacterProperties.maComplexFont.setAttributes(rAttribs.getString(OOX_TOKEN(doc, cs), OUString())); + } + if( rAttribs.hasAttribute(OOX_TOKEN(doc, eastAsia)) ) + { + mrTextCharacterProperties.maAsianFont.setAttributes(rAttribs.getString(OOX_TOKEN(doc, eastAsia), OUString())); + } break; case OOX_TOKEN( doc, b ): mrTextCharacterProperties.moBold = rAttribs.getBool(OOX_TOKEN( doc, val ), true); diff --git a/oox/source/drawingml/textfont.cxx b/oox/source/drawingml/textfont.cxx index 553f5ae..239c087 100644 --- a/oox/source/drawingml/textfont.cxx +++ b/oox/source/drawingml/textfont.cxx @@ -65,6 +65,14 @@ void TextFont::setAttributes( const AttributeList& rAttribs ) mnCharset = rAttribs.getInteger( XML_charset, WINDOWS_CHARSET_DEFAULT ); } +void TextFont::setAttributes( const OUString& sFontName ) +{ + maTypeface = sFontName; + maPanose = OUString(); + mnPitch = 0; + mnCharset = WINDOWS_CHARSET_DEFAULT; +} + void TextFont::assignIfUsed( const TextFont& rTextFont ) { if( !rTextFont.maTypeface.isEmpty() ) diff --git a/sw/qa/extras/ooxmlimport/data/dml-groupshape-runfonts.docx b/sw/qa/extras/ooxmlimport/data/dml-groupshape-runfonts.docx new file mode 100644 index 0000000..e4c8c6c Binary files /dev/null and b/sw/qa/extras/ooxmlimport/data/dml-groupshape-runfonts.docx differ diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx index acfe4ea..5f41a1d 100644 --- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx +++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx @@ -1881,6 +1881,16 @@ DECLARE_OOXMLIMPORT_TEST(testAnnotationFormatting, "annotation-formatting.docx") CPPUNIT_ASSERT_EQUAL(awt::FontUnderline::SINGLE, getProperty<sal_Int16>(getRun(xParagraph, 1), "CharUnderline")); } +DECLARE_OOXMLIMPORT_TEST(testDMLGroupShapeRunFonts, "dml-groupshape-runfonts.docx") +{ + // Fonts defined by w:rFonts was not imported and so the font specified by a:fontRef was used. + uno::Reference<container::XIndexAccess> xGroup(getShape(1), uno::UNO_QUERY); + uno::Reference<text::XText> xText = uno::Reference<text::XTextRange>(xGroup->getByIndex(1), uno::UNO_QUERY)->getText(); + uno::Reference<text::XTextRange> xRun = getRun(getParagraphOfText(1, xText),1); + CPPUNIT_ASSERT_EQUAL(OUString("Arial"), getProperty<OUString>(xRun, "CharFontName")); + CPPUNIT_ASSERT_EQUAL(OUString("Arial Unicode MS"), getProperty<OUString>(xRun, "CharFontNameComplex")); + CPPUNIT_ASSERT_EQUAL(OUString("MS Mincho"), getProperty<OUString>(xRun, "CharFontNameAsian")); +} #endif CPPUNIT_PLUGIN_IMPLEMENT(); commit 191f648ffd97b58f57afca65961e5dbcc2bbe724 Author: Zolnai Tamás <tamas.zol...@collabora.com> Date: Thu Feb 20 11:48:35 2014 +0100 drawingML export: gradient fill defined by imported theme Plus avoid writing out empty <a:gradFill></a:gradFill>. Change-Id: I50fa92b2cc30eedfe28a8c6af697d43d98a3aee8 diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx index b302010..9066d44 100644 --- a/oox/source/drawingml/shape.cxx +++ b/oox/source/drawingml/shape.cxx @@ -853,7 +853,10 @@ Reference< XShape > Shape::createAndInsert( PUT_PROP( aGradientStops, i, OUString::number( i ), aGradientStop ); ++aIt; } - putPropertyToGrabBag( "GradFillDefinition", Any( aGradientStops ) ); + // If getFillProperties.moFillType is unused that means gradient is defined by a theme + // which is already saved into StyleFillRef property, so no need to save the explicit values too + if( getFillProperties().moFillType.has() ) + putPropertyToGrabBag( "GradFillDefinition", Any( aGradientStops ) ); putPropertyToGrabBag( "OriginalGradFill", Any( aShapeProps[PROP_FillGradient] ) ); } } diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx index 8ff54aa..e019ed6 100644 --- a/oox/source/export/drawingml.cxx +++ b/oox/source/export/drawingml.cxx @@ -339,15 +339,23 @@ void DrawingML::WriteGradientFill( Reference< XPropertySet > rXPropSet ) aGrabBag[i].Value >>= aOriginalGradient; } - mpFS->startElementNS( XML_a, XML_gradFill, FSEND ); // check if an ooxml gradient had been imported and if the user has modified it - if( aGradientStops.hasElements() && EqualGradients( aOriginalGradient, aGradient ) ) + if( EqualGradients( aOriginalGradient, aGradient ) ) { - WriteGrabBagGradientFill(aGradientStops, aGradient); + // If we have no gradient stops that means original gradient were defined by a theme. + if( aGradientStops.hasElements() ) + { + mpFS->startElementNS( XML_a, XML_gradFill, FSEND ); + WriteGrabBagGradientFill(aGradientStops, aGradient); + mpFS->endElementNS( XML_a, XML_gradFill ); + } } else + { + mpFS->startElementNS( XML_a, XML_gradFill, FSEND ); WriteGradientFill(aGradient); - mpFS->endElementNS( XML_a, XML_gradFill ); + mpFS->endElementNS( XML_a, XML_gradFill ); + } } } diff --git a/sw/qa/extras/ooxmlexport/data/dml-gradientfill-theme.docx b/sw/qa/extras/ooxmlexport/data/dml-gradientfill-theme.docx new file mode 100644 index 0000000..3311ce8 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/dml-gradientfill-theme.docx differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx index dc434a3..bda5ea0 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx @@ -3318,6 +3318,30 @@ DECLARE_OOXMLEXPORT_TEST(testDMLGroupShapeChildPosition, "dml-groupshape-childpo CPPUNIT_ASSERT_EQUAL(sal_Int32(m_bExported ? -2119 : -2121), xChildGroup->getPosition().X); CPPUNIT_ASSERT_EQUAL(sal_Int32(m_bExported ? 14028 : 14025), xChildGroup->getPosition().Y); } + +DECLARE_OOXMLEXPORT_TEST(testDMLGradientFillTheme, "dml-gradientfill-theme.docx") +{ + // Problem was when a fill gradient was imported from a theme, (fillRef in ooxml) + // not just the theme was written out but the explicit values too + // Besides the duplication of values it causes problems with writing out + // <a:schemeClr val="phClr"> into document.xml, while phClr can be used just for theme definitions. + xmlDocPtr pXmlDoc = parseExport("word/document.xml"); + if (!pXmlDoc) + return; + + // check no explicit gradFill has been exported + assertXPath(pXmlDoc, + "/w:document/w:body/w:p[2]/w:r/mc:AlternateContent[1]/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:gradFill", + 0); + + // check shape style has been exported + assertXPath(pXmlDoc, + "/w:document/w:body/w:p[2]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:style/a:fillRef", + "idx", "2"); + assertXPath(pXmlDoc, + "/w:document/w:body/w:p[2]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:style/a:fillRef/a:schemeClr", + "val", "accent1"); +} #endif CPPUNIT_PLUGIN_IMPLEMENT();
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits