dbaccess/source/filter/xml/xmlEnums.hxx | 12 - dbaccess/source/filter/xml/xmlfilter.cxx | 186 ++++++++++++++++-- dbaccess/source/filter/xml/xmlfilter.hxx | 5 editeng/source/xml/xmltxtimp.cxx | 6 include/xmloff/xmlimp.hxx | 4 linguistic/source/convdicxml.cxx | 2 linguistic/source/convdicxml.hxx | 2 reportdesign/source/filter/xml/xmlEnums.hxx | 16 + reportdesign/source/filter/xml/xmlHelper.cxx | 1 reportdesign/source/filter/xml/xmlSubDocument.cxx | 6 reportdesign/source/filter/xml/xmlfilter.cxx | 213 ++++++++++++++++----- reportdesign/source/filter/xml/xmlfilter.hxx | 21 +- sc/source/filter/xml/xmlimprt.cxx | 4 sc/source/filter/xml/xmlimprt.hxx | 4 starmath/source/mathmlimport.cxx | 2 starmath/source/mathmlimport.hxx | 2 svx/source/inc/xmlxtimp.hxx | 2 svx/source/xml/xmlxtimp.cxx | 4 sw/inc/SwXMLSectionList.hxx | 25 -- sw/inc/shellio.hxx | 2 sw/source/core/swg/SwXMLSectionList.cxx | 97 ++++++--- sw/source/filter/basflt/shellio.cxx | 2 sw/source/filter/inc/fltini.hxx | 2 sw/source/filter/xml/swxml.cxx | 2 sw/source/filter/xml/xmlimp.cxx | 4 sw/source/filter/xml/xmlimp.hxx | 4 sw/source/ui/dialog/uiregionsw.cxx | 10 sw/source/uibase/config/StoredChapterNumbering.cxx | 4 xmloff/inc/SchXMLImport.hxx | 2 xmloff/inc/xmlversion.hxx | 4 xmloff/source/chart/SchXMLImport.cxx | 7 xmloff/source/core/xmlictxt.cxx | 6 xmloff/source/core/xmlimp.cxx | 4 xmloff/source/draw/animationimport.cxx | 8 xmloff/source/draw/sdxmlimp.cxx | 4 xmloff/source/draw/sdxmlimp_impl.hxx | 5 xmloff/source/meta/MetaImportComponent.cxx | 6 xmloff/source/meta/xmlversion.cxx | 4 xmloff/source/text/XMLAutoTextEventImport.cxx | 4 xmloff/source/text/XMLAutoTextEventImport.hxx | 2 40 files changed, 515 insertions(+), 185 deletions(-)
New commits: commit f7a5335ef50f4a9775703a038006dfb983a50a15 Author: Michael Stahl <mst...@redhat.com> Date: Thu Nov 30 18:29:37 2017 +0100 xmloff: turn SvXMLImportContext into a no-op base class Fix the non-obvious and potentially dangerous recursion that is implicit in xmloff's context code. SvXMLImportContext::CreateChildContext() now always creates a SvXMLImportContext, does not delegate to SvXMLImport. Rename CreateContext to CreateDocumentContext, to make its purpose of creating only the top-level context more obvious. With the previous changes to CreateContext overrides in sw, reportdesign and dbaccess, this hopefully shouldn't break anything. Change-Id: I9e147bf6297bbac9e8470454881da73f6e39db0a diff --git a/dbaccess/source/filter/xml/xmlfilter.cxx b/dbaccess/source/filter/xml/xmlfilter.cxx index e6db6b055d41..553b536e8ec9 100644 --- a/dbaccess/source/filter/xml/xmlfilter.cxx +++ b/dbaccess/source/filter/xml/xmlfilter.cxx @@ -514,7 +514,7 @@ public: } }; -SvXMLImportContext* ODBFilter::CreateContext( sal_uInt16 nPrefix, +SvXMLImportContext* ODBFilter::CreateDocumentContext(sal_uInt16 const nPrefix, const OUString& rLocalName, const uno::Reference< css::xml::sax::XAttributeList >& xAttrList ) { @@ -538,7 +538,7 @@ SvXMLImportContext* ODBFilter::CreateContext( sal_uInt16 nPrefix, } if ( !pContext ) - pContext = SvXMLImport::CreateContext( nPrefix, rLocalName, xAttrList ); + pContext = SvXMLImport::CreateDocumentContext( nPrefix, rLocalName, xAttrList ); return pContext; } diff --git a/dbaccess/source/filter/xml/xmlfilter.hxx b/dbaccess/source/filter/xml/xmlfilter.hxx index abe106cb60b1..9c8188ebb21b 100644 --- a/dbaccess/source/filter/xml/xmlfilter.hxx +++ b/dbaccess/source/filter/xml/xmlfilter.hxx @@ -99,7 +99,7 @@ public: protected: // SvXMLImport - virtual SvXMLImportContext *CreateContext( sal_uInt16 nPrefix, + virtual SvXMLImportContext *CreateDocumentContext(sal_uInt16 nPrefix, const OUString& rLocalName, const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList ) override; diff --git a/editeng/source/xml/xmltxtimp.cxx b/editeng/source/xml/xmltxtimp.cxx index 91c61b1f5a8c..7fad6fa1419d 100644 --- a/editeng/source/xml/xmltxtimp.cxx +++ b/editeng/source/xml/xmltxtimp.cxx @@ -104,14 +104,16 @@ public: const css::uno::Reference< css::uno::XComponentContext >& rContext, const uno::Reference< XText > & rText ); - virtual SvXMLImportContext *CreateContext( sal_uInt16 nPrefix, + virtual SvXMLImportContext *CreateDocumentContext( sal_uInt16 nPrefix, const OUString& rLocalName, const uno::Reference< xml::sax::XAttributeList >& xAttrList ) override; private: const uno::Reference< XText > mxText; }; -SvXMLImportContext *SvxXMLXTextImportComponent::CreateContext( sal_uInt16 nPrefix, const OUString& rLocalName, const uno::Reference< xml::sax::XAttributeList >& /*xAttrList*/ ) +SvXMLImportContext *SvxXMLXTextImportComponent::CreateDocumentContext( + sal_uInt16 const nPrefix, const OUString& rLocalName, + const uno::Reference< xml::sax::XAttributeList >& /*xAttrList*/) { SvXMLImportContext* pContext = nullptr; diff --git a/include/xmloff/xmlimp.hxx b/include/xmloff/xmlimp.hxx index b6552a297843..483a1a36b660 100644 --- a/include/xmloff/xmlimp.hxx +++ b/include/xmloff/xmlimp.hxx @@ -240,9 +240,11 @@ protected: bool mbIsTableShapeSupported; bool mbIsGraphicLoadOnDemandSupported; + // Create top-level element context. // This method is called after the namespace map has been updated, but // before a context for the current element has been pushed. - virtual SvXMLImportContext *CreateContext( sal_uInt16 nPrefix, + // This base class implementation returns a context that ignores everything. + virtual SvXMLImportContext *CreateDocumentContext(sal_uInt16 nPrefix, const OUString& rLocalName, const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList ); virtual SvXMLImportContext *CreateFastContext( sal_Int32 Element, diff --git a/linguistic/source/convdicxml.cxx b/linguistic/source/convdicxml.cxx index 964a51edc396..97a1d6a56268 100644 --- a/linguistic/source/convdicxml.cxx +++ b/linguistic/source/convdicxml.cxx @@ -370,7 +370,7 @@ void SAL_CALL ConvDicXMLImport::startDocument() SvXMLImport::startDocument(); } -SvXMLImportContext * ConvDicXMLImport::CreateContext( +SvXMLImportContext * ConvDicXMLImport::CreateDocumentContext( sal_uInt16 nPrefix, const OUString &rLocalName, const uno::Reference < xml::sax::XAttributeList > & /*rxAttrList*/ ) diff --git a/linguistic/source/convdicxml.hxx b/linguistic/source/convdicxml.hxx index 5339a85e2dae..9a2b3c776c37 100644 --- a/linguistic/source/convdicxml.hxx +++ b/linguistic/source/convdicxml.hxx @@ -87,7 +87,7 @@ public: virtual void SAL_CALL startDocument() override; - virtual SvXMLImportContext * CreateContext( + virtual SvXMLImportContext * CreateDocumentContext( sal_uInt16 nPrefix, const OUString &rLocalName, const css::uno::Reference < css::xml::sax::XAttributeList > &rxAttrList ) override; diff --git a/reportdesign/source/filter/xml/xmlfilter.cxx b/reportdesign/source/filter/xml/xmlfilter.cxx index 7d23913ff5e2..b7223bd0ef0d 100644 --- a/reportdesign/source/filter/xml/xmlfilter.cxx +++ b/reportdesign/source/filter/xml/xmlfilter.cxx @@ -725,7 +725,7 @@ public: } }; -SvXMLImportContext* ORptFilter::CreateContext( sal_uInt16 nPrefix, +SvXMLImportContext* ORptFilter::CreateDocumentContext( sal_uInt16 nPrefix, const OUString& rLocalName, const uno::Reference< xml::sax::XAttributeList >& xAttrList ) { @@ -753,7 +753,7 @@ SvXMLImportContext* ORptFilter::CreateContext( sal_uInt16 nPrefix, } if ( !pContext ) - pContext = SvXMLImport::CreateContext( nPrefix, rLocalName, xAttrList ); + pContext = SvXMLImport::CreateDocumentContext( nPrefix, rLocalName, xAttrList ); return pContext; } diff --git a/reportdesign/source/filter/xml/xmlfilter.hxx b/reportdesign/source/filter/xml/xmlfilter.hxx index c858e66f53de..1f6531a9b795 100644 --- a/reportdesign/source/filter/xml/xmlfilter.hxx +++ b/reportdesign/source/filter/xml/xmlfilter.hxx @@ -104,7 +104,7 @@ public: const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList ); protected: // SvXMLImport - virtual SvXMLImportContext *CreateContext( sal_uInt16 nPrefix, + virtual SvXMLImportContext *CreateDocumentContext( sal_uInt16 nPrefix, const OUString& rLocalName, const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList ) override; diff --git a/sc/source/filter/xml/xmlimprt.cxx b/sc/source/filter/xml/xmlimprt.cxx index e0795f56808d..b3f464b1def2 100644 --- a/sc/source/filter/xml/xmlimprt.cxx +++ b/sc/source/filter/xml/xmlimprt.cxx @@ -658,7 +658,7 @@ sc::PivotTableSources& ScXMLImport::GetPivotTableSources() return *mpPivotSources; } -SvXMLImportContext *ScXMLImport::CreateContext( sal_uInt16 nPrefix, +SvXMLImportContext *ScXMLImport::CreateDocumentContext( sal_uInt16 nPrefix, const OUString& rLocalName, const uno::Reference<xml::sax::XAttributeList>& xAttrList ) { @@ -676,7 +676,7 @@ SvXMLImportContext *ScXMLImport::CreateContext( sal_uInt16 nPrefix, xDPS->getDocumentProperties()); } else - pContext = SvXMLImport::CreateContext( nPrefix, rLocalName, xAttrList ); + pContext = SvXMLImport::CreateDocumentContext( nPrefix, rLocalName, xAttrList ); return pContext; } diff --git a/sc/source/filter/xml/xmlimprt.hxx b/sc/source/filter/xml/xmlimprt.hxx index 6cf664bdcf8d..c0cfeae34cee 100644 --- a/sc/source/filter/xml/xmlimprt.hxx +++ b/sc/source/filter/xml/xmlimprt.hxx @@ -373,9 +373,7 @@ class ScXMLImport: public SvXMLImport protected: - // This method is called after the namespace map has been updated, but - // before a context for the current element has been pushed. - virtual SvXMLImportContext *CreateContext(sal_uInt16 nPrefix, + virtual SvXMLImportContext *CreateDocumentContext(sal_uInt16 nPrefix, const OUString& rLocalName, const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList ) override; diff --git a/starmath/source/mathmlimport.cxx b/starmath/source/mathmlimport.cxx index 500ecff58425..2147001061de 100644 --- a/starmath/source/mathmlimport.cxx +++ b/starmath/source/mathmlimport.cxx @@ -2789,7 +2789,7 @@ void SmXMLActionContext_Impl::EndElement() rNodeStack.push_front(std::move(pSelected)); } -SvXMLImportContext *SmXMLImport::CreateContext(sal_uInt16 nPrefix, +SvXMLImportContext *SmXMLImport::CreateDocumentContext(sal_uInt16 nPrefix, const OUString &rLocalName, const uno::Reference <xml::sax::XAttributeList> & /*xAttrList*/) { diff --git a/starmath/source/mathmlimport.hxx b/starmath/source/mathmlimport.hxx index 4db626df4d0a..3d017c1a25a7 100644 --- a/starmath/source/mathmlimport.hxx +++ b/starmath/source/mathmlimport.hxx @@ -94,7 +94,7 @@ public: void SAL_CALL endDocument() override; - SvXMLImportContext *CreateContext(sal_uInt16 nPrefix, + SvXMLImportContext *CreateDocumentContext(sal_uInt16 nPrefix, const OUString &rLocalName, const css::uno::Reference < css::xml::sax::XAttributeList> &xAttrList) override; diff --git a/svx/source/inc/xmlxtimp.hxx b/svx/source/inc/xmlxtimp.hxx index c7ca90c03859..ba4563efa21b 100644 --- a/svx/source/inc/xmlxtimp.hxx +++ b/svx/source/inc/xmlxtimp.hxx @@ -45,7 +45,7 @@ public: const css::uno::Reference< css::container::XNameContainer >& xTable, bool *bOptLoadedFromStorage ) throw(); protected: - virtual SvXMLImportContext *CreateContext( sal_uInt16 nPrefix, + virtual SvXMLImportContext *CreateDocumentContext( sal_uInt16 nPrefix, const OUString& rLocalName, const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList ) override; diff --git a/svx/source/xml/xmlxtimp.cxx b/svx/source/xml/xmlxtimp.cxx index ade13897ecf2..207912fca311 100644 --- a/svx/source/xml/xmlxtimp.cxx +++ b/svx/source/xml/xmlxtimp.cxx @@ -417,7 +417,9 @@ bool SvxXMLXTableImport::load( const OUString &rPath, const OUString &rReferer, return bRet; } -SvXMLImportContext *SvxXMLXTableImport::CreateContext( sal_uInt16 nPrefix, const OUString& rLocalName, const uno::Reference< XAttributeList >& /*xAttrList*/ ) +SvXMLImportContext *SvxXMLXTableImport::CreateDocumentContext( + sal_uInt16 const nPrefix, const OUString& rLocalName, + const uno::Reference< XAttributeList >& /*xAttrList*/) { if( XML_NAMESPACE_OOO == nPrefix || XML_NAMESPACE_OFFICE == nPrefix ) diff --git a/sw/inc/SwXMLSectionList.hxx b/sw/inc/SwXMLSectionList.hxx index 45fd8bc8c2c7..82c8f66340dd 100644 --- a/sw/inc/SwXMLSectionList.hxx +++ b/sw/inc/SwXMLSectionList.hxx @@ -24,9 +24,7 @@ class SwXMLSectionList : public SvXMLImport { protected: - // This method is called after the namespace map has been updated, but - // before a context for the current element has been pushed. - virtual SvXMLImportContext *CreateContext( sal_uInt16 nPrefix, + virtual SvXMLImportContext *CreateDocumentContext( sal_uInt16 nPrefix, const OUString& rLocalName, const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList ) override; diff --git a/sw/source/core/swg/SwXMLSectionList.cxx b/sw/source/core/swg/SwXMLSectionList.cxx index 2e90f05a518a..cad35a9958bd 100644 --- a/sw/source/core/swg/SwXMLSectionList.cxx +++ b/sw/source/core/swg/SwXMLSectionList.cxx @@ -103,7 +103,7 @@ SwXMLSectionList::~SwXMLSectionList() { } -SvXMLImportContext *SwXMLSectionList::CreateContext( +SvXMLImportContext *SwXMLSectionList::CreateDocumentContext( sal_uInt16 nPrefix, const OUString& rLocalName, const uno::Reference<xml::sax::XAttributeList> & ) diff --git a/sw/source/filter/xml/xmlimp.cxx b/sw/source/filter/xml/xmlimp.cxx index d892d7768775..e2118d87ca34 100644 --- a/sw/source/filter/xml/xmlimp.cxx +++ b/sw/source/filter/xml/xmlimp.cxx @@ -353,7 +353,7 @@ const SvXMLTokenMap& SwXMLImport::GetDocElemTokenMap() return *m_pDocElemTokenMap; } -SvXMLImportContext *SwXMLImport::CreateContext( +SvXMLImportContext *SwXMLImport::CreateDocumentContext( sal_uInt16 nPrefix, const OUString& rLocalName, const Reference< xml::sax::XAttributeList > & xAttrList ) @@ -385,7 +385,7 @@ SvXMLImportContext *SwXMLImport::CreateContext( xDocProps); } else - pContext = SvXMLImport::CreateContext( nPrefix, rLocalName, xAttrList ); + pContext = SvXMLImport::CreateDocumentContext(nPrefix, rLocalName, xAttrList); return pContext; } diff --git a/sw/source/filter/xml/xmlimp.hxx b/sw/source/filter/xml/xmlimp.hxx index 444186992c34..aa7ad833e356 100644 --- a/sw/source/filter/xml/xmlimp.hxx +++ b/sw/source/filter/xml/xmlimp.hxx @@ -103,9 +103,7 @@ class SwXMLImport: public SvXMLImport protected: - // This method is called after the namespace map has been updated, but - // before a context for the current element has been pushed. - virtual SvXMLImportContext *CreateContext( sal_uInt16 nPrefix, + virtual SvXMLImportContext *CreateDocumentContext( sal_uInt16 nPrefix, const OUString& rLocalName, const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList ) override; diff --git a/sw/source/uibase/config/StoredChapterNumbering.cxx b/sw/source/uibase/config/StoredChapterNumbering.cxx index c575863f00e7..531e5b424bbc 100644 --- a/sw/source/uibase/config/StoredChapterNumbering.cxx +++ b/sw/source/uibase/config/StoredChapterNumbering.cxx @@ -386,7 +386,7 @@ public: { } - virtual SvXMLImportContext * CreateContext( + virtual SvXMLImportContext * CreateDocumentContext( sal_uInt16 const nPrefix, OUString const& rLocalName, uno::Reference<xml::sax::XAttributeList> const& xAttrList) override { @@ -395,7 +395,7 @@ public: return new StoredChapterNumberingRootContext(m_rNumRules, *this, nPrefix, rLocalName); } - return SvXMLImport::CreateContext(nPrefix, rLocalName, xAttrList); + return SvXMLImport::CreateDocumentContext(nPrefix, rLocalName, xAttrList); } }; diff --git a/xmloff/inc/SchXMLImport.hxx b/xmloff/inc/SchXMLImport.hxx index 4119496c5894..3248d4ceadbd 100644 --- a/xmloff/inc/SchXMLImport.hxx +++ b/xmloff/inc/SchXMLImport.hxx @@ -154,7 +154,7 @@ private: rtl::Reference<SchXMLImportHelper> maImportHelper; protected: - virtual SvXMLImportContext *CreateContext( + virtual SvXMLImportContext *CreateDocumentContext( sal_uInt16 nPrefix, const OUString& rLocalName, const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList ) override; diff --git a/xmloff/inc/xmlversion.hxx b/xmloff/inc/xmlversion.hxx index e709efb6f5a4..e39cfdda5521 100644 --- a/xmloff/inc/xmlversion.hxx +++ b/xmloff/inc/xmlversion.hxx @@ -56,9 +56,7 @@ private: protected: - // This method is called after the namespace map has been updated, but - // before a context for the current element has been pushed. - virtual SvXMLImportContext *CreateContext( sal_uInt16 nPrefix, + virtual SvXMLImportContext *CreateDocumentContext( sal_uInt16 nPrefix, const OUString& rLocalName, const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList ) override; diff --git a/xmloff/source/chart/SchXMLImport.cxx b/xmloff/source/chart/SchXMLImport.cxx index d3c40c78887d..b7dc42566ec3 100644 --- a/xmloff/source/chart/SchXMLImport.cxx +++ b/xmloff/source/chart/SchXMLImport.cxx @@ -510,7 +510,8 @@ SchXMLImport::~SchXMLImport() throw () // create the main context (subcontexts are created // by the one created here) -SvXMLImportContext *SchXMLImport::CreateContext( sal_uInt16 nPrefix, const OUString& rLocalName, +SvXMLImportContext *SchXMLImport::CreateDocumentContext(sal_uInt16 const nPrefix, + const OUString& rLocalName, const Reference< xml::sax::XAttributeList >& xAttrList ) { SvXMLImportContext* pContext = nullptr; @@ -540,12 +541,12 @@ SvXMLImportContext *SchXMLImport::CreateContext( sal_uInt16 nPrefix, const OUStr xDPS->getDocumentProperties()); } else { pContext = (IsXMLToken(rLocalName, XML_DOCUMENT_META)) - ? SvXMLImport::CreateContext( nPrefix, rLocalName, xAttrList ) + ? SvXMLImport::CreateDocumentContext(nPrefix, rLocalName, xAttrList) : new SchXMLDocContext( *maImportHelper.get(), *this, nPrefix, rLocalName ); } } else { - pContext = SvXMLImport::CreateContext( nPrefix, rLocalName, xAttrList ); + pContext = SvXMLImport::CreateDocumentContext(nPrefix, rLocalName, xAttrList); } return pContext; diff --git a/xmloff/source/core/xmlictxt.cxx b/xmloff/source/core/xmlictxt.cxx index e1805057dcdd..a00539afce6b 100644 --- a/xmloff/source/core/xmlictxt.cxx +++ b/xmloff/source/core/xmlictxt.cxx @@ -48,10 +48,10 @@ SvXMLImportContext::~SvXMLImportContext() } SvXMLImportContextRef SvXMLImportContext::CreateChildContext( sal_uInt16 nPrefix, - const OUString& rLocalName, - const uno::Reference< xml::sax::XAttributeList >& xAttrList ) + const OUString& rLocalName, + const uno::Reference<xml::sax::XAttributeList>& ) { - return mrImport.CreateContext( nPrefix, rLocalName, xAttrList ); + return new SvXMLImportContext(mrImport, nPrefix, rLocalName); } void SvXMLImportContext::StartElement( const uno::Reference< xml::sax::XAttributeList >& ) diff --git a/xmloff/source/core/xmlimp.cxx b/xmloff/source/core/xmlimp.cxx index f96940aeb575..676d6be7d071 100644 --- a/xmloff/source/core/xmlimp.cxx +++ b/xmloff/source/core/xmlimp.cxx @@ -308,7 +308,7 @@ public: ::comphelper::UnoInterfaceToUniqueIdentifierMapper maInterfaceToIdentifierMapper; }; -SvXMLImportContext *SvXMLImport::CreateContext( sal_uInt16 nPrefix, +SvXMLImportContext *SvXMLImport::CreateDocumentContext(sal_uInt16 const nPrefix, const OUString& rLocalName, const uno::Reference< xml::sax::XAttributeList >& ) { @@ -719,7 +719,7 @@ void SAL_CALL SvXMLImport::startElement( const OUString& rName, } else { - xContext.set(CreateContext( nPrefix, aLocalName, xAttrList )); + xContext.set(CreateDocumentContext(nPrefix, aLocalName, xAttrList)); if( (nPrefix & XML_NAMESPACE_UNKNOWN_FLAG) != 0 && dynamic_cast< const SvXMLImportContext*>(xContext.get()) != nullptr ) { diff --git a/xmloff/source/draw/animationimport.cxx b/xmloff/source/draw/animationimport.cxx index 8134fd671499..75553fa8a1cd 100644 --- a/xmloff/source/draw/animationimport.cxx +++ b/xmloff/source/draw/animationimport.cxx @@ -1243,7 +1243,7 @@ class AnimationsImport: public SvXMLImport, public XAnimationNodeSupplier public: explicit AnimationsImport( const Reference< XComponentContext > & rxContext ); - SvXMLImportContext* CreateContext(sal_uInt16 nPrefix, const OUString& rLocalName, const Reference<XAttributeList>& xAttrList) override; + SvXMLImportContext* CreateDocumentContext(sal_uInt16 nPrefix, const OUString& rLocalName, const Reference<XAttributeList>& xAttrList) override; // XInterface virtual Any SAL_CALL queryInterface( const Type& aType ) override; @@ -1305,7 +1305,9 @@ void SAL_CALL AnimationsImport::release() throw () SvXMLImport::release(); } -SvXMLImportContext *AnimationsImport::CreateContext(sal_uInt16 nPrefix, const OUString& rLocalName, const Reference<XAttributeList>& xAttrList) +SvXMLImportContext *AnimationsImport::CreateDocumentContext( + sal_uInt16 const nPrefix, const OUString& rLocalName, + const Reference<XAttributeList>& xAttrList) { SvXMLImportContext* pContext = nullptr; @@ -1315,7 +1317,7 @@ SvXMLImportContext *AnimationsImport::CreateContext(sal_uInt16 nPrefix, const OU } else { - pContext = SvXMLImport::CreateContext(nPrefix, rLocalName, xAttrList); + pContext = SvXMLImport::CreateDocumentContext(nPrefix, rLocalName, xAttrList); } return pContext; diff --git a/xmloff/source/draw/sdxmlimp.cxx b/xmloff/source/draw/sdxmlimp.cxx index bb02d346bf24..ed2848036239 100644 --- a/xmloff/source/draw/sdxmlimp.cxx +++ b/xmloff/source/draw/sdxmlimp.cxx @@ -584,7 +584,7 @@ const SvXMLTokenMap& SdXMLImport::GetPresentationPlaceholderAttrTokenMap() return *mpPresentationPlaceholderAttrTokenMap; } -SvXMLImportContext *SdXMLImport::CreateContext(sal_uInt16 nPrefix, +SvXMLImportContext *SdXMLImport::CreateDocumentContext(sal_uInt16 nPrefix, const OUString& rLocalName, const uno::Reference<xml::sax::XAttributeList>& xAttrList) { @@ -607,7 +607,7 @@ SvXMLImportContext *SdXMLImport::CreateContext(sal_uInt16 nPrefix, pContext = new SdXMLFlatDocContext_Impl( *this, nPrefix, rLocalName, xAttrList, xDPS->getDocumentProperties()); } else { - pContext = SvXMLImport::CreateContext(nPrefix, rLocalName, xAttrList); + pContext = SvXMLImport::CreateDocumentContext(nPrefix, rLocalName, xAttrList); } return pContext; diff --git a/xmloff/source/draw/sdxmlimp_impl.hxx b/xmloff/source/draw/sdxmlimp_impl.hxx index 9dcf7715a76a..3900aa02aaf4 100644 --- a/xmloff/source/draw/sdxmlimp_impl.hxx +++ b/xmloff/source/draw/sdxmlimp_impl.hxx @@ -175,9 +175,8 @@ class SdXMLImport: public SvXMLImport DateTimeDeclMap maDateTimeDeclsMap; protected: - // This method is called after the namespace map has been updated, but - // before a context for the current element has been pushed. - virtual SvXMLImportContext *CreateContext(sal_uInt16 nPrefix, + + virtual SvXMLImportContext *CreateDocumentContext(sal_uInt16 nPrefix, const OUString& rLocalName, const css::uno::Reference< css::xml::sax::XAttributeList>& xAttrList) override; diff --git a/xmloff/source/meta/MetaImportComponent.cxx b/xmloff/source/meta/MetaImportComponent.cxx index 2ba733d1abc0..2159916ad9cc 100644 --- a/xmloff/source/meta/MetaImportComponent.cxx +++ b/xmloff/source/meta/MetaImportComponent.cxx @@ -43,7 +43,7 @@ public: protected: - virtual SvXMLImportContext* CreateContext( + virtual SvXMLImportContext* CreateDocumentContext( sal_uInt16 nPrefix, const OUString& rLocalName, const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList ) override; @@ -68,7 +68,7 @@ XMLMetaImportComponent::XMLMetaImportComponent( { } -SvXMLImportContext* XMLMetaImportComponent::CreateContext( +SvXMLImportContext* XMLMetaImportComponent::CreateDocumentContext( sal_uInt16 nPrefix, const OUString& rLocalName, const uno::Reference<xml::sax::XAttributeList > & xAttrList ) @@ -86,7 +86,7 @@ SvXMLImportContext* XMLMetaImportComponent::CreateContext( } else { - return SvXMLImport::CreateContext(nPrefix, rLocalName, xAttrList); + return SvXMLImport::CreateDocumentContext(nPrefix, rLocalName, xAttrList); } } diff --git a/xmloff/source/meta/xmlversion.cxx b/xmloff/source/meta/xmlversion.cxx index 080a954536aa..48104f58ff34 100644 --- a/xmloff/source/meta/xmlversion.cxx +++ b/xmloff/source/meta/xmlversion.cxx @@ -112,7 +112,7 @@ XMLVersionListImport::XMLVersionListImport( XMLVersionListImport::~XMLVersionListImport() throw() {} -SvXMLImportContext *XMLVersionListImport::CreateContext( +SvXMLImportContext *XMLVersionListImport::CreateDocumentContext( sal_uInt16 nPrefix, const OUString& rLocalName, const Reference< XAttributeList > & xAttrList ) @@ -126,7 +126,7 @@ SvXMLImportContext *XMLVersionListImport::CreateContext( } else { - pContext = SvXMLImport::CreateContext( nPrefix, rLocalName, xAttrList ); + pContext = SvXMLImport::CreateDocumentContext( nPrefix, rLocalName, xAttrList ); } return pContext; diff --git a/xmloff/source/text/XMLAutoTextEventImport.cxx b/xmloff/source/text/XMLAutoTextEventImport.cxx index dcb7d93554b3..285a8ca1d13b 100644 --- a/xmloff/source/text/XMLAutoTextEventImport.cxx +++ b/xmloff/source/text/XMLAutoTextEventImport.cxx @@ -85,7 +85,7 @@ void XMLAutoTextEventImport::initialize( } -SvXMLImportContext* XMLAutoTextEventImport::CreateContext( +SvXMLImportContext* XMLAutoTextEventImport::CreateDocumentContext( sal_uInt16 nPrefix, const OUString& rLocalName, const Reference<XAttributeList > & xAttrList ) @@ -98,7 +98,7 @@ SvXMLImportContext* XMLAutoTextEventImport::CreateContext( } else { - return SvXMLImport::CreateContext(nPrefix, rLocalName, xAttrList); + return SvXMLImport::CreateDocumentContext(nPrefix, rLocalName, xAttrList); } } diff --git a/xmloff/source/text/XMLAutoTextEventImport.hxx b/xmloff/source/text/XMLAutoTextEventImport.hxx index 0d7b4d4787fb..6413033dee4a 100644 --- a/xmloff/source/text/XMLAutoTextEventImport.hxx +++ b/xmloff/source/text/XMLAutoTextEventImport.hxx @@ -52,7 +52,7 @@ public: protected: - virtual SvXMLImportContext* CreateContext( + virtual SvXMLImportContext* CreateDocumentContext( sal_uInt16 nPrefix, const OUString& rLocalName, const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList ) override; commit ebb34571c19c5ac939fbf5aed2ab66ee18e298dc Author: Michael Stahl <mst...@redhat.com> Date: Thu Nov 30 18:00:53 2017 +0100 dbaccess: split up ODBFilter::CreateContext() This was handling XML elements at 3 different levels; add some more context classes to handle the nesting better. Change-Id: I05d7b2b7dc2d797acd4e97eacb54fa07e32d88e2 diff --git a/dbaccess/source/filter/xml/xmlEnums.hxx b/dbaccess/source/filter/xml/xmlEnums.hxx index de87caa26b48..397e9bc592a4 100644 --- a/dbaccess/source/filter/xml/xmlEnums.hxx +++ b/dbaccess/source/filter/xml/xmlEnums.hxx @@ -25,11 +25,17 @@ namespace dbaxml { enum XMLDocTokens { - XML_TOK_DOC_AUTOSTYLES, XML_TOK_DOC_SETTINGS, - XML_TOK_DOC_DATABASE, XML_TOK_DOC_STYLES, - XML_TOK_DOC_SCRIPT + XML_TOK_DOC_CONTENT, + XML_TOK_DOC_META + }; + enum XMLDocContentTokens + { + XML_TOK_CONTENT_AUTOSTYLES, + XML_TOK_CONTENT_STYLES, + XML_TOK_CONTENT_SCRIPTS, + XML_TOK_CONTENT_BODY, }; enum XMLDatabaseToken { diff --git a/dbaccess/source/filter/xml/xmlfilter.cxx b/dbaccess/source/filter/xml/xmlfilter.cxx index f386206bec66..e6db6b055d41 100644 --- a/dbaccess/source/filter/xml/xmlfilter.cxx +++ b/dbaccess/source/filter/xml/xmlfilter.cxx @@ -382,6 +382,137 @@ bool ODBFilter::implImport( const Sequence< PropertyValue >& rDescriptor ) return bRet; } +class DBXMLDocumentSettingsContext : public SvXMLImportContext +{ +public: + DBXMLDocumentSettingsContext(SvXMLImport & rImport, + sal_uInt16 const nPrefix, + const OUString& rLocalName) + : SvXMLImportContext(rImport, nPrefix, rLocalName) + { + } + + virtual SvXMLImportContextRef CreateChildContext(sal_uInt16 const nPrefix, + const OUString& rLocalName, + const uno::Reference<xml::sax::XAttributeList> & xAttrList) override + { + if (nPrefix == XML_NAMESPACE_OFFICE && IsXMLToken(rLocalName, XML_SETTINGS)) + { + return new XMLDocumentSettingsContext(GetImport(), nPrefix, rLocalName, xAttrList); + } + else + { + return new SvXMLImportContext(GetImport(), nPrefix, rLocalName); + } + } +}; + +class DBXMLDocumentStylesContext : public SvXMLImportContext +{ +public: + DBXMLDocumentStylesContext(SvXMLImport & rImport, + sal_uInt16 const nPrefix, + const OUString& rLocalName) + : SvXMLImportContext(rImport, nPrefix, rLocalName) + { + } + + virtual SvXMLImportContextRef CreateChildContext(sal_uInt16 const nPrefix, + const OUString& rLocalName, + const uno::Reference<xml::sax::XAttributeList> & xAttrList) override + { + SvXMLImportContext *pContext = nullptr; + + ODBFilter & rImport(static_cast<ODBFilter&>(GetImport())); + const SvXMLTokenMap& rTokenMap = rImport.GetDocContentElemTokenMap(); + switch (rTokenMap.Get(nPrefix, rLocalName)) + { + case XML_TOK_CONTENT_STYLES: + rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); + pContext = rImport.CreateStylesContext(nPrefix, rLocalName, xAttrList, false); + break; + case XML_TOK_CONTENT_AUTOSTYLES: + rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); + pContext = rImport.CreateStylesContext(nPrefix, rLocalName, xAttrList, true); + break; + default: + break; + } + + if (!pContext) + pContext = new SvXMLImportContext(GetImport(), nPrefix, rLocalName); + + return pContext; + } +}; + +class DBXMLDocumentBodyContext : public SvXMLImportContext +{ +public: + DBXMLDocumentBodyContext(SvXMLImport & rImport, + sal_uInt16 const nPrefix, + const OUString& rLocalName) + : SvXMLImportContext(rImport, nPrefix, rLocalName) + { + } + + virtual SvXMLImportContextRef CreateChildContext(sal_uInt16 const nPrefix, + const OUString& rLocalName, + const uno::Reference<xml::sax::XAttributeList> &) override + { + if ((XML_NAMESPACE_OFFICE == nPrefix || XML_NAMESPACE_OOO == nPrefix) + && IsXMLToken(rLocalName, XML_DATABASE)) + { + ODBFilter & rImport(static_cast<ODBFilter&>(GetImport())); + rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); + return new OXMLDatabase(rImport, nPrefix, rLocalName ); + } + else + { + return new SvXMLImportContext(GetImport(), nPrefix, rLocalName); + } + } +}; + +class DBXMLDocumentContentContext : public SvXMLImportContext +{ +public: + DBXMLDocumentContentContext(SvXMLImport & rImport, + sal_uInt16 const nPrefix, + const OUString& rLocalName) + : SvXMLImportContext(rImport, nPrefix, rLocalName) + { + } + + virtual SvXMLImportContextRef CreateChildContext(sal_uInt16 const nPrefix, + const OUString& rLocalName, + const uno::Reference<xml::sax::XAttributeList> & xAttrList) override + { + SvXMLImportContext *pContext = nullptr; + + ODBFilter & rImport(static_cast<ODBFilter&>(GetImport())); + const SvXMLTokenMap& rTokenMap = rImport.GetDocContentElemTokenMap(); + switch (rTokenMap.Get(nPrefix, rLocalName)) + { + case XML_TOK_CONTENT_AUTOSTYLES: + rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); + pContext = rImport.CreateStylesContext(nPrefix, rLocalName, xAttrList, true); + break; + case XML_TOK_CONTENT_SCRIPTS: + pContext = new XMLScriptContext(GetImport(), rLocalName, rImport.GetModel()); + break; + case XML_TOK_CONTENT_BODY: + pContext = new DBXMLDocumentBodyContext(rImport, nPrefix, rLocalName); + default: + break; + } + + if (!pContext) + pContext = new SvXMLImportContext(GetImport(), nPrefix, rLocalName); + + return pContext; + } +}; SvXMLImportContext* ODBFilter::CreateContext( sal_uInt16 nPrefix, const OUString& rLocalName, @@ -394,22 +525,15 @@ SvXMLImportContext* ODBFilter::CreateContext( sal_uInt16 nPrefix, { case XML_TOK_DOC_SETTINGS: GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - pContext = new XMLDocumentSettingsContext( *this, nPrefix, rLocalName,xAttrList ); - break; - case XML_TOK_DOC_DATABASE: - GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - pContext = new OXMLDatabase( *this, nPrefix, rLocalName ); + pContext = new DBXMLDocumentSettingsContext(*this, nPrefix, rLocalName); break; case XML_TOK_DOC_STYLES: - GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - pContext = CreateStylesContext(nPrefix, rLocalName, xAttrList, false); + pContext = new DBXMLDocumentStylesContext(*this, nPrefix, rLocalName); break; - case XML_TOK_DOC_AUTOSTYLES: - GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - pContext = CreateStylesContext(nPrefix, rLocalName, xAttrList, true); + case XML_TOK_DOC_CONTENT: + pContext = new DBXMLDocumentContentContext(*this, nPrefix, rLocalName); break; - case XML_TOK_DOC_SCRIPT: - pContext = new XMLScriptContext( *this, rLocalName, GetModel() ); + default: break; } @@ -478,15 +602,12 @@ const SvXMLTokenMap& ODBFilter::GetDocElemTokenMap() const { static const SvXMLTokenMapEntry aElemTokenMap[]= { - { XML_NAMESPACE_OFFICE, XML_SETTINGS, XML_TOK_DOC_SETTINGS }, - { XML_NAMESPACE_OOO, XML_SETTINGS, XML_TOK_DOC_SETTINGS }, - { XML_NAMESPACE_OFFICE, XML_STYLES, XML_TOK_DOC_STYLES }, - { XML_NAMESPACE_OOO, XML_STYLES, XML_TOK_DOC_STYLES }, - { XML_NAMESPACE_OFFICE, XML_AUTOMATIC_STYLES, XML_TOK_DOC_AUTOSTYLES }, - { XML_NAMESPACE_OOO, XML_AUTOMATIC_STYLES, XML_TOK_DOC_AUTOSTYLES }, - { XML_NAMESPACE_OFFICE, XML_DATABASE, XML_TOK_DOC_DATABASE }, - { XML_NAMESPACE_OOO, XML_DATABASE, XML_TOK_DOC_DATABASE }, - { XML_NAMESPACE_OFFICE, XML_SCRIPTS, XML_TOK_DOC_SCRIPT }, + { XML_NAMESPACE_OFFICE, XML_DOCUMENT_SETTINGS, XML_TOK_DOC_SETTINGS }, + { XML_NAMESPACE_OOO, XML_DOCUMENT_SETTINGS, XML_TOK_DOC_SETTINGS }, + { XML_NAMESPACE_OFFICE, XML_DOCUMENT_STYLES, XML_TOK_DOC_STYLES }, + { XML_NAMESPACE_OOO, XML_DOCUMENT_STYLES, XML_TOK_DOC_STYLES }, + { XML_NAMESPACE_OFFICE, XML_DOCUMENT_CONTENT, XML_TOK_DOC_CONTENT }, + { XML_NAMESPACE_OOO, XML_DOCUMENT_CONTENT, XML_TOK_DOC_CONTENT }, XML_TOKEN_MAP_END }; m_pDocElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap )); @@ -494,6 +615,25 @@ const SvXMLTokenMap& ODBFilter::GetDocElemTokenMap() const return *m_pDocElemTokenMap; } +const SvXMLTokenMap& ODBFilter::GetDocContentElemTokenMap() const +{ + if (!m_pDocContentElemTokenMap.get()) + { + static const SvXMLTokenMapEntry aElemTokenMap[]= + { + { XML_NAMESPACE_OFFICE, XML_STYLES, XML_TOK_CONTENT_STYLES }, + { XML_NAMESPACE_OOO, XML_STYLES, XML_TOK_CONTENT_STYLES }, + { XML_NAMESPACE_OFFICE, XML_AUTOMATIC_STYLES, XML_TOK_CONTENT_AUTOSTYLES }, + { XML_NAMESPACE_OOO, XML_AUTOMATIC_STYLES, XML_TOK_CONTENT_AUTOSTYLES }, + { XML_NAMESPACE_OFFICE, XML_SCRIPTS, XML_TOK_CONTENT_SCRIPTS }, + { XML_NAMESPACE_OFFICE, XML_BODY, XML_TOK_CONTENT_BODY }, + XML_TOKEN_MAP_END + }; + m_pDocContentElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap )); + } + return *m_pDocContentElemTokenMap; +} + const SvXMLTokenMap& ODBFilter::GetDatabaseElemTokenMap() const { diff --git a/dbaccess/source/filter/xml/xmlfilter.hxx b/dbaccess/source/filter/xml/xmlfilter.hxx index d2372d849d08..abe106cb60b1 100644 --- a/dbaccess/source/filter/xml/xmlfilter.hxx +++ b/dbaccess/source/filter/xml/xmlfilter.hxx @@ -65,6 +65,7 @@ private: TInfoSequence m_aInfoSequence; mutable std::unique_ptr<SvXMLTokenMap> m_pDocElemTokenMap; + mutable std::unique_ptr<SvXMLTokenMap> m_pDocContentElemTokenMap; mutable std::unique_ptr<SvXMLTokenMap> m_pDatabaseElemTokenMap; mutable std::unique_ptr<SvXMLTokenMap> m_pDataSourceElemTokenMap; mutable std::unique_ptr<SvXMLTokenMap> m_pLoginElemTokenMap; @@ -92,6 +93,7 @@ private: */ static void fillPropertyMap(const Any& _rValue,TPropertyNameMap& _rMap); +public: SvXMLImportContext* CreateStylesContext(sal_uInt16 nPrefix,const OUString& rLocalName, const Reference< XAttributeList>& xAttrList, bool bIsAutoStyle ); @@ -128,6 +130,7 @@ public: const TPropertyNameMap& getQuerySettings() const { return m_aQuerySettings;} const SvXMLTokenMap& GetDocElemTokenMap() const; + const SvXMLTokenMap& GetDocContentElemTokenMap() const; const SvXMLTokenMap& GetDatabaseElemTokenMap() const; const SvXMLTokenMap& GetDataSourceElemTokenMap() const; const SvXMLTokenMap& GetLoginElemTokenMap() const; commit 2bda2100d8abbf66285551379215579108a4ebf0 Author: Michael Stahl <mst...@redhat.com> Date: Thu Nov 30 14:43:58 2017 +0100 reportdesign: split up ORptFilter::CreateContext() This was handling XML elements at 3 different levels; add some more context classes to handle the nesting better. There was one tricky case: the ORptExport::exportContainer() can export a office:report element inside office:body inside report:sub-document, but i don't know how to create a report like that. This was previously handled on import via the fallback to SvXMLImportContext (created for office:body) calling ORptFilter::CreateContext(), but now it needs explicit handling in OXMLSubDocument::CreateChildContext_(). Change-Id: I839986599b2b936f57bb65da355ac1be811fe999 diff --git a/reportdesign/source/filter/xml/xmlEnums.hxx b/reportdesign/source/filter/xml/xmlEnums.hxx index 91214fea3171..2a98c7103c22 100644 --- a/reportdesign/source/filter/xml/xmlEnums.hxx +++ b/reportdesign/source/filter/xml/xmlEnums.hxx @@ -25,14 +25,19 @@ namespace rptxml { enum XMLDocTokens { - XML_TOK_DOC_AUTOSTYLES, XML_TOK_DOC_SETTINGS, - XML_TOK_DOC_REPORT, XML_TOK_DOC_STYLES, - XML_TOK_DOC_FONTDECLS, - XML_TOK_DOC_MASTERSTYLES, + XML_TOK_DOC_CONTENT, XML_TOK_DOC_META }; + enum XMLDocContentTokens + { + XML_TOK_CONTENT_AUTOSTYLES, + XML_TOK_CONTENT_STYLES, + XML_TOK_CONTENT_FONTDECLS, + XML_TOK_CONTENT_MASTERSTYLES, + XML_TOK_CONTENT_BODY, + }; enum XMLReportToken { XML_TOK_REPORT_HEADER, @@ -53,7 +58,8 @@ namespace rptxml XML_TOK_REPORT_MIMETYPE , XML_TOK_REPORT_NAME , XML_TOK_MASTER_DETAIL_FIELDS , - XML_TOK_SUB_FRAME + XML_TOK_SUB_FRAME , + XML_TOK_SUB_BODY , }; enum XMLGroup { diff --git a/reportdesign/source/filter/xml/xmlHelper.cxx b/reportdesign/source/filter/xml/xmlHelper.cxx index cf6167001ebd..c9b2002dbd3b 100644 --- a/reportdesign/source/filter/xml/xmlHelper.cxx +++ b/reportdesign/source/filter/xml/xmlHelper.cxx @@ -352,6 +352,7 @@ SvXMLTokenMap* OXMLHelper::GetReportElemTokenMap() { XML_NAMESPACE_DRAW, XML_NAME, XML_TOK_REPORT_NAME }, { XML_NAMESPACE_REPORT, XML_MASTER_DETAIL_FIELDS, XML_TOK_MASTER_DETAIL_FIELDS }, { XML_NAMESPACE_DRAW, XML_FRAME, XML_TOK_SUB_FRAME }, + { XML_NAMESPACE_OFFICE, XML_BODY, XML_TOK_SUB_BODY }, XML_TOKEN_MAP_END }; return new SvXMLTokenMap( aElemTokenMap ); diff --git a/reportdesign/source/filter/xml/xmlSubDocument.cxx b/reportdesign/source/filter/xml/xmlSubDocument.cxx index 4c84af1e728f..c8c01a6c85b8 100644 --- a/reportdesign/source/filter/xml/xmlSubDocument.cxx +++ b/reportdesign/source/filter/xml/xmlSubDocument.cxx @@ -87,6 +87,12 @@ SvXMLImportContextRef OXMLSubDocument::CreateChildContext_( } } break; + // FIXME: is it *intentional* that this is supported? + // ORptExport::exportContainer() can export this but the import + // used to be rather accidental previously + case XML_TOK_SUB_BODY: + xContext = new RptXMLDocumentBodyContext(GetImport(), _nPrefix, _rLocalName); + break; default: break; } diff --git a/reportdesign/source/filter/xml/xmlfilter.cxx b/reportdesign/source/filter/xml/xmlfilter.cxx index cb16957ea836..7d23913ff5e2 100644 --- a/reportdesign/source/filter/xml/xmlfilter.cxx +++ b/reportdesign/source/filter/xml/xmlfilter.cxx @@ -582,6 +582,149 @@ bool ORptFilter::implImport( const Sequence< PropertyValue >& rDescriptor ) return bRet; } +class RptXMLDocumentSettingsContext : public SvXMLImportContext +{ +public: + RptXMLDocumentSettingsContext(SvXMLImport & rImport, + sal_uInt16 const nPrefix, + const OUString& rLocalName) + : SvXMLImportContext(rImport, nPrefix, rLocalName) + { + } + + virtual SvXMLImportContextRef CreateChildContext(sal_uInt16 const nPrefix, + const OUString& rLocalName, + const uno::Reference<xml::sax::XAttributeList> & xAttrList) override + { + if (nPrefix == XML_NAMESPACE_OFFICE && IsXMLToken(rLocalName, XML_SETTINGS)) + { + return new XMLDocumentSettingsContext(GetImport(), nPrefix, rLocalName, xAttrList); + } + else + { + return new SvXMLImportContext(GetImport(), nPrefix, rLocalName); + } + } +}; + +class RptXMLDocumentStylesContext : public SvXMLImportContext +{ +public: + RptXMLDocumentStylesContext(SvXMLImport & rImport, + sal_uInt16 const nPrefix, + const OUString& rLocalName) + : SvXMLImportContext(rImport, nPrefix, rLocalName) + { + } + + virtual SvXMLImportContextRef CreateChildContext(sal_uInt16 const nPrefix, + const OUString& rLocalName, + const uno::Reference<xml::sax::XAttributeList> & xAttrList) override + { + SvXMLImportContext *pContext = nullptr; + + ORptFilter & rImport(static_cast<ORptFilter&>(GetImport())); + const SvXMLTokenMap& rTokenMap = rImport.GetDocContentElemTokenMap(); + switch (rTokenMap.Get(nPrefix, rLocalName)) + { + case XML_TOK_CONTENT_STYLES: + rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); + pContext = rImport.CreateStylesContext(rLocalName, xAttrList, false); + break; + case XML_TOK_CONTENT_AUTOSTYLES: + // don't use the autostyles from the styles-document for the progress + pContext = rImport.CreateStylesContext(rLocalName, xAttrList, true); + break; + case XML_TOK_CONTENT_FONTDECLS: + rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); + pContext = rImport.CreateFontDeclsContext(rLocalName, xAttrList); + break; + case XML_TOK_CONTENT_MASTERSTYLES: + { + SvXMLStylesContext* pStyleContext = new RptMLMasterStylesContext_Impl(rImport, nPrefix, rLocalName, xAttrList);//CreateMasterStylesContext( rLocalName,xAttrList ); + pContext = pStyleContext; + rImport.SetMasterStyles(pStyleContext); + } + break; + default: + break; + } + + if (!pContext) + pContext = new SvXMLImportContext(GetImport(), nPrefix, rLocalName); + + return pContext; + } +}; + +SvXMLImportContextRef RptXMLDocumentBodyContext::CreateChildContext( + sal_uInt16 const nPrefix, + const OUString& rLocalName, + const uno::Reference<xml::sax::XAttributeList> & xAttrList) +{ + ORptFilter & rImport(static_cast<ORptFilter&>(GetImport())); + if ((XML_NAMESPACE_OFFICE == nPrefix || XML_NAMESPACE_OOO == nPrefix) + && IsXMLToken(rLocalName, XML_REPORT)) + { + rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); + const SvXMLStylesContext* pAutoStyles = rImport.GetAutoStyles(); + if (pAutoStyles) + { + XMLPropStyleContext* pAutoStyle = const_cast<XMLPropStyleContext*>(dynamic_cast<const XMLPropStyleContext *>(pAutoStyles->FindStyleChildContext(XML_STYLE_FAMILY_PAGE_MASTER, "pm1"))); + if (pAutoStyle) + { + pAutoStyle->FillPropertySet(rImport.getReportDefinition().get()); + } + } + return new OXMLReport(rImport, nPrefix, rLocalName, xAttrList, rImport.getReportDefinition()); + } + else + { + return new SvXMLImportContext(GetImport(), nPrefix, rLocalName); + } +} + +class RptXMLDocumentContentContext : public SvXMLImportContext +{ +public: + RptXMLDocumentContentContext(SvXMLImport & rImport, + sal_uInt16 const nPrefix, + const OUString& rLocalName) + : SvXMLImportContext(rImport, nPrefix, rLocalName) + { + } + + virtual SvXMLImportContextRef CreateChildContext(sal_uInt16 const nPrefix, + const OUString& rLocalName, + const uno::Reference<xml::sax::XAttributeList> & xAttrList) override + { + SvXMLImportContext *pContext = nullptr; + + ORptFilter & rImport(static_cast<ORptFilter&>(GetImport())); + const SvXMLTokenMap& rTokenMap = rImport.GetDocContentElemTokenMap(); + switch (rTokenMap.Get(nPrefix, rLocalName)) + { + case XML_TOK_CONTENT_AUTOSTYLES: + rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); + pContext = rImport.CreateStylesContext(rLocalName, xAttrList, true); + break; + case XML_TOK_CONTENT_FONTDECLS: + rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); + pContext = rImport.CreateFontDeclsContext(rLocalName, xAttrList); + break; + case XML_TOK_CONTENT_BODY: + pContext = new RptXMLDocumentBodyContext(rImport, nPrefix, rLocalName); + default: + break; + } + + if (!pContext) + pContext = new SvXMLImportContext(GetImport(), nPrefix, rLocalName); + + return pContext; + } +}; + SvXMLImportContext* ORptFilter::CreateContext( sal_uInt16 nPrefix, const OUString& rLocalName, const uno::Reference< xml::sax::XAttributeList >& xAttrList ) @@ -593,43 +736,13 @@ SvXMLImportContext* ORptFilter::CreateContext( sal_uInt16 nPrefix, { case XML_TOK_DOC_SETTINGS: GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - pContext = new XMLDocumentSettingsContext( *this, nPrefix, rLocalName,xAttrList ); - break; - case XML_TOK_DOC_REPORT: - GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - { - const SvXMLStylesContext* pAutoStyles = GetAutoStyles(); - if ( pAutoStyles ) - { - XMLPropStyleContext* pAutoStyle = const_cast<XMLPropStyleContext*>(dynamic_cast< const XMLPropStyleContext *>(pAutoStyles->FindStyleChildContext(XML_STYLE_FAMILY_PAGE_MASTER,"pm1"))); - if ( pAutoStyle ) - { - pAutoStyle->FillPropertySet(getReportDefinition().get()); - } - } - pContext = new OXMLReport( *this, nPrefix, rLocalName,xAttrList,getReportDefinition() ); - } + pContext = new RptXMLDocumentSettingsContext(*this, nPrefix, rLocalName); break; case XML_TOK_DOC_STYLES: - GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - pContext = CreateStylesContext( rLocalName, xAttrList, false); + pContext = new RptXMLDocumentStylesContext(*this, nPrefix, rLocalName); break; - case XML_TOK_DOC_AUTOSTYLES: - // don't use the autostyles from the styles-document for the progress - if ( ! IsXMLToken( rLocalName, XML_DOCUMENT_STYLES ) ) - GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - pContext = CreateStylesContext( rLocalName, xAttrList, true); - break; - case XML_TOK_DOC_FONTDECLS: - GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - pContext = CreateFontDeclsContext( rLocalName,xAttrList ); - break; - case XML_TOK_DOC_MASTERSTYLES: - { - SvXMLStylesContext* pStyleContext = new RptMLMasterStylesContext_Impl(*this, nPrefix, rLocalName,xAttrList);//CreateMasterStylesContext( rLocalName,xAttrList ); - pContext = pStyleContext; - SetMasterStyles( pStyleContext ); - } + case XML_TOK_DOC_CONTENT: + pContext = new RptXMLDocumentContentContext(*this, nPrefix, rLocalName); break; case XML_TOK_DOC_META: GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); @@ -651,13 +764,9 @@ const SvXMLTokenMap& ORptFilter::GetDocElemTokenMap() const { static const SvXMLTokenMapEntry aElemTokenMap[]= { - { XML_NAMESPACE_OFFICE, XML_SETTINGS, XML_TOK_DOC_SETTINGS }, - { XML_NAMESPACE_OFFICE, XML_STYLES, XML_TOK_DOC_STYLES }, - { XML_NAMESPACE_OFFICE, XML_AUTOMATIC_STYLES, XML_TOK_DOC_AUTOSTYLES }, - { XML_NAMESPACE_OFFICE, XML_REPORT, XML_TOK_DOC_REPORT }, - { XML_NAMESPACE_OOO, XML_REPORT, XML_TOK_DOC_REPORT }, - { XML_NAMESPACE_OFFICE, XML_FONT_FACE_DECLS, XML_TOK_DOC_FONTDECLS }, - { XML_NAMESPACE_OFFICE, XML_MASTER_STYLES, XML_TOK_DOC_MASTERSTYLES }, + { XML_NAMESPACE_OFFICE, XML_DOCUMENT_SETTINGS, XML_TOK_DOC_SETTINGS }, + { XML_NAMESPACE_OFFICE, XML_DOCUMENT_CONTENT, XML_TOK_DOC_CONTENT }, + { XML_NAMESPACE_OFFICE, XML_DOCUMENT_STYLES, XML_TOK_DOC_STYLES }, { XML_NAMESPACE_OFFICE, XML_DOCUMENT_META, XML_TOK_DOC_META }, XML_TOKEN_MAP_END }; @@ -666,6 +775,24 @@ const SvXMLTokenMap& ORptFilter::GetDocElemTokenMap() const return *m_pDocElemTokenMap; } +const SvXMLTokenMap& ORptFilter::GetDocContentElemTokenMap() const +{ + if (!m_pDocContentElemTokenMap.get()) + { + static const SvXMLTokenMapEntry aElemTokenMap[]= + { + { XML_NAMESPACE_OFFICE, XML_STYLES, XML_TOK_CONTENT_STYLES }, + { XML_NAMESPACE_OFFICE, XML_AUTOMATIC_STYLES, XML_TOK_CONTENT_AUTOSTYLES }, + { XML_NAMESPACE_OFFICE, XML_FONT_FACE_DECLS, XML_TOK_CONTENT_FONTDECLS }, + { XML_NAMESPACE_OFFICE, XML_MASTER_STYLES, XML_TOK_CONTENT_MASTERSTYLES}, + { XML_NAMESPACE_OFFICE, XML_BODY, XML_TOK_CONTENT_BODY }, + XML_TOKEN_MAP_END + }; + m_pDocContentElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap )); + } + return *m_pDocContentElemTokenMap; +} + const SvXMLTokenMap& ORptFilter::GetReportElemTokenMap() const { if ( !m_pReportElemTokenMap.get() ) diff --git a/reportdesign/source/filter/xml/xmlfilter.hxx b/reportdesign/source/filter/xml/xmlfilter.hxx index 6969c56859ac..c858e66f53de 100644 --- a/reportdesign/source/filter/xml/xmlfilter.hxx +++ b/reportdesign/source/filter/xml/xmlfilter.hxx @@ -70,6 +70,7 @@ private: TGroupFunctionMap m_aFunctions; mutable ::std::unique_ptr<SvXMLTokenMap> m_pDocElemTokenMap; + mutable ::std::unique_ptr<SvXMLTokenMap> m_pDocContentElemTokenMap; mutable ::std::unique_ptr<SvXMLTokenMap> m_pReportElemTokenMap; mutable ::std::unique_ptr<SvXMLTokenMap> m_pGroupElemTokenMap; mutable ::std::unique_ptr<SvXMLTokenMap> m_pSectionElemTokenMap; @@ -94,6 +95,8 @@ private: /// @throws RuntimeException bool implImport( const Sequence< PropertyValue >& rDescriptor ); +public: + using SvXMLImport::SetMasterStyles; SvXMLImportContext* CreateStylesContext(const OUString& rLocalName, const Reference< XAttributeList>& xAttrList, bool bIsAutoStyle ); SvXMLImportContext* CreateMetaContext(const OUString& rLocalName); @@ -131,6 +134,7 @@ public: virtual void SAL_CALL endDocument() override; const SvXMLTokenMap& GetDocElemTokenMap() const; + const SvXMLTokenMap& GetDocContentElemTokenMap() const; const SvXMLTokenMap& GetReportElemTokenMap() const; const SvXMLTokenMap& GetGroupElemTokenMap() const; const SvXMLTokenMap& GetSectionElemTokenMap() const; @@ -228,6 +232,21 @@ public: }; +class RptXMLDocumentBodyContext : public SvXMLImportContext +{ +public: + RptXMLDocumentBodyContext(SvXMLImport & rImport, + sal_uInt16 const nPrefix, + const OUString& rLocalName) + : SvXMLImportContext(rImport, nPrefix, rLocalName) + { + } + + virtual SvXMLImportContextRef CreateChildContext(sal_uInt16 const nPrefix, + const OUString& rLocalName, + const css::uno::Reference<css::xml::sax::XAttributeList> & xAttrList) override; +}; + } // rptxml #endif // INCLUDED_REPORTDESIGN_SOURCE_FILTER_XML_XMLFILTER_HXX commit dfe635d4f523224b7a6991b524dc2635311a5956 Author: Michael Stahl <mst...@redhat.com> Date: Wed Nov 29 23:24:35 2017 +0100 sw: std::vector<OUString*> considered silly Change-Id: Ie5141a01b1a63c083d5fce1842a35a9a4b0d36e3 diff --git a/sw/inc/SwXMLSectionList.hxx b/sw/inc/SwXMLSectionList.hxx index f157f17fa76f..45fd8bc8c2c7 100644 --- a/sw/inc/SwXMLSectionList.hxx +++ b/sw/inc/SwXMLSectionList.hxx @@ -29,12 +29,13 @@ protected: virtual SvXMLImportContext *CreateContext( sal_uInt16 nPrefix, const OUString& rLocalName, const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList ) override; + public: - std::vector<OUString*> &rSectionList; + std::vector<OUString> & m_rSectionList; SwXMLSectionList( const css::uno::Reference< css::uno::XComponentContext >& rContext, - std::vector<OUString*> &rNewSectionList ); + std::vector<OUString> & rNewSectionList); virtual ~SwXMLSectionList ( ) throw() override; diff --git a/sw/inc/shellio.hxx b/sw/inc/shellio.hxx index 2b2be71c06b5..3509685638f7 100644 --- a/sw/inc/shellio.hxx +++ b/sw/inc/shellio.hxx @@ -251,7 +251,7 @@ public: // Read the sections of the document, which is equal to the medium. // Returns the count of it virtual size_t GetSectionList( SfxMedium& rMedium, - std::vector<OUString*>& rStrings ) const; + std::vector<OUString>& rStrings) const; const tools::SvRef<SotStorage>& getSotStorageRef() { return pStg; }; void setSotStorageRef(const tools::SvRef<SotStorage>& pStgRef) { pStg = pStgRef; }; diff --git a/sw/source/core/swg/SwXMLSectionList.cxx b/sw/source/core/swg/SwXMLSectionList.cxx index a0f484098201..2e90f05a518a 100644 --- a/sw/source/core/swg/SwXMLSectionList.cxx +++ b/sw/source/core/swg/SwXMLSectionList.cxx @@ -84,9 +84,9 @@ public: SwXMLSectionList::SwXMLSectionList( const uno::Reference< uno::XComponentContext >& rContext, - std::vector<OUString*> &rNewSectionList) -: SvXMLImport( rContext, "" ), - rSectionList ( rNewSectionList ) + std::vector<OUString> &rNewSectionList) +: SvXMLImport(rContext, "") +, m_rSectionList(rNewSectionList) { // TODO: verify if these should match the same-name constants // in xmloff/source/core/xmlimp.cxx ("_office" and "_office") @@ -143,7 +143,7 @@ SvXMLImportContextRef SvXMLSectionListContext::CreateChildContext( sName = xAttrList->getValueByIndex( i ); } if ( !sName.isEmpty() ) - m_rImport.rSectionList.push_back( new OUString(sName) ); + m_rImport.m_rSectionList.push_back(sName); } pContext = new SvXMLSectionListContext(m_rImport, nPrefix, rLocalName, xAttrList); diff --git a/sw/source/filter/basflt/shellio.cxx b/sw/source/filter/basflt/shellio.cxx index 8b66489885dd..037c12b4a993 100644 --- a/sw/source/filter/basflt/shellio.cxx +++ b/sw/source/filter/basflt/shellio.cxx @@ -632,7 +632,7 @@ void Reader::ResetFrameFormats( SwDoc& rDoc ) // read the sections of the document, which is equal to the medium. // returns the count of it -size_t Reader::GetSectionList( SfxMedium&, std::vector<OUString*>& ) const +size_t Reader::GetSectionList(SfxMedium&, std::vector<OUString>&) const { return 0; } diff --git a/sw/source/filter/inc/fltini.hxx b/sw/source/filter/inc/fltini.hxx index 4dd40872e77a..2a6b55fc0724 100644 --- a/sw/source/filter/inc/fltini.hxx +++ b/sw/source/filter/inc/fltini.hxx @@ -50,7 +50,7 @@ public: // read the sections of the document, which is equal to the medium. // returns the count of it virtual size_t GetSectionList( SfxMedium& rMedium, - std::vector<OUString*>& rStrings ) const override; + std::vector<OUString>& rStrings) const override; }; // the special writers diff --git a/sw/source/filter/xml/swxml.cxx b/sw/source/filter/xml/swxml.cxx index 652e84ef5ab8..7387986bb892 100644 --- a/sw/source/filter/xml/swxml.cxx +++ b/sw/source/filter/xml/swxml.cxx @@ -957,7 +957,7 @@ ErrCode XMLReader::Read( SwDoc &rDoc, const OUString& rBaseURL, SwPaM &rPaM, con // read the sections of the document, which is equal to the medium. // returns the count of it size_t XMLReader::GetSectionList( SfxMedium& rMedium, - std::vector<OUString*>& rStrings ) const + std::vector<OUString>& rStrings) const { uno::Reference< uno::XComponentContext > xContext = comphelper::getProcessComponentContext(); diff --git a/sw/source/ui/dialog/uiregionsw.cxx b/sw/source/ui/dialog/uiregionsw.cxx index 78bf7c681bd5..404b2a0f59bc 100644 --- a/sw/source/ui/dialog/uiregionsw.cxx +++ b/sw/source/ui/dialog/uiregionsw.cxx @@ -1379,22 +1379,22 @@ IMPL_LINK( SwEditRegionDlg, SubRegionEventHdl, VclWindowEvent&, rEvent, void ) } } -// helper function - read region names from medium +// helper function - read section names from medium static void lcl_ReadSections( SfxMedium& rMedium, ComboBox& rBox ) { rBox.Clear(); uno::Reference < embed::XStorage > xStg; if( rMedium.IsStorage() && (xStg = rMedium.GetStorage()).is() ) { - std::vector<OUString*> aArr; + std::vector<OUString> aArr; SotClipboardFormatId nFormat = SotStorage::GetFormatID( xStg ); if ( nFormat == SotClipboardFormatId::STARWRITER_60 || nFormat == SotClipboardFormatId::STARWRITERGLOB_60 || nFormat == SotClipboardFormatId::STARWRITER_8 || nFormat == SotClipboardFormatId::STARWRITERGLOB_8) SwGetReaderXML()->GetSectionList( rMedium, aArr ); - for(std::vector<OUString*>::const_iterator it(aArr.begin()); it != aArr.end(); ++it) { - rBox.InsertEntry( **it ); - delete *it; + for (auto const& it : aArr) + { + rBox.InsertEntry(it); } } } commit 2c081e66cd63df812c2d248c7d2b5bb384b21156 Author: Michael Stahl <mst...@redhat.com> Date: Wed Nov 29 23:11:31 2017 +0100 sw: move generic code out of SwXMLSectionList::CreateContext ... into a new class that recursively creates itself instead of relying on the import class. Change-Id: I9bb445ba6a5c490293983d4566bab7b066fb8f24 diff --git a/sw/source/core/swg/SwXMLSectionList.cxx b/sw/source/core/swg/SwXMLSectionList.cxx index 7ac9c6c9bb7d..a0f484098201 100644 --- a/sw/source/core/swg/SwXMLSectionList.cxx +++ b/sw/source/core/swg/SwXMLSectionList.cxx @@ -42,6 +42,45 @@ public: virtual ~SvXMLSectionListContext() override; }; +class SwXMLParentContext : public SvXMLImportContext +{ +private: + SwXMLSectionList & m_rImport; + +public: + SwXMLParentContext(SwXMLSectionList& rImport, + sal_uInt16 nPrefix, + const OUString& rLocalName) + : SvXMLImportContext(rImport, nPrefix, rLocalName) + , m_rImport(rImport) + { + } + + virtual SvXMLImportContextRef CreateChildContext(sal_uInt16 nPrefix, + const OUString& rLocalName, + const uno::Reference<xml::sax::XAttributeList> & xAttrList) override + { + if ((nPrefix == XML_NAMESPACE_OFFICE && IsXMLToken(rLocalName, XML_BODY)) || + (nPrefix == XML_NAMESPACE_TEXT && + ( IsXMLToken(rLocalName, XML_P) + || IsXMLToken(rLocalName, XML_H) + || IsXMLToken(rLocalName, XML_A) + || IsXMLToken(rLocalName, XML_SPAN) + || IsXMLToken(rLocalName, XML_SECTION) + || IsXMLToken(rLocalName, XML_INDEX_BODY) + || IsXMLToken(rLocalName, XML_INDEX_TITLE) + || IsXMLToken(rLocalName, XML_INSERTION) + || IsXMLToken(rLocalName, XML_DELETION)))) + { + return new SvXMLSectionListContext(m_rImport, nPrefix, rLocalName, xAttrList); + } + else + { + return new SwXMLParentContext(m_rImport, nPrefix, rLocalName); + } + } +}; + SwXMLSectionList::SwXMLSectionList( const uno::Reference< uno::XComponentContext >& rContext, @@ -67,29 +106,9 @@ SwXMLSectionList::~SwXMLSectionList() SvXMLImportContext *SwXMLSectionList::CreateContext( sal_uInt16 nPrefix, const OUString& rLocalName, - const uno::Reference< xml::sax::XAttributeList > & xAttrList ) + const uno::Reference<xml::sax::XAttributeList> & ) { - SvXMLImportContext *pContext = nullptr; - - if(( nPrefix == XML_NAMESPACE_OFFICE && IsXMLToken ( rLocalName, XML_BODY )) || - ( nPrefix == XML_NAMESPACE_TEXT && - (IsXMLToken ( rLocalName, XML_P ) || - IsXMLToken ( rLocalName, XML_H ) || - IsXMLToken ( rLocalName, XML_A ) || - IsXMLToken ( rLocalName, XML_SPAN ) || - IsXMLToken ( rLocalName, XML_SECTION ) || - IsXMLToken ( rLocalName, XML_INDEX_BODY ) || - IsXMLToken ( rLocalName, XML_INDEX_TITLE )|| - IsXMLToken ( rLocalName, XML_INSERTION ) || - IsXMLToken ( rLocalName, XML_DELETION ) ) - ) - ) - { - pContext = new SvXMLSectionListContext (*this, nPrefix, rLocalName, xAttrList); - } - else - pContext = SvXMLImport::CreateContext( nPrefix, rLocalName, xAttrList ); - return pContext; + return new SwXMLParentContext(*this, nPrefix, rLocalName); } SvXMLSectionListContext::SvXMLSectionListContext( commit 346abc6785117ad0a3353eec2bc2f4d1b8db9fb7 Author: Michael Stahl <mst...@redhat.com> Date: Wed Nov 29 22:59:16 2017 +0100 sw: move SvXMLSectionListContext out of header file Change-Id: I18417484a35d67bde3ec2690d834589c3751005f diff --git a/sw/inc/SwXMLSectionList.hxx b/sw/inc/SwXMLSectionList.hxx index ab254c0da2bf..f157f17fa76f 100644 --- a/sw/inc/SwXMLSectionList.hxx +++ b/sw/inc/SwXMLSectionList.hxx @@ -19,7 +19,6 @@ #ifndef INCLUDED_SW_INC_SWXMLSECTIONLIST_HXX #define INCLUDED_SW_INC_SWXMLSECTIONLIST_HXX -#include <xmloff/xmlictxt.hxx> #include <xmloff/xmlimp.hxx> class SwXMLSectionList : public SvXMLImport @@ -41,21 +40,6 @@ public: throw() override; }; -class SvXMLSectionListContext : public SvXMLImportContext -{ -private: - SwXMLSectionList & rLocalRef; -public: - SvXMLSectionListContext ( SwXMLSectionList& rImport, - sal_uInt16 nPrefix, - const OUString& rLocalName, - const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList ); - virtual SvXMLImportContextRef CreateChildContext( sal_uInt16 nPrefix, - const OUString& rLocalName, - const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList ) override; - virtual ~SvXMLSectionListContext() override; -}; - #endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/core/swg/SwXMLSectionList.cxx b/sw/source/core/swg/SwXMLSectionList.cxx index 01a08f9abcf5..7ac9c6c9bb7d 100644 --- a/sw/source/core/swg/SwXMLSectionList.cxx +++ b/sw/source/core/swg/SwXMLSectionList.cxx @@ -18,6 +18,7 @@ */ #include <SwXMLSectionList.hxx> +#include <xmloff/xmlictxt.hxx> #include <xmloff/nmspmap.hxx> #include <xmloff/xmlnmspe.hxx> #include <vector> @@ -25,6 +26,23 @@ using namespace ::com::sun::star; using namespace ::xmloff::token; +class SvXMLSectionListContext : public SvXMLImportContext +{ +private: + SwXMLSectionList & m_rImport; + +public: + SvXMLSectionListContext(SwXMLSectionList& rImport, + sal_uInt16 nPrefix, + const OUString& rLocalName, + const uno::Reference<xml::sax::XAttributeList> & xAttrList); + virtual SvXMLImportContextRef CreateChildContext(sal_uInt16 nPrefix, + const OUString& rLocalName, + const uno::Reference<xml::sax::XAttributeList> & xAttrList) override; + virtual ~SvXMLSectionListContext() override; +}; + + SwXMLSectionList::SwXMLSectionList( const uno::Reference< uno::XComponentContext >& rContext, std::vector<OUString*> &rNewSectionList) @@ -80,7 +98,7 @@ SvXMLSectionListContext::SvXMLSectionListContext( const OUString& rLocalName, const uno::Reference< xml::sax::XAttributeList > & ) : SvXMLImportContext ( rImport, nPrefix, rLocalName ), - rLocalRef(rImport) + m_rImport(rImport) { } @@ -101,15 +119,15 @@ SvXMLImportContextRef SvXMLSectionListContext::CreateChildContext( { const OUString& rAttrName = xAttrList->getNameByIndex( i ); OUString aLocalName; - sal_uInt16 nPrefx = rLocalRef.GetNamespaceMap().GetKeyByAttrName( rAttrName, &aLocalName); + sal_uInt16 nPrefx = m_rImport.GetNamespaceMap().GetKeyByAttrName(rAttrName, &aLocalName); if (XML_NAMESPACE_TEXT == nPrefx && IsXMLToken ( aLocalName, XML_NAME ) ) sName = xAttrList->getValueByIndex( i ); } if ( !sName.isEmpty() ) - rLocalRef.rSectionList.push_back( new OUString(sName) ); + m_rImport.rSectionList.push_back( new OUString(sName) ); } - pContext = new SvXMLSectionListContext (rLocalRef, nPrefix, rLocalName, xAttrList); + pContext = new SvXMLSectionListContext(m_rImport, nPrefix, rLocalName, xAttrList); return pContext; } SvXMLSectionListContext::~SvXMLSectionListContext() _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits