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

Noel Grandin (via logerrit) logerrit at kemper.freedesktop.org
Sat Aug 29 13:29:14 UTC 2020


 include/xmloff/xmlprcon.hxx                           |   25 +---
 include/xmloff/xmlprmap.hxx                           |    6 +
 sc/source/filter/xml/xmlstyli.cxx                     |   45 +++-----
 xmloff/inc/XMLBackgroundImageContext.hxx              |   11 +-
 xmloff/inc/XMLElementPropertyContext.hxx              |    8 -
 xmloff/inc/XMLShapePropertySetContext.hxx             |   20 +--
 xmloff/inc/XMLTextColumnsContext.hxx                  |    9 -
 xmloff/inc/xmltabi.hxx                                |   10 -
 xmloff/source/chart/XMLChartPropertyContext.cxx       |   20 +--
 xmloff/source/chart/XMLChartPropertyContext.hxx       |    9 -
 xmloff/source/chart/XMLLabelSeparatorContext.cxx      |   11 --
 xmloff/source/chart/XMLLabelSeparatorContext.hxx      |    9 -
 xmloff/source/chart/XMLSymbolImageContext.cxx         |   41 +++-----
 xmloff/source/chart/XMLSymbolImageContext.hxx         |    9 -
 xmloff/source/draw/XMLShapePropertySetContext.cxx     |   40 ++-----
 xmloff/source/draw/ximpstyl.cxx                       |   42 +++-----
 xmloff/source/style/PagePropertySetContext.cxx        |   31 ++----
 xmloff/source/style/PagePropertySetContext.hxx        |   12 +-
 xmloff/source/style/XMLBackgroundImageContext.cxx     |   57 +++++------
 xmloff/source/style/XMLElementPropertyContext.cxx     |   10 -
 xmloff/source/style/XMLFootnoteSeparatorImport.cxx    |   47 ++++-----
 xmloff/source/style/XMLFootnoteSeparatorImport.hxx    |    7 -
 xmloff/source/style/xmlprcon.cxx                      |   48 ++-------
 xmloff/source/style/xmlprmap.cxx                      |   32 ++++++
 xmloff/source/style/xmltabi.cxx                       |   91 ++++++++----------
 xmloff/source/text/XMLSectionFootnoteConfigImport.cxx |   45 ++++----
 xmloff/source/text/XMLSectionFootnoteConfigImport.hxx |    7 -
 xmloff/source/text/XMLTextColumnsContext.cxx          |   43 +++-----
 xmloff/source/text/XMLTextPropertySetContext.cxx      |   54 +++-------
 xmloff/source/text/XMLTextPropertySetContext.hxx      |   20 +--
 xmloff/source/text/XMLTextShapeStyleContext.cxx       |   38 +++----
 xmloff/source/text/txtdropi.cxx                       |   49 ++++-----
 xmloff/source/text/txtdropi.hxx                       |   11 +-
 33 files changed, 412 insertions(+), 505 deletions(-)

New commits:
commit 9814c1f2edf56ecc0f31001db9234ef335488879
Author:     Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Fri Aug 28 15:25:40 2020 +0200
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Sat Aug 29 15:28:22 2020 +0200

    use fastparser in SvXMLPropertySetContext subclasses
    
    Change-Id: I977f1cf198652d3c73e5a0f473794975a5647617
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/101564
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/include/xmloff/xmlprcon.hxx b/include/xmloff/xmlprcon.hxx
index 97d9487716dc..9a430adb97ff 100644
--- a/include/xmloff/xmlprcon.hxx
+++ b/include/xmloff/xmlprcon.hxx
@@ -38,15 +38,6 @@ protected:
 
 public:
 
-    SvXMLPropertySetContext(
-            SvXMLImport& rImport, sal_uInt16 nPrfx,
-            const OUString& rLName,
-            const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList,
-            sal_uInt32 nFamily,
-            ::std::vector< XMLPropertyState > &rProps,
-            const rtl::Reference < SvXMLImportPropertyMapper > &rMap,
-              sal_Int32 nStartIdx = -1, sal_Int32 nEndIdx = -1 );
-
     SvXMLPropertySetContext(
             SvXMLImport& rImport, sal_Int32 nElement,
             const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList,
@@ -60,18 +51,18 @@ public:
     virtual void SAL_CALL startFastElement( sal_Int32 /*nElement*/,
         const css::uno::Reference< css::xml::sax::XFastAttributeList >& ) 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 >& AttrList ) override;
 
     // This method is called from this instance implementation of
     // CreateChildContext if the element matches an entry in the
     // SvXMLImportItemMapper with the mid flag MID_FLAG_ELEMENT_ITEM_IMPORT
-    virtual SvXMLImportContextRef CreateChildContext( sal_uInt16 nPrefix,
-                                   const OUString& rLocalName,
-                                   const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList,
-                                   ::std::vector< XMLPropertyState > &rProperties,
-                                   const XMLPropertyState& rProp );
+    virtual css::uno::Reference< css::xml::sax::XFastContextHandler > createFastChildContext(
+        sal_Int32 nElement,
+        const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList,
+        ::std::vector< XMLPropertyState > &rProperties,
+        const XMLPropertyState& rProp );
 
 };
 
diff --git a/include/xmloff/xmlprmap.hxx b/include/xmloff/xmlprmap.hxx
index 19e9ab80c0c4..f38223cc13b8 100644
--- a/include/xmloff/xmlprmap.hxx
+++ b/include/xmloff/xmlprmap.hxx
@@ -93,6 +93,12 @@ public:
         sal_uInt16 nNamespace, const OUString& rStrName, sal_uInt32 nPropType,
         sal_Int32 nStartAt = -1 ) const;
 
+    /** Returns the index of an entry with the given XML-name and namespace
+        If there is no matching entry the method returns -1 */
+    sal_Int32 GetEntryIndex(
+        sal_Int32 nElement, sal_uInt32 nPropType,
+        sal_Int32 nStartAt = -1 ) const;
+
     /** Retrieves a PropertyHandler for that property which placed at nIndex in the XMLPropertyMapEntry-array */
     const XMLPropertyHandler* GetPropertyHandler( sal_Int32 nIndex ) const;
 
diff --git a/sc/source/filter/xml/xmlstyli.cxx b/sc/source/filter/xml/xmlstyli.cxx
index 364b212cd393..191e8a6323d7 100644
--- a/sc/source/filter/xml/xmlstyli.cxx
+++ b/sc/source/filter/xml/xmlstyli.cxx
@@ -273,11 +273,12 @@ class XMLTableCellPropsContext : public SvXMLPropertySetContext
              ::std::vector< XMLPropertyState > &rProps,
              const rtl::Reference < SvXMLImportPropertyMapper > &rMap);
 
-        virtual SvXMLImportContextRef CreateChildContext( sal_uInt16 nPrefix,
-            const OUString& rLocalName,
-            const uno::Reference< xml::sax::XAttributeList >& xAttrList,
-           ::std::vector< XMLPropertyState > &rProperties,
-           const XMLPropertyState& rProp ) override;
+    using SvXMLPropertySetContext::createFastChildContext;
+    virtual css::uno::Reference< css::xml::sax::XFastContextHandler > createFastChildContext(
+        sal_Int32 nElement,
+        const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList,
+        ::std::vector< XMLPropertyState > &rProperties,
+        const XMLPropertyState& rProp ) override;
 };
 
 }
@@ -293,33 +294,25 @@ XMLTableCellPropsContext::XMLTableCellPropsContext(
 {
 }
 
-SvXMLImportContextRef XMLTableCellPropsContext::CreateChildContext( sal_uInt16 nPrefix,
-            const OUString& rLocalName,
-            const uno::Reference< xml::sax::XAttributeList >& xAttrList,
-           ::std::vector< XMLPropertyState > &rProperties,
-           const XMLPropertyState& rProp )
+css::uno::Reference< css::xml::sax::XFastContextHandler > XMLTableCellPropsContext::createFastChildContext(
+    sal_Int32 nElement,
+    const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList,
+    ::std::vector< XMLPropertyState > &rProperties,
+    const XMLPropertyState& rProp )
 {
     // no need for a custom context or indeed a SvXMLTokenMap to grab just the
     // single attribute ( href ) that we are interested in.
     // still though, we will check namespaces etc.
-    if ((XML_NAMESPACE_STYLE == nPrefix || XML_NAMESPACE_LO_EXT == nPrefix)
-        && IsXMLToken(rLocalName, XML_HYPERLINK))
+    if (nElement == XML_ELEMENT(STYLE, XML_HYPERLINK) ||
+        nElement == XML_ELEMENT(LO_EXT, XML_HYPERLINK) )
     {
         OUString sURL;
-        for ( int i=0; i<xAttrList->getLength(); ++i )
+        for (auto &aIter : sax_fastparser::castToFastAttributeList( xAttrList ))
         {
-            OUString aLocalName;
-            OUString sName = xAttrList->getNameByIndex(i);
-            sal_uInt16 nPrfx = GetImport().GetNamespaceMap().GetKeyByAttrName( sName,
-                                                            &aLocalName );
-            if ( nPrfx == XML_NAMESPACE_XLINK )
-            {
-                if ( IsXMLToken( aLocalName, XML_HREF ) )
-                {
-                    sURL = xAttrList->getValueByIndex(i);
-                    break;
-                }
-            }
+            if ( aIter.getToken() == XML_ELEMENT(XLINK, XML_HREF) )
+                sURL = aIter.toString();
+            else
+                SAL_WARN("sc", "unknown attribute " << SvXMLImport::getPrefixAndNameFromToken(aIter.getToken()) << "=" << aIter.toString());
         }
         if ( !sURL.isEmpty() )
         {
@@ -328,7 +321,7 @@ SvXMLImportContextRef XMLTableCellPropsContext::CreateChildContext( sal_uInt16 n
             rProperties.push_back( aProp );
         }
     }
-    return SvXMLPropertySetContext::CreateChildContext( nPrefix, rLocalName, xAttrList, rProperties, rProp );
+    return SvXMLPropertySetContext::createFastChildContext( nElement, xAttrList, rProperties, rProp );
 }
 
 namespace {
diff --git a/xmloff/inc/XMLBackgroundImageContext.hxx b/xmloff/inc/XMLBackgroundImageContext.hxx
index 02152f1503d2..c5ffa768710d 100644
--- a/xmloff/inc/XMLBackgroundImageContext.hxx
+++ b/xmloff/inc/XMLBackgroundImageContext.hxx
@@ -43,15 +43,14 @@ class XMLBackgroundImageContext final : public XMLElementPropertyContext
 
 private:
     void ProcessAttrs(
-            const css::uno::Reference<css::xml::sax::XAttributeList > & xAttrList );
+            const css::uno::Reference<css::xml::sax::XFastAttributeList > & xAttrList );
 
 public:
 
     XMLBackgroundImageContext(
         SvXMLImport& rImport,
-        sal_uInt16 nPrfx,
-        const OUString& rLName,
-        const css::uno::Reference<css::xml::sax::XAttributeList > & xAttrList,
+        sal_Int32 nElement,
+        const css::uno::Reference<css::xml::sax::XFastAttributeList > & xAttrList,
         const XMLPropertyState& rProp,
         sal_Int32 nPosIdx,
         sal_Int32 nFilterIdx,
@@ -65,7 +64,9 @@ public:
                 const OUString& rLocalName,
                  const css::uno::Reference<css::xml::sax::XAttributeList > & xAttrList ) override;
 
-    virtual void EndElement() 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;
 };
 
 
diff --git a/xmloff/inc/XMLElementPropertyContext.hxx b/xmloff/inc/XMLElementPropertyContext.hxx
index 2027131cc493..5c09efc05559 100644
--- a/xmloff/inc/XMLElementPropertyContext.hxx
+++ b/xmloff/inc/XMLElementPropertyContext.hxx
@@ -39,14 +39,16 @@ protected:
 
 public:
 
-    XMLElementPropertyContext( SvXMLImport& rImport, sal_uInt16 nPrfx,
-                               const OUString& rLName,
+    XMLElementPropertyContext( SvXMLImport& rImport, sal_Int32 nElement,
                                const XMLPropertyState& rProp,
                                 ::std::vector< XMLPropertyState > &rProps );
 
     virtual ~XMLElementPropertyContext() override;
 
-    virtual void EndElement() 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;
+
 };
 
 
diff --git a/xmloff/inc/XMLShapePropertySetContext.hxx b/xmloff/inc/XMLShapePropertySetContext.hxx
index 9aab3078d5d5..ce34224c5865 100644
--- a/xmloff/inc/XMLShapePropertySetContext.hxx
+++ b/xmloff/inc/XMLShapePropertySetContext.hxx
@@ -30,12 +30,6 @@ class XMLShapePropertySetContext : public SvXMLPropertySetContext
 public:
 
 
-    XMLShapePropertySetContext( SvXMLImport& rImport, sal_uInt16 nPrfx,
-                const OUString& rLName,
-                 const css::uno::Reference<css::xml::sax::XAttributeList >& xAttrList,
-                 sal_uInt32 nFam,
-                 ::std::vector< XMLPropertyState > &rProps,
-                 const rtl::Reference < SvXMLImportPropertyMapper > &rMap );
     XMLShapePropertySetContext( SvXMLImport& rImport, sal_Int32 nElement,
                  const css::uno::Reference<css::xml::sax::XFastAttributeList >& xAttrList,
                  sal_uInt32 nFam,
@@ -44,14 +38,14 @@ public:
 
     virtual ~XMLShapePropertySetContext() override;
 
-    virtual void EndElement() override;
+    virtual void SAL_CALL endFastElement(sal_Int32 nElement) override;
 
-    using SvXMLPropertySetContext::CreateChildContext;
-    virtual SvXMLImportContextRef CreateChildContext( sal_uInt16 nPrefix,
-                                   const OUString& rLocalName,
-                                   const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList,
-                                   ::std::vector< XMLPropertyState > &rProperties,
-                                   const XMLPropertyState& rProp) override;
+    using SvXMLPropertySetContext::createFastChildContext;
+    virtual css::uno::Reference< css::xml::sax::XFastContextHandler > createFastChildContext(
+        sal_Int32 nElement,
+        const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList,
+        ::std::vector< XMLPropertyState > &rProperties,
+        const XMLPropertyState& rProp ) override;
 };
 
 #endif
diff --git a/xmloff/inc/XMLTextColumnsContext.hxx b/xmloff/inc/XMLTextColumnsContext.hxx
index 1ebaa23d0342..82a64395040f 100644
--- a/xmloff/inc/XMLTextColumnsContext.hxx
+++ b/xmloff/inc/XMLTextColumnsContext.hxx
@@ -45,9 +45,8 @@ class XMLTextColumnsContext final :public XMLElementPropertyContext
 public:
 
     XMLTextColumnsContext(
-        SvXMLImport& rImport, sal_uInt16 nPrfx,
-        const OUString& rLName,
-        const css::uno::Reference<css::xml::sax::XAttributeList > & xAttrList,
+        SvXMLImport& rImport, sal_Int32 nElement,
+        const css::uno::Reference<css::xml::sax::XFastAttributeList > & xAttrList,
         const XMLPropertyState& rProp,
         ::std::vector< XMLPropertyState > &rProps );
 
@@ -55,7 +54,9 @@ public:
                                    const OUString& rLocalName,
                                    const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList ) override;
 
-    virtual void EndElement() 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;
 };
 
 
diff --git a/xmloff/inc/xmltabi.hxx b/xmloff/inc/xmltabi.hxx
index 229f784d6fa8..bc51546cdd4a 100644
--- a/xmloff/inc/xmltabi.hxx
+++ b/xmloff/inc/xmltabi.hxx
@@ -36,16 +36,14 @@ private:
 
 public:
 
-    SvxXMLTabStopImportContext( SvXMLImport& rImport, sal_uInt16 nPrfx,
-                                const OUString& rLName,
+    SvxXMLTabStopImportContext( SvXMLImport& rImport, sal_Int32 nElement,
                                 const XMLPropertyState& rProp,
                                  ::std::vector< XMLPropertyState > &rProps );
 
-    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;
 };
 
 
diff --git a/xmloff/source/chart/XMLChartPropertyContext.cxx b/xmloff/source/chart/XMLChartPropertyContext.cxx
index 4055332f3efe..83cc7bb9aaf8 100644
--- a/xmloff/source/chart/XMLChartPropertyContext.cxx
+++ b/xmloff/source/chart/XMLChartPropertyContext.cxx
@@ -41,10 +41,9 @@ XMLChartPropertyContext::XMLChartPropertyContext(
 XMLChartPropertyContext::~XMLChartPropertyContext()
 {}
 
-SvXMLImportContextRef XMLChartPropertyContext::CreateChildContext(
-    sal_uInt16 nPrefix,
-    const OUString& rLocalName,
-    const uno::Reference< xml::sax::XAttributeList > & xAttrList,
+css::uno::Reference< css::xml::sax::XFastContextHandler > XMLChartPropertyContext::createFastChildContext(
+    sal_Int32 nElement,
+    const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList,
     ::std::vector< XMLPropertyState > &rProperties,
     const XMLPropertyState& rProp )
 {
@@ -53,21 +52,16 @@ SvXMLImportContextRef XMLChartPropertyContext::CreateChildContext(
     switch( mxMapper->getPropertySetMapper()->GetEntryContextId( rProp.mnIndex ) )
     {
         case XML_SCH_CONTEXT_SPECIAL_SYMBOL_IMAGE:
-            xContext = new XMLSymbolImageContext( GetImport(), nPrefix, rLocalName, rProp, rProperties );
+            return new XMLSymbolImageContext( GetImport(), nElement, rProp, rProperties );
             break;
         case XML_SCH_CONTEXT_SPECIAL_LABEL_SEPARATOR:
-            xContext = new XMLLabelSeparatorContext( GetImport(), nPrefix, rLocalName, rProp, rProperties );
+            return new XMLLabelSeparatorContext( GetImport(), nElement, rProp, rProperties );
             break;
     }
 
     // default / no context yet: create child context by base class
-    if (!xContext)
-    {
-        xContext = SvXMLPropertySetContext::CreateChildContext(
-            nPrefix, rLocalName, xAttrList, rProperties, rProp );
-    }
-
-    return xContext;
+    return SvXMLPropertySetContext::createFastChildContext(
+            nElement, xAttrList, rProperties, rProp );
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/chart/XMLChartPropertyContext.hxx b/xmloff/source/chart/XMLChartPropertyContext.hxx
index 4689aa6973e6..7bbd55ed5b1c 100644
--- a/xmloff/source/chart/XMLChartPropertyContext.hxx
+++ b/xmloff/source/chart/XMLChartPropertyContext.hxx
@@ -32,11 +32,10 @@ public:
                              const rtl::Reference< SvXMLImportPropertyMapper >& rMapper );
     virtual ~XMLChartPropertyContext() override;
 
-    using SvXMLPropertySetContext::CreateChildContext;
-    virtual SvXMLImportContextRef CreateChildContext(
-        sal_uInt16 nPrefix,
-        const OUString& rLocalName,
-        const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList,
+    using SvXMLPropertySetContext::createFastChildContext;
+    virtual css::uno::Reference< css::xml::sax::XFastContextHandler > createFastChildContext(
+        sal_Int32 nElement,
+        const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList,
         ::std::vector< XMLPropertyState > &rProperties,
         const XMLPropertyState& rProp ) override;
 
diff --git a/xmloff/source/chart/XMLLabelSeparatorContext.cxx b/xmloff/source/chart/XMLLabelSeparatorContext.cxx
index dec08c2ad3da..90af4736b77b 100644
--- a/xmloff/source/chart/XMLLabelSeparatorContext.cxx
+++ b/xmloff/source/chart/XMLLabelSeparatorContext.cxx
@@ -27,12 +27,11 @@
 using namespace ::com::sun::star;
 
 XMLLabelSeparatorContext::XMLLabelSeparatorContext(
-    SvXMLImport& rImport, sal_uInt16 nPrfx,
-    const OUString& rLocalName,
+    SvXMLImport& rImport, sal_Int32 nElement,
     const XMLPropertyState& rProp,
     ::std::vector< XMLPropertyState > &rProps ) :
         XMLElementPropertyContext(
-            rImport, nPrfx, rLocalName, rProp, rProps ),
+            rImport, nElement, rProp, rProps ),
             m_aSeparator()
 {
 }
@@ -40,7 +39,7 @@ XMLLabelSeparatorContext::XMLLabelSeparatorContext(
 XMLLabelSeparatorContext::~XMLLabelSeparatorContext()
 {}
 
-void XMLLabelSeparatorContext::StartElement( const uno::Reference< xml::sax::XAttributeList >& /*xAttrList*/ )
+void XMLLabelSeparatorContext::startFastElement( sal_Int32 /*nElement*/, const uno::Reference< xml::sax::XFastAttributeList >& /*xAttrList*/ )
 {
 }
 
@@ -58,7 +57,7 @@ SvXMLImportContextRef XMLLabelSeparatorContext::CreateChildContext(
     return pContext;
 }
 
-void XMLLabelSeparatorContext::EndElement()
+void XMLLabelSeparatorContext::endFastElement(sal_Int32 nElement)
 {
     if( !m_aSeparator.isEmpty() )
     {
@@ -67,7 +66,7 @@ void XMLLabelSeparatorContext::EndElement()
         SetInsert( true );
     }
 
-    XMLElementPropertyContext::EndElement();
+    XMLElementPropertyContext::endFastElement(nElement);
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/chart/XMLLabelSeparatorContext.hxx b/xmloff/source/chart/XMLLabelSeparatorContext.hxx
index e2153ea6565e..bd94d088be59 100644
--- a/xmloff/source/chart/XMLLabelSeparatorContext.hxx
+++ b/xmloff/source/chart/XMLLabelSeparatorContext.hxx
@@ -25,18 +25,19 @@ class XMLLabelSeparatorContext : public XMLElementPropertyContext
 {
 public:
 
-    XMLLabelSeparatorContext( SvXMLImport& rImport, sal_uInt16 nPrfx,
-                           const OUString& rLName,
+    XMLLabelSeparatorContext( SvXMLImport& rImport, sal_Int32 nElement,
                            const XMLPropertyState& rProp,
                            ::std::vector< XMLPropertyState > &rProps );
     virtual ~XMLLabelSeparatorContext() override;
 
-    virtual void StartElement( 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 >& xAttrList ) 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 void SAL_CALL endFastElement(sal_Int32 nElement) override;
 
 private:
     OUString         m_aSeparator;
diff --git a/xmloff/source/chart/XMLSymbolImageContext.cxx b/xmloff/source/chart/XMLSymbolImageContext.cxx
index 27d48ac8429a..881f821a89f5 100644
--- a/xmloff/source/chart/XMLSymbolImageContext.cxx
+++ b/xmloff/source/chart/XMLSymbolImageContext.cxx
@@ -26,8 +26,10 @@
 #include <xmloff/XMLBase64ImportContext.hxx>
 #include <com/sun/star/io/XOutputStream.hpp>
 #include <com/sun/star/graphic/XGraphic.hpp>
+#include <sal/log.hxx>
 
 using namespace css;
+using namespace xmloff::token;
 
 namespace {
 
@@ -51,43 +53,38 @@ const SvXMLTokenMapEntry aSymbolImageAttrTokenMap[] =
 };
 
 XMLSymbolImageContext::XMLSymbolImageContext(
-    SvXMLImport& rImport, sal_uInt16 nPrfx,
-    const OUString& rLName,
+    SvXMLImport& rImport, sal_Int32 nElement,
     const XMLPropertyState& rProp,
     ::std::vector< XMLPropertyState > &rProps ) :
         XMLElementPropertyContext(
-            rImport, nPrfx, rLName, rProp, rProps )
+            rImport, nElement, rProp, rProps )
 {
 }
 
 XMLSymbolImageContext::~XMLSymbolImageContext()
 {}
 
-void XMLSymbolImageContext::StartElement( const uno::Reference< xml::sax::XAttributeList >& xAttrList )
+void XMLSymbolImageContext::startFastElement(
+    sal_Int32 /*nElement*/,
+    const uno::Reference< xml::sax::XFastAttributeList >& xAttrList )
 {
-    static const SvXMLTokenMap aTokenMap( aSymbolImageAttrTokenMap );
-    OUString aLocalName;
-
-    sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
-    for( sal_Int16 i = 0; i < nAttrCount; i++ )
+    for (auto &aIter : sax_fastparser::castToFastAttributeList( xAttrList ))
     {
-        const OUString& rAttrName = xAttrList->getNameByIndex( i );
-        sal_uInt16 nPrefix =
-            GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName,
-                                                            &aLocalName );
-        const OUString& rValue = xAttrList->getValueByIndex( i );
+        const OUString sValue = aIter.toString();
 
-        switch( aTokenMap.Get( nPrefix, aLocalName ) )
+        switch( aIter.getToken() )
         {
-            case XML_TOK_SYMBOL_IMAGE_HREF:
-                msURL = rValue;
+            case XML_ELEMENT(XLINK, XML_HREF):
+                msURL = sValue;
                 break;
-            case XML_TOK_SYMBOL_IMAGE_ACTUATE:
-            case XML_TOK_SYMBOL_IMAGE_TYPE:
-            case XML_TOK_SYMBOL_IMAGE_SHOW:
+            case XML_ELEMENT(XLINK, XML_ACTUATE):
+            case XML_ELEMENT(XLINK, XML_TYPE):
+            case XML_ELEMENT(XLINK, XML_SHOW):
                 // these values are currently not interpreted
                 // it is always assumed 'actuate=onLoad', 'type=simple', 'show=embed'
                 break;
+            default:
+                SAL_WARN("xmloff", "unknown attribute " << SvXMLImport::getPrefixAndNameFromToken(aIter.getToken()) << "=" << sValue);
         }
     }
 }
@@ -113,7 +110,7 @@ SvXMLImportContextRef XMLSymbolImageContext::CreateChildContext(
     return pContext;
 }
 
-void XMLSymbolImageContext::EndElement()
+void XMLSymbolImageContext::endFastElement(sal_Int32 nElement)
 {
     uno::Reference<graphic::XGraphic> xGraphic;
 
@@ -134,7 +131,7 @@ void XMLSymbolImageContext::EndElement()
         SetInsert( true );
     }
 
-    XMLElementPropertyContext::EndElement();
+    XMLElementPropertyContext::endFastElement(nElement);
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/chart/XMLSymbolImageContext.hxx b/xmloff/source/chart/XMLSymbolImageContext.hxx
index 14f87879e7a0..d2267db6b338 100644
--- a/xmloff/source/chart/XMLSymbolImageContext.hxx
+++ b/xmloff/source/chart/XMLSymbolImageContext.hxx
@@ -29,18 +29,19 @@ class XMLSymbolImageContext : public XMLElementPropertyContext
 {
 public:
 
-    XMLSymbolImageContext( SvXMLImport& rImport, sal_uInt16 nPrfx,
-                           const OUString& rLName,
+    XMLSymbolImageContext( SvXMLImport& rImport, sal_Int32 nElement,
                            const XMLPropertyState& rProp,
                            ::std::vector< XMLPropertyState > &rProps );
     virtual ~XMLSymbolImageContext() override;
 
-    virtual void StartElement( 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 >& xAttrList ) 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 void SAL_CALL endFastElement(sal_Int32 nElement) override;
 
 private:
     OUString msURL;
diff --git a/xmloff/source/draw/XMLShapePropertySetContext.cxx b/xmloff/source/draw/XMLShapePropertySetContext.cxx
index 2fbcbb57e551..4a86aa4dcc99 100644
--- a/xmloff/source/draw/XMLShapePropertySetContext.cxx
+++ b/xmloff/source/draw/XMLShapePropertySetContext.cxx
@@ -31,19 +31,6 @@ using namespace ::com::sun::star;
 using namespace ::com::sun::star::uno;
 
 
-XMLShapePropertySetContext::XMLShapePropertySetContext(
-                 SvXMLImport& rImport, sal_uInt16 nPrfx,
-                 const OUString& rLName,
-                 const Reference< xml::sax::XAttributeList > & xAttrList,
-                 sal_uInt32 nFam,
-                 ::std::vector< XMLPropertyState > &rProps,
-                 const rtl::Reference < SvXMLImportPropertyMapper > &rMap ) :
-    SvXMLPropertySetContext( rImport, nPrfx, rLName, xAttrList, nFam,
-                             rProps, rMap ),
-    mnBulletIndex(-1)
-{
-}
-
 XMLShapePropertySetContext::XMLShapePropertySetContext(
                  SvXMLImport& rImport, sal_Int32 nElement,
                  const Reference< xml::sax::XFastAttributeList > & xAttrList,
@@ -60,7 +47,7 @@ XMLShapePropertySetContext::~XMLShapePropertySetContext()
 {
 }
 
-void XMLShapePropertySetContext::EndElement()
+void XMLShapePropertySetContext::endFastElement(sal_Int32 )
 {
     Reference< container::XIndexReplace > xNumRule;
     if( mxBulletStyle.is() )
@@ -77,34 +64,29 @@ void XMLShapePropertySetContext::EndElement()
     SvXMLPropertySetContext::EndElement();
 }
 
-SvXMLImportContextRef XMLShapePropertySetContext::CreateChildContext(
-                   sal_uInt16 nPrefix,
-                   const OUString& rLocalName,
-                   const Reference< xml::sax::XAttributeList > & xAttrList,
-                   ::std::vector< XMLPropertyState > &rProperties,
-                   const XMLPropertyState& rProp )
+css::uno::Reference< css::xml::sax::XFastContextHandler > XMLShapePropertySetContext::createFastChildContext(
+    sal_Int32 nElement,
+    const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList,
+    ::std::vector< XMLPropertyState > &rProperties,
+    const XMLPropertyState& rProp )
 {
-    SvXMLImportContextRef xContext;
-
     switch( mxMapper->getPropertySetMapper()->GetEntryContextId( rProp.mnIndex ) )
     {
     case CTF_NUMBERINGRULES:
         mnBulletIndex = rProp.mnIndex;
-        mxBulletStyle = xContext = new SvxXMLListStyleContext( GetImport(), nPrefix, rLocalName, xAttrList );
+        mxBulletStyle = new SvxXMLListStyleContext( GetImport(), nElement, xAttrList );
+        return mxBulletStyle.get();
         break;
     case CTF_TABSTOP:
-        xContext = new SvxXMLTabStopImportContext( GetImport(), nPrefix,
-                                                   rLocalName, rProp,
+        return new SvxXMLTabStopImportContext( GetImport(), nElement,
+                                                   rProp,
                                                    rProperties );
         break;
     }
 
-    if (!xContext)
-        xContext = SvXMLPropertySetContext::CreateChildContext( nPrefix, rLocalName,
+    return SvXMLPropertySetContext::createFastChildContext( nElement,
                                                             xAttrList,
                                                             rProperties, rProp );
-
-    return xContext;
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/draw/ximpstyl.cxx b/xmloff/source/draw/ximpstyl.cxx
index 7d6435ab024b..f07820a4f428 100644
--- a/xmloff/source/draw/ximpstyl.cxx
+++ b/xmloff/source/draw/ximpstyl.cxx
@@ -67,12 +67,12 @@ public:
                  ::std::vector< XMLPropertyState > &rProps,
                  const rtl::Reference < SvXMLImportPropertyMapper > &rMap );
 
-    using SvXMLPropertySetContext::CreateChildContext;
-    virtual SvXMLImportContextRef CreateChildContext( sal_uInt16 nPrefix,
-                                   const OUString& rLocalName,
-                                   const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList,
-                                   ::std::vector< XMLPropertyState > &rProperties,
-                                   const XMLPropertyState& rProp) override;
+    using SvXMLPropertySetContext::createFastChildContext;
+    virtual css::uno::Reference< css::xml::sax::XFastContextHandler > createFastChildContext(
+        sal_Int32 nElement,
+        const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList,
+        ::std::vector< XMLPropertyState > &rProperties,
+        const XMLPropertyState& rProp ) override;
 };
 
 }
@@ -87,42 +87,34 @@ SdXMLDrawingPagePropertySetContext::SdXMLDrawingPagePropertySetContext(
 {
 }
 
-SvXMLImportContextRef SdXMLDrawingPagePropertySetContext::CreateChildContext(
-                   sal_uInt16 p_nPrefix,
-                   const OUString& rLocalName,
-                   const uno::Reference< xml::sax::XAttributeList > & xAttrList,
-                   ::std::vector< XMLPropertyState > &rProperties,
-                   const XMLPropertyState& rProp )
+css::uno::Reference< css::xml::sax::XFastContextHandler > SdXMLDrawingPagePropertySetContext::createFastChildContext(
+    sal_Int32 nElement,
+    const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList,
+    ::std::vector< XMLPropertyState > &rProperties,
+    const XMLPropertyState& rProp )
 {
-    SvXMLImportContextRef xContext;
-
     switch( mxMapper->getPropertySetMapper()->GetEntryContextId( rProp.mnIndex ) )
     {
     case CTF_PAGE_SOUND_URL:
     {
-        const sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
-        for(sal_Int16 i=0; i < nAttrCount; i++)
+        for (auto &aIter : sax_fastparser::castToFastAttributeList(xAttrList))
         {
-            OUString aLocalName;
-            sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName(xAttrList->getNameByIndex(i), &aLocalName);
-
-            if( (nPrefix == XML_NAMESPACE_XLINK) && IsXMLToken( aLocalName, XML_HREF ) )
+            if( aIter.getToken() == XML_ELEMENT(XLINK, XML_HREF) )
             {
-                uno::Any aAny( GetImport().GetAbsoluteReference( xAttrList->getValueByIndex(i) ) );
+                uno::Any aAny( GetImport().GetAbsoluteReference( aIter.toString() ) );
                 XMLPropertyState aPropState( rProp.mnIndex, aAny );
                 rProperties.push_back( aPropState );
             }
+            else
+                SAL_WARN("xmloff", "unknown attribute " << SvXMLImport::getPrefixAndNameFromToken(aIter.getToken()) << "=" << aIter.toString());
         }
         break;
     }
     }
 
-    if (!xContext)
-        xContext = SvXMLPropertySetContext::CreateChildContext( p_nPrefix, rLocalName,
+    return SvXMLPropertySetContext::createFastChildContext( nElement,
                                                             xAttrList,
                                                             rProperties, rProp );
-
-    return xContext;
 }
 
 namespace {
diff --git a/xmloff/source/style/PagePropertySetContext.cxx b/xmloff/source/style/PagePropertySetContext.cxx
index 24fbe25bf8c1..31c541f56b35 100644
--- a/xmloff/source/style/PagePropertySetContext.cxx
+++ b/xmloff/source/style/PagePropertySetContext.cxx
@@ -48,12 +48,11 @@ PagePropertySetContext::~PagePropertySetContext()
 {
 }
 
-SvXMLImportContextRef PagePropertySetContext::CreateChildContext(
-                   sal_uInt16 nPrefix,
-                   const OUString& rLocalName,
-                   const Reference< xml::sax::XAttributeList > & xAttrList,
-                   ::std::vector< XMLPropertyState > &rProperties,
-                   const XMLPropertyState& rProp )
+css::uno::Reference< css::xml::sax::XFastContextHandler > PagePropertySetContext::createFastChildContext(
+    sal_Int32 nElement,
+    const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList,
+    ::std::vector< XMLPropertyState > &rProperties,
+    const XMLPropertyState& rProp )
 {
     sal_Int32 nPos = CTF_PM_GRAPHICPOSITION;
     sal_Int32 nFil = CTF_PM_GRAPHICFILTER;
@@ -74,7 +73,6 @@ SvXMLImportContextRef PagePropertySetContext::CreateChildContext(
         default:
             break;
     }
-    SvXMLImportContextRef xContext;
 
     switch( mxMapper->getPropertySetMapper()
                     ->GetEntryContextId( rProp.mnIndex ) )
@@ -88,9 +86,9 @@ SvXMLImportContextRef PagePropertySetContext::CreateChildContext(
                     nFil  == mxMapper->getPropertySetMapper()
                         ->GetEntryContextId( rProp.mnIndex-1 ),
                     "invalid property map!");
-        xContext =
-            new XMLBackgroundImageContext( GetImport(), nPrefix,
-                                           rLocalName, xAttrList,
+        return
+            new XMLBackgroundImageContext( GetImport(), nElement,
+                                           xAttrList,
                                            rProp,
                                            rProp.mnIndex-2,
                                            rProp.mnIndex-1,
@@ -100,24 +98,21 @@ SvXMLImportContextRef PagePropertySetContext::CreateChildContext(
         break;
 
     case CTF_PM_TEXTCOLUMNS:
-        xContext = new XMLTextColumnsContext( GetImport(), nPrefix,
-                                              rLocalName, xAttrList, rProp,
+        return new XMLTextColumnsContext( GetImport(), nElement,
+                                              xAttrList, rProp,
                                               rProperties );
         break;
 
     case CTF_PM_FTN_LINE_WEIGHT:
-        xContext = new XMLFootnoteSeparatorImport(
-            GetImport(), nPrefix, rLocalName, rProperties,
+        return new XMLFootnoteSeparatorImport(
+            GetImport(), nElement, rProperties,
             mxMapper->getPropertySetMapper(), rProp.mnIndex);
         break;
     }
 
-    if (!xContext)
-        xContext = SvXMLPropertySetContext::CreateChildContext( nPrefix, rLocalName,
+    return SvXMLPropertySetContext::createFastChildContext( nElement,
                                                             xAttrList,
                                                             rProperties, rProp );
-
-    return xContext;
 }
 
 
diff --git a/xmloff/source/style/PagePropertySetContext.hxx b/xmloff/source/style/PagePropertySetContext.hxx
index b44828b9130a..8d8cb9a2c67c 100644
--- a/xmloff/source/style/PagePropertySetContext.hxx
+++ b/xmloff/source/style/PagePropertySetContext.hxx
@@ -44,12 +44,12 @@ public:
 
     virtual ~PagePropertySetContext() override;
 
-    using SvXMLPropertySetContext::CreateChildContext;
-    virtual SvXMLImportContextRef CreateChildContext( sal_uInt16 nPrefix,
-                                   const OUString& rLocalName,
-                                   const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList,
-                                   ::std::vector< XMLPropertyState > &rProperties,
-                                   const XMLPropertyState& rProp) override;
+    using SvXMLPropertySetContext::createFastChildContext;
+    virtual css::uno::Reference< css::xml::sax::XFastContextHandler > createFastChildContext(
+        sal_Int32 nElement,
+        const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList,
+        ::std::vector< XMLPropertyState > &rProperties,
+        const XMLPropertyState& rProp ) override;
 };
 
 #endif // INCLUDED_XMLOFF_SOURCE_STYLE_PAGEPROPERTYSETCONTEXT_HXX
diff --git a/xmloff/source/style/XMLBackgroundImageContext.cxx b/xmloff/source/style/XMLBackgroundImageContext.cxx
index e9008326c25d..fdfe43008081 100644
--- a/xmloff/source/style/XMLBackgroundImageContext.cxx
+++ b/xmloff/source/style/XMLBackgroundImageContext.cxx
@@ -23,7 +23,7 @@
 #include <com/sun/star/graphic/XGraphic.hpp>
 
 #include <tools/debug.hxx>
-
+#include <sal/log.hxx>
 #include <sax/tools/converter.hxx>
 
 #include <xmloff/xmltkmap.hxx>
@@ -169,37 +169,31 @@ static void lcl_xmlbic_MergeVertPos( GraphicLocation& ePos,
 
 
 void XMLBackgroundImageContext::ProcessAttrs(
-        const Reference< xml::sax::XAttributeList >& xAttrList )
+        const Reference< xml::sax::XFastAttributeList >& xAttrList )
 {
     static const SvXMLTokenMap aTokenMap( aBGImgAttributesAttrTokenMap );
 
     ePos = GraphicLocation_NONE;
 
-    sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
-    for( sal_Int16 i=0; i < nAttrCount; i++ )
+    for (auto &aIter : sax_fastparser::castToFastAttributeList(xAttrList))
     {
-        const OUString& rAttrName = xAttrList->getNameByIndex( i );
-        OUString aLocalName;
-        sal_uInt16 nPrefix =
-            GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName,
-                                                            &aLocalName );
-        const OUString& rValue = xAttrList->getValueByIndex( i );
-
-        switch( aTokenMap.Get( nPrefix, aLocalName ) )
+        const OUString sValue = aIter.toString();
+
+        switch( aIter.getToken() )
         {
-        case XML_TOK_BGIMG_HREF:
-            m_sURL = rValue;
+        case XML_ELEMENT(XLINK, XML_HREF):
+            m_sURL = sValue;
             if( GraphicLocation_NONE == ePos )
                 ePos = GraphicLocation_TILED;
             break;
-        case XML_TOK_BGIMG_TYPE:
-        case XML_TOK_BGIMG_ACTUATE:
-        case XML_TOK_BGIMG_SHOW:
+        case XML_ELEMENT(XLINK, XML_TYPE):
+        case XML_ELEMENT(XLINK, XML_ACTUATE):
+        case XML_ELEMENT(XLINK, XML_SHOW):
             break;
-        case XML_TOK_BGIMG_POSITION:
+        case XML_ELEMENT(STYLE, XML_POSITION):
             {
                 GraphicLocation eNewPos = GraphicLocation_NONE, eTmp;
-                SvXMLTokenEnumerator aTokenEnum( rValue );
+                SvXMLTokenEnumerator aTokenEnum( sValue );
                 OUString aToken;
                 bool bHori = false, bVert = false;
                 bool bOK = true;
@@ -283,7 +277,7 @@ void XMLBackgroundImageContext::ProcessAttrs(
                     ePos = eNewPos;
             }
             break;
-        case XML_TOK_BGIMG_REPEAT:
+        case XML_ELEMENT(STYLE, XML_REPEAT):
             {
                 GraphicLocation nPos = GraphicLocation_NONE;
                 static const SvXMLEnumMapEntry<GraphicLocation> psXML_BrushRepeat[] =
@@ -293,7 +287,7 @@ void XMLBackgroundImageContext::ProcessAttrs(
                     { XML_STRETCH,              GraphicLocation_AREA    },
                     { XML_TOKEN_INVALID,        GraphicLocation(0)      }
                 };
-                if( SvXMLUnitConverter::convertEnum( nPos, rValue,
+                if( SvXMLUnitConverter::convertEnum( nPos, sValue,
                                                 psXML_BrushRepeat ) )
                 {
                     if( GraphicLocation_MIDDLE_MIDDLE != nPos ||
@@ -304,36 +298,37 @@ void XMLBackgroundImageContext::ProcessAttrs(
                 }
             }
             break;
-        case XML_TOK_BGIMG_FILTER:
-            sFilter = rValue;
+        case XML_ELEMENT(STYLE, XML_FILTER_NAME):
+            sFilter = sValue;
             break;
-        case XML_TOK_BGIMG_OPACITY:
+        case XML_ELEMENT(DRAW, XML_OPACITY):
             {
                 sal_Int32 nTmp;
                 // convert from percent and clip
-                if (::sax::Converter::convertPercent( nTmp, rValue ))
+                if (::sax::Converter::convertPercent( nTmp, sValue ))
                 {
                     if( (nTmp >= 0) && (nTmp <= 100) )
                         nTransparency = static_cast<sal_Int8>( 100-nTmp );
                 }
             }
             break;
+        default:
+            SAL_WARN("xmloff", "unknown attribute " << SvXMLImport::getPrefixAndNameFromToken(aIter.getToken()) << "=" << sValue);
         }
     }
 
 }
 
 XMLBackgroundImageContext::XMLBackgroundImageContext(
-        SvXMLImport& rImport, sal_uInt16 nPrfx,
-        const OUString& rLName,
-        const Reference< xml::sax::XAttributeList > & xAttrList,
+        SvXMLImport& rImport, sal_Int32 nElement,
+        const Reference< xml::sax::XFastAttributeList > & xAttrList,
         const XMLPropertyState& rProp,
         sal_Int32 nPosIdx,
         sal_Int32 nFilterIdx,
         sal_Int32 nTransparencyIdx,
         sal_Int32 nBitmapModeIdx,
         ::std::vector< XMLPropertyState > &rProps ) :
-    XMLElementPropertyContext( rImport, nPrfx, rLName, rProp, rProps ),
+    XMLElementPropertyContext( rImport, nElement, rProp, rProps ),
     aPosProp( nPosIdx ),
     m_nBitmapModeIdx(nBitmapModeIdx),
     aFilterProp( nFilterIdx ),
@@ -369,7 +364,7 @@ SvXMLImportContextRef XMLBackgroundImageContext::CreateChildContext(
     return pContext;
 }
 
-void XMLBackgroundImageContext::EndElement()
+void XMLBackgroundImageContext::endFastElement(sal_Int32 nElement)
 {
     uno::Reference<graphic::XGraphic> xGraphic;
     if (!m_sURL.isEmpty())
@@ -394,7 +389,7 @@ void XMLBackgroundImageContext::EndElement()
     aTransparencyProp.maValue <<= nTransparency;
 
     SetInsert( true );
-    XMLElementPropertyContext::EndElement();
+    XMLElementPropertyContext::endFastElement(nElement);
 
     if( -1 != aPosProp.mnIndex )
     {
diff --git a/xmloff/source/style/XMLElementPropertyContext.cxx b/xmloff/source/style/XMLElementPropertyContext.cxx
index 91af29fe31f4..f065e081d7e3 100644
--- a/xmloff/source/style/XMLElementPropertyContext.cxx
+++ b/xmloff/source/style/XMLElementPropertyContext.cxx
@@ -21,13 +21,12 @@
 
 
 XMLElementPropertyContext::XMLElementPropertyContext (
-                                SvXMLImport& rImport, sal_uInt16 nPrfx,
-                                const OUString& rLName,
+                                SvXMLImport& rImport, sal_Int32 /*nElement*/,
                                 const XMLPropertyState& rProp,
                                  ::std::vector< XMLPropertyState > &rProps ) :
-    SvXMLImportContext( rImport, nPrfx, rLName ),
+    SvXMLImportContext( rImport ),
     bInsert( false ),
-      rProperties( rProps ),
+    rProperties( rProps ),
     aProp( rProp )
 {
 }
@@ -36,11 +35,10 @@ XMLElementPropertyContext::~XMLElementPropertyContext()
 {
 }
 
-void XMLElementPropertyContext::EndElement( )
+void XMLElementPropertyContext::endFastElement(sal_Int32 )
 {
     if( bInsert )
         rProperties.push_back( aProp );
 }
 
-
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/style/XMLFootnoteSeparatorImport.cxx b/xmloff/source/style/XMLFootnoteSeparatorImport.cxx
index bd52f3cb45d7..b3a790302acd 100644
--- a/xmloff/source/style/XMLFootnoteSeparatorImport.cxx
+++ b/xmloff/source/style/XMLFootnoteSeparatorImport.cxx
@@ -55,12 +55,11 @@ using ::com::sun::star::xml::sax::XAttributeList;
 
 XMLFootnoteSeparatorImport::XMLFootnoteSeparatorImport(
     SvXMLImport& rImport,
-    sal_uInt16 nPrefix,
-    const OUString& rLocalName,
+    sal_Int32 /*nElement*/,
     vector<XMLPropertyState> & rProps,
     const rtl::Reference<XMLPropertySetMapper> & rMapperRef,
     sal_Int32 nIndex) :
-        SvXMLImportContext(rImport, nPrefix, rLocalName),
+        SvXMLImportContext(rImport),
         rProperties(rProps),
         rMapper(rMapperRef),
         nPropIndex(nIndex)
@@ -71,8 +70,9 @@ XMLFootnoteSeparatorImport::~XMLFootnoteSeparatorImport()
 {
 }
 
-void XMLFootnoteSeparatorImport::StartElement(
-    const Reference<XAttributeList> & xAttrList)
+void XMLFootnoteSeparatorImport::startFastElement(
+    sal_Int32 /*nElement*/,
+    const Reference<css::xml::sax::XFastAttributeList> & xAttrList)
 {
     // get the values from the properties
     sal_Int16 nLineWeight = 0;
@@ -87,39 +87,36 @@ void XMLFootnoteSeparatorImport::StartElement(
     sal_Int8 nLineStyle = 1;
 
     // iterate over xattribute list and fill values
-    sal_Int16 nLength = xAttrList->getLength();
-    for(sal_Int16 nAttr = 0; nAttr < nLength; nAttr++)
+    for (auto &aIter : sax_fastparser::castToFastAttributeList(xAttrList))
     {
-        OUString sLocalName;
-        sal_uInt16 nPrefix = GetImport().GetNamespaceMap().
-            GetKeyByAttrName( xAttrList->getNameByIndex(nAttr),
-                              &sLocalName );
-
-        if (XML_NAMESPACE_STYLE == nPrefix)
+        OUString sAttrValue = aIter.toString();
+        sal_Int32 nTmp;
+        switch (aIter.getToken())
         {
-            OUString sAttrValue = xAttrList->getValueByIndex(nAttr);
-            sal_Int32 nTmp;
-            if (IsXMLToken( sLocalName, XML_WIDTH ))
+            case XML_ELEMENT(STYLE, XML_WIDTH):
             {
                 if (GetImport().GetMM100UnitConverter().convertMeasureToCore(
                     nTmp, sAttrValue))
                 {
                     nLineWeight = static_cast<sal_Int16>(nTmp);
                 }
+                break;
             }
-            else if (IsXMLToken( sLocalName, XML_DISTANCE_BEFORE_SEP ))
+            case XML_ELEMENT(STYLE, XML_DISTANCE_BEFORE_SEP):
             {
                 if (GetImport().GetMM100UnitConverter().convertMeasureToCore(
                                                         nTmp, sAttrValue))
                     nLineTextDistance = nTmp;
+                break;
             }
-            else if (IsXMLToken( sLocalName, XML_DISTANCE_AFTER_SEP ))
+            case XML_ELEMENT(STYLE, XML_DISTANCE_AFTER_SEP):
             {
                 if (GetImport().GetMM100UnitConverter().convertMeasureToCore(
                                                         nTmp, sAttrValue))
                     nLineDistance = nTmp;
+                break;
             }
-            else if (IsXMLToken( sLocalName, XML_ADJUSTMENT ))
+            case XML_ELEMENT(STYLE, XML_ADJUSTMENT ):
             {
                 static const SvXMLEnumMapEntry<text::HorizontalAdjust> aXML_HorizontalAdjust_Enum[] =
                 {
@@ -131,20 +128,23 @@ void XMLFootnoteSeparatorImport::StartElement(
 
                 SvXMLUnitConverter::convertEnum(
                             eLineAdjust, sAttrValue, aXML_HorizontalAdjust_Enum);
+                break;
             }
-            else if (IsXMLToken( sLocalName, XML_REL_WIDTH ))
+            case XML_ELEMENT(STYLE, XML_REL_WIDTH ):
             {
                 if (::sax::Converter::convertPercent(nTmp, sAttrValue))
                     nLineRelWidth = static_cast<sal_uInt8>(nTmp);
+                break;
             }
-            else if (IsXMLToken( sLocalName, XML_COLOR ))
+            case XML_ELEMENT(STYLE, XML_COLOR):
             {
                 if (::sax::Converter::convertColor(nTmp, sAttrValue))
                 {
                     nLineColor = nTmp;
                 }
+                break;
             }
-            else if (IsXMLToken( sLocalName, XML_LINE_STYLE ))
+            case XML_ELEMENT(STYLE, XML_LINE_STYLE ):
             {
                 static const SvXMLEnumMapEntry<sal_Int8> aXML_LineStyle_Enum[] =
                 {
@@ -156,7 +156,10 @@ void XMLFootnoteSeparatorImport::StartElement(
                 };
 
                 SvXMLUnitConverter::convertEnum(nLineStyle, sAttrValue, aXML_LineStyle_Enum);
+                break;
             }
+            default:
+                SAL_WARN("xmloff", "unknown attribute " << SvXMLImport::getPrefixAndNameFromToken(aIter.getToken()) << "=" << sAttrValue);
         }
     }
 
diff --git a/xmloff/source/style/XMLFootnoteSeparatorImport.hxx b/xmloff/source/style/XMLFootnoteSeparatorImport.hxx
index b17d6927dd17..30772b019fed 100644
--- a/xmloff/source/style/XMLFootnoteSeparatorImport.hxx
+++ b/xmloff/source/style/XMLFootnoteSeparatorImport.hxx
@@ -48,16 +48,15 @@ public:
 
     XMLFootnoteSeparatorImport(
         SvXMLImport& rImport,
-        sal_uInt16 nPrefix,
-        const OUString& rLocalName,
+        sal_Int32 nElement,
         ::std::vector<XMLPropertyState> & rProperties,
         const rtl::Reference<XMLPropertySetMapper> & rMapperRef,
         sal_Int32 nIndex);
 
     virtual ~XMLFootnoteSeparatorImport() override;
 
-    virtual void StartElement(
-        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;
 };
 
 #endif
diff --git a/xmloff/source/style/xmlprcon.cxx b/xmloff/source/style/xmlprcon.cxx
index 40073803e993..119e5bb86c17 100644
--- a/xmloff/source/style/xmlprcon.cxx
+++ b/xmloff/source/style/xmlprcon.cxx
@@ -17,6 +17,7 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <sal/log.hxx>
 #include <xmloff/xmlprcon.hxx>
 #include <xmloff/xmlimp.hxx>
 #include <xmloff/xmltypes.hxx>
@@ -27,27 +28,6 @@
 using namespace ::com::sun::star;
 using namespace ::std;
 
-SvXMLPropertySetContext::SvXMLPropertySetContext(
-    SvXMLImport& rImp, sal_uInt16 nPrfx,
-    const OUString& rLName,
-    const uno::Reference< xml::sax::XAttributeList >& xAttrList,
-    sal_uInt32 nFam,
-    vector< XMLPropertyState > &rProps,
-    const rtl::Reference < SvXMLImportPropertyMapper >  &rMap,
-    sal_Int32 nSIdx, sal_Int32 nEIdx )
-:   SvXMLImportContext( rImp, nPrfx, rLName )
-,   mnStartIdx( nSIdx )
-,   mnEndIdx( nEIdx )
-,   mnFamily( nFam )
-,   mrProperties( rProps )
-,   mxMapper( rMap )
-{
-    mxMapper->importXML( mrProperties, xAttrList,
-                        GetImport().GetMM100UnitConverter(),
-                        GetImport().GetNamespaceMap(), mnFamily,
-                        mnStartIdx, mnEndIdx );
-}
-
 SvXMLPropertySetContext::SvXMLPropertySetContext(
     SvXMLImport& rImp, sal_Int32 /*nElement*/,
     const uno::Reference< xml::sax::XFastAttributeList >& xAttrList,
@@ -72,24 +52,22 @@ SvXMLPropertySetContext::~SvXMLPropertySetContext()
 {
 }
 
-SvXMLImportContextRef SvXMLPropertySetContext::CreateChildContext(
-    sal_uInt16 nPrefix,
-    const OUString& rLocalName,
-    const uno::Reference< xml::sax::XAttributeList >& xAttrList )
+css::uno::Reference< css::xml::sax::XFastContextHandler > SvXMLPropertySetContext::createFastChildContext(
+    sal_Int32 nElement,
+    const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList)
 {
     rtl::Reference< XMLPropertySetMapper > aSetMapper(
             mxMapper->getPropertySetMapper() );
-    sal_Int32 nEntryIndex = aSetMapper->GetEntryIndex( nPrefix, rLocalName,
-                                                       mnFamily, mnStartIdx );
+    sal_Int32 nEntryIndex = aSetMapper->GetEntryIndex( nElement, mnFamily, mnStartIdx );
 
     if( ( nEntryIndex != -1 ) && (-1 == mnEndIdx || nEntryIndex < mnEndIdx ) &&
         ( 0 != ( aSetMapper->GetEntryFlags( nEntryIndex )
                          & MID_FLAG_ELEMENT_ITEM_IMPORT ) ) )
     {
         XMLPropertyState aProp( nEntryIndex );
-        return CreateChildContext( nPrefix, rLocalName, xAttrList,
-                                   mrProperties, aProp );
+        return createFastChildContext( nElement, xAttrList, mrProperties, aProp );
     }
+    SAL_WARN("xmloff", "unknown element " << SvXMLImport::getPrefixAndNameFromToken(nElement));
     return nullptr;
 }
 
@@ -97,13 +75,13 @@ SvXMLImportContextRef SvXMLPropertySetContext::CreateChildContext(
     CreateChildContext if the element matches an entry in the
     SvXMLImportItemMapper with the mid flag MID_FLAG_ELEMENT
 */
-SvXMLImportContextRef SvXMLPropertySetContext::CreateChildContext(
-    sal_uInt16 /*nPrefix*/,
-    const OUString& /*rLocalName*/,
-    const uno::Reference< xml::sax::XAttributeList >&,
-    ::std::vector< XMLPropertyState > &,
-    const XMLPropertyState& )
+css::uno::Reference< css::xml::sax::XFastContextHandler > SvXMLPropertySetContext::createFastChildContext(
+    sal_Int32 nElement,
+    const css::uno::Reference< css::xml::sax::XFastAttributeList >& /*xAttrList*/,
+    ::std::vector< XMLPropertyState > &/*rProperties*/,
+    const XMLPropertyState& /*rProp*/ )
 {
+    SAL_WARN("xmloff", "unknown element " << SvXMLImport::getPrefixAndNameFromToken(nElement));
     return nullptr;
 }
 
diff --git a/xmloff/source/style/xmlprmap.cxx b/xmloff/source/style/xmlprmap.cxx
index b00529bc2f21..7d81ad0f3456 100644
--- a/xmloff/source/style/xmlprmap.cxx
+++ b/xmloff/source/style/xmlprmap.cxx
@@ -25,6 +25,7 @@
 #include <xmloff/xmltoken.hxx>
 #include <xmloff/maptype.hxx>
 #include <xmloff/prhdlfac.hxx>
+#include <xmloff/xmlimp.hxx>
 
 #include <com/sun/star/beans/XPropertySet.hpp>
 
@@ -270,6 +271,37 @@ sal_Int32 XMLPropertySetMapper::GetEntryIndex(
     return -1;
 }
 
+// Search for the given name and the namespace in the list and return
+// the index of the entry
+// If there is no matching entry the method returns -1
+sal_Int32 XMLPropertySetMapper::GetEntryIndex(
+        sal_Int32 nElement,
+        sal_uInt32 nPropType,
+        sal_Int32 nStartAt /* = -1 */ ) const
+{
+    sal_Int32 nEntries = GetEntryCount();
+    sal_Int32 nIndex= nStartAt == - 1? 0 : nStartAt+1;
+
+    if ( nEntries && nIndex < nEntries )
+    {
+        sal_uInt16 nNamespace = (nElement >> NMSP_SHIFT) - 1;
+        const OUString& rStrName = SvXMLImport::getNameFromToken(nElement);
+        do
+        {
+            const XMLPropertySetMapperEntry_Impl& rEntry = mpImpl->maMapEntries[nIndex];
+            if( (!nPropType || nPropType == rEntry.GetPropType()) &&
+                rEntry.nXMLNameSpace == nNamespace &&
+                rStrName == rEntry.sXMLAttributeName )
+                return nIndex;
+            else
+                nIndex++;
+
+        } while( nIndex<nEntries );
+    }
+
+    return -1;
+}
+
 /** searches for an entry that matches the given api name, namespace and local name or -1 if nothing found */
 sal_Int32 XMLPropertySetMapper::FindEntryIndex(
         const char* sApiName,
diff --git a/xmloff/source/style/xmltabi.cxx b/xmloff/source/style/xmltabi.cxx
index 86ded9f2dc19..20b71a3fd494 100644
--- a/xmloff/source/style/xmltabi.cxx
+++ b/xmloff/source/style/xmltabi.cxx
@@ -18,6 +18,7 @@
  */
 
 #include <com/sun/star/style/TabAlign.hpp>
+#include <sal/log.hxx>
 #include <xmloff/xmltkmap.hxx>
 #include <xmloff/namespacemap.hxx>
 #include <xmloff/xmlnamespace.hxx>
@@ -62,19 +63,17 @@ private:
 
 public:
 
-    SvxXMLTabStopContext_Impl( SvXMLImport& rImport, sal_uInt16 nPrfx,
-                               const OUString& rLName,
-                               const uno::Reference< xml::sax::XAttributeList > & xAttrList );
+    SvxXMLTabStopContext_Impl( SvXMLImport& rImport, sal_Int32 nElement,
+                               const uno::Reference< xml::sax::XFastAttributeList > & xAttrList );
 
     const style::TabStop& getTabStop() const { return aTabStop; }
 };
 
 
 SvxXMLTabStopContext_Impl::SvxXMLTabStopContext_Impl(
-                               SvXMLImport& rImport, sal_uInt16 nPrfx,
-                               const OUString& rLName,
-                               const uno::Reference< xml::sax::XAttributeList > & xAttrList )
-: SvXMLImportContext( rImport, nPrfx, rLName )
+                               SvXMLImport& rImport, sal_Int32 /*nElement*/,
+                               const uno::Reference< xml::sax::XFastAttributeList > & xAttrList )
+: SvXMLImportContext( rImport )
 {
     aTabStop.Position = 0;
     aTabStop.Alignment = style::TabAlign_LEFT;
@@ -84,64 +83,60 @@ SvxXMLTabStopContext_Impl::SvxXMLTabStopContext_Impl(
 
     static const SvXMLTokenMap aTokenMap( aTabsAttributesAttrTokenMap );
 
-    sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
-    for( sal_Int16 i=0; i < nAttrCount; i++ )
+    for (auto &aIter : sax_fastparser::castToFastAttributeList(xAttrList))
     {
-        const OUString& rAttrName = xAttrList->getNameByIndex( i );
-        OUString aLocalName;
-        sal_uInt16 nPrefix =
-            GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName,
-                                                            &aLocalName );
-        const OUString& rValue = xAttrList->getValueByIndex( i );
+        const OUString sValue = aIter.toString();
 
         sal_Int32 nVal;
-        switch( aTokenMap.Get( nPrefix, aLocalName ) )
+        switch( aIter.getToken() )
         {
-        case XML_TOK_TABSTOP_POSITION:
+        case XML_ELEMENT(STYLE, XML_POSITION):
             if (GetImport().GetMM100UnitConverter().convertMeasureToCore(
-                    nVal, rValue))
+                    nVal, sValue))
             {
                 aTabStop.Position = nVal;
             }
             break;
-        case XML_TOK_TABSTOP_TYPE:
-            if( IsXMLToken( rValue, XML_LEFT ) )
+        case XML_ELEMENT(STYLE, XML_TYPE):
+            if( IsXMLToken( sValue, XML_LEFT ) )
             {
                 aTabStop.Alignment = style::TabAlign_LEFT;
             }
-            else if( IsXMLToken( rValue, XML_RIGHT ) )
+            else if( IsXMLToken( sValue, XML_RIGHT ) )
             {
                 aTabStop.Alignment = style::TabAlign_RIGHT;
             }
-            else if( IsXMLToken( rValue, XML_CENTER ) )
+            else if( IsXMLToken( sValue, XML_CENTER ) )
             {
                 aTabStop.Alignment = style::TabAlign_CENTER;
             }
-            else if( IsXMLToken( rValue, XML_CHAR ) )
+            else if( IsXMLToken( sValue, XML_CHAR ) )
             {
                 aTabStop.Alignment = style::TabAlign_DECIMAL;
             }
-            else if( IsXMLToken( rValue, XML_DEFAULT ) )
+            else if( IsXMLToken( sValue, XML_DEFAULT ) )
             {
                 aTabStop.Alignment = style::TabAlign_DEFAULT;
             }
             break;
-        case XML_TOK_TABSTOP_CHAR:
-            if( !rValue.isEmpty() )
-                aTabStop.DecimalChar = rValue[0];
+        case XML_ELEMENT(STYLE, XML_CHAR):
+            if( !sValue.isEmpty() )
+                aTabStop.DecimalChar = sValue[0];
             break;
-        case XML_TOK_TABSTOP_LEADER_STYLE:
-            if( IsXMLToken( rValue, XML_NONE ) )
+        case XML_ELEMENT(STYLE, XML_LEADER_STYLE):
+            if( IsXMLToken( sValue, XML_NONE ) )
                 aTabStop.FillChar = ' ';
-            else if( IsXMLToken( rValue, XML_DOTTED ) )
+            else if( IsXMLToken( sValue, XML_DOTTED ) )
                 aTabStop.FillChar = '.';
             else
                 aTabStop.FillChar = '_';
             break;
-        case XML_TOK_TABSTOP_LEADER_TEXT:
-            if( !rValue.isEmpty() )
-                cTextFillChar = rValue[0];
+        case XML_ELEMENT(STYLE, XML_LEADER_TEXT):
+            if( !sValue.isEmpty() )
+                cTextFillChar = sValue[0];
             break;
+        default:
+            SAL_WARN("xmloff", "unknown attribute " << SvXMLImport::getPrefixAndNameFromToken(aIter.getToken()) << "=" << sValue);
         }
     }
 
@@ -151,27 +146,22 @@ SvxXMLTabStopContext_Impl::SvxXMLTabStopContext_Impl(
 
 
 SvxXMLTabStopImportContext::SvxXMLTabStopImportContext(
-                                SvXMLImport& rImport, sal_uInt16 nPrfx,
-                                const OUString& rLName,
+                                SvXMLImport& rImport, sal_Int32 nElement,
                                 const XMLPropertyState& rProp,
                                  ::std::vector< XMLPropertyState > &rProps )
-: XMLElementPropertyContext( rImport, nPrfx, rLName, rProp, rProps )
+: XMLElementPropertyContext( rImport, nElement, rProp, rProps )
 {
 }
 
-SvXMLImportContextRef SvxXMLTabStopImportContext::CreateChildContext(
-                                   sal_uInt16 nPrefix,
-                                   const OUString& rLocalName,
-                                   const uno::Reference< xml::sax::XAttributeList > & xAttrList )
+css::uno::Reference< css::xml::sax::XFastContextHandler > SvxXMLTabStopImportContext::createFastChildContext(
+    sal_Int32 nElement,
+    const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList)
 {
-    SvXMLImportContext *pContext = nullptr;
-
-    if( XML_NAMESPACE_STYLE == nPrefix && IsXMLToken( rLocalName, XML_TAB_STOP ) )
+    if( nElement == XML_ELEMENT(STYLE, XML_TAB_STOP) )
     {
         // create new tabstop import context
         const rtl::Reference<SvxXMLTabStopContext_Impl> xTabStopContext{
-            new SvxXMLTabStopContext_Impl( GetImport(), nPrefix, rLocalName,
-                                           xAttrList )};
+            new SvxXMLTabStopContext_Impl( GetImport(), nElement, xAttrList )};
 
         // add new tabstop to array of tabstops
         if( !mpTabStops )
@@ -179,13 +169,15 @@ SvXMLImportContextRef SvxXMLTabStopImportContext::CreateChildContext(
 
         mpTabStops->push_back( xTabStopContext );
 
-        pContext = xTabStopContext.get();
+        return xTabStopContext.get();
     }
+    else
+        SAL_WARN("xmloff", "unknown element " << SvXMLImport::getPrefixAndNameFromToken(nElement));
 
-    return pContext;
+    return nullptr;
 }
 
-void SvxXMLTabStopImportContext::EndElement( )
+void SvxXMLTabStopImportContext::endFastElement(sal_Int32 nElement)
 {
     sal_uInt16 nCount = mpTabStops ? mpTabStops->size() : 0;
     uno::Sequence< style::TabStop> aSeq( nCount );
@@ -215,8 +207,7 @@ void SvxXMLTabStopImportContext::EndElement( )
     aProp.maValue <<= aSeq;
 
     SetInsert( true );
-    XMLElementPropertyContext::EndElement();
-
+    XMLElementPropertyContext::endFastElement(nElement);
 }
 
 
diff --git a/xmloff/source/text/XMLSectionFootnoteConfigImport.cxx b/xmloff/source/text/XMLSectionFootnoteConfigImport.cxx
index 65678465bf1a..4849e46a4b81 100644
--- a/xmloff/source/text/XMLSectionFootnoteConfigImport.cxx
+++ b/xmloff/source/text/XMLSectionFootnoteConfigImport.cxx
@@ -23,6 +23,7 @@
 #include <com/sun/star/uno/Reference.h>
 #include <com/sun/star/xml/sax/XAttributeList.hpp>
 #include <com/sun/star/style/NumberingType.hpp>
+#include <sal/log.hxx>
 #include <sax/tools/converter.hxx>
 #include <xmloff/xmlimp.hxx>
 #include <xmloff/xmltoken.hxx>
@@ -47,11 +48,10 @@ using ::com::sun::star::xml::sax::XAttributeList;
 
 XMLSectionFootnoteConfigImport::XMLSectionFootnoteConfigImport(
     SvXMLImport& rImport,
-    sal_uInt16 nPrefix,
-    const OUString& rLocalName,
+    sal_Int32 /*nElement*/,
     vector<XMLPropertyState> & rProps,
     const rtl::Reference<XMLPropertySetMapper> & rMapperRef) :
-        SvXMLImportContext(rImport, nPrefix, rLocalName),
+        SvXMLImportContext(rImport),
         rProperties(rProps),
         rMapper(rMapperRef)
 {
@@ -61,8 +61,9 @@ XMLSectionFootnoteConfigImport::~XMLSectionFootnoteConfigImport()
 {
 }
 
-void XMLSectionFootnoteConfigImport::StartElement(
-    const Reference<XAttributeList> & xAttrList)
+void XMLSectionFootnoteConfigImport::startFastElement(
+    sal_Int32 /*nElement*/,
+    const Reference<css::xml::sax::XFastAttributeList> & xAttrList)
 {
     bool bNumOwn = false;
     bool bNumRestart = false;
@@ -74,18 +75,13 @@ void XMLSectionFootnoteConfigImport::StartElement(
     OUString sNumLetterSync;
 
     // iterate over xattribute list and fill values
-    sal_Int16 nLength = xAttrList->getLength();
-    for(sal_Int16 nAttr = 0; nAttr < nLength; nAttr++)
+    for (auto &aIter : sax_fastparser::castToFastAttributeList(xAttrList))
     {
-        OUString sLocalName;
-        sal_uInt16 nPrefix = GetImport().GetNamespaceMap().
-            GetKeyByAttrName( xAttrList->getNameByIndex(nAttr),
-                              &sLocalName );
-        OUString sAttrValue = xAttrList->getValueByIndex(nAttr);
+        OUString sAttrValue = aIter.toString();
 
-        if (XML_NAMESPACE_TEXT == nPrefix)
+        switch(aIter.getToken())
         {
-            if (IsXMLToken(sLocalName, XML_START_VALUE))
+            case XML_ELEMENT(TEXT, XML_START_VALUE):
             {
                 sal_Int32 nTmp;
                 if (::sax::Converter::convertNumber(nTmp, sAttrValue))
@@ -93,35 +89,40 @@ void XMLSectionFootnoteConfigImport::StartElement(
                     nNumRestartAt = static_cast< sal_Int16 >( nTmp ) - 1;
                     bNumRestart = true;
                 }
+                break;
             }
-            else if( IsXMLToken( sLocalName, XML_NOTE_CLASS ) )
+            case XML_ELEMENT(TEXT, XML_NOTE_CLASS):
             {
                 if( IsXMLToken( sAttrValue, XML_ENDNOTE ) )
                     bEndnote = true;
+                break;
             }
-        }
-        else if (XML_NAMESPACE_STYLE == nPrefix)
-        {
-            if (IsXMLToken(sLocalName, XML_NUM_PREFIX))
+            case XML_ELEMENT(STYLE, XML_NUM_PREFIX):
             {
                 sNumPrefix = sAttrValue;
                 bNumOwn = true;
+                break;
             }
-            else if (IsXMLToken(sLocalName, XML_NUM_SUFFIX))
+            case XML_ELEMENT(TEXT, XML_NUM_SUFFIX):
             {
                 sNumSuffix = sAttrValue;
                 bNumOwn = true;
+                break;
             }
-            else if (IsXMLToken(sLocalName, XML_NUM_FORMAT))
+            case XML_ELEMENT(TEXT, XML_NUM_FORMAT):
             {
                 sNumFormat = sAttrValue;
                 bNumOwn = true;
+                break;
             }
-            else if (IsXMLToken(sLocalName, XML_NUM_LETTER_SYNC))
+            case XML_ELEMENT(TEXT, XML_NUM_LETTER_SYNC):
             {
                 sNumLetterSync = sAttrValue;
                 bNumOwn = true;
+                break;
             }
+            default:
+                SAL_WARN("xmloff", "unknown attribute " << SvXMLImport::getPrefixAndNameFromToken(aIter.getToken()) << "=" << sAttrValue);
         }
     }
 
diff --git a/xmloff/source/text/XMLSectionFootnoteConfigImport.hxx b/xmloff/source/text/XMLSectionFootnoteConfigImport.hxx
index 095352536f4f..0182c0d8f571 100644
--- a/xmloff/source/text/XMLSectionFootnoteConfigImport.hxx
+++ b/xmloff/source/text/XMLSectionFootnoteConfigImport.hxx
@@ -48,15 +48,14 @@ public:
 
     XMLSectionFootnoteConfigImport(
         SvXMLImport& rImport,
-        sal_uInt16 nPrefix,
-        const OUString& rLocalName,
+        sal_Int32 nElement,
         ::std::vector<XMLPropertyState> & rProperties,
         const rtl::Reference<XMLPropertySetMapper> & rMapperRef);
 
     virtual ~XMLSectionFootnoteConfigImport() override;
 
-    virtual void StartElement(
-        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;
 
 };
 
diff --git a/xmloff/source/text/XMLTextColumnsContext.cxx b/xmloff/source/text/XMLTextColumnsContext.cxx
index a94da52f4deb..4bacea3ed965 100644
--- a/xmloff/source/text/XMLTextColumnsContext.cxx
+++ b/xmloff/source/text/XMLTextColumnsContext.cxx
@@ -25,6 +25,7 @@
 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
 #include <com/sun/star/style/VerticalAlignment.hpp>
 #include <com/sun/star/beans/XPropertySet.hpp>
+#include <sal/log.hxx>
 #include <sax/tools/converter.hxx>
 #include <xmloff/xmltkmap.hxx>
 #include <xmloff/xmluconv.hxx>
@@ -253,41 +254,37 @@ const OUStringLiteral gsAutomaticDistance(u"AutomaticDistance");
 const OUStringLiteral gsSeparatorLineStyle(u"SeparatorLineStyle");
 
 XMLTextColumnsContext::XMLTextColumnsContext(
-                                SvXMLImport& rImport, sal_uInt16 nPrfx,
-                                const OUString& rLName,
-                                const Reference< xml::sax::XAttributeList >&
-                                    xAttrList,
+                                SvXMLImport& rImport, sal_Int32 nElement,
+                                const Reference< xml::sax::XFastAttributeList >& xAttrList,
                                 const XMLPropertyState& rProp,
                                  ::std::vector< XMLPropertyState > &rProps )
-:   XMLElementPropertyContext( rImport, nPrfx, rLName, rProp, rProps )
+:   XMLElementPropertyContext( rImport, nElement, rProp, rProps )
 ,   pColumnAttrTokenMap( new SvXMLTokenMap(aColAttrTokenMap) )
 ,   pColumnSepAttrTokenMap( new SvXMLTokenMap(aColSepAttrTokenMap) )
 ,   nCount( 0 )
 ,   bAutomatic( false )
 ,   nAutomaticDistance( 0 )
 {
-    sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
     sal_Int32 nVal;
-    for( sal_Int16 i=0; i < nAttrCount; i++ )
+    for (auto &aIter : sax_fastparser::castToFastAttributeList(xAttrList))
     {
-        const OUString& rAttrName = xAttrList->getNameByIndex( i );
-        OUString aLocalName;
-        sal_uInt16 nPrefix =
-            GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName,
-                                                            &aLocalName );
-        const OUString& rValue = xAttrList->getValueByIndex( i );
-        if( XML_NAMESPACE_FO == nPrefix )
+        const OUString sValue = aIter.toString();
+        switch(aIter.getToken())
         {
-            if( IsXMLToken( aLocalName, XML_COLUMN_COUNT ) &&
-                ::sax::Converter::convertNumber( nVal, rValue, 0, SHRT_MAX ))
-            {
-                nCount = static_cast<sal_Int16>(nVal);
-            }
-            else if( IsXMLToken( aLocalName, XML_COLUMN_GAP ) )
+            case XML_ELEMENT(FO, XML_COLUMN_COUNT):
+            case XML_ELEMENT(FO_COMPAT, XML_COLUMN_COUNT):
+                if(::sax::Converter::convertNumber( nVal, sValue, 0, SHRT_MAX ))
+                    nCount = static_cast<sal_Int16>(nVal);
+                break;
+            case XML_ELEMENT(FO, XML_COLUMN_GAP):
+            case XML_ELEMENT(FO_COMPAT, XML_COLUMN_GAP):
             {
                 bAutomatic = GetImport().GetMM100UnitConverter().
-                    convertMeasureToCore( nAutomaticDistance, rValue );
+                    convertMeasureToCore( nAutomaticDistance, sValue );
+                break;
             }
+            default:
+                SAL_WARN("xmloff", "unknown attribute " << SvXMLImport::getPrefixAndNameFromToken(aIter.getToken()) << "=" << sValue);
         }
     }
 }
@@ -327,7 +324,7 @@ SvXMLImportContextRef XMLTextColumnsContext::CreateChildContext(
     return pContext;
 }
 
-void XMLTextColumnsContext::EndElement( )
+void XMLTextColumnsContext::endFastElement(sal_Int32 nElement )
 {
     Reference<XMultiServiceFactory> xFactory(GetImport().GetModel(),UNO_QUERY);
     if( !xFactory.is() )
@@ -436,7 +433,7 @@ void XMLTextColumnsContext::EndElement( )
     aProp.maValue <<= xColumns;
 
     SetInsert( true );
-    XMLElementPropertyContext::EndElement();
+    XMLElementPropertyContext::endFastElement(nElement);
 
 }
 
diff --git a/xmloff/source/text/XMLTextPropertySetContext.cxx b/xmloff/source/text/XMLTextPropertySetContext.cxx
index e0d03481c315..2dc3af0eaa3f 100644
--- a/xmloff/source/text/XMLTextPropertySetContext.cxx
+++ b/xmloff/source/text/XMLTextPropertySetContext.cxx
@@ -32,20 +32,6 @@
 using namespace ::com::sun::star::uno;
 using namespace ::com::sun::star;
 
-XMLTextPropertySetContext::XMLTextPropertySetContext(
-                 SvXMLImport& rImport, sal_uInt16 nPrfx,
-                 const OUString& rLName,
-                 const Reference< xml::sax::XAttributeList > & xAttrList,
-                 sal_uInt32 nFamily,
-                 ::std::vector< XMLPropertyState > &rProps,
-                 const rtl::Reference < SvXMLImportPropertyMapper > &rMap,
-                 OUString& rDCTextStyleName ) :
-    SvXMLPropertySetContext( rImport, nPrfx, rLName, xAttrList, nFamily,
-                             rProps, rMap ),
-    rDropCapTextStyleName( rDCTextStyleName )
-{
-}
-
 XMLTextPropertySetContext::XMLTextPropertySetContext(
                  SvXMLImport& rImport, sal_Int32 nElement,
                  const Reference< xml::sax::XFastAttributeList > & xAttrList,
@@ -63,12 +49,11 @@ XMLTextPropertySetContext::~XMLTextPropertySetContext()
 {
 }
 
-SvXMLImportContextRef XMLTextPropertySetContext::CreateChildContext(
-                   sal_uInt16 nPrefix,
-                   const OUString& rLocalName,
-                   const Reference< xml::sax::XAttributeList > & xAttrList,
-                   ::std::vector< XMLPropertyState > &rProperties,
-                   const XMLPropertyState& rProp )
+css::uno::Reference< css::xml::sax::XFastContextHandler > XMLTextPropertySetContext::createFastChildContext(
+    sal_Int32 nElement,
+    const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList,
+    ::std::vector< XMLPropertyState > &rProperties,
+    const XMLPropertyState& rProp )
 {
     SvXMLImportContextRef xContext;
 
@@ -76,13 +61,13 @@ SvXMLImportContextRef XMLTextPropertySetContext::CreateChildContext(
                     ->GetEntryContextId( rProp.mnIndex ) )
     {
     case CTF_TABSTOP:
-        xContext = new SvxXMLTabStopImportContext( GetImport(), nPrefix,
-                                                   rLocalName, rProp,
+        return new SvxXMLTabStopImportContext( GetImport(), nElement,
+                                                   rProp,
                                                    rProperties );
         break;
     case CTF_TEXTCOLUMNS:
-        xContext = new XMLTextColumnsContext( GetImport(), nPrefix,
-                                                   rLocalName, xAttrList, rProp,
+        return new XMLTextColumnsContext( GetImport(), nElement,
+                                                   xAttrList, rProp,
                                                    rProperties );
         break;
 
@@ -93,13 +78,13 @@ SvXMLImportContextRef XMLTextPropertySetContext::CreateChildContext(
                             ->GetEntryContextId( rProp.mnIndex-2 ),
                         "invalid property map!");
             XMLTextDropCapImportContext *pDCContext =
-                new XMLTextDropCapImportContext( GetImport(), nPrefix,
-                                                        rLocalName, xAttrList,
+                new XMLTextDropCapImportContext( GetImport(), nElement,
+                                                        xAttrList,
                                                         rProp,
                                                         rProp.mnIndex-2,
                                                         rProperties );
             rDropCapTextStyleName = pDCContext->GetStyleName();
-            xContext = pDCContext;
+            return pDCContext;
         }
         break;
 
@@ -121,9 +106,9 @@ SvXMLImportContextRef XMLTextPropertySetContext::CreateChildContext(
                   rProp.mnIndex-3 ) ) )
             nTranspIndex = rProp.mnIndex-3;
 
-        xContext =
-            new XMLBackgroundImageContext( GetImport(), nPrefix,
-                                           rLocalName, xAttrList,
+        return
+            new XMLBackgroundImageContext( GetImport(), nElement,
+                                           xAttrList,
                                            rProp,
                                            rProp.mnIndex-2,
                                            rProp.mnIndex-1,
@@ -134,18 +119,15 @@ SvXMLImportContextRef XMLTextPropertySetContext::CreateChildContext(
     break;
     case CTF_SECTION_FOOTNOTE_END:
     case CTF_SECTION_ENDNOTE_END:
-        xContext = new XMLSectionFootnoteConfigImport(
-            GetImport(), nPrefix, rLocalName, rProperties,
+        return new XMLSectionFootnoteConfigImport(
+            GetImport(), nElement, rProperties,
             mxMapper->getPropertySetMapper());
         break;
     }
 
-    if (!xContext)
-        xContext = SvXMLPropertySetContext::CreateChildContext( nPrefix, rLocalName,
+    return SvXMLPropertySetContext::createFastChildContext( nElement,
                                                             xAttrList,
                                                             rProperties, rProp );
-
-    return xContext;
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/text/XMLTextPropertySetContext.hxx b/xmloff/source/text/XMLTextPropertySetContext.hxx
index f53b6bd7521f..33159f3b319f 100644
--- a/xmloff/source/text/XMLTextPropertySetContext.hxx
+++ b/xmloff/source/text/XMLTextPropertySetContext.hxx
@@ -31,14 +31,6 @@ class XMLTextPropertySetContext : public SvXMLPropertySetContext
     OUString& rDropCapTextStyleName;
 
 public:
-    XMLTextPropertySetContext( SvXMLImport& rImport, sal_uInt16 nPrfx,
-                const OUString& rLName,
-                const css::uno::Reference<css::xml::sax::XAttributeList >& xAttrList,
-                sal_uInt32 nFamily,
-                ::std::vector< XMLPropertyState > &rProps,
-                const rtl::Reference < SvXMLImportPropertyMapper > &rMap,
-                OUString& rDopCapTextStyleName );
-
     XMLTextPropertySetContext( SvXMLImport& rImport, sal_Int32 nElement,
                 const css::uno::Reference<css::xml::sax::XFastAttributeList >& xAttrList,
                 sal_uInt32 nFamily,
@@ -48,12 +40,12 @@ public:
 
     virtual ~XMLTextPropertySetContext() override;
 
-    using SvXMLPropertySetContext::CreateChildContext;
-    virtual SvXMLImportContextRef CreateChildContext( sal_uInt16 nPrefix,
-                                   const OUString& rLocalName,
-                                   const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList,
-                                   ::std::vector< XMLPropertyState > &rProperties,
-                                   const XMLPropertyState& rProp) override;
+    using SvXMLPropertySetContext::createFastChildContext;
+    virtual css::uno::Reference< css::xml::sax::XFastContextHandler > createFastChildContext(
+        sal_Int32 nElement,
+        const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList,
+        ::std::vector< XMLPropertyState > &rProperties,
+        const XMLPropertyState& rProp ) override;
 };
 
 
diff --git a/xmloff/source/text/XMLTextShapeStyleContext.cxx b/xmloff/source/text/XMLTextShapeStyleContext.cxx
index 72660d060156..cf43c0452e31 100644
--- a/xmloff/source/text/XMLTextShapeStyleContext.cxx
+++ b/xmloff/source/text/XMLTextShapeStyleContext.cxx
@@ -53,12 +53,12 @@ public:
         ::std::vector< XMLPropertyState > &rProps,
         const rtl::Reference < SvXMLImportPropertyMapper > &rMap );
 
-    using SvXMLPropertySetContext::CreateChildContext;
-    virtual SvXMLImportContextRef CreateChildContext( sal_uInt16 nPrefix,
-        const OUString& rLocalName,
-        const Reference< XAttributeList >& xAttrList,
+    using SvXMLPropertySetContext::createFastChildContext;
+    virtual css::uno::Reference< css::xml::sax::XFastContextHandler > createFastChildContext(
+        sal_Int32 nElement,
+        const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList,
         ::std::vector< XMLPropertyState > &rProperties,
-        const XMLPropertyState& rProp) override;
+        const XMLPropertyState& rProp ) override;
 };
 
 }
@@ -74,12 +74,11 @@ XMLTextShapePropertySetContext_Impl::XMLTextShapePropertySetContext_Impl(
 {
 }
 
-SvXMLImportContextRef XMLTextShapePropertySetContext_Impl::CreateChildContext(
-                   sal_uInt16 nPrefix,
-                   const OUString& rLocalName,
-                   const Reference< XAttributeList > & xAttrList,
-                   ::std::vector< XMLPropertyState > &rProperties,
-                   const XMLPropertyState& rProp )
+css::uno::Reference< css::xml::sax::XFastContextHandler > XMLTextShapePropertySetContext_Impl::createFastChildContext(
+    sal_Int32 nElement,
+    const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList,
+    ::std::vector< XMLPropertyState > &rProperties,
+    const XMLPropertyState& rProp )
 {
     SvXMLImportContextRef xContext;
 
@@ -87,8 +86,8 @@ SvXMLImportContextRef XMLTextShapePropertySetContext_Impl::CreateChildContext(
                     ->GetEntryContextId( rProp.mnIndex ) )
     {
     case CTF_TEXTCOLUMNS:
-        xContext = new XMLTextColumnsContext( GetImport(), nPrefix,
-                                                   rLocalName, xAttrList, rProp,
+        return new XMLTextColumnsContext( GetImport(), nElement,
+                                                   xAttrList, rProp,
                                                    rProperties );
         break;
 
@@ -102,9 +101,9 @@ SvXMLImportContextRef XMLTextShapePropertySetContext_Impl::CreateChildContext(
                     CTF_BACKGROUND_FILTER  == mxMapper->getPropertySetMapper()
                         ->GetEntryContextId( rProp.mnIndex-1 ),
                     "invalid property map!");
-        xContext =
-            new XMLBackgroundImageContext( GetImport(), nPrefix,
-                                           rLocalName, xAttrList,
+        return
+            new XMLBackgroundImageContext( GetImport(), nElement,
+                                           xAttrList,
                                            rProp,
                                            rProp.mnIndex-2,
                                            rProp.mnIndex-1,
@@ -114,11 +113,8 @@ SvXMLImportContextRef XMLTextShapePropertySetContext_Impl::CreateChildContext(
         break;
     }
 
-    if (!xContext)
-        xContext = XMLShapePropertySetContext::CreateChildContext(
-                        nPrefix, rLocalName, xAttrList, rProperties, rProp );
-
-    return xContext;
+    return XMLShapePropertySetContext::createFastChildContext(
+                        nElement, xAttrList, rProperties, rProp );
 }
 
 void XMLTextShapeStyleContext::SetAttribute( sal_uInt16 nPrefixKey,
diff --git a/xmloff/source/text/txtdropi.cxx b/xmloff/source/text/txtdropi.cxx
index e68e276975bb..dc58e2cbbaa7 100644
--- a/xmloff/source/text/txtdropi.cxx
+++ b/xmloff/source/text/txtdropi.cxx
@@ -22,6 +22,7 @@
 
 #include <com/sun/star/style/DropCapFormat.hpp>
 
+#include <sal/log.hxx>
 #include <sax/tools/converter.hxx>
 
 #include <xmloff/xmltkmap.hxx>
@@ -59,7 +60,7 @@ const SvXMLTokenMapEntry aDropAttrTokenMap[] =
 };
 
 void XMLTextDropCapImportContext::ProcessAttrs(
-        const Reference< xml::sax::XAttributeList >& xAttrList )
+        const Reference< xml::sax::XFastAttributeList >& xAttrList )
 {
     static const SvXMLTokenMap aTokenMap( aDropAttrTokenMap );
 
@@ -67,48 +68,45 @@ void XMLTextDropCapImportContext::ProcessAttrs(
     bool bWholeWord = false;
 
     sal_Int32 nTmp;
-    sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
-    for( sal_Int16 i=0; i < nAttrCount; i++ )
+    for (auto &aIter : sax_fastparser::castToFastAttributeList(xAttrList))
     {
-        const OUString& rAttrName = xAttrList->getNameByIndex( i );
-        OUString aLocalName;
-        sal_uInt16 nPrefix =
-            GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName,
-                                                            &aLocalName );
-        const OUString& rValue = xAttrList->getValueByIndex( i );
-
-        switch( aTokenMap.Get( nPrefix, aLocalName ) )
+        const OUString sValue = aIter.toString();
+
+        switch( aIter.getToken() )
         {
-        case XML_TOK_DROP_LINES:
-            if (::sax::Converter::convertNumber( nTmp, rValue, 0, 255 ))
+        case XML_ELEMENT(STYLE, XML_LINES):
+            if (::sax::Converter::convertNumber( nTmp, sValue, 0, 255 ))
             {
                 aFormat.Lines = nTmp < 2 ? 0 : static_cast<sal_Int8>(nTmp);
             }
             break;
 
-        case XML_TOK_DROP_LENGTH:
-            if( IsXMLToken( rValue, XML_WORD ) )
+        case XML_ELEMENT(STYLE, XML_LENGTH):
+            if( IsXMLToken( sValue, XML_WORD ) )
             {
                 bWholeWord = true;
             }
-            else if (::sax::Converter::convertNumber( nTmp, rValue, 1, 255 ))
+            else if (::sax::Converter::convertNumber( nTmp, sValue, 1, 255 ))
             {
                 bWholeWord = false;
                 aFormat.Count = static_cast<sal_Int8>(nTmp);
             }
             break;
 
-        case XML_TOK_DROP_DISTANCE:
+        case XML_ELEMENT(STYLE, XML_DISTANCE):
             if (GetImport().GetMM100UnitConverter().convertMeasureToCore(
-                        nTmp, rValue, 0 ))
+                        nTmp, sValue, 0 ))
             {
                 aFormat.Distance = static_cast<sal_uInt16>(nTmp);
             }
             break;
 
-        case XML_TOK_DROP_STYLE:
-            sStyleName = rValue;
+        case XML_ELEMENT(STYLE, XML_STYLE_NAME):
+            sStyleName = sValue;
             break;
+
+        default:
+            SAL_WARN("xmloff", "unknown attribute " << SvXMLImport::getPrefixAndNameFromToken(aIter.getToken()) << "=" << sValue);
         }
     }
 
@@ -121,13 +119,12 @@ void XMLTextDropCapImportContext::ProcessAttrs(
 }
 
 XMLTextDropCapImportContext::XMLTextDropCapImportContext(
-        SvXMLImport& rImport, sal_uInt16 nPrfx,
-        const OUString& rLName,
-        const Reference< xml::sax::XAttributeList > & xAttrList,
+        SvXMLImport& rImport, sal_Int32 nElement,
+        const Reference< xml::sax::XFastAttributeList > & xAttrList,
         const XMLPropertyState& rProp,
         sal_Int32 nWholeWordIdx,
         ::std::vector< XMLPropertyState > &rProps ) :
-    XMLElementPropertyContext( rImport, nPrfx, rLName, rProp, rProps ),
+    XMLElementPropertyContext( rImport, nElement, rProp, rProps ),
     aWholeWordProp( nWholeWordIdx )
 {
     ProcessAttrs( xAttrList );
@@ -137,10 +134,10 @@ XMLTextDropCapImportContext::~XMLTextDropCapImportContext()
 {
 }
 
-void XMLTextDropCapImportContext::EndElement()
+void XMLTextDropCapImportContext::endFastElement(sal_Int32 nElement)
 {
     SetInsert( true );
-    XMLElementPropertyContext::EndElement();
+    XMLElementPropertyContext::endFastElement(nElement);
 
     if( -1 != aWholeWordProp.mnIndex )
         rProperties.push_back( aWholeWordProp );
diff --git a/xmloff/source/text/txtdropi.hxx b/xmloff/source/text/txtdropi.hxx
index f2f0f9228e50..c15d83dc95a9 100644
--- a/xmloff/source/text/txtdropi.hxx
+++ b/xmloff/source/text/txtdropi.hxx
@@ -30,21 +30,22 @@ class XMLTextDropCapImportContext :public XMLElementPropertyContext
 
 private:
     void ProcessAttrs(
-        const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList );
+        const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList );
 
 public:
 
     XMLTextDropCapImportContext(
-        SvXMLImport& rImport, sal_uInt16 nPrfx,
-        const OUString& rLName,
-        const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList,
+        SvXMLImport& rImport, sal_Int32 nElement,
+        const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList,
         const XMLPropertyState& rProp,
         sal_Int32 nWholeWOrdIdx,
         ::std::vector< XMLPropertyState > &rProps );
 
     virtual ~XMLTextDropCapImportContext() override;
 
-    virtual void EndElement() 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;
 
     const OUString& GetStyleName() const { return sStyleName; }
 };


More information about the Libreoffice-commits mailing list