oox/source/drawingml/shapecontext.cxx | 1 + oox/source/drawingml/textbodycontext.cxx | 4 ++++ sw/qa/extras/ooxmlimport/ooxmlimport.cxx | 4 ++++ writerfilter/source/ooxml/OOXMLFastContextHandler.cxx | 2 ++ 4 files changed, 11 insertions(+)
New commits: commit cbeb028519d0383ae3089c48f9ceefe9ee817188 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Wed Dec 4 11:49:33 2013 +0100 DOCX import: parse drawingML group shapes in oox only This is similar to commit d5c934d150cb6cea5f96cbbee4fb5e8312bf027e (n#792778 DOCX import: parse group shapes in oox only, 2012-12-14), except that was for the VML importer. The only difference is that in case of drawingML, OOXMLFastContextHandlerShape::lcl_createFastChildContext() is only called for the children of the group shape, not for the element itself, so compare against the start token, not the current element. Change-Id: Iddeabb20bbd5f0153e2fc4e6df463830126fdd37 diff --git a/oox/source/drawingml/shapecontext.cxx b/oox/source/drawingml/shapecontext.cxx index 7a1de2d..7d6971f 100644 --- a/oox/source/drawingml/shapecontext.cxx +++ b/oox/source/drawingml/shapecontext.cxx @@ -93,6 +93,7 @@ ContextHandlerRef ShapeContext::onCreateContext( sal_Int32 aElementToken, const return new ShapeStyleContext( *this, *mpShapePtr ); case XML_txBody: + case XML_txbxContent: { TextBodyPtr xTextBody( new TextBody ); mpShapePtr->setTextBody( xTextBody ); diff --git a/oox/source/drawingml/textbodycontext.cxx b/oox/source/drawingml/textbodycontext.cxx index 80e5657..a276ca1 100644 --- a/oox/source/drawingml/textbodycontext.cxx +++ b/oox/source/drawingml/textbodycontext.cxx @@ -62,6 +62,7 @@ ContextHandlerRef TextParagraphContext::onCreateContext( sal_Int32 aElementToken switch( aElementToken ) { case A_TOKEN( r ): // "CT_RegularTextRun" Regular Text Run. + case OOX_TOKEN( doc, r ): { TextRunPtr pRun( new TextRun ); mrParagraph.addRun( pRun ); @@ -104,6 +105,7 @@ void RegularTextRunContext::onEndElement( ) switch( getCurrentElement() ) { case A_TOKEN( t ): + case OOX_TOKEN( doc, t ): { mbIsInText = false; break; @@ -135,6 +137,7 @@ ContextHandlerRef RegularTextRunContext::onCreateContext( sal_Int32 aElementToke case A_TOKEN( rPr ): // "CT_TextCharPropertyBag" The text char properties of this text run. return new TextCharacterPropertiesContext( *this, rAttribs, mpRunPtr->getTextCharacterProperties() ); case A_TOKEN( t ): // "xsd:string" minOccurs="1" The actual text string. + case OOX_TOKEN( doc, t ): mbIsInText = true; break; } @@ -161,6 +164,7 @@ ContextHandlerRef TextBodyContext::onCreateContext( sal_Int32 aElementToken, con case A_TOKEN( lstStyle ): // CT_TextListStyle return new TextListStyleContext( *this, mrTextBody.getTextListStyle() ); case A_TOKEN( p ): // CT_TextParagraph + case OOX_TOKEN( doc, p ): return new TextParagraphContext( *this, mrTextBody.addParagraph() ); } diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx index b0903b6..9951ef1 100644 --- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx +++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx @@ -1561,6 +1561,10 @@ DECLARE_OOXMLIMPORT_TEST(textboxWpgOnly, "textbox-wpg-only.docx") // The relativeFrom attribute was ignored for groupshapes, i.e. these were text::RelOrientation::FRAME. CPPUNIT_ASSERT_EQUAL(text::RelOrientation::PAGE_FRAME, getProperty<sal_Int16>(xShape, "HoriOrientRelation")); CPPUNIT_ASSERT_EQUAL(text::RelOrientation::PAGE_FRAME, getProperty<sal_Int16>(xShape, "VertOrientRelation")); + + // The 3 paragraphs on the rectangles inside the groupshape ended up in the + // body text, make sure we don't have multiple paragraphs there anymore. + CPPUNIT_ASSERT_EQUAL(1, getParagraphs()); // was 4 } DECLARE_OOXMLIMPORT_TEST(testFdo70457, "fdo70457.docx") diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx index 5cdcef4..14787f7 100644 --- a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx +++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx @@ -2156,6 +2156,8 @@ OOXMLFastContextHandlerShape::lcl_createFastChildContext uno::Reference< xml::sax::XFastContextHandler > xContextHandler; bool bGroupShape = Element == Token_t(NS_vml | OOXML_group); + // drawingML version also counts as a group shape. + bGroupShape |= mrShapeContext->getStartToken() == Token_t(NS_wpg | OOXML_wgp); sal_uInt32 nNamespace = Element & 0xffff0000; switch (nNamespace) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits