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

Noel Grandin (via logerrit) logerrit at kemper.freedesktop.org
Tue Jan 21 10:09:53 UTC 2020


 xmloff/source/draw/sdxmlimp.cxx |   47 +++++++++-------------
 xmloff/source/draw/ximpbody.cxx |   24 ++++++++---
 xmloff/source/draw/ximpbody.hxx |    8 +++
 xmloff/source/draw/ximpshow.cxx |   85 +++++++++++++++++++++-------------------
 xmloff/source/draw/ximpshow.hxx |   11 ++---
 5 files changed, 97 insertions(+), 78 deletions(-)

New commits:
commit 24b0ef899e10e03743cf01f737f1c07167f391ec
Author:     Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Tue Jan 21 10:54:17 2020 +0200
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Tue Jan 21 11:09:29 2020 +0100

    Use FastParser in SdXMLBodyContext
    
    Change-Id: I1070ca2351f7bfb2e0c10ba6e876ebcf2cae0ce0
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/87118
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/xmloff/source/draw/sdxmlimp.cxx b/xmloff/source/draw/sdxmlimp.cxx
index dfb4bf267ea8..fcf2a179d0f3 100644
--- a/xmloff/source/draw/sdxmlimp.cxx
+++ b/xmloff/source/draw/sdxmlimp.cxx
@@ -56,31 +56,27 @@ class SdXMLBodyContext_Impl : public SvXMLImportContext
 
 public:
 
-    SdXMLBodyContext_Impl( SdXMLImport& rImport, sal_uInt16 nPrfx,
-                const OUString& rLName,
-                const uno::Reference< xml::sax::XAttributeList > & xAttrList );
+    SdXMLBodyContext_Impl( SdXMLImport& rImport );
 
-    virtual SvXMLImportContextRef CreateChildContext( sal_uInt16 nPrefix,
-                const OUString& rLocalName,
-                const uno::Reference< xml::sax::XAttributeList > & xAttrList ) override;
+    virtual void SAL_CALL startFastElement( sal_Int32 /*nElement*/,
+                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 >& AttrList ) override;
 };
 
 }
 
-SdXMLBodyContext_Impl::SdXMLBodyContext_Impl( SdXMLImport& rImport,
-                sal_uInt16 nPrfx, const OUString& rLName,
-                const uno::Reference< xml::sax::XAttributeList > & ) :
-    SvXMLImportContext( rImport, nPrfx, rLName )
+SdXMLBodyContext_Impl::SdXMLBodyContext_Impl( SdXMLImport& rImport ) :
+    SvXMLImportContext( rImport )
 {
 }
 
-SvXMLImportContextRef SdXMLBodyContext_Impl::CreateChildContext(
-        sal_uInt16 /*nPrefix*/,
-        const OUString& rLocalName,
-        const uno::Reference< xml::sax::XAttributeList > & /*xAttrList*/ )
+css::uno::Reference< css::xml::sax::XFastContextHandler > SdXMLBodyContext_Impl::createFastChildContext(
+        sal_Int32 /*nElement*/,
+        const uno::Reference< xml::sax::XFastAttributeList > & /*xAttrList*/ )
 {
-    SvXMLImportContext* pContext = new SdXMLBodyContext(GetSdImport(), rLocalName);
-    return pContext;
+    return new SdXMLBodyContext(GetSdImport());
 }
 
 namespace {
@@ -164,16 +160,6 @@ SvXMLImportContextRef SdXMLDocContext_Impl::CreateChildContext(
             SAL_INFO("xmloff.draw", "XML_TOK_DOC_META: should not have come here, maybe document is invalid?");
             break;
         }
-        case XML_TOK_DOC_BODY:
-        {
-            if( GetImport().getImportFlags() & SvXMLImportFlags::CONTENT )
-            {
-                // office:body inside office:document
-                xContext = new SdXMLBodyContext_Impl(GetSdImport(),nPrefix,
-                                                     rLocalName, xAttrList);
-            }
-            break;
-        }
     }
 
     return xContext;
@@ -202,6 +188,15 @@ uno::Reference< xml::sax::XFastContextHandler > SAL_CALL SdXMLDocContext_Impl::c
             }
             break;
         }
+        case XML_ELEMENT(OFFICE, XML_BODY):
+        {
+            if( GetImport().getImportFlags() & SvXMLImportFlags::CONTENT )
+            {
+                // office:body inside office:document
+                return new SdXMLBodyContext_Impl(GetSdImport());
+            }
+            break;
+        }
     }
     return nullptr;
 }
diff --git a/xmloff/source/draw/ximpbody.cxx b/xmloff/source/draw/ximpbody.cxx
index d6ff5ee2033e..f99346709dbe 100644
--- a/xmloff/source/draw/ximpbody.cxx
+++ b/xmloff/source/draw/ximpbody.cxx
@@ -37,6 +37,7 @@
 #include <sal/log.hxx>
 
 using namespace ::com::sun::star;
+using namespace ::xmloff::token;
 
 SdXMLDrawPageContext::SdXMLDrawPageContext( SdXMLImport& rImport,
     sal_uInt16 nPrfx, const OUString& rLocalName,
@@ -277,9 +278,8 @@ void SdXMLDrawPageContext::EndElement()
     }
 }
 
-SdXMLBodyContext::SdXMLBodyContext( SdXMLImport& rImport,
-    const OUString& rLocalName )
-:   SvXMLImportContext( rImport, XML_NAMESPACE_OFFICE, rLocalName )
+SdXMLBodyContext::SdXMLBodyContext( SdXMLImport& rImport )
+:   SvXMLImportContext( rImport )
 {
 }
 
@@ -287,6 +287,20 @@ SdXMLBodyContext::~SdXMLBodyContext()
 {
 }
 
+css::uno::Reference< css::xml::sax::XFastContextHandler > SdXMLBodyContext::createFastChildContext(
+     sal_Int32 nElement,
+     const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList )
+{
+    switch (nElement)
+    {
+        case XML_ELEMENT(PRESENTATION, XML_SETTINGS):
+        {
+            return new SdXMLShowsContext( GetSdImport(), xAttrList );
+        }
+    }
+    return nullptr;
+}
+
 SvXMLImportContextRef SdXMLBodyContext::CreateChildContext(
     sal_uInt16 nPrefix,
     const OUString& rLocalName,
@@ -340,10 +354,6 @@ SvXMLImportContextRef SdXMLBodyContext::CreateChildContext(
             }
             break;
         }
-        case XML_TOK_BODY_SETTINGS:
-        {
-            xContext = new SdXMLShowsContext( GetSdImport(), nPrefix, rLocalName, xAttrList );
-        }
     }
 
     return xContext;
diff --git a/xmloff/source/draw/ximpbody.hxx b/xmloff/source/draw/ximpbody.hxx
index a23826462a78..9c527d823961 100644
--- a/xmloff/source/draw/ximpbody.hxx
+++ b/xmloff/source/draw/ximpbody.hxx
@@ -55,9 +55,15 @@ class SdXMLBodyContext : public SvXMLImportContext
     SdXMLImport& GetSdImport() { return static_cast<SdXMLImport&>(GetImport()); }
 
 public:
-    SdXMLBodyContext( SdXMLImport& rImport, const OUString& rLocalName );
+    SdXMLBodyContext( SdXMLImport& rImport );
     virtual ~SdXMLBodyContext() override;
 
+    virtual void SAL_CALL startFastElement( sal_Int32 /*nElement*/,
+                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 >& AttrList ) override;
+
     virtual SvXMLImportContextRef CreateChildContext(
         sal_uInt16 nPrefix, const OUString& rLocalName,
         const css::uno::Reference< css::xml::sax::XAttributeList>& xAttrList ) override;
diff --git a/xmloff/source/draw/ximpshow.cxx b/xmloff/source/draw/ximpshow.cxx
index 42d3589d17b1..a971bda8b535 100644
--- a/xmloff/source/draw/ximpshow.cxx
+++ b/xmloff/source/draw/ximpshow.cxx
@@ -58,8 +58,8 @@ public:
 };
 
 
-SdXMLShowsContext::SdXMLShowsContext( SdXMLImport& rImport,  sal_uInt16 nPrfx, const OUString& rLocalName,  const Reference< XAttributeList >& xAttrList )
-:   SvXMLImportContext(rImport, nPrfx, rLocalName),
+SdXMLShowsContext::SdXMLShowsContext( SdXMLImport& rImport, const Reference< XFastAttributeList >& xAttrList )
+:   SvXMLImportContext(rImport),
     mpImpl(new ShowsImpImpl )
 {
 
@@ -88,28 +88,27 @@ SdXMLShowsContext::SdXMLShowsContext( SdXMLImport& rImport,  sal_uInt16 nPrfx, c
             bIsMouseVisible = false;
 
         // read attributes
-        const 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 );
+            OUString sValue = aIter.toString();
 
-            switch( nPrefix )
+            switch( aIter.getToken() )
             {
-            case XML_NAMESPACE_PRESENTATION:
-                if( IsXMLToken( aLocalName, XML_START_PAGE ) )
+                case XML_ELEMENT(PRESENTATION, XML_START_PAGE):
                 {
                     mpImpl->mxPresProps->setPropertyValue("FirstPage", Any(sValue) );
                     bAll = false;
+                    break;
                 }
-                else if( IsXMLToken( aLocalName, XML_SHOW ) )
+                case XML_ELEMENT(PRESENTATION, XML_SHOW):
                 {
                     mpImpl->maCustomShowName = sValue;
                     bAll = false;
+                    break;
                 }
-                else if( IsXMLToken( aLocalName, XML_PAUSE ) )
+                case XML_ELEMENT(PRESENTATION, XML_PAUSE):
                 {
                     Duration aDuration;
                     if (!::sax::Converter::convertDuration(aDuration,  sValue))
@@ -118,55 +117,66 @@ SdXMLShowsContext::SdXMLShowsContext( SdXMLImport& rImport,  sal_uInt16 nPrfx, c
                     const sal_Int32 nMS = (aDuration.Hours * 60 +
                             aDuration.Minutes) * 60 + aDuration.Seconds;
                     mpImpl->mxPresProps->setPropertyValue("Pause", Any(nMS) );
+                    break;
                 }
-                else if( IsXMLToken( aLocalName, XML_ANIMATIONS ) )
+                case XML_ELEMENT(PRESENTATION, XML_ANIMATIONS):
                 {
                     aAny <<= IsXMLToken( sValue, XML_ENABLED );
                     mpImpl->mxPresProps->setPropertyValue("AllowAnimations", aAny );
+                    break;
                 }
-                else if( IsXMLToken( aLocalName, XML_STAY_ON_TOP ) )
+                case XML_ELEMENT(PRESENTATION, XML_STAY_ON_TOP):
                 {
                     aAny <<= IsXMLToken( sValue, XML_TRUE );
                     mpImpl->mxPresProps->setPropertyValue("IsAlwaysOnTop", aAny );
+                    break;
                 }
-                else if( IsXMLToken( aLocalName, XML_FORCE_MANUAL ) )
+                case XML_ELEMENT(PRESENTATION, XML_FORCE_MANUAL):
                 {
                     aAny <<= IsXMLToken( sValue, XML_TRUE );
                     mpImpl->mxPresProps->setPropertyValue("IsAutomatic", aAny );
+                    break;
                 }
-                else if( IsXMLToken( aLocalName, XML_ENDLESS ) )
+                case XML_ELEMENT(PRESENTATION, XML_ENDLESS):
                 {
                     aAny <<= IsXMLToken( sValue, XML_TRUE );
                     mpImpl->mxPresProps->setPropertyValue("IsEndless", aAny );
+                    break;
                 }
-                else if( IsXMLToken( aLocalName, XML_FULL_SCREEN ) )
+                case XML_ELEMENT(PRESENTATION, XML_FULL_SCREEN):
                 {
                     aAny <<= IsXMLToken( sValue, XML_TRUE );
                     mpImpl->mxPresProps->setPropertyValue("IsFullScreen", aAny );
+                    break;
                 }
-                else if( IsXMLToken( aLocalName, XML_MOUSE_VISIBLE ) )
+                case XML_ELEMENT(PRESENTATION, XML_MOUSE_VISIBLE):
                 {
                     bIsMouseVisible = IsXMLToken( sValue, XML_TRUE );
+                    break;
                 }
-                else if( IsXMLToken( aLocalName, XML_START_WITH_NAVIGATOR ) )
+                case XML_ELEMENT(PRESENTATION, XML_START_WITH_NAVIGATOR):
                 {
                     aAny <<= IsXMLToken( sValue, XML_TRUE );
                     mpImpl->mxPresProps->setPropertyValue("StartWithNavigator", aAny );
+                    break;
                 }
-                else if( IsXMLToken( aLocalName, XML_MOUSE_AS_PEN ) )
+                case XML_ELEMENT(PRESENTATION, XML_MOUSE_AS_PEN):
                 {
                     aAny <<= IsXMLToken( sValue, XML_TRUE );
                     mpImpl->mxPresProps->setPropertyValue("UsePen", aAny );
+                    break;
                 }
-                else if( IsXMLToken( aLocalName, XML_TRANSITION_ON_CLICK ) )
+                case XML_ELEMENT(PRESENTATION, XML_TRANSITION_ON_CLICK):
                 {
                     aAny <<= IsXMLToken( sValue, XML_ENABLED );
                     mpImpl->mxPresProps->setPropertyValue("IsTransitionOnClick", aAny );
+                    break;
                 }
-                else if( IsXMLToken( aLocalName, XML_SHOW_LOGO ) )
+                case XML_ELEMENT(PRESENTATION, XML_SHOW_LOGO):
                 {
                     aAny <<= IsXMLToken( sValue, XML_TRUE );
                     mpImpl->mxPresProps->setPropertyValue("IsShowLogo", aAny );
+                    break;
                 }
             }
         }
@@ -185,33 +195,30 @@ SdXMLShowsContext::~SdXMLShowsContext()
     }
 }
 
-SvXMLImportContextRef SdXMLShowsContext::CreateChildContext( sal_uInt16 p_nPrefix, const OUString& rLocalName, const Reference< XAttributeList>& xAttrList )
+css::uno::Reference< css::xml::sax::XFastContextHandler > SdXMLShowsContext::createFastChildContext(
+    sal_Int32 nElement,
+    const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList )
 {
-    if( mpImpl && p_nPrefix == XML_NAMESPACE_PRESENTATION && IsXMLToken( rLocalName, XML_SHOW ) )
+    if( nElement == XML_ELEMENT(PRESENTATION, XML_SHOW) )
     {
         OUString aName;
         OUString aPages;
 
         // read attributes
-        const 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 );
+            OUString sValue = aIter.toString();
 
-            switch( nPrefix )
+            switch( aIter.getToken() )
             {
-            case XML_NAMESPACE_PRESENTATION:
-                if( IsXMLToken( aLocalName, XML_NAME ) )
-                {
+                case XML_ELEMENT(PRESENTATION, XML_NAME):
                     aName = sValue;
-                }
-                else if( IsXMLToken( aLocalName, XML_PAGES ) )
-                {
+                    break;
+                case XML_ELEMENT(PRESENTATION, XML_PAGES):
                     aPages = sValue;
-                }
+                    break;
             }
         }
 
diff --git a/xmloff/source/draw/ximpshow.hxx b/xmloff/source/draw/ximpshow.hxx
index 3764b5922879..b7c4b3b492d8 100644
--- a/xmloff/source/draw/ximpshow.hxx
+++ b/xmloff/source/draw/ximpshow.hxx
@@ -35,13 +35,14 @@ class SdXMLShowsContext : public SvXMLImportContext
 public:
 
     SdXMLShowsContext( SdXMLImport& rImport,
-        sal_uInt16 nPrfx,
-        const OUString& rLocalName,
-        const css::uno::Reference< css::xml::sax::XAttributeList>& xAttrList);
+        const css::uno::Reference< css::xml::sax::XFastAttributeList>& xAttrList);
     virtual ~SdXMLShowsContext() override;
 
-    virtual SvXMLImportContextRef CreateChildContext( sal_uInt16 nPrefix, const OUString& rLocalName,
-        const css::uno::Reference< css::xml::sax::XAttributeList>& xAttrList ) override;
+    virtual void SAL_CALL startFastElement( sal_Int32 /*nElement*/,
+                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 >& AttrList ) override;
 };
 
 #endif // INCLUDED_XMLOFF_SOURCE_DRAW_XIMPSHOW_HXX


More information about the Libreoffice-commits mailing list