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

Mohammed Abdul Azeem azeemmysore at gmail.com
Tue Mar 21 09:24:55 UTC 2017


 include/xmloff/xmlimp.hxx                              |   29 +++++
 writerperfect/source/common/DocumentHandler.cxx        |    5 -
 xmloff/source/core/xmlimp.cxx                          |   84 +++++++++++++++++
 xmloff/source/transform/ChartPlotAreaOASISTContext.cxx |    4 
 xmloff/source/transform/ControlOASISTContext.cxx       |    4 
 xmloff/source/transform/ControlOOoTContext.cxx         |    4 
 xmloff/source/transform/EventOOoTContext.cxx           |    4 
 xmloff/source/transform/FormPropOASISTContext.cxx      |    4 
 xmloff/source/transform/FormPropOOoTContext.cxx        |    4 
 xmloff/source/transform/FrameOASISTContext.cxx         |    4 
 xmloff/source/transform/FrameOOoTContext.cxx           |    4 
 xmloff/source/transform/MetaTContext.cxx               |    6 -
 xmloff/source/transform/NotesTContext.cxx              |    4 
 xmloff/source/transform/OOo2Oasis.cxx                  |   12 +-
 xmloff/source/transform/Oasis2OOo.cxx                  |    4 
 xmloff/source/transform/PersAttrListTContext.cxx       |    4 
 xmloff/source/transform/ProcAddAttrTContext.cxx        |    2 
 xmloff/source/transform/ProcAttrTContext.cxx           |    4 
 xmloff/source/transform/RenameElemTContext.cxx         |    4 
 xmloff/source/transform/StyleOASISTContext.cxx         |    8 -
 xmloff/source/transform/StyleOOoTContext.cxx           |    8 -
 xmloff/source/transform/TransformerBase.cxx            |   59 +----------
 xmloff/source/transform/TransformerBase.hxx            |   15 ---
 xmloff/source/transform/TransformerContext.cxx         |    4 
 24 files changed, 168 insertions(+), 116 deletions(-)

New commits:
commit 9f9e861c6d168e8318b9cdc761a387b0d650e5c0
Author: Mohammed Abdul Azeem <azeemmysore at gmail.com>
Date:   Wed Mar 15 10:20:06 2017 +0530

    Old-to-new mapping of attributes is moved into a Module:
    
    This should make it easy to reuse the mapping code wherever
    necessary and restores the loading of writerperfect documents.
    
    Change-Id: I505bffa47fe37270b0430d9ae5afec5072762b4c
    Reviewed-on: https://gerrit.libreoffice.org/35263
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: David Tardon <dtardon at redhat.com>

diff --git a/include/xmloff/xmlimp.hxx b/include/xmloff/xmlimp.hxx
index c53b9c1bebac..72939eaced1f 100644
--- a/include/xmloff/xmlimp.hxx
+++ b/include/xmloff/xmlimp.hxx
@@ -53,6 +53,7 @@
 #include <cppuhelper/implbase.hxx>
 #include <xmloff/formlayerimport.hxx>
 #include <comphelper/attributelist.hxx>
+#include <sax/fastattribs.hxx>
 
 #include <com/sun/star/beans/NamedValue.hpp>
 
@@ -133,6 +134,33 @@ public:
     virtual OUString SAL_CALL getNamespaceURI( const OUString& rNamespacePrefix ) override;
 };
 
+class XMLOFF_DLLPUBLIC SvXMLLegacyToFastDocHandler : public ::cppu::WeakImplHelper<
+             css::xml::sax::XDocumentHandler,
+             css::document::XImporter >
+{
+private:
+    rtl::Reference< SvXMLImport > mrImport;
+    rtl::Reference< sax_fastparser::FastAttributeList > mxFastAttributes;
+
+public:
+    SvXMLLegacyToFastDocHandler( const rtl::Reference< SvXMLImport > & rImport );
+
+    // XImporter
+    virtual void SAL_CALL setTargetDocument( const css::uno::Reference< css::lang::XComponent >& xDoc ) override;
+
+    // css::xml::sax::XDocumentHandler
+    virtual void SAL_CALL startDocument() override;
+    virtual void SAL_CALL endDocument() override;
+    virtual void SAL_CALL startElement(const OUString& aName,
+        const css::uno::Reference< css::xml::sax::XAttributeList > & xAttribs) override;
+    virtual void SAL_CALL endElement(const OUString& aName) override;
+    virtual void SAL_CALL characters(const OUString& aChars) override;
+    virtual void SAL_CALL ignorableWhitespace(const OUString& aWhitespaces) override;
+    virtual void SAL_CALL processingInstruction(const OUString& aTarget,
+                                                const OUString& aData) override;
+    virtual void SAL_CALL setDocumentLocator(const css::uno::Reference< css::xml::sax::XLocator > & xLocator) override;
+};
+
 
 class XMLOFF_DLLPUBLIC SvXMLImport : public cppu::WeakImplHelper<
              css::xml::sax::XExtendedDocumentHandler,
@@ -145,6 +173,7 @@ class XMLOFF_DLLPUBLIC SvXMLImport : public cppu::WeakImplHelper<
              css::xml::sax::XFastParser>
 {
     friend class SvXMLImportContext;
+    friend class SvXMLLegacyToFastDocHandler;
 
     css::uno::Reference< css::xml::sax::XLocator > mxLocator;
     css::uno::Reference< css::frame::XModel > mxModel;
diff --git a/writerperfect/source/common/DocumentHandler.cxx b/writerperfect/source/common/DocumentHandler.cxx
index 3ea4d053e4a6..29788200b6de 100644
--- a/writerperfect/source/common/DocumentHandler.cxx
+++ b/writerperfect/source/common/DocumentHandler.cxx
@@ -16,6 +16,7 @@
 #include <com/sun/star/xml/sax/XAttributeList.hpp>
 
 #include <xmloff/attrlist.hxx>
+#include <xmloff/xmlimp.hxx>
 
 namespace writerperfect
 {
@@ -110,8 +111,10 @@ using com::sun::star::xml::sax::XAttributeList;
 using com::sun::star::xml::sax::XDocumentHandler;
 
 DocumentHandler::DocumentHandler(Reference < XDocumentHandler > &xHandler) :
-    mxHandler(xHandler)
+    mxHandler( xHandler )
 {
+    if (SvXMLImport *pFastHandler = dynamic_cast<SvXMLImport*>(mxHandler.get()))
+        mxHandler.set( new SvXMLLegacyToFastDocHandler( pFastHandler ) );
 }
 
 void DocumentHandler::startDocument()
diff --git a/xmloff/source/core/xmlimp.cxx b/xmloff/source/core/xmlimp.cxx
index 3377a16b7a22..36de2638a874 100644
--- a/xmloff/source/core/xmlimp.cxx
+++ b/xmloff/source/core/xmlimp.cxx
@@ -2082,4 +2082,88 @@ OUString SvXMLImportFastNamespaceHandler::getNamespaceURI( const OUString&/* rNa
     return OUString();
 }
 
+SvXMLLegacyToFastDocHandler::SvXMLLegacyToFastDocHandler( const rtl::Reference< SvXMLImport > & rImport )
+:   mrImport( rImport ),
+    mxFastAttributes( new sax_fastparser::FastAttributeList( mrImport->mxTokenHandler.get(),
+        dynamic_cast< sax_fastparser::FastTokenHandlerBase *>( mrImport->mxTokenHandler.get() ) ) )
+{
+}
+
+void SAL_CALL SvXMLLegacyToFastDocHandler::setTargetDocument( const uno::Reference< lang::XComponent >& xDoc )
+{
+    mrImport->setTargetDocument( xDoc );
+}
+
+void SAL_CALL SvXMLLegacyToFastDocHandler::startDocument()
+{
+    mrImport->startDocument();
+}
+
+void SAL_CALL SvXMLLegacyToFastDocHandler::endDocument()
+{
+    mrImport->endDocument();
+}
+
+void SAL_CALL SvXMLLegacyToFastDocHandler::startElement( const OUString& rName,
+                        const uno::Reference< xml::sax::XAttributeList >& xAttrList )
+{
+    mrImport->processNSAttributes(xAttrList);
+    OUString aLocalName;
+    sal_uInt16 nPrefix = mrImport->mpNamespaceMap->GetKeyByAttrName( rName, &aLocalName );
+    Sequence< sal_Int8 > aLocalNameSeq( reinterpret_cast<sal_Int8 const *>(
+                                    OUStringToOString( aLocalName, RTL_TEXTENCODING_UTF8 ).getStr()), aLocalName.getLength() );
+    sal_Int32 mnElement = NAMESPACE_TOKEN( nPrefix ) | mrImport->mxTokenHandler->getTokenFromUTF8( aLocalNameSeq );
+    mxFastAttributes->clear();
+
+    sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
+    for( sal_Int16 i=0; i < nAttrCount; i++ )
+    {
+        OUString aLocalAttrName;
+        const OUString& rAttrName = xAttrList->getNameByIndex( i );
+        const OUString& rAttrValue = xAttrList->getValueByIndex( i );
+        sal_uInt16 nAttrPrefix = mrImport->mpNamespaceMap->GetKeyByAttrName( rAttrName, &aLocalAttrName );
+        if( XML_NAMESPACE_XMLNS != nAttrPrefix )
+        {
+            Sequence< sal_Int8 > aAttrSeq( reinterpret_cast<sal_Int8 const *>(
+                                    OUStringToOString( aLocalAttrName, RTL_TEXTENCODING_UTF8 ).getStr()), aLocalAttrName.getLength() );
+            sal_Int32 nAttr = NAMESPACE_TOKEN( nAttrPrefix ) | mrImport->mxTokenHandler->getTokenFromUTF8( aAttrSeq ) ;
+            mxFastAttributes->add( nAttr, OUStringToOString( rAttrValue, RTL_TEXTENCODING_UTF8 ).getStr() );
+        }
+    }
+    mrImport->startFastElement( mnElement, mxFastAttributes.get() );
+}
+
+void SAL_CALL SvXMLLegacyToFastDocHandler::endElement( const OUString& rName )
+{
+    OUString aLocalName;
+    sal_uInt16 nPrefix = mrImport->mpNamespaceMap->GetKeyByAttrName( rName, &aLocalName );
+    Sequence< sal_Int8 > aLocalNameSeq( reinterpret_cast<sal_Int8 const *>(
+                                    OUStringToOString( aLocalName, RTL_TEXTENCODING_UTF8 ).getStr()), aLocalName.getLength() );
+    sal_Int32 mnElement = NAMESPACE_TOKEN( nPrefix ) | mrImport->mxTokenHandler->getTokenFromUTF8( aLocalNameSeq );
+    mrImport->endFastElement( mnElement );
+}
+
+void SAL_CALL SvXMLLegacyToFastDocHandler::characters( const OUString& aChars )
+{
+    mrImport->characters( aChars );
+}
+
+void SAL_CALL SvXMLLegacyToFastDocHandler::ignorableWhitespace( const OUString& aWhitespaces )
+{
+    mrImport->ignorableWhitespace( aWhitespaces );
+}
+
+void SAL_CALL SvXMLLegacyToFastDocHandler::processingInstruction( const OUString& aTarget,
+                                                                  const OUString& aData)
+{
+    mrImport->processingInstruction( aTarget, aData );
+}
+
+void SAL_CALL SvXMLLegacyToFastDocHandler::setDocumentLocator( const uno::Reference< xml::sax::XLocator >& rLocator )
+{
+    mrImport->setDocumentLocator( rLocator );
+}
+
+
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/transform/ChartPlotAreaOASISTContext.cxx b/xmloff/source/transform/ChartPlotAreaOASISTContext.cxx
index ddd022e73a45..187333016852 100644
--- a/xmloff/source/transform/ChartPlotAreaOASISTContext.cxx
+++ b/xmloff/source/transform/ChartPlotAreaOASISTContext.cxx
@@ -167,11 +167,11 @@ void XMLAxisOASISContext::EndElement()
                                     XML_CATEGORY ), "Axis Dimension: invalid new value" );
         }
 
-        GetTransformer().startFastElement(
+        GetTransformer().GetDocHandler()->startElement(
             GetExportQName(),
             Reference< xml::sax::XAttributeList >( pMutableAttrList ));
         ExportContent();
-        GetTransformer().endFastElement( GetExportQName());
+        GetTransformer().GetDocHandler()->endElement( GetExportQName());
     }
     else
         Export();
diff --git a/xmloff/source/transform/ControlOASISTContext.cxx b/xmloff/source/transform/ControlOASISTContext.cxx
index f5940a241740..3b5ece6da769 100644
--- a/xmloff/source/transform/ControlOASISTContext.cxx
+++ b/xmloff/source/transform/ControlOASISTContext.cxx
@@ -135,7 +135,7 @@ void XMLControlOASISTransformerContext::StartElement(
     }
 
     if( m_bCreateControl )
-        GetTransformer().startFastElement( m_aElemQName,
+        GetTransformer().GetDocHandler()->startElement( m_aElemQName,
                                                         xControlAttrList );
     XMLTransformerContext::StartElement( xAttrList );
 }
@@ -144,7 +144,7 @@ void XMLControlOASISTransformerContext::EndElement()
 {
     XMLTransformerContext::EndElement();
     if( m_bCreateControl )
-        GetTransformer().endFastElement( m_aElemQName );
+        GetTransformer().GetDocHandler()->endElement( m_aElemQName );
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/transform/ControlOOoTContext.cxx b/xmloff/source/transform/ControlOOoTContext.cxx
index 9f42d35a5030..b37a73491f94 100644
--- a/xmloff/source/transform/ControlOOoTContext.cxx
+++ b/xmloff/source/transform/ControlOOoTContext.cxx
@@ -63,7 +63,7 @@ rtl::Reference<XMLTransformerContext> XMLControlOOoTransformerContext::CreateChi
         GetTransformer().ProcessAttrList( m_xAttrList,
                                           OOO_FORM_CONTROL_ACTIONS,
                                           false );
-        GetTransformer().startFastElement( m_aElemQName,
+        GetTransformer().GetDocHandler()->startElement( m_aElemQName,
                                                         m_xAttrList );
     }
     else
@@ -77,7 +77,7 @@ rtl::Reference<XMLTransformerContext> XMLControlOOoTransformerContext::CreateChi
 
 void XMLControlOOoTransformerContext::EndElement()
 {
-    GetTransformer().endFastElement( m_aElemQName );
+    GetTransformer().GetDocHandler()->endElement( m_aElemQName );
 }
 
 void XMLControlOOoTransformerContext::Characters( const OUString& rChars )
diff --git a/xmloff/source/transform/EventOOoTContext.cxx b/xmloff/source/transform/EventOOoTContext.cxx
index 264bc12d4206..59bbfb1657fb 100644
--- a/xmloff/source/transform/EventOOoTContext.cxx
+++ b/xmloff/source/transform/EventOOoTContext.cxx
@@ -209,7 +209,7 @@ void XMLEventOOoTransformerContext::StartElement(
     if( m_bPersistent )
         XMLPersElemContentTContext::StartElement( xAttrList );
     else
-        GetTransformer().startFastElement( GetExportQName(), xAttrList );
+        GetTransformer().GetDocHandler()->startElement( GetExportQName(), xAttrList );
 }
 
 void XMLEventOOoTransformerContext::EndElement()
@@ -217,7 +217,7 @@ void XMLEventOOoTransformerContext::EndElement()
     if( m_bPersistent )
         XMLPersElemContentTContext::EndElement();
     else
-        GetTransformer().endFastElement( GetExportQName() );
+        GetTransformer().GetDocHandler()->endElement( GetExportQName() );
 }
 
 rtl::Reference<XMLTransformerContext> XMLEventOOoTransformerContext::CreateChildContext(
diff --git a/xmloff/source/transform/FormPropOASISTContext.cxx b/xmloff/source/transform/FormPropOASISTContext.cxx
index ab46e81e0010..2e68b23134a1 100644
--- a/xmloff/source/transform/FormPropOASISTContext.cxx
+++ b/xmloff/source/transform/FormPropOASISTContext.cxx
@@ -196,10 +196,10 @@ void XMLFormPropOASISTransformerContext::StartElement(
         OUString aValueElemQName(
             GetTransformer().GetNamespaceMap().GetQNameByKey(
                     XML_NAMESPACE_FORM, GetXMLToken( XML_PROPERTY_VALUE ) ) );
-        GetTransformer().startFastElement( aValueElemQName,
+        GetTransformer().GetDocHandler()->startElement( aValueElemQName,
                                                         xAttrList );
         GetTransformer().GetDocHandler()->characters( aValue );
-        GetTransformer().endFastElement( aValueElemQName );
+        GetTransformer().GetDocHandler()->endElement( aValueElemQName );
     }
 }
 
diff --git a/xmloff/source/transform/FormPropOOoTContext.cxx b/xmloff/source/transform/FormPropOOoTContext.cxx
index b590d067db43..187dad24dd20 100644
--- a/xmloff/source/transform/FormPropOOoTContext.cxx
+++ b/xmloff/source/transform/FormPropOOoTContext.cxx
@@ -243,8 +243,8 @@ void XMLFormPropOOoTransformerContext::EndElement()
                                 GetXMLToken( m_eValueTypeToken ) );
     }
 
-    GetTransformer().startFastElement( m_aElemQName, m_xAttrList );
-    GetTransformer().endFastElement( m_aElemQName );
+    GetTransformer().GetDocHandler()->startElement( m_aElemQName, m_xAttrList );
+    GetTransformer().GetDocHandler()->endElement( m_aElemQName );
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/transform/FrameOASISTContext.cxx b/xmloff/source/transform/FrameOASISTContext.cxx
index 4ed0d0ac9f01..cc68c4a88dfa 100644
--- a/xmloff/source/transform/FrameOASISTContext.cxx
+++ b/xmloff/source/transform/FrameOASISTContext.cxx
@@ -145,7 +145,7 @@ rtl::Reference<XMLTransformerContext> XMLFrameOASISTransformerContext::CreateChi
                     GetTransformer().ProcessAttrList( m_xAttrList,
                                                       OASIS_SHAPE_ACTIONS,
                                                       false );
-                    GetTransformer().startFastElement( m_aElemQName, m_xAttrList );
+                    GetTransformer().GetDocHandler()->startElement( m_aElemQName, m_xAttrList );
                 }
                 else
                 {
@@ -174,7 +174,7 @@ rtl::Reference<XMLTransformerContext> XMLFrameOASISTransformerContext::CreateChi
 void XMLFrameOASISTransformerContext::EndElement()
 {
     if( !m_bIgnoreElement )
-        GetTransformer().endFastElement( m_aElemQName );
+        GetTransformer().GetDocHandler()->endElement( m_aElemQName );
 }
 
 void XMLFrameOASISTransformerContext::Characters( const OUString& rChars )
diff --git a/xmloff/source/transform/FrameOOoTContext.cxx b/xmloff/source/transform/FrameOOoTContext.cxx
index 8c66584d8b26..0176964f7711 100644
--- a/xmloff/source/transform/FrameOOoTContext.cxx
+++ b/xmloff/source/transform/FrameOOoTContext.cxx
@@ -91,7 +91,7 @@ void XMLFrameOOoTransformerContext::StartElement(
         }
     }
 
-    GetTransformer().startFastElement( m_aElemQName,
+    GetTransformer().GetDocHandler()->startElement( m_aElemQName,
                                                     xFrameAttrList );
     XMLTransformerContext::StartElement( xAttrList );
 }
@@ -140,7 +140,7 @@ void XMLFrameOOoTransformerContext::EndElement()
 {
     XMLTransformerContext::EndElement();
     ExportContent();
-    GetTransformer().endFastElement( m_aElemQName );
+    GetTransformer().GetDocHandler()->endElement( m_aElemQName );
 }
 
 void XMLFrameOOoTransformerContext::Characters( const OUString& rChars )
diff --git a/xmloff/source/transform/MetaTContext.cxx b/xmloff/source/transform/MetaTContext.cxx
index e22b51d57f90..0e4969ccbfec 100644
--- a/xmloff/source/transform/MetaTContext.cxx
+++ b/xmloff/source/transform/MetaTContext.cxx
@@ -101,7 +101,7 @@ void XMLMetaTransformerContext::EndElement()
 
                 Reference< XAttributeList > xAttrList =
                     new XMLMutableAttributeList;
-                GetTransformer().startFastElement( aKeywordsQName,
+                GetTransformer().GetDocHandler()->startElement( aKeywordsQName,
                                                             xAttrList );
             }
 
@@ -115,12 +115,12 @@ void XMLMetaTransformerContext::EndElement()
             }
 
             if( XML_KEYWORD == *pToken )
-                GetTransformer().endFastElement( aKeywordsQName );
+                GetTransformer().GetDocHandler()->endElement( aKeywordsQName );
         }
         pToken++;
     }
 
-    GetTransformer().endFastElement( GetQName() );
+    GetTransformer().GetDocHandler()->endElement( GetQName() );
 }
 
 void XMLMetaTransformerContext::Characters( const OUString& )
diff --git a/xmloff/source/transform/NotesTContext.cxx b/xmloff/source/transform/NotesTContext.cxx
index b28115f01acf..bef8abcd8e40 100644
--- a/xmloff/source/transform/NotesTContext.cxx
+++ b/xmloff/source/transform/NotesTContext.cxx
@@ -137,7 +137,7 @@ void XMLNotesTransformerContext::StartElement(
     if( m_bPersistent )
         XMLPersElemContentTContext::StartElement( xAttrList );
     else
-        GetTransformer().startFastElement( GetExportQName(),
+        GetTransformer().GetDocHandler()->startElement( GetExportQName(),
                                                         xAttrList );
 }
 
@@ -149,7 +149,7 @@ void XMLNotesTransformerContext::EndElement()
     }
     else
     {
-        GetTransformer().endFastElement( GetExportQName() );
+        GetTransformer().GetDocHandler()->endElement( GetExportQName() );
     }
 }
 
diff --git a/xmloff/source/transform/OOo2Oasis.cxx b/xmloff/source/transform/OOo2Oasis.cxx
index 9d2dcf492283..30cba7f0a00c 100644
--- a/xmloff/source/transform/OOo2Oasis.cxx
+++ b/xmloff/source/transform/OOo2Oasis.cxx
@@ -1213,12 +1213,12 @@ void XMLDocumentTransformerContext_Impl::StartElement(
                         XML_NAMESPACE_SVG ) );
     }
 
-    GetTransformer().startFastElement( m_aElemQName, xAttrList );
+    GetTransformer().GetDocHandler()->startElement( m_aElemQName, xAttrList );
 }
 
 void XMLDocumentTransformerContext_Impl::EndElement()
 {
-    GetTransformer().endFastElement( m_aElemQName );
+    GetTransformer().GetDocHandler()->endElement( m_aElemQName );
 
     GetTransformer().SetClass( m_aOldClass );
 }
@@ -1267,13 +1267,13 @@ void XMLBodyTransformerContext_Impl::StartElement(
 
     m_aClassQName = GetTransformer().GetNamespaceMap().GetQNameByKey(
                         XML_NAMESPACE_OFFICE, aClass );
-    GetTransformer().startFastElement( m_aClassQName,
+    GetTransformer().GetDocHandler()->startElement( m_aClassQName,
                                                     xAttrList );
 }
 
 void XMLBodyTransformerContext_Impl::EndElement()
 {
-    GetTransformer().endFastElement( m_aClassQName );
+    GetTransformer().GetDocHandler()->endElement( m_aClassQName );
     XMLTransformerContext::EndElement();
 }
 
@@ -1483,12 +1483,12 @@ void XMLTableOOoTransformerContext_Impl::StartElement(
         }
     }
 
-    GetTransformer().startFastElement( m_aElemQName, xAttrList );
+    GetTransformer().GetDocHandler()->startElement( m_aElemQName, xAttrList );
 }
 
 void XMLTableOOoTransformerContext_Impl::EndElement()
 {
-    GetTransformer().endFastElement( m_aElemQName );
+    GetTransformer().GetDocHandler()->endElement( m_aElemQName );
 }
 
 XMLTransformerContext *OOo2OasisTransformer::CreateUserDefinedContext(
diff --git a/xmloff/source/transform/Oasis2OOo.cxx b/xmloff/source/transform/Oasis2OOo.cxx
index 6363735e27c2..388761389806 100644
--- a/xmloff/source/transform/Oasis2OOo.cxx
+++ b/xmloff/source/transform/Oasis2OOo.cxx
@@ -1226,12 +1226,12 @@ void XMLTableTransformerContext_Impl::StartElement(
         }
     }
 
-    GetTransformer().startFastElement( m_aElemQName, xAttrList );
+    GetTransformer().GetDocHandler()->startElement( m_aElemQName, xAttrList );
 }
 
 void XMLTableTransformerContext_Impl::EndElement()
 {
-    GetTransformer().endFastElement( m_aElemQName );
+    GetTransformer().GetDocHandler()->endElement( m_aElemQName );
 }
 
 class XMLBodyOASISTransformerContext_Impl : public XMLTransformerContext
diff --git a/xmloff/source/transform/PersAttrListTContext.cxx b/xmloff/source/transform/PersAttrListTContext.cxx
index f021af64ed95..c604a095cc21 100644
--- a/xmloff/source/transform/PersAttrListTContext.cxx
+++ b/xmloff/source/transform/PersAttrListTContext.cxx
@@ -161,9 +161,9 @@ bool XMLPersAttrListTContext::IsPersistent() const
 
 void XMLPersAttrListTContext::Export()
 {
-    GetTransformer().startFastElement( m_aElemQName, m_xAttrList );
+    GetTransformer().GetDocHandler()->startElement( m_aElemQName, m_xAttrList );
     ExportContent();
-    GetTransformer().endFastElement( m_aElemQName );
+    GetTransformer().GetDocHandler()->endElement( m_aElemQName );
 }
 
 void XMLPersAttrListTContext::ExportContent()
diff --git a/xmloff/source/transform/ProcAddAttrTContext.cxx b/xmloff/source/transform/ProcAddAttrTContext.cxx
index 821ccd9db63c..2adf278b1bec 100644
--- a/xmloff/source/transform/ProcAddAttrTContext.cxx
+++ b/xmloff/source/transform/ProcAddAttrTContext.cxx
@@ -60,7 +60,7 @@ void XMLProcAddAttrTransformerContext::StartElement(
         xAttrList = pMutableAttrList;
     }
     pMutableAttrList->AddAttribute( m_aAttrQName, m_aAttrValue );
-    GetTransformer().startFastElement( GetElemQName(), xAttrList );
+    GetTransformer().GetDocHandler()->startElement( GetElemQName(), xAttrList );
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/transform/ProcAttrTContext.cxx b/xmloff/source/transform/ProcAttrTContext.cxx
index 0af4e4c63dad..4f142b3dadf1 100644
--- a/xmloff/source/transform/ProcAttrTContext.cxx
+++ b/xmloff/source/transform/ProcAttrTContext.cxx
@@ -56,12 +56,12 @@ void XMLProcAttrTransformerContext::StartElement(
 {
     Reference< XAttributeList > xAttrList( rAttrList );
     GetTransformer().ProcessAttrList( xAttrList, m_nActionMap, false );
-    GetTransformer().startFastElement( m_aElemQName, xAttrList );
+    GetTransformer().GetDocHandler()->startElement( m_aElemQName, xAttrList );
 }
 
 void XMLProcAttrTransformerContext::EndElement()
 {
-    GetTransformer().endFastElement( m_aElemQName );
+    GetTransformer().GetDocHandler()->endElement( m_aElemQName );
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/transform/RenameElemTContext.cxx b/xmloff/source/transform/RenameElemTContext.cxx
index 81ea2daa4096..6816d66d6a50 100644
--- a/xmloff/source/transform/RenameElemTContext.cxx
+++ b/xmloff/source/transform/RenameElemTContext.cxx
@@ -69,12 +69,12 @@ void XMLRenameElemTransformerContext::StartElement(
         xAttrList = pMutableAttrList;
         pMutableAttrList->AddAttribute( m_aAttrQName, m_aAttrValue );
     }
-    GetTransformer().startFastElement( m_aElemQName, xAttrList );
+    GetTransformer().GetDocHandler()->startElement( m_aElemQName, xAttrList );
 }
 
 void XMLRenameElemTransformerContext::EndElement()
 {
-    GetTransformer().endFastElement( m_aElemQName );
+    GetTransformer().GetDocHandler()->endElement( m_aElemQName );
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/transform/StyleOASISTContext.cxx b/xmloff/source/transform/StyleOASISTContext.cxx
index 771d55e49909..21cc404ccd26 100644
--- a/xmloff/source/transform/StyleOASISTContext.cxx
+++ b/xmloff/source/transform/StyleOASISTContext.cxx
@@ -595,9 +595,9 @@ void XMLPropertiesTContext_Impl::StartElement(
 
 void XMLPropertiesTContext_Impl::Export()
 {
-    GetTransformer().startFastElement( GetExportQName(), m_xAttrList );
+    GetTransformer().GetDocHandler()->startElement( GetExportQName(), m_xAttrList );
     ExportContent();
-    GetTransformer().endFastElement( GetExportQName() );
+    GetTransformer().GetDocHandler()->endElement( GetExportQName() );
 }
 
 XMLPropType XMLPropertiesTContext_Impl::GetPropType( const OUString& rLocalName )
@@ -879,7 +879,7 @@ void XMLStyleOASISTContext::StartElement(
     if( m_bPersistent )
         XMLPersElemContentTContext::StartElement( xAttrList );
     else
-        GetTransformer().startFastElement( GetExportQName(), xAttrList );
+        GetTransformer().GetDocHandler()->startElement( GetExportQName(), xAttrList );
 }
 
 void XMLStyleOASISTContext::EndElement()
@@ -896,7 +896,7 @@ void XMLStyleOASISTContext::EndElement()
             m_xPropContext->Export();
             m_xPropContext = nullptr;
         }
-        GetTransformer().endFastElement( GetExportQName() );
+        GetTransformer().GetDocHandler()->endElement( GetExportQName() );
     }
 }
 
diff --git a/xmloff/source/transform/StyleOOoTContext.cxx b/xmloff/source/transform/StyleOOoTContext.cxx
index 1a8c9ce1e3f4..82941b446753 100644
--- a/xmloff/source/transform/StyleOOoTContext.cxx
+++ b/xmloff/source/transform/StyleOOoTContext.cxx
@@ -197,9 +197,9 @@ void XMLTypedPropertiesOOoTContext_Impl::Export()
 {
     if( m_xAttrList->getLength() || HasElementContent() )
     {
-        GetTransformer().startFastElement( GetQName(), m_xAttrList );
+        GetTransformer().GetDocHandler()->startElement( GetQName(), m_xAttrList );
         ExportContent();
-        GetTransformer().endFastElement( GetQName() );
+        GetTransformer().GetDocHandler()->endElement( GetQName() );
     }
 }
 
@@ -1252,7 +1252,7 @@ void XMLStyleOOoTContext::StartElement(
     if( m_bPersistent )
         XMLPersElemContentTContext::StartElement( xAttrList );
     else
-        GetTransformer().startFastElement( GetExportQName(), xAttrList );
+        GetTransformer().GetDocHandler()->startElement( GetExportQName(), xAttrList );
 }
 
 void XMLStyleOOoTContext::EndElement()
@@ -1260,7 +1260,7 @@ void XMLStyleOOoTContext::EndElement()
     if( m_bPersistent )
         XMLPersElemContentTContext::EndElement();
     else
-        GetTransformer().endFastElement( GetExportQName() );
+        GetTransformer().GetDocHandler()->endElement( GetExportQName() );
 }
 
 void XMLStyleOOoTContext::Characters( const OUString& )
diff --git a/xmloff/source/transform/TransformerBase.cxx b/xmloff/source/transform/TransformerBase.cxx
index cafbc9ac265a..5707f9ddd338 100644
--- a/xmloff/source/transform/TransformerBase.cxx
+++ b/xmloff/source/transform/TransformerBase.cxx
@@ -174,14 +174,10 @@ XMLTransformerActions *XMLTransformerBase::GetUserDefinedActions( sal_uInt16 )
 XMLTransformerBase::XMLTransformerBase( XMLTransformerActionInit *pInit,
                                     ::xmloff::token::XMLTokenEnum *pTKMapInit )
     throw () :
-    m_xTokenHandler( new FastTokenHandler() ),
     m_pNamespaceMap( new SvXMLNamespaceMap ),
     m_pReplaceNamespaceMap( new SvXMLNamespaceMap ),
     m_pElemActions( new XMLTransformerActions( pInit ) ),
-    m_pTokenMap( new XMLTransformerTokenMap( pTKMapInit ) ),
-    m_nElement(0),
-    m_xFastAttributes( new sax_fastparser::FastAttributeList( m_xTokenHandler.get(),
-        dynamic_cast< sax_fastparser::FastTokenHandlerBase *>( m_xTokenHandler.get() ) ) )
+    m_pTokenMap( new XMLTransformerTokenMap( pTKMapInit ) )
 {
     GetNamespaceMap().Add( GetXMLToken(XML_NP_XLINK), GetXMLToken(XML_N_XLINK), XML_NAMESPACE_XLINK );
     GetNamespaceMap().Add( GetXMLToken(XML_NP_DC), GetXMLToken(XML_N_DC), XML_NAMESPACE_DC );
@@ -413,9 +409,10 @@ void SAL_CALL XMLTransformerBase::initialize( const Sequence< Any >& aArguments
         if( cppu::UnoType<XDocumentHandler>::get().isAssignableFrom( pAny->getValueType() ) )
         {
             m_xHandler.set( *pAny, UNO_QUERY );
-            m_xFastHandler.set( m_xHandler.get(), UNO_QUERY );
-            if (SvXMLImport *pFastHandler = dynamic_cast<SvXMLImport*>(m_xFastHandler.get()))
-                m_xNamespaceHandler = pFastHandler->getNamespaceHandler();
+        // Type change to avoid crashing of dynamic_cast
+            if (SvXMLImport *pFastHandler = dynamic_cast<SvXMLImport*>(
+                                uno::Reference< XFastDocumentHandler >( m_xHandler, uno::UNO_QUERY ).get() ) )
+                m_xHandler.set( new SvXMLLegacyToFastDocHandler( pFastHandler ) );
         }
 
         // property set to transport data across
@@ -1442,50 +1439,4 @@ bool XMLTransformerBase::isWriter() const
             xSI->supportsService("com.sun.star.text.GlobalDocument") );
 }
 
-void XMLTransformerBase::startFastElement( const OUString& rName,
-                                         const uno::Reference< xml::sax::XAttributeList >& xAttrList )
-{
-    if( m_xFastHandler.is() )
-    {
-        OUString aLocalName;
-        sal_uInt16 nPrefix = m_pNamespaceMap->GetKeyByAttrName( rName, &aLocalName );
-        m_nElement = NAMESPACE_TOKEN( nPrefix ) | m_xTokenHandler->getTokenDirect(
-                        OUStringToOString( aLocalName, RTL_TEXTENCODING_ASCII_US ).getStr(), aLocalName.getLength() ) ;
-        m_xFastAttributes->clear();
-
-        sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
-        for( sal_Int16 i=0; i < nAttrCount; i++ )
-        {
-            OUString aLocalAttrName;
-            const OUString& rAttrName = xAttrList->getNameByIndex( i );
-            const OUString& rAttrValue = xAttrList->getValueByIndex( i );
-            sal_uInt16 nAttrPrefix = m_pNamespaceMap->GetKeyByAttrName( rAttrName, &aLocalAttrName );
-            if( XML_NAMESPACE_XMLNS == nAttrPrefix )
-            {
-                if ( m_xNamespaceHandler.is() )
-                    m_xNamespaceHandler->registerNamespace( aLocalAttrName, rAttrValue );
-            }
-            else
-            {
-                sal_Int32 nAttr = NAMESPACE_TOKEN( nAttrPrefix ) | m_xTokenHandler->getTokenDirect(
-                                    OUStringToOString( aLocalAttrName, RTL_TEXTENCODING_ASCII_US ).getStr(), aLocalAttrName.getLength() ) ;
-                m_xFastAttributes->add( nAttr, OUStringToOString( rAttrValue, RTL_TEXTENCODING_ASCII_US ).getStr() );
-            }
-        }
-        m_xFastHandler->startFastElement( m_nElement, m_xFastAttributes.get() );
-    }
-    else
-        m_xHandler->startElement( rName, xAttrList );
-}
-
-void XMLTransformerBase::endFastElement( const OUString& rName )
-{
-    if( m_xFastHandler.is() )
-       m_xFastHandler->endFastElement( m_nElement );
-    else
-        m_xHandler->endElement( rName );
-}
-
-
-
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/transform/TransformerBase.hxx b/xmloff/source/transform/TransformerBase.hxx
index e34427c8e23d..fed048b84de4 100644
--- a/xmloff/source/transform/TransformerBase.hxx
+++ b/xmloff/source/transform/TransformerBase.hxx
@@ -27,17 +27,13 @@
 #include <com/sun/star/xml/sax/SAXParseException.hpp>
 #include <com/sun/star/xml/sax/SAXException.hpp>
 #include <com/sun/star/xml/sax/XAttributeList.hpp>
-#include <com/sun/star/xml/sax/XFastDocumentHandler.hpp>
-#include <com/sun/star/xml/sax/XFastNamespaceHandler.hpp>
 #include <com/sun/star/xml/sax/XLocator.hpp>
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include <com/sun/star/frame/XModel.hpp>
 #include <rtl/ref.hxx>
 #include <xmloff/xmltoken.hxx>
-#include <sax/fastattribs.hxx>
 
 #include "Transformer.hxx"
-#include <xmloff/fasttokenhandler.hxx>
 
 namespace com { namespace sun { namespace star {
     namespace i18n { class XCharacterClassification; }
@@ -60,11 +56,8 @@ class XMLTransformerBase : public XMLTransformer
     css::uno::Reference< css::xml::sax::XLocator >                    m_xLocator;
     css::uno::Reference< css::xml::sax::XDocumentHandler >            m_xHandler;     // the handlers
     css::uno::Reference< css::xml::sax::XExtendedDocumentHandler >    m_xExtHandler;
-    css::uno::Reference< css::xml::sax::XFastDocumentHandler >        m_xFastHandler;
     css::uno::Reference< css::beans::XPropertySet >                   m_xPropSet;
     css::uno::Reference< css::i18n::XCharacterClassification >        xCharClass;
-    rtl::Reference< xmloff::token::FastTokenHandler >                 m_xTokenHandler;
-    css::uno::Reference< css::xml::sax::XFastNamespaceHandler >       m_xNamespaceHandler;
 
     OUString m_aExtPathPrefix;
     OUString m_aClass;
@@ -75,10 +68,6 @@ class XMLTransformerBase : public XMLTransformer
     XMLTransformerActions       *m_pElemActions;
     XMLTransformerTokenMap      *m_pTokenMap;
 
-    //for feeding FastDocumentHandler
-    sal_Int32 m_nElement;
-    rtl::Reference< sax_fastparser::FastAttributeList > m_xFastAttributes;
-
 protected:
     css::uno::Reference< css::frame::XModel >     mxModel;
 
@@ -187,10 +176,6 @@ public:
 
     bool isWriter() const;
 
-    void startFastElement( const OUString& rName,
-                                         const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList );
-    void endFastElement( const OUString& rName );
-
 };
 
 #endif // INCLUDED_XMLOFF_SOURCE_TRANSFORM_TRANSFORMERBASE_HXX
diff --git a/xmloff/source/transform/TransformerContext.cxx b/xmloff/source/transform/TransformerContext.cxx
index 5ff0d94f4fc1..fd4005d73274 100644
--- a/xmloff/source/transform/TransformerContext.cxx
+++ b/xmloff/source/transform/TransformerContext.cxx
@@ -62,12 +62,12 @@ rtl::Reference<XMLTransformerContext> XMLTransformerContext::CreateChildContext(
 
 void XMLTransformerContext::StartElement( const Reference< XAttributeList >& rAttrList )
 {
-    m_rTransformer.startFastElement( m_aQName, rAttrList );
+    m_rTransformer.GetDocHandler()->startElement( m_aQName, rAttrList );
 }
 
 void XMLTransformerContext::EndElement()
 {
-    GetTransformer().endFastElement( m_aQName );
+    GetTransformer().GetDocHandler()->endElement( m_aQName );
 }
 
 void XMLTransformerContext::Characters( const OUString& rChars )


More information about the Libreoffice-commits mailing list