From a44e42b9cd08d1ac8438ed2944cf174ffd68b80e Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Tue, 3 Dec 2013 10:50:44 +0100 Subject: [PATCH] filter: handle ooxml shapes in EscherPropertyContainer::GetCustomShapeType() The problem was that the shapes produced by the drawingML import had types like ooxml-triangle, and EnhancedCustomShapeTypeNames::Get() only handles VML/binary MSO shapes (e.g. isosceles-triangle). Add an OOXML mode, and in that case use msfilter::util::GETVMLShapeType() instead, and only fall back to EnhancedCustomShapeTypeNames::Get() if necessary. Change-Id: Ic93ba4719133dd3e96c17d2562642a03e559fefa --- filter/source/msfilter/escherex.cxx | 23 +++++++++++++++--- filter/source/msfilter/eschesdo.cxx | 17 +++++++++---- filter/source/msfilter/eschesdo.hxx | 4 ++- include/filter/msfilter/escherex.hxx | 6 +++-- oox/source/export/vmlexport.cxx | 2 +- .../ooxmlexport/data/ooxml-triangle.docx | Bin 0 -> 13289 bytes sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 7 ++++++ 7 files changed, 46 insertions(+), 13 deletions(-) create mode 100644 sw/qa/extras/ooxmlexport/data/ooxml-triangle.docx diff --git a/filter/source/msfilter/escherex.cxx b/filter/source/msfilter/escherex.cxx index 320c1b5692a2..4f94859c0139 100644 --- a/filter/source/msfilter/escherex.cxx +++ b/filter/source/msfilter/escherex.cxx @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -3761,7 +3762,7 @@ void EscherPropertyContainer::CreateCustomShapeProperties( const MSO_SPT eShapeT } } -MSO_SPT EscherPropertyContainer::GetCustomShapeType( const uno::Reference< drawing::XShape > & rXShape, sal_uInt32& nMirrorFlags, OUString& rShapeType ) +MSO_SPT EscherPropertyContainer::GetCustomShapeType( const uno::Reference< drawing::XShape > & rXShape, sal_uInt32& nMirrorFlags, OUString& rShapeType, bool bOOXML ) { MSO_SPT eShapeType = mso_sptNil; nMirrorFlags = 0; @@ -3782,7 +3783,20 @@ MSO_SPT EscherPropertyContainer::GetCustomShapeType( const uno::Reference< drawi if ( rProp.Name == "Type" ) { if ( rProp.Value >>= rShapeType ) - eShapeType = EnhancedCustomShapeTypeNames::Get( rShapeType ); + { + if (bOOXML) + { + // In case of VML export, try to handle the + // ooxml- prefix in rShapeType. If that fails, + // just do the same as the binary export. + OString aType = OUStringToOString(rShapeType, RTL_TEXTENCODING_UTF8); + eShapeType = msfilter::util::GETVMLShapeType(aType); + if (eShapeType == mso_sptNil) + eShapeType = EnhancedCustomShapeTypeNames::Get(rShapeType); + } + else + eShapeType = EnhancedCustomShapeTypeNames::Get( rShapeType ); + } } else if ( rProp.Name == "MirroredX" ) { @@ -4933,7 +4947,7 @@ public: virtual ~SvNullStream() {} }; -EscherEx::EscherEx( const EscherExGlobalRef& rxGlobal, SvStream* pOutStrm ) : +EscherEx::EscherEx( const EscherExGlobalRef& rxGlobal, SvStream* pOutStrm, bool bOOXML ) : mxGlobal ( rxGlobal ), mpOutStrm ( pOutStrm ), mbOwnsStrm ( false ), @@ -4944,7 +4958,8 @@ EscherEx::EscherEx( const EscherExGlobalRef& rxGlobal, SvStream* pOutStrm ) : mnHellLayerId ( USHRT_MAX ), mbEscherSpgr ( sal_False ), - mbEscherDg ( sal_False ) + mbEscherDg ( sal_False ), + mbOOXML(bOOXML) { if (!mpOutStrm) { diff --git a/filter/source/msfilter/eschesdo.cxx b/filter/source/msfilter/eschesdo.cxx index 1a6e33d01368..af2a9541dc4d 100644 --- a/filter/source/msfilter/eschesdo.cxx +++ b/filter/source/msfilter/eschesdo.cxx @@ -254,7 +254,7 @@ sal_uInt32 ImplEESdrWriter::ImplWriteShape( ImplEESdrObject& rObj, sal_uInt32 nMirrorFlags; OUString sCustomShapeType; - MSO_SPT eShapeType = aPropOpt.GetCustomShapeType( rObj.GetShapeRef(), nMirrorFlags, sCustomShapeType ); + MSO_SPT eShapeType = aPropOpt.GetCustomShapeType( rObj.GetShapeRef(), nMirrorFlags, sCustomShapeType, rObj.GetOOXML() ); if ( sCustomShapeType == "col-502ad400" || sCustomShapeType == "col-60da8460" ) { ADD_SHAPE( ESCHER_ShpInst_PictureFrame, 0xa00 ); @@ -953,7 +953,7 @@ void EscherEx::AddUnoShapes( const Reference< XShapes >& rxShapes ) sal_uInt32 EscherEx::AddSdrObject( const SdrObject& rObj ) { - ImplEESdrObject aObj( *mpImplEscherExSdr, rObj ); + ImplEESdrObject aObj( *mpImplEscherExSdr, rObj, mbOOXML ); if( aObj.IsValid() ) return mpImplEscherExSdr->ImplWriteTheShape( aObj ); return 0; @@ -1006,13 +1006,14 @@ const SdrObject* EscherEx::GetSdrObject( const Reference< XShape >& rShape ) ImplEESdrObject::ImplEESdrObject( ImplEscherExSdr& rEx, - const SdrObject& rObj ) : + const SdrObject& rObj, bool bOOXML ) : mnShapeId( 0 ), mnTextSize( 0 ), mnAngle( 0 ), mbValid( sal_False ), mbPresObj( sal_False ), - mbEmptyPresObj( sal_False ) + mbEmptyPresObj( sal_False ), + mbOOXML(bOOXML) { SdrPage* pPage = rObj.GetPage(); DBG_ASSERT( pPage, "ImplEESdrObject::ImplEESdrObject: no SdrPage" ); @@ -1033,7 +1034,8 @@ ImplEESdrObject::ImplEESdrObject( ImplEESdrWriter& rEx, mnAngle( 0 ), mbValid( sal_False ), mbPresObj( sal_False ), - mbEmptyPresObj( sal_False ) + mbEmptyPresObj( sal_False ), + mbOOXML(false) { Init( rEx ); } @@ -1255,4 +1257,9 @@ sal_Bool ImplEESdrObject::ImplHasText() const return xXText.is() && !xXText->getString().isEmpty(); } +bool ImplEESdrObject::GetOOXML() const +{ + return mbOOXML; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/filter/source/msfilter/eschesdo.hxx b/filter/source/msfilter/eschesdo.hxx index f01128533318..9d90e6a709e1 100644 --- a/filter/source/msfilter/eschesdo.hxx +++ b/filter/source/msfilter/eschesdo.hxx @@ -43,12 +43,13 @@ class ImplEESdrObject sal_Bool mbValid : 1; sal_Bool mbPresObj : 1; sal_Bool mbEmptyPresObj : 1; + bool mbOOXML; void Init( ImplEESdrWriter& rEx ); public: ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > mXPropSet; - ImplEESdrObject( ImplEscherExSdr& rEx, const SdrObject& rObj ); + ImplEESdrObject( ImplEscherExSdr& rEx, const SdrObject& rObj, bool bOOXML = false ); ImplEESdrObject( ImplEESdrWriter& rEx, const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& rShape ); ~ImplEESdrObject(); @@ -85,6 +86,7 @@ public: sal_uInt32 ImplGetText(); sal_Bool ImplHasText() const; + bool GetOOXML() const; }; diff --git a/include/filter/msfilter/escherex.hxx b/include/filter/msfilter/escherex.hxx index 59001c6aa072..5cc33c6111d7 100644 --- a/include/filter/msfilter/escherex.hxx +++ b/include/filter/msfilter/escherex.hxx @@ -1337,7 +1337,8 @@ public: static MSO_SPT GetCustomShapeType( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rXShape, sal_uInt32& nMirrorFlags, - OUString& rShapeType + OUString& rShapeType, + bool bOOXML = false ); // helper functions which are also used in ooxml export @@ -1584,12 +1585,13 @@ class MSFILTER_DLLPUBLIC EscherEx : public EscherPersistTable sal_Bool mbEscherSpgr; sal_Bool mbEscherDg; sal_Bool mbOleEmf; // OLE is EMF instead of WMF + bool mbOOXML; virtual sal_Bool DoSeek( sal_uInt32 nKey ); public: - explicit EscherEx( const EscherExGlobalRef& rxGlobal, SvStream* pOutStrm ); + explicit EscherEx( const EscherExGlobalRef& rxGlobal, SvStream* pOutStrm, bool bOOXML = false ); virtual ~EscherEx(); /** Creates and returns a new shape identifier, updates the internal shape diff --git a/oox/source/export/vmlexport.cxx b/oox/source/export/vmlexport.cxx index f87e773c112d..f65ce8af2e2d 100644 --- a/oox/source/export/vmlexport.cxx +++ b/oox/source/export/vmlexport.cxx @@ -42,7 +42,7 @@ using namespace oox::vml; using namespace com::sun::star; VMLExport::VMLExport( ::sax_fastparser::FSHelperPtr pSerializer, VMLTextExport* pTextExport ) - : EscherEx( EscherExGlobalRef(new EscherExGlobal(0)), 0 ) + : EscherEx( EscherExGlobalRef(new EscherExGlobal(0)), 0, /*bOOXML=*/true ) , m_pSerializer( pSerializer ) , m_pTextExport( pTextExport ) , m_eHOri( 0 ) diff --git a/sw/qa/extras/ooxmlexport/data/ooxml-triangle.docx b/sw/qa/extras/ooxmlexport/data/ooxml-triangle.docx new file mode 100644 index 0000000000000000000000000000000000000000..4279fbfb05b2c39277cbaf8a6a88e5fa36b2a539 GIT binary patch literal 13289 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 R0KfzPh=C)xmhtDS{{sZpiq!xB literal 0 HcmV?d00001 diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx index 8fa9ded37802..bc04e9c38670 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx @@ -2034,6 +2034,13 @@ DECLARE_OOXMLEXPORT_TEST(testTableLineSpacing, "table_atleast.docx") assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr/w:tc/w:p/w:pPr/w:spacing", "line", "320"); } +DECLARE_OOXMLEXPORT_TEST(testOoxmlTriangle, "ooxml-triangle.docx") +{ + // The problem was that ooxml-triangle shape type wasn't handled by VML + // export (only isosceles-triangle), leading to a missing shape. + getShape(1); +} + #endif CPPUNIT_PLUGIN_IMPLEMENT();