diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2019-11-14 15:04:42 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2019-11-15 17:13:22 +0100 |
commit | 1872b44c9a2ee2bd00be54c6c310b72579d7a47f (patch) | |
tree | 047ea7435b7731dc1521a9ba80b5c2f0c5d88378 /xmloff/source/meta/xmlversion.cxx | |
parent | 5d23f7748f33414a95297fa9f374a37e76de687b (diff) |
use FastParser for the XMLVersionListImport
Change-Id: I90be4d9a599969e4f91d1515010be40f1870025a
Reviewed-on: https://gerrit.libreoffice.org/82685
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'xmloff/source/meta/xmlversion.cxx')
-rw-r--r-- | xmloff/source/meta/xmlversion.cxx | 103 |
1 files changed, 43 insertions, 60 deletions
diff --git a/xmloff/source/meta/xmlversion.cxx b/xmloff/source/meta/xmlversion.cxx index c4a71689ae84..2aa38a9d5292 100644 --- a/xmloff/source/meta/xmlversion.cxx +++ b/xmloff/source/meta/xmlversion.cxx @@ -31,7 +31,7 @@ #include <com/sun/star/util/DateTime.hpp> #include <com/sun/star/util/MeasureUnit.hpp> #include <com/sun/star/xml/sax/InputSource.hpp> -#include <com/sun/star/xml/sax/Parser.hpp> +#include <com/sun/star/xml/sax/FastParser.hpp> #include <com/sun/star/xml/sax/Writer.hpp> #include <com/sun/star/xml/sax/SAXParseException.hpp> #include <cppuhelper/supportsservice.hxx> @@ -113,105 +113,88 @@ XMLVersionListImport::XMLVersionListImport( XMLVersionListImport::~XMLVersionListImport() throw() {} -SvXMLImportContext *XMLVersionListImport::CreateDocumentContext( - sal_uInt16 nPrefix, - const OUString& rLocalName, - const Reference< XAttributeList > & xAttrList ) +SvXMLImportContext *XMLVersionListImport::CreateFastContext( sal_Int32 nElement, + const ::css::uno::Reference< ::css::xml::sax::XFastAttributeList >& xAttrList ) { SvXMLImportContext *pContext = nullptr; - if ( XML_NAMESPACE_FRAMEWORK == nPrefix && - rLocalName == xmloff::token::GetXMLToken(xmloff::token::XML_VERSION_LIST) ) + if ( nElement == XML_ELEMENT(FRAMEWORK, xmloff::token::XML_VERSION_LIST) ) { - pContext = new XMLVersionListContext( *this, nPrefix, rLocalName, xAttrList ); + pContext = new XMLVersionListContext( *this ); } else { - pContext = SvXMLImport::CreateDocumentContext( nPrefix, rLocalName, xAttrList ); + pContext = SvXMLImport::CreateFastContext( nElement, xAttrList ); } return pContext; } -XMLVersionListContext::XMLVersionListContext( XMLVersionListImport& rImport, - sal_uInt16 nPrefix, - const OUString& rLocalName, - const Reference< XAttributeList > & ) - : SvXMLImportContext( rImport, nPrefix, rLocalName ) - , rLocalRef( rImport ) +XMLVersionListContext::XMLVersionListContext( XMLVersionListImport& rImport) + : SvXMLImportContext( rImport ) { } XMLVersionListContext::~XMLVersionListContext() {} -SvXMLImportContextRef XMLVersionListContext::CreateChildContext( sal_uInt16 nPrefix, - const OUString& rLocalName, - const Reference< XAttributeList > & xAttrList ) +css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL +XMLVersionListContext::createFastChildContext(sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList) { SvXMLImportContext *pContext = nullptr; - if ( nPrefix == XML_NAMESPACE_FRAMEWORK && - rLocalName == xmloff::token::GetXMLToken(xmloff::token::XML_VERSION_ENTRY) ) + if ( nElement == XML_ELEMENT(FRAMEWORK, xmloff::token::XML_VERSION_ENTRY) ) { - pContext = new XMLVersionContext( rLocalRef, nPrefix, rLocalName, xAttrList ); + pContext = new XMLVersionContext( GetImport(), xAttrList ); } else { - pContext = new SvXMLImportContext( rLocalRef, nPrefix, rLocalName ); + pContext = new SvXMLImportContext( GetImport() ); } return pContext; } XMLVersionContext::XMLVersionContext( XMLVersionListImport& rImport, - sal_uInt16 nPref, - const OUString& rLocalName, - const Reference< XAttributeList > & xAttrList ) - : SvXMLImportContext( rImport, nPref, rLocalName ) - , rLocalRef( rImport ) + const Reference< XFastAttributeList > & xAttrList ) + : SvXMLImportContext( rImport ) { - sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; - - if ( !nAttrCount ) + sax_fastparser::FastAttributeList *pAttribList = + sax_fastparser::FastAttributeList::castToFastAttributeList( xAttrList ); + if ( pAttribList->getFastAttributeTokens().empty() ) return; - util::RevisionTag aInfo; - for ( sal_Int16 i=0; i < nAttrCount; i++ ) + for (auto &aIter : *pAttribList) { - OUString aLocalName; - const OUString& rAttrName = xAttrList->getNameByIndex( i ); - sal_uInt16 nPrefix = rImport.GetNamespaceMap().GetKeyByAttrName( rAttrName, &aLocalName ); - - if ( XML_NAMESPACE_FRAMEWORK == nPrefix ) + switch( aIter.getToken() ) { - if ( aLocalName == xmloff::token::GetXMLToken(xmloff::token::XML_TITLE) ) - { - const OUString& rAttrValue = xAttrList->getValueByIndex( i ); - aInfo.Identifier = rAttrValue; - } - else if ( aLocalName == xmloff::token::GetXMLToken(xmloff::token::XML_COMMENT) ) - { - const OUString& rAttrValue = xAttrList->getValueByIndex( i ); - aInfo.Comment = rAttrValue; - } - else if ( aLocalName == xmloff::token::GetXMLToken(xmloff::token::XML_CREATOR) ) - { - const OUString& rAttrValue = xAttrList->getValueByIndex( i ); - aInfo.Author = rAttrValue; - } + case XML_ELEMENT(FRAMEWORK, xmloff::token::XML_TITLE): + { + aInfo.Identifier = aIter.toString(); + break; + } + case XML_ELEMENT(FRAMEWORK, xmloff::token::XML_COMMENT): + { + aInfo.Comment = aIter.toString(); + break; } - else if ( ( XML_NAMESPACE_DC == nPrefix ) && - ( aLocalName == xmloff::token::GetXMLToken(xmloff::token::XML_DATE_TIME) ) ) + case XML_ELEMENT(FRAMEWORK, xmloff::token::XML_CREATOR): + { + aInfo.Author = aIter.toString(); + break; + } + case XML_ELEMENT(DC, xmloff::token::XML_DATE_TIME): { - const OUString& rAttrValue = xAttrList->getValueByIndex( i ); util::DateTime aTime; - if ( ParseISODateTimeString( rAttrValue, aTime ) ) + if ( ParseISODateTimeString( aIter.toString(), aTime ) ) aInfo.TimeStamp = aTime; + break; + } } } - uno::Sequence < util::RevisionTag >& aList = rLocalRef.GetList(); + uno::Sequence < util::RevisionTag >& aList = rImport.GetList(); sal_Int32 nLength = aList.getLength(); aList.realloc( nLength+1 ); aList[nLength] = aInfo; @@ -398,11 +381,11 @@ uno::Sequence< util::RevisionTag > SAL_CALL XMLVersionListPersistence::load( con throw uno::RuntimeException(); // get filter - Reference< XDocumentHandler > xFilter = new XMLVersionListImport( xContext, aVersions ); + Reference< XFastDocumentHandler > xFilter = new XMLVersionListImport( xContext, aVersions ); // connect parser and filter - Reference< XParser > xParser = xml::sax::Parser::create(xContext); - xParser->setDocumentHandler( xFilter ); + Reference< XFastParser > xParser = xml::sax::FastParser::create(xContext); + xParser->setFastDocumentHandler( xFilter ); // parse try |