summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammed Abdul Azeem <azeemmysore@gmail.com>2017-03-15 10:20:06 +0530
committerDavid Tardon <dtardon@redhat.com>2017-03-21 09:24:32 +0000
commit9f9e861c6d168e8318b9cdc761a387b0d650e5c0 (patch)
tree02bdb8da78c2b899a5ed9d4132ec02632490c3c2
parentd7470bab57640a4499500e3c06ace4fb8ab9c4af (diff)
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@libreoffice.org> Reviewed-by: David Tardon <dtardon@redhat.com>
-rw-r--r--include/xmloff/xmlimp.hxx29
-rw-r--r--writerperfect/source/common/DocumentHandler.cxx5
-rw-r--r--xmloff/source/core/xmlimp.cxx84
-rw-r--r--xmloff/source/transform/ChartPlotAreaOASISTContext.cxx4
-rw-r--r--xmloff/source/transform/ControlOASISTContext.cxx4
-rw-r--r--xmloff/source/transform/ControlOOoTContext.cxx4
-rw-r--r--xmloff/source/transform/EventOOoTContext.cxx4
-rw-r--r--xmloff/source/transform/FormPropOASISTContext.cxx4
-rw-r--r--xmloff/source/transform/FormPropOOoTContext.cxx4
-rw-r--r--xmloff/source/transform/FrameOASISTContext.cxx4
-rw-r--r--xmloff/source/transform/FrameOOoTContext.cxx4
-rw-r--r--xmloff/source/transform/MetaTContext.cxx6
-rw-r--r--xmloff/source/transform/NotesTContext.cxx4
-rw-r--r--xmloff/source/transform/OOo2Oasis.cxx12
-rw-r--r--xmloff/source/transform/Oasis2OOo.cxx4
-rw-r--r--xmloff/source/transform/PersAttrListTContext.cxx4
-rw-r--r--xmloff/source/transform/ProcAddAttrTContext.cxx2
-rw-r--r--xmloff/source/transform/ProcAttrTContext.cxx4
-rw-r--r--xmloff/source/transform/RenameElemTContext.cxx4
-rw-r--r--xmloff/source/transform/StyleOASISTContext.cxx8
-rw-r--r--xmloff/source/transform/StyleOOoTContext.cxx8
-rw-r--r--xmloff/source/transform/TransformerBase.cxx59
-rw-r--r--xmloff/source/transform/TransformerBase.hxx15
-rw-r--r--xmloff/source/transform/TransformerContext.cxx4
24 files changed, 168 insertions, 116 deletions
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 )