[Libreoffice-commits] core.git: xmloff/inc xmloff/source

Noel Grandin (via logerrit) logerrit at kemper.freedesktop.org
Fri Nov 15 16:14:48 UTC 2019


 xmloff/inc/xmlversion.hxx         |   25 +++------
 xmloff/source/meta/xmlversion.cxx |  103 +++++++++++++++-----------------------
 2 files changed, 52 insertions(+), 76 deletions(-)

New commits:
commit 1872b44c9a2ee2bd00be54c6c310b72579d7a47f
Author:     Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Thu Nov 14 15:04:42 2019 +0200
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Fri Nov 15 17:13:22 2019 +0100

    use FastParser for the XMLVersionListImport
    
    Change-Id: I90be4d9a599969e4f91d1515010be40f1870025a
    Reviewed-on: https://gerrit.libreoffice.org/82685
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/xmloff/inc/xmlversion.hxx b/xmloff/inc/xmlversion.hxx
index 0e2b9d855912..820903f3e043 100644
--- a/xmloff/inc/xmlversion.hxx
+++ b/xmloff/inc/xmlversion.hxx
@@ -54,9 +54,8 @@ private:
 
 protected:
 
-    virtual SvXMLImportContext *CreateDocumentContext( sal_uInt16 nPrefix,
-                    const OUString& rLocalName,
-                    const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList ) override;
+    virtual SvXMLImportContext *CreateFastContext( sal_Int32 Element,
+        const ::css::uno::Reference< ::css::xml::sax::XFastAttributeList >& xAttrList ) override;
 
 public:
 
@@ -72,27 +71,23 @@ public:
 class XMLVersionListContext : public SvXMLImportContext
 {
 private:
-    XMLVersionListImport & rLocalRef;
+    XMLVersionListImport & GetImport() { return static_cast<XMLVersionListImport&>(SvXMLImportContext::GetImport()); }
 
 public:
 
-    XMLVersionListContext( XMLVersionListImport& rImport,
-                           sal_uInt16 nPrefix,
-                           const OUString& rLocalName,
-                           const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList );
+    XMLVersionListContext( XMLVersionListImport& rImport );
 
     virtual ~XMLVersionListContext() 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 > & xAttribs) override;
 };
 
 class XMLVersionContext: public SvXMLImportContext
 {
 private:
-    XMLVersionListImport&  rLocalRef;
+    XMLVersionListImport&  GetImport() { return static_cast<XMLVersionListImport&>(SvXMLImportContext::GetImport()); }
 
     static bool         ParseISODateTimeString(
                                 const OUString& rString,
@@ -101,9 +96,7 @@ private:
 public:
 
     XMLVersionContext( XMLVersionListImport& rImport,
-                          sal_uInt16 nPrefix,
-                          const OUString& rLocalName,
-                          const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList );
+                          const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList );
 
     virtual ~XMLVersionContext() override;
 };
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


More information about the Libreoffice-commits mailing list