diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2020-01-21 11:17:19 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2020-01-21 14:18:46 +0100 |
commit | 996f1b9b325dcccd7b0ebfcacb45a4ffb4cba58e (patch) | |
tree | 04af03c2d0fa8a55cd5a549fc1e610c3d62583f6 | |
parent | 08e633d777f1d2cf11a93ccb55f231d084f3220c (diff) |
Use FastParser in XMLDocumentSettingsContext
and flatten the pImpl data
Change-Id: I8d817cd2af0a3855d10dbfaa580c3379119d5067
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/87126
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r-- | dbaccess/source/filter/xml/xmlfilter.cxx | 14 | ||||
-rw-r--r-- | include/xmloff/DocumentSettingsContext.hxx | 25 | ||||
-rw-r--r-- | reportdesign/source/filter/xml/xmlfilter.cxx | 13 | ||||
-rw-r--r-- | sc/source/filter/xml/xmlimprt.cxx | 8 | ||||
-rw-r--r-- | starmath/source/mathmlimport.cxx | 27 | ||||
-rw-r--r-- | sw/source/filter/xml/xmlimp.cxx | 6 | ||||
-rw-r--r-- | xmloff/source/core/DocumentSettingsContext.cxx | 274 | ||||
-rw-r--r-- | xmloff/source/draw/sdxmlimp.cxx | 16 |
8 files changed, 149 insertions, 234 deletions
diff --git a/dbaccess/source/filter/xml/xmlfilter.cxx b/dbaccess/source/filter/xml/xmlfilter.cxx index b8a6cc215d26..5b250b9f881c 100644 --- a/dbaccess/source/filter/xml/xmlfilter.cxx +++ b/dbaccess/source/filter/xml/xmlfilter.cxx @@ -407,21 +407,15 @@ public: virtual void SAL_CALL startFastElement( sal_Int32 /*nElement*/, const css::uno::Reference< css::xml::sax::XFastAttributeList >& ) override {} - virtual SvXMLImportContextRef CreateChildContext(sal_uInt16 const nPrefix, - const OUString& rLocalName, - const uno::Reference<xml::sax::XAttributeList> & xAttrList) override + virtual uno::Reference< xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( + sal_Int32 nElement, const uno::Reference< xml::sax::XFastAttributeList >& /*xAttrList*/ ) override { - if (nPrefix == XML_NAMESPACE_OFFICE && IsXMLToken(rLocalName, XML_SETTINGS)) + if (nElement == XML_ELEMENT(OFFICE, XML_SETTINGS)) { - return new XMLDocumentSettingsContext(GetImport(), nPrefix, rLocalName, xAttrList); + return new XMLDocumentSettingsContext(GetImport()); } return nullptr; } - virtual uno::Reference< xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( - sal_Int32 /*nElement*/, const uno::Reference< xml::sax::XFastAttributeList >& /*xAttrList*/ ) override - { - return nullptr; - } }; class DBXMLDocumentStylesContext : public SvXMLImportContext diff --git a/include/xmloff/DocumentSettingsContext.hxx b/include/xmloff/DocumentSettingsContext.hxx index 5a63435ed31f..f09d0f919dc7 100644 --- a/include/xmloff/DocumentSettingsContext.hxx +++ b/include/xmloff/DocumentSettingsContext.hxx @@ -24,23 +24,32 @@ #include <xmloff/dllapi.h> #include <xmloff/xmlictxt.hxx> -#include <memory> +#include <vector> struct XMLDocumentSettingsContext_Data; class XMLOFF_DLLPUBLIC XMLDocumentSettingsContext final : public SvXMLImportContext { - ::std::unique_ptr< XMLDocumentSettingsContext_Data > m_pData; + struct SettingsGroup + { + OUString sGroupName; + css::uno::Any aSettings; + }; + css::uno::Any maViewProps; + css::uno::Any maConfigProps; + ::std::vector< SettingsGroup > maDocSpecificSettings; public: - XMLDocumentSettingsContext(SvXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLName, - const css::uno::Reference< css::xml::sax::XAttributeList>& xAttrList); + XMLDocumentSettingsContext(SvXMLImport& rImport); virtual ~XMLDocumentSettingsContext() override; - virtual SvXMLImportContextRef CreateChildContext( sal_uInt16 nPrefix, - const OUString& rLocalName, - const css::uno::Reference< css::xml::sax::XAttributeList>& xAttrList ) override; - virtual void EndElement() override; + virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( + sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList >& AttrList ) override; + + virtual void SAL_CALL startFastElement( sal_Int32 /*nElement*/, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& ) override {} + + virtual void SAL_CALL endFastElement(sal_Int32 nElement) override; private: XMLDocumentSettingsContext( const XMLDocumentSettingsContext& ) = delete; diff --git a/reportdesign/source/filter/xml/xmlfilter.cxx b/reportdesign/source/filter/xml/xmlfilter.cxx index d6cedca1f54a..768a68753265 100644 --- a/reportdesign/source/filter/xml/xmlfilter.cxx +++ b/reportdesign/source/filter/xml/xmlfilter.cxx @@ -599,18 +599,11 @@ public: const css::uno::Reference< css::xml::sax::XFastAttributeList >& ) override {} virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( - sal_Int32 /*nElement*/, const css::uno::Reference< css::xml::sax::XFastAttributeList >& /*xAttrList*/ ) override - { - return nullptr; - } - - virtual SvXMLImportContextRef CreateChildContext(sal_uInt16 const nPrefix, - const OUString& rLocalName, - const uno::Reference<xml::sax::XAttributeList> & xAttrList) override + sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList >& /*xAttrList*/ ) override { - if (nPrefix == XML_NAMESPACE_OFFICE && IsXMLToken(rLocalName, XML_SETTINGS)) + if (nElement == XML_ELEMENT(OFFICE, XML_SETTINGS)) { - return new XMLDocumentSettingsContext(GetImport(), nPrefix, rLocalName, xAttrList); + return new XMLDocumentSettingsContext(GetImport()); } return nullptr; } diff --git a/sc/source/filter/xml/xmlimprt.cxx b/sc/source/filter/xml/xmlimprt.cxx index da52b0424516..0e22d225672a 100644 --- a/sc/source/filter/xml/xmlimprt.cxx +++ b/sc/source/filter/xml/xmlimprt.cxx @@ -373,10 +373,6 @@ SvXMLImportContextRef ScXMLDocContext_Impl::CreateChildContext( sal_uInt16 nPref case XML_TOK_DOC_META: SAL_INFO("sc", "XML_TOK_DOC_META: should not have come here, maybe document is invalid?"); break; - case XML_TOK_DOC_SETTINGS: - if (GetScImport().getImportFlags() & SvXMLImportFlags::SETTINGS) - pContext = new XMLDocumentSettingsContext(GetScImport(), nPrefix, rLocalName, xAttrList ); - break; } return pContext; @@ -398,6 +394,10 @@ uno::Reference< xml::sax::XFastContextHandler > SAL_CALL if (GetScImport().getImportFlags() & SvXMLImportFlags::SCRIPTS) pContext = GetScImport().CreateScriptContext(); break; + case XML_ELEMENT( OFFICE, XML_SETTINGS ): + if (GetScImport().getImportFlags() & SvXMLImportFlags::SETTINGS) + pContext = new XMLDocumentSettingsContext(GetScImport()); + break; //TODO: handle all other cases } diff --git a/starmath/source/mathmlimport.cxx b/starmath/source/mathmlimport.cxx index c933fae15a28..bcfaae1f7bd6 100644 --- a/starmath/source/mathmlimport.cxx +++ b/starmath/source/mathmlimport.cxx @@ -1914,40 +1914,23 @@ public: virtual void SAL_CALL endFastElement( sal_Int32 /*nElement*/ ) override {} - virtual SvXMLImportContextRef CreateChildContext( sal_uInt16 nPrefix, - const OUString& rLocalName, - const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList ) override; - virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) override; }; } -SvXMLImportContextRef SmXMLOfficeContext_Impl::CreateChildContext(sal_uInt16 nPrefix, - const OUString& rLocalName, - const uno::Reference< xml::sax::XAttributeList > &xAttrList) +uno::Reference< xml::sax::XFastContextHandler > SmXMLOfficeContext_Impl::createFastChildContext(sal_Int32 nElement, + const uno::Reference< xml::sax::XFastAttributeList > &/*xAttrList*/) { - SvXMLImportContext *pContext = nullptr; - if ( XML_NAMESPACE_OFFICE == nPrefix && - rLocalName == GetXMLToken(XML_META) ) + if ( nElement == XML_ELEMENT(OFFICE, XML_META) ) { SAL_WARN("starmath", "XML_TOK_DOC_META: should not have come here, maybe document is invalid?"); } - else if ( XML_NAMESPACE_OFFICE == nPrefix && - rLocalName == GetXMLToken(XML_SETTINGS) ) + else if ( nElement == XML_ELEMENT(OFFICE, XML_SETTINGS) ) { - pContext = new XMLDocumentSettingsContext( GetImport(), - XML_NAMESPACE_OFFICE, rLocalName, - xAttrList ); + return new XMLDocumentSettingsContext( GetImport() ); } - - return pContext; -} - -uno::Reference< xml::sax::XFastContextHandler > SmXMLOfficeContext_Impl::createFastChildContext(sal_Int32 /*nElement*/, - const uno::Reference< xml::sax::XFastAttributeList > &/*xAttrList*/) -{ return nullptr; } diff --git a/sw/source/filter/xml/xmlimp.cxx b/sw/source/filter/xml/xmlimp.cxx index d2ff23ec00d6..29035b03829d 100644 --- a/sw/source/filter/xml/xmlimp.cxx +++ b/sw/source/filter/xml/xmlimp.cxx @@ -218,6 +218,9 @@ uno::Reference< xml::sax::XFastContextHandler > SAL_CALL SwXMLDocContext_Impl::c case XML_ELEMENT(OFFICE, XML_SCRIPTS): return GetSwImport().CreateScriptContext(); break; + case XML_ELEMENT(OFFICE, XML_SETTINGS): + return new XMLDocumentSettingsContext( GetImport() ); + break; } return nullptr; } @@ -262,9 +265,6 @@ SvXMLImportContextRef SwXMLDocContext_Impl::CreateChildContext( pContext = new SwXMLBodyContext_Impl( GetSwImport(), nPrefix, rLocalName ); break; - case XML_TOK_DOC_SETTINGS: - pContext = new XMLDocumentSettingsContext( GetImport(), nPrefix, rLocalName, xAttrList ); - break; case XML_TOK_DOC_XFORMS: pContext = createXFormsModelContext(GetImport(), nPrefix, rLocalName); break; diff --git a/xmloff/source/core/DocumentSettingsContext.cxx b/xmloff/source/core/DocumentSettingsContext.cxx index 249f1c554d0d..454cde1bcbcd 100644 --- a/xmloff/source/core/DocumentSettingsContext.cxx +++ b/xmloff/source/core/DocumentSettingsContext.cxx @@ -129,11 +129,14 @@ protected: css::uno::Any& mrAny; XMLConfigBaseContext* mpBaseContext; public: - XMLConfigBaseContext(SvXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLName, + XMLConfigBaseContext(SvXMLImport& rImport, css::uno::Any& rAny, XMLConfigBaseContext* pBaseContext); void AddPropertyValue() { maProps.push_back(maProp); } + + virtual void SAL_CALL startFastElement( sal_Int32 /*nElement*/, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& ) override {} }; class XMLConfigItemContext : public SvXMLImportContext @@ -146,15 +149,18 @@ class XMLConfigItemContext : public SvXMLImportContext XMLConfigBaseContext* mpBaseContext; public: - XMLConfigItemContext(SvXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLName, - const css::uno::Reference< css::xml::sax::XAttributeList>& xAttrList, + XMLConfigItemContext(SvXMLImport& rImport, + const css::uno::Reference< css::xml::sax::XFastAttributeList>& xAttrList, css::uno::Any& rAny, const OUString& rItemName, XMLConfigBaseContext* pBaseContext); - virtual void Characters( const OUString& rChars ) override; + virtual void SAL_CALL startFastElement( sal_Int32 /*nElement*/, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& ) override {} + + virtual void SAL_CALL characters( const OUString& rChars ) override; - virtual void EndElement() override; + virtual void SAL_CALL endFastElement(sal_Int32 nElement) override; void ManipulateConfigItem(); }; @@ -162,31 +168,27 @@ public: class XMLConfigItemSetContext : public XMLConfigBaseContext { public: - XMLConfigItemSetContext(SvXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLName, - const css::uno::Reference< css::xml::sax::XAttributeList>& xAttrList, + XMLConfigItemSetContext(SvXMLImport& rImport, css::uno::Any& rAny, XMLConfigBaseContext* pBaseContext); - virtual SvXMLImportContextRef CreateChildContext( sal_uInt16 nPrefix, - const OUString& rLocalName, - const css::uno::Reference< css::xml::sax::XAttributeList>& xAttrList ) override; + virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( + sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList >& AttrList ) override; - virtual void EndElement() override; + virtual void SAL_CALL endFastElement(sal_Int32 nElement) override; }; class XMLConfigItemMapNamedContext : public XMLConfigBaseContext { public: - XMLConfigItemMapNamedContext(SvXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLName, - const css::uno::Reference< css::xml::sax::XAttributeList>& xAttrList, + XMLConfigItemMapNamedContext(SvXMLImport& rImport, css::uno::Any& rAny, XMLConfigBaseContext* pBaseContext); - virtual SvXMLImportContextRef CreateChildContext( sal_uInt16 nPrefix, - const OUString& rLocalName, - const css::uno::Reference< css::xml::sax::XAttributeList>& xAttrList ) override; + virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( + sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList >& AttrList ) override; - virtual void EndElement() override; + virtual void SAL_CALL endFastElement(sal_Int32 nElement) override; }; class XMLConfigItemMapIndexedContext : public XMLConfigBaseContext @@ -195,88 +197,49 @@ private: OUString const maConfigItemName; public: - XMLConfigItemMapIndexedContext(SvXMLImport& rImport, sal_uInt16 nPrfx, - const OUString& rLName, - const css::uno::Reference< css::xml::sax::XAttributeList>& xAttrList, + XMLConfigItemMapIndexedContext(SvXMLImport& rImport, css::uno::Any& rAny, const OUString& rConfigItemName, XMLConfigBaseContext* pBaseContext); - virtual SvXMLImportContextRef CreateChildContext( sal_uInt16 nPrefix, - const OUString& rLocalName, - const css::uno::Reference< css::xml::sax::XAttributeList>& xAttrList ) override; + virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( + sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList >& AttrList ) override; - virtual void EndElement() override; + virtual void SAL_CALL endFastElement(sal_Int32 nElement) override; }; } -static SvXMLImportContext *CreateSettingsContext(SvXMLImport& rImport, sal_uInt16 p_nPrefix, - const OUString& rLocalName, - const uno::Reference<xml::sax::XAttributeList>& xAttrList, +static SvXMLImportContext *CreateSettingsContext(SvXMLImport& rImport, sal_Int32 nElement, + const uno::Reference<xml::sax::XFastAttributeList>& xAttrList, beans::PropertyValue& rProp, XMLConfigBaseContext* pBaseContext) { SvXMLImportContext *pContext = nullptr; rProp.Name.clear(); - sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; - for( sal_Int16 i=0; i < nAttrCount; i++ ) + sax_fastparser::FastAttributeList *pAttribList = + sax_fastparser::FastAttributeList::castToFastAttributeList( xAttrList ); + for (auto &aIter : *pAttribList) { - OUString sAttrName = xAttrList->getNameByIndex( i ); - OUString aLocalName; - sal_uInt16 nPrefix = rImport.GetNamespaceMap().GetKeyByAttrName( - sAttrName, &aLocalName ); - OUString sValue = xAttrList->getValueByIndex( i ); - - if (nPrefix == XML_NAMESPACE_CONFIG) - { - if (IsXMLToken(aLocalName, XML_NAME)) - rProp.Name = sValue; - } + if (aIter.getToken() == XML_ELEMENT(CONFIG, XML_NAME)) + rProp.Name = aIter.toString(); } - if (p_nPrefix == XML_NAMESPACE_CONFIG) - { - if (IsXMLToken(rLocalName, XML_CONFIG_ITEM)) - pContext = new XMLConfigItemContext(rImport, p_nPrefix, rLocalName, xAttrList, rProp.Value, rProp.Name, pBaseContext); - else if((IsXMLToken(rLocalName, XML_CONFIG_ITEM_SET)) || - (IsXMLToken(rLocalName, XML_CONFIG_ITEM_MAP_ENTRY)) ) - pContext = new XMLConfigItemSetContext(rImport, p_nPrefix, rLocalName, xAttrList, rProp.Value, pBaseContext); - else if(IsXMLToken(rLocalName, XML_CONFIG_ITEM_MAP_NAMED)) - pContext = new XMLConfigItemMapNamedContext(rImport, p_nPrefix, rLocalName, xAttrList, rProp.Value, pBaseContext); - else if(IsXMLToken(rLocalName, XML_CONFIG_ITEM_MAP_INDEXED)) - pContext = new XMLConfigItemMapIndexedContext(rImport, p_nPrefix, rLocalName, xAttrList, rProp.Value, rProp.Name, pBaseContext); - } + if (nElement == XML_ELEMENT(CONFIG, XML_CONFIG_ITEM)) + pContext = new XMLConfigItemContext(rImport, xAttrList, rProp.Value, rProp.Name, pBaseContext); + else if(nElement == XML_ELEMENT(CONFIG, XML_CONFIG_ITEM_SET) || + nElement == XML_ELEMENT(CONFIG, XML_CONFIG_ITEM_MAP_ENTRY) ) + pContext = new XMLConfigItemSetContext(rImport, rProp.Value, pBaseContext); + else if(nElement == XML_ELEMENT(CONFIG, XML_CONFIG_ITEM_MAP_NAMED)) + pContext = new XMLConfigItemMapNamedContext(rImport, rProp.Value, pBaseContext); + else if(nElement == XML_ELEMENT(CONFIG, XML_CONFIG_ITEM_MAP_INDEXED)) + pContext = new XMLConfigItemMapIndexedContext(rImport, rProp.Value, rProp.Name, pBaseContext); return pContext; } -namespace -{ - struct SettingsGroup - { - OUString const sGroupName; - uno::Any aSettings; - - SettingsGroup( const OUString& _rGroupName, const uno::Any& _rSettings ) - :sGroupName( _rGroupName ) - ,aSettings( _rSettings ) - { - } - }; -} - -struct XMLDocumentSettingsContext_Data -{ - css::uno::Any aViewProps; - css::uno::Any aConfigProps; - ::std::vector< SettingsGroup > aDocSpecificSettings; -}; - -XMLDocumentSettingsContext::XMLDocumentSettingsContext(SvXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLName, - const uno::Reference<xml::sax::XAttributeList>& ) - : SvXMLImportContext( rImport, nPrfx, rLName ) - , m_pData( new XMLDocumentSettingsContext_Data ) +XMLDocumentSettingsContext::XMLDocumentSettingsContext(SvXMLImport& rImport) + : SvXMLImportContext( rImport ) { // here are no attributes } @@ -285,57 +248,43 @@ XMLDocumentSettingsContext::~XMLDocumentSettingsContext() { } -SvXMLImportContextRef XMLDocumentSettingsContext::CreateChildContext( sal_uInt16 p_nPrefix, - const OUString& rLocalName, - const css::uno::Reference< css::xml::sax::XAttributeList>& xAttrList ) +css::uno::Reference< css::xml::sax::XFastContextHandler > XMLDocumentSettingsContext::createFastChildContext( + sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) { SvXMLImportContext *pContext = nullptr; OUString sName; - sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; - for( sal_Int16 i=0; i < nAttrCount; i++ ) + sax_fastparser::FastAttributeList *pAttribList = + sax_fastparser::FastAttributeList::castToFastAttributeList( xAttrList ); + for (auto &aIter : *pAttribList) { - OUString sAttrName = xAttrList->getNameByIndex( i ); - OUString aLocalName; - sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( - sAttrName, &aLocalName ); - OUString sValue = xAttrList->getValueByIndex( i ); - - if (nPrefix == XML_NAMESPACE_CONFIG) - { - if (IsXMLToken(aLocalName, XML_NAME)) - sName = sValue; - } + if (aIter.getToken() == XML_ELEMENT(CONFIG, XML_NAME)) + sName = aIter.toString(); } - if (p_nPrefix == XML_NAMESPACE_CONFIG) + if (nElement == XML_ELEMENT(CONFIG, XML_CONFIG_ITEM_SET)) { - if (IsXMLToken(rLocalName, XML_CONFIG_ITEM_SET)) - { - OUString aLocalConfigName; - sal_uInt16 nConfigPrefix = - GetImport().GetNamespaceMap().GetKeyByAttrValueQName( - sName, &aLocalConfigName ); + OUString aLocalConfigName; + sal_uInt16 nConfigPrefix = + GetImport().GetNamespaceMap().GetKeyByAttrValueQName( + sName, &aLocalConfigName ); - if( XML_NAMESPACE_OOO == nConfigPrefix ) + if( XML_NAMESPACE_OOO == nConfigPrefix ) + { + if (IsXMLToken(aLocalConfigName, XML_VIEW_SETTINGS)) + pContext = new XMLConfigItemSetContext(GetImport(), + maViewProps, nullptr); + else if (IsXMLToken(aLocalConfigName, + XML_CONFIGURATION_SETTINGS)) + pContext = new XMLConfigItemSetContext(GetImport(), + maConfigProps, nullptr); + else { - if (IsXMLToken(aLocalConfigName, XML_VIEW_SETTINGS)) - pContext = new XMLConfigItemSetContext(GetImport(), - p_nPrefix, rLocalName, xAttrList, - m_pData->aViewProps, nullptr); - else if (IsXMLToken(aLocalConfigName, - XML_CONFIGURATION_SETTINGS)) - pContext = new XMLConfigItemSetContext(GetImport(), - p_nPrefix, rLocalName, xAttrList, - m_pData->aConfigProps, nullptr); - else - { - m_pData->aDocSpecificSettings.emplace_back( aLocalConfigName, uno::Any() ); + maDocSpecificSettings.push_back( {aLocalConfigName, uno::Any()} ); - pContext = new XMLConfigItemSetContext(GetImport(), - p_nPrefix, rLocalName, xAttrList, - m_pData->aDocSpecificSettings.back().aSettings, nullptr); - } + pContext = new XMLConfigItemSetContext(GetImport(), + maDocSpecificSettings.back().aSettings, nullptr); } } } @@ -343,10 +292,10 @@ SvXMLImportContextRef XMLDocumentSettingsContext::CreateChildContext( sal_uInt16 return pContext; } -void XMLDocumentSettingsContext::EndElement() +void XMLDocumentSettingsContext::endFastElement(sal_Int32 ) { uno::Sequence<beans::PropertyValue> aSeqViewProps; - if (m_pData->aViewProps >>= aSeqViewProps) + if (maViewProps >>= aSeqViewProps) { GetImport().SetViewSettings(aSeqViewProps); sal_Int32 i(aSeqViewProps.getLength() - 1); @@ -370,7 +319,7 @@ void XMLDocumentSettingsContext::EndElement() } uno::Sequence<beans::PropertyValue> aSeqConfigProps; - if ( m_pData->aConfigProps >>= aSeqConfigProps ) + if ( maConfigProps >>= aSeqConfigProps ) { if (!utl::ConfigManager::IsFuzzing() && !officecfg::Office::Common::Save::Document::LoadPrinter::get()) { @@ -400,7 +349,7 @@ void XMLDocumentSettingsContext::EndElement() GetImport().SetConfigurationSettings( aSeqConfigProps ); } - for (auto const& settings : m_pData->aDocSpecificSettings) + for (auto const& settings : maDocSpecificSettings) { uno::Sequence< beans::PropertyValue > aDocSettings; OSL_VERIFY( settings.aSettings >>= aDocSettings ); @@ -408,10 +357,10 @@ void XMLDocumentSettingsContext::EndElement() } } -XMLConfigBaseContext::XMLConfigBaseContext(SvXMLImport& rImport, sal_uInt16 nPrfx, - const OUString& rLName, css::uno::Any& rTempAny, +XMLConfigBaseContext::XMLConfigBaseContext(SvXMLImport& rImport, + css::uno::Any& rTempAny, XMLConfigBaseContext* pTempBaseContext) - : SvXMLImportContext( rImport, nPrfx, rLName ), + : SvXMLImportContext( rImport ), maProps( rImport.GetComponentContext() ), maProp(), mrAny(rTempAny), @@ -419,58 +368,48 @@ XMLConfigBaseContext::XMLConfigBaseContext(SvXMLImport& rImport, sal_uInt16 nPrf { } -XMLConfigItemSetContext::XMLConfigItemSetContext(SvXMLImport& rImport, sal_uInt16 nPrfx, - const OUString& rLName, - const css::uno::Reference< css::xml::sax::XAttributeList>&, +XMLConfigItemSetContext::XMLConfigItemSetContext(SvXMLImport& rImport, css::uno::Any& rAny, XMLConfigBaseContext* pBaseContext) - : XMLConfigBaseContext( rImport, nPrfx, rLName, rAny, pBaseContext ) + : XMLConfigBaseContext( rImport, rAny, pBaseContext ) { // here are no attributes } -SvXMLImportContextRef XMLConfigItemSetContext::CreateChildContext( sal_uInt16 nPrefix, - const OUString& rLocalName, - const css::uno::Reference< css::xml::sax::XAttributeList>& xAttrList ) +css::uno::Reference< css::xml::sax::XFastContextHandler > XMLConfigItemSetContext::createFastChildContext( + sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) { - return CreateSettingsContext(GetImport(), nPrefix, rLocalName, xAttrList, maProp, this); + return CreateSettingsContext(GetImport(), nElement, xAttrList, maProp, this); } -void XMLConfigItemSetContext::EndElement() +void XMLConfigItemSetContext::endFastElement(sal_Int32 ) { mrAny <<= maProps.GetSequence(); if (mpBaseContext) mpBaseContext->AddPropertyValue(); } -XMLConfigItemContext::XMLConfigItemContext(SvXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLName, - const css::uno::Reference< css::xml::sax::XAttributeList>& xAttrList, +XMLConfigItemContext::XMLConfigItemContext(SvXMLImport& rImport, + const css::uno::Reference< css::xml::sax::XFastAttributeList>& xAttrList, css::uno::Any& rTempAny, const OUString& rTempItemName, XMLConfigBaseContext* pTempBaseContext) - : SvXMLImportContext(rImport, nPrfx, rLName), + : SvXMLImportContext(rImport), mrAny(rTempAny), mrItemName(rTempItemName), mpBaseContext(pTempBaseContext) { - sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; - for( sal_Int16 i=0; i < nAttrCount; i++ ) + sax_fastparser::FastAttributeList *pAttribList = + sax_fastparser::FastAttributeList::castToFastAttributeList( xAttrList ); + for (auto &aIter : *pAttribList) { - OUString sAttrName = xAttrList->getNameByIndex( i ); - OUString aLocalName; - sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( - sAttrName, &aLocalName ); - OUString sValue = xAttrList->getValueByIndex( i ); - - if (nPrefix == XML_NAMESPACE_CONFIG) - { - if (IsXMLToken(aLocalName, XML_TYPE)) - msType = sValue; - } + if (aIter.getToken() == XML_ELEMENT(CONFIG, XML_TYPE)) + msType = aIter.toString(); } } -void XMLConfigItemContext::Characters( const OUString& rChars ) +void XMLConfigItemContext::characters( const OUString& rChars ) { if (IsXMLToken(msType, XML_BASE64BINARY)) { @@ -502,7 +441,7 @@ void XMLConfigItemContext::Characters( const OUString& rChars ) msValue += rChars; } -void XMLConfigItemContext::EndElement() +void XMLConfigItemContext::endFastElement(sal_Int32 ) { if (mpBaseContext) { @@ -613,22 +552,21 @@ void XMLConfigItemContext::ManipulateConfigItem() } } -XMLConfigItemMapNamedContext::XMLConfigItemMapNamedContext(SvXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLName, - const css::uno::Reference< css::xml::sax::XAttributeList>&, +XMLConfigItemMapNamedContext::XMLConfigItemMapNamedContext(SvXMLImport& rImport, css::uno::Any& rAny, XMLConfigBaseContext* pBaseContext) - : XMLConfigBaseContext(rImport, nPrfx, rLName, rAny, pBaseContext) + : XMLConfigBaseContext(rImport, rAny, pBaseContext) { } -SvXMLImportContextRef XMLConfigItemMapNamedContext::CreateChildContext( sal_uInt16 nPrefix, - const OUString& rLocalName, - const css::uno::Reference< css::xml::sax::XAttributeList>& xAttrList ) +css::uno::Reference< css::xml::sax::XFastContextHandler > XMLConfigItemMapNamedContext::createFastChildContext( + sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) { - return CreateSettingsContext(GetImport(), nPrefix, rLocalName, xAttrList, maProp, this); + return CreateSettingsContext(GetImport(), nElement, xAttrList, maProp, this); } -void XMLConfigItemMapNamedContext::EndElement() +void XMLConfigItemMapNamedContext::endFastElement(sal_Int32 ) { if (mpBaseContext) { @@ -640,25 +578,23 @@ void XMLConfigItemMapNamedContext::EndElement() } } -XMLConfigItemMapIndexedContext::XMLConfigItemMapIndexedContext(SvXMLImport& rImport, sal_uInt16 nPrfx, - const OUString& rLName, - const css::uno::Reference< css::xml::sax::XAttributeList>&, +XMLConfigItemMapIndexedContext::XMLConfigItemMapIndexedContext(SvXMLImport& rImport, css::uno::Any& rAny, const OUString& rConfigItemName, XMLConfigBaseContext* pBaseContext) - : XMLConfigBaseContext(rImport, nPrfx, rLName, rAny, pBaseContext), + : XMLConfigBaseContext(rImport, rAny, pBaseContext), maConfigItemName( rConfigItemName ) { } -SvXMLImportContextRef XMLConfigItemMapIndexedContext::CreateChildContext( sal_uInt16 nPrefix, - const OUString& rLocalName, - const css::uno::Reference< css::xml::sax::XAttributeList>& xAttrList ) +css::uno::Reference< css::xml::sax::XFastContextHandler > XMLConfigItemMapIndexedContext::createFastChildContext( + sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) { - return CreateSettingsContext(GetImport(), nPrefix, rLocalName, xAttrList, maProp, this); + return CreateSettingsContext(GetImport(), nElement, xAttrList, maProp, this); } -void XMLConfigItemMapIndexedContext::EndElement() +void XMLConfigItemMapIndexedContext::endFastElement(sal_Int32 ) { if (mpBaseContext) { diff --git a/xmloff/source/draw/sdxmlimp.cxx b/xmloff/source/draw/sdxmlimp.cxx index fcf2a179d0f3..b14251d98e6c 100644 --- a/xmloff/source/draw/sdxmlimp.cxx +++ b/xmloff/source/draw/sdxmlimp.cxx @@ -129,14 +129,6 @@ SvXMLImportContextRef SdXMLDocContext_Impl::CreateChildContext( xContext = GetSdImport().CreateFontDeclsContext( rLocalName, xAttrList ); break; } - case XML_TOK_DOC_SETTINGS: - { - if( GetImport().getImportFlags() & SvXMLImportFlags::SETTINGS ) - { - xContext = new XMLDocumentSettingsContext(GetImport(), nPrefix, rLocalName, xAttrList ); - } - break; - } case XML_TOK_DOC_STYLES: { if( GetImport().getImportFlags() & SvXMLImportFlags::STYLES ) @@ -197,6 +189,14 @@ uno::Reference< xml::sax::XFastContextHandler > SAL_CALL SdXMLDocContext_Impl::c } break; } + case XML_ELEMENT(OFFICE, XML_SETTINGS): + { + if( GetImport().getImportFlags() & SvXMLImportFlags::SETTINGS ) + { + return new XMLDocumentSettingsContext(GetImport()); + } + break; + } } return nullptr; } |