summaryrefslogtreecommitdiff
path: root/xmloff/source/transform
diff options
context:
space:
mode:
authorMohammed Abdul Azeem <azeemmysore@gmail.com>2016-09-05 14:38:30 +0530
committerMichael Meeks <michael.meeks@collabora.com>2017-01-25 11:20:48 +0000
commit8154953add163554c00935486a1cf5677cef2609 (patch)
treed8e148e84aa1e164a2358827085f4d9240ce5e31 /xmloff/source/transform
parent657eea01046c7f39ee8ca4545241372177385946 (diff)
ScXMLTableRowCellContext implements fast interfaces:
Implementation of fast interfaces for contexts in path from ScXMLImport::CreateFastContext to ScXMLTableRowCellContext. FastParser is enabled and duplicates are avoided at all possible places. OOoXML filters still need those legacy paths we removed, so I had to temporarily map them to fast elements, which would increase their load time, but hopefully it should help us in the long run. Change-Id: Ie997a9a8b72787da2356abc99ea2cd57c2e5b670 Reviewed-on: https://gerrit.libreoffice.org/28648 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Michael Meeks <michael.meeks@collabora.com> Tested-by: Michael Meeks <michael.meeks@collabora.com>
Diffstat (limited to 'xmloff/source/transform')
-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.cxx5
-rw-r--r--xmloff/source/transform/FormPropOASISTContext.cxx4
-rw-r--r--xmloff/source/transform/FormPropOOoTContext.cxx5
-rw-r--r--xmloff/source/transform/FrameOASISTContext.cxx5
-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.cxx10
-rw-r--r--xmloff/source/transform/StyleOOoTContext.cxx9
-rw-r--r--xmloff/source/transform/TransformerBase.cxx57
-rw-r--r--xmloff/source/transform/TransformerBase.hxx15
-rw-r--r--xmloff/source/transform/TransformerContext.cxx4
21 files changed, 117 insertions, 53 deletions
diff --git a/xmloff/source/transform/ChartPlotAreaOASISTContext.cxx b/xmloff/source/transform/ChartPlotAreaOASISTContext.cxx
index 187333016852..ddd022e73a45 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().GetDocHandler()->startElement(
+ GetTransformer().startFastElement(
GetExportQName(),
Reference< xml::sax::XAttributeList >( pMutableAttrList ));
ExportContent();
- GetTransformer().GetDocHandler()->endElement( GetExportQName());
+ GetTransformer().endFastElement( GetExportQName());
}
else
Export();
diff --git a/xmloff/source/transform/ControlOASISTContext.cxx b/xmloff/source/transform/ControlOASISTContext.cxx
index 3b5ece6da769..f5940a241740 100644
--- a/xmloff/source/transform/ControlOASISTContext.cxx
+++ b/xmloff/source/transform/ControlOASISTContext.cxx
@@ -135,7 +135,7 @@ void XMLControlOASISTransformerContext::StartElement(
}
if( m_bCreateControl )
- GetTransformer().GetDocHandler()->startElement( m_aElemQName,
+ GetTransformer().startFastElement( m_aElemQName,
xControlAttrList );
XMLTransformerContext::StartElement( xAttrList );
}
@@ -144,7 +144,7 @@ void XMLControlOASISTransformerContext::EndElement()
{
XMLTransformerContext::EndElement();
if( m_bCreateControl )
- GetTransformer().GetDocHandler()->endElement( m_aElemQName );
+ GetTransformer().endFastElement( m_aElemQName );
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/transform/ControlOOoTContext.cxx b/xmloff/source/transform/ControlOOoTContext.cxx
index b37a73491f94..9f42d35a5030 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().GetDocHandler()->startElement( m_aElemQName,
+ GetTransformer().startFastElement( m_aElemQName,
m_xAttrList );
}
else
@@ -77,7 +77,7 @@ rtl::Reference<XMLTransformerContext> XMLControlOOoTransformerContext::CreateChi
void XMLControlOOoTransformerContext::EndElement()
{
- GetTransformer().GetDocHandler()->endElement( m_aElemQName );
+ GetTransformer().endFastElement( m_aElemQName );
}
void XMLControlOOoTransformerContext::Characters( const OUString& rChars )
diff --git a/xmloff/source/transform/EventOOoTContext.cxx b/xmloff/source/transform/EventOOoTContext.cxx
index 42cc1ab93ab0..264bc12d4206 100644
--- a/xmloff/source/transform/EventOOoTContext.cxx
+++ b/xmloff/source/transform/EventOOoTContext.cxx
@@ -209,8 +209,7 @@ void XMLEventOOoTransformerContext::StartElement(
if( m_bPersistent )
XMLPersElemContentTContext::StartElement( xAttrList );
else
- GetTransformer().GetDocHandler()->startElement( GetExportQName(),
- xAttrList );
+ GetTransformer().startFastElement( GetExportQName(), xAttrList );
}
void XMLEventOOoTransformerContext::EndElement()
@@ -218,7 +217,7 @@ void XMLEventOOoTransformerContext::EndElement()
if( m_bPersistent )
XMLPersElemContentTContext::EndElement();
else
- GetTransformer().GetDocHandler()->endElement( GetExportQName() );
+ GetTransformer().endFastElement( GetExportQName() );
}
rtl::Reference<XMLTransformerContext> XMLEventOOoTransformerContext::CreateChildContext(
diff --git a/xmloff/source/transform/FormPropOASISTContext.cxx b/xmloff/source/transform/FormPropOASISTContext.cxx
index 2e68b23134a1..ab46e81e0010 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().GetDocHandler()->startElement( aValueElemQName,
+ GetTransformer().startFastElement( aValueElemQName,
xAttrList );
GetTransformer().GetDocHandler()->characters( aValue );
- GetTransformer().GetDocHandler()->endElement( aValueElemQName );
+ GetTransformer().endFastElement( aValueElemQName );
}
}
diff --git a/xmloff/source/transform/FormPropOOoTContext.cxx b/xmloff/source/transform/FormPropOOoTContext.cxx
index 61ac2825e4d2..b590d067db43 100644
--- a/xmloff/source/transform/FormPropOOoTContext.cxx
+++ b/xmloff/source/transform/FormPropOOoTContext.cxx
@@ -243,9 +243,8 @@ void XMLFormPropOOoTransformerContext::EndElement()
GetXMLToken( m_eValueTypeToken ) );
}
- GetTransformer().GetDocHandler()->startElement( m_aElemQName,
- m_xAttrList );
- GetTransformer().GetDocHandler()->endElement( m_aElemQName );
+ GetTransformer().startFastElement( m_aElemQName, m_xAttrList );
+ GetTransformer().endFastElement( m_aElemQName );
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/transform/FrameOASISTContext.cxx b/xmloff/source/transform/FrameOASISTContext.cxx
index ca5b1e9c2b94..4ed0d0ac9f01 100644
--- a/xmloff/source/transform/FrameOASISTContext.cxx
+++ b/xmloff/source/transform/FrameOASISTContext.cxx
@@ -145,8 +145,7 @@ rtl::Reference<XMLTransformerContext> XMLFrameOASISTransformerContext::CreateChi
GetTransformer().ProcessAttrList( m_xAttrList,
OASIS_SHAPE_ACTIONS,
false );
- GetTransformer().GetDocHandler()->startElement( m_aElemQName,
- m_xAttrList );
+ GetTransformer().startFastElement( m_aElemQName, m_xAttrList );
}
else
{
@@ -175,7 +174,7 @@ rtl::Reference<XMLTransformerContext> XMLFrameOASISTransformerContext::CreateChi
void XMLFrameOASISTransformerContext::EndElement()
{
if( !m_bIgnoreElement )
- GetTransformer().GetDocHandler()->endElement( m_aElemQName );
+ GetTransformer().endFastElement( m_aElemQName );
}
void XMLFrameOASISTransformerContext::Characters( const OUString& rChars )
diff --git a/xmloff/source/transform/FrameOOoTContext.cxx b/xmloff/source/transform/FrameOOoTContext.cxx
index 0176964f7711..8c66584d8b26 100644
--- a/xmloff/source/transform/FrameOOoTContext.cxx
+++ b/xmloff/source/transform/FrameOOoTContext.cxx
@@ -91,7 +91,7 @@ void XMLFrameOOoTransformerContext::StartElement(
}
}
- GetTransformer().GetDocHandler()->startElement( m_aElemQName,
+ GetTransformer().startFastElement( m_aElemQName,
xFrameAttrList );
XMLTransformerContext::StartElement( xAttrList );
}
@@ -140,7 +140,7 @@ void XMLFrameOOoTransformerContext::EndElement()
{
XMLTransformerContext::EndElement();
ExportContent();
- GetTransformer().GetDocHandler()->endElement( m_aElemQName );
+ GetTransformer().endFastElement( m_aElemQName );
}
void XMLFrameOOoTransformerContext::Characters( const OUString& rChars )
diff --git a/xmloff/source/transform/MetaTContext.cxx b/xmloff/source/transform/MetaTContext.cxx
index 0e4969ccbfec..e22b51d57f90 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().GetDocHandler()->startElement( aKeywordsQName,
+ GetTransformer().startFastElement( aKeywordsQName,
xAttrList );
}
@@ -115,12 +115,12 @@ void XMLMetaTransformerContext::EndElement()
}
if( XML_KEYWORD == *pToken )
- GetTransformer().GetDocHandler()->endElement( aKeywordsQName );
+ GetTransformer().endFastElement( aKeywordsQName );
}
pToken++;
}
- GetTransformer().GetDocHandler()->endElement( GetQName() );
+ GetTransformer().endFastElement( GetQName() );
}
void XMLMetaTransformerContext::Characters( const OUString& )
diff --git a/xmloff/source/transform/NotesTContext.cxx b/xmloff/source/transform/NotesTContext.cxx
index bef8abcd8e40..b28115f01acf 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().GetDocHandler()->startElement( GetExportQName(),
+ GetTransformer().startFastElement( GetExportQName(),
xAttrList );
}
@@ -149,7 +149,7 @@ void XMLNotesTransformerContext::EndElement()
}
else
{
- GetTransformer().GetDocHandler()->endElement( GetExportQName() );
+ GetTransformer().endFastElement( GetExportQName() );
}
}
diff --git a/xmloff/source/transform/OOo2Oasis.cxx b/xmloff/source/transform/OOo2Oasis.cxx
index c6cc7c421cb9..e5e188eb13a8 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().GetDocHandler()->startElement( m_aElemQName, xAttrList );
+ GetTransformer().startFastElement( m_aElemQName, xAttrList );
}
void XMLDocumentTransformerContext_Impl::EndElement()
{
- GetTransformer().GetDocHandler()->endElement( m_aElemQName );
+ GetTransformer().endFastElement( m_aElemQName );
GetTransformer().SetClass( m_aOldClass );
}
@@ -1267,13 +1267,13 @@ void XMLBodyTransformerContext_Impl::StartElement(
m_aClassQName = GetTransformer().GetNamespaceMap().GetQNameByKey(
XML_NAMESPACE_OFFICE, aClass );
- GetTransformer().GetDocHandler()->startElement( m_aClassQName,
+ GetTransformer().startFastElement( m_aClassQName,
xAttrList );
}
void XMLBodyTransformerContext_Impl::EndElement()
{
- GetTransformer().GetDocHandler()->endElement( m_aClassQName );
+ GetTransformer().endFastElement( m_aClassQName );
XMLTransformerContext::EndElement();
}
@@ -1483,12 +1483,12 @@ void XMLTableOOoTransformerContext_Impl::StartElement(
}
}
- GetTransformer().GetDocHandler()->startElement( m_aElemQName, xAttrList );
+ GetTransformer().startFastElement( m_aElemQName, xAttrList );
}
void XMLTableOOoTransformerContext_Impl::EndElement()
{
- GetTransformer().GetDocHandler()->endElement( m_aElemQName );
+ GetTransformer().endFastElement( m_aElemQName );
}
XMLTransformerContext *OOo2OasisTransformer::CreateUserDefinedContext(
diff --git a/xmloff/source/transform/Oasis2OOo.cxx b/xmloff/source/transform/Oasis2OOo.cxx
index 257f1997f5e9..e90126430594 100644
--- a/xmloff/source/transform/Oasis2OOo.cxx
+++ b/xmloff/source/transform/Oasis2OOo.cxx
@@ -1226,12 +1226,12 @@ void XMLTableTransformerContext_Impl::StartElement(
}
}
- GetTransformer().GetDocHandler()->startElement( m_aElemQName, xAttrList );
+ GetTransformer().startFastElement( m_aElemQName, xAttrList );
}
void XMLTableTransformerContext_Impl::EndElement()
{
- GetTransformer().GetDocHandler()->endElement( m_aElemQName );
+ GetTransformer().endFastElement( m_aElemQName );
}
class XMLBodyOASISTransformerContext_Impl : public XMLTransformerContext
diff --git a/xmloff/source/transform/PersAttrListTContext.cxx b/xmloff/source/transform/PersAttrListTContext.cxx
index c604a095cc21..f021af64ed95 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().GetDocHandler()->startElement( m_aElemQName, m_xAttrList );
+ GetTransformer().startFastElement( m_aElemQName, m_xAttrList );
ExportContent();
- GetTransformer().GetDocHandler()->endElement( m_aElemQName );
+ GetTransformer().endFastElement( m_aElemQName );
}
void XMLPersAttrListTContext::ExportContent()
diff --git a/xmloff/source/transform/ProcAddAttrTContext.cxx b/xmloff/source/transform/ProcAddAttrTContext.cxx
index 2adf278b1bec..821ccd9db63c 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().GetDocHandler()->startElement( GetElemQName(), xAttrList );
+ GetTransformer().startFastElement( GetElemQName(), xAttrList );
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/transform/ProcAttrTContext.cxx b/xmloff/source/transform/ProcAttrTContext.cxx
index 4f142b3dadf1..0af4e4c63dad 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().GetDocHandler()->startElement( m_aElemQName, xAttrList );
+ GetTransformer().startFastElement( m_aElemQName, xAttrList );
}
void XMLProcAttrTransformerContext::EndElement()
{
- GetTransformer().GetDocHandler()->endElement( m_aElemQName );
+ GetTransformer().endFastElement( m_aElemQName );
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/transform/RenameElemTContext.cxx b/xmloff/source/transform/RenameElemTContext.cxx
index 6816d66d6a50..81ea2daa4096 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().GetDocHandler()->startElement( m_aElemQName, xAttrList );
+ GetTransformer().startFastElement( m_aElemQName, xAttrList );
}
void XMLRenameElemTransformerContext::EndElement()
{
- GetTransformer().GetDocHandler()->endElement( m_aElemQName );
+ GetTransformer().endFastElement( m_aElemQName );
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/transform/StyleOASISTContext.cxx b/xmloff/source/transform/StyleOASISTContext.cxx
index 38a3d43ecb35..6018aa546c93 100644
--- a/xmloff/source/transform/StyleOASISTContext.cxx
+++ b/xmloff/source/transform/StyleOASISTContext.cxx
@@ -609,10 +609,9 @@ void XMLPropertiesTContext_Impl::StartElement(
void XMLPropertiesTContext_Impl::Export()
{
- GetTransformer().GetDocHandler()->startElement( GetExportQName(),
- m_xAttrList );
+ GetTransformer().startFastElement( GetExportQName(), m_xAttrList );
ExportContent();
- GetTransformer().GetDocHandler()->endElement( GetExportQName() );
+ GetTransformer().endFastElement( GetExportQName() );
}
XMLPropType XMLPropertiesTContext_Impl::GetPropType( const OUString& rLocalName )
@@ -896,8 +895,7 @@ void XMLStyleOASISTContext::StartElement(
if( m_bPersistent )
XMLPersElemContentTContext::StartElement( xAttrList );
else
- GetTransformer().GetDocHandler()->startElement( GetExportQName(),
- xAttrList );
+ GetTransformer().startFastElement( GetExportQName(), xAttrList );
}
void XMLStyleOASISTContext::EndElement()
@@ -914,7 +912,7 @@ void XMLStyleOASISTContext::EndElement()
m_xPropContext->Export();
m_xPropContext = nullptr;
}
- GetTransformer().GetDocHandler()->endElement( GetExportQName() );
+ GetTransformer().endFastElement( GetExportQName() );
}
}
diff --git a/xmloff/source/transform/StyleOOoTContext.cxx b/xmloff/source/transform/StyleOOoTContext.cxx
index bf841ca478fb..077e7b0a84c9 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().GetDocHandler()->startElement( GetQName(), m_xAttrList );
+ GetTransformer().startFastElement( GetQName(), m_xAttrList );
ExportContent();
- GetTransformer().GetDocHandler()->endElement( GetQName() );
+ GetTransformer().endFastElement( GetQName() );
}
}
@@ -1254,8 +1254,7 @@ void XMLStyleOOoTContext::StartElement(
if( m_bPersistent )
XMLPersElemContentTContext::StartElement( xAttrList );
else
- GetTransformer().GetDocHandler()->startElement( GetExportQName(),
- xAttrList );
+ GetTransformer().startFastElement( GetExportQName(), xAttrList );
}
void XMLStyleOOoTContext::EndElement()
@@ -1263,7 +1262,7 @@ void XMLStyleOOoTContext::EndElement()
if( m_bPersistent )
XMLPersElemContentTContext::EndElement();
else
- GetTransformer().GetDocHandler()->endElement( GetExportQName() );
+ GetTransformer().endFastElement( GetExportQName() );
}
void XMLStyleOOoTContext::Characters( const OUString& )
diff --git a/xmloff/source/transform/TransformerBase.cxx b/xmloff/source/transform/TransformerBase.cxx
index f577072689d3..08c4a21d00e5 100644
--- a/xmloff/source/transform/TransformerBase.cxx
+++ b/xmloff/source/transform/TransformerBase.cxx
@@ -40,6 +40,7 @@
#include "TransformerTokenMap.hxx"
#include "TransformerBase.hxx"
+#include <xmloff/xmlimp.hxx>
using namespace ::osl;
using namespace ::xmloff::token;
@@ -184,10 +185,13 @@ 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_pTokenMap( new XMLTransformerTokenMap( pTKMapInit ) ),
+ m_xFastAttributes( new sax_fastparser::FastAttributeList( m_xTokenHandler.get(),
+ dynamic_cast< sax_fastparser::FastTokenHandlerBase *>( m_xTokenHandler.get() ) ) )
{
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 );
@@ -429,7 +433,12 @@ void SAL_CALL XMLTransformerBase::initialize( const Sequence< Any >& aArguments
// document handler
if( cppu::UnoType<XDocumentHandler>::get().isAssignableFrom( pAny->getValueType() ) )
+ {
m_xHandler.set( *pAny, UNO_QUERY );
+ m_xFastHandler.set( m_xHandler.get(), UNO_QUERY );
+ if ( (dynamic_cast< SvXMLImport* >( m_xFastHandler.get() ) ) )
+ m_xNamespaceHandler = (dynamic_cast< SvXMLImport* >( m_xFastHandler.get() ) )->getNamespaceHandler();
+ }
// property set to transport data across
if( cppu::UnoType<XPropertySet>::get().isAssignableFrom( pAny->getValueType() ) )
@@ -1455,4 +1464,50 @@ 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 );
+ 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( nElement, m_xFastAttributes.get() );
+ }
+ else
+ m_xHandler->startElement( rName, xAttrList );
+}
+
+void XMLTransformerBase::endFastElement( const OUString& rName )
+{
+ if( m_xFastHandler.is() )
+ m_xFastHandler->endFastElement( 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 a22fa7379c2c..2dbb32a74950 100644
--- a/xmloff/source/transform/TransformerBase.hxx
+++ b/xmloff/source/transform/TransformerBase.hxx
@@ -27,13 +27,17 @@
#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; }
@@ -56,8 +60,11 @@ 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;
@@ -68,6 +75,10 @@ class XMLTransformerBase : public XMLTransformer
XMLTransformerActions *m_pElemActions;
XMLTransformerTokenMap *m_pTokenMap;
+ //for feeding FastDocumentHandler
+ sal_Int32 nElement;
+ rtl::Reference< sax_fastparser::FastAttributeList > m_xFastAttributes;
+
protected:
css::uno::Reference< css::frame::XModel > mxModel;
@@ -187,6 +198,10 @@ 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 7181c2a1af11..5ff0d94f4fc1 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.GetDocHandler()->startElement( m_aQName, rAttrList );
+ m_rTransformer.startFastElement( m_aQName, rAttrList );
}
void XMLTransformerContext::EndElement()
{
- m_rTransformer.GetDocHandler()->endElement( m_aQName );
+ GetTransformer().endFastElement( m_aQName );
}
void XMLTransformerContext::Characters( const OUString& rChars )