Kaydet (Commit) c0a5d390 authored tarafından Daniel Sikeler's avatar Daniel Sikeler Kaydeden (comit) Matúš Kukan

fdo#80403: Import baseclasses implement FastParser interfaces

SvXMLImportContext implements XFastContextHandler
SvXMLImport implements XFastDocumentHandler

Change-Id: Id400260af112f4a448fe469c9580f0ebacec4ab6
üst 4482f501
......@@ -24,14 +24,17 @@
#include <xmloff/dllapi.h>
#include <sal/types.h>
#include <com/sun/star/xml/sax/XAttributeList.hpp>
#include <com/sun/star/xml/sax/XFastContextHandler.hpp>
#include <tools/ref.hxx>
#include <rtl/ustring.hxx>
#include <tools/rtti.hxx>
#include <cppuhelper/implbase1.hxx>
class SvXMLNamespaceMap;
class SvXMLImport;
class XMLOFF_DLLPUBLIC SvXMLImportContext : public SvRefBase
class XMLOFF_DLLPUBLIC SvXMLImportContext : public SvRefBase,
public ::cppu::WeakImplHelper1< ::css::xml::sax::XFastContextHandler >
{
friend class SvXMLImport;
......@@ -64,6 +67,8 @@ public:
SvXMLImportContext( SvXMLImport& rImport, sal_uInt16 nPrfx,
const OUString& rLName );
SvXMLImportContext( SvXMLImport& rImport );
/** A contexts destructor does anything that is required if an element
* ends. By default, nothing is done.
* Note that virtual methods cannot be used inside destructors. Use
......@@ -90,6 +95,33 @@ public:
* current element. The default is to ignore them. */
virtual void Characters( const OUString& rChars );
// ::com::sun::star::xml::sax::XFastContextHandler:
virtual void SAL_CALL startFastElement (sal_Int32 Element,
const css::uno::Reference< css::xml::sax::XFastAttributeList >& Attribs)
throw (css::uno::RuntimeException, css::xml::sax::SAXException, std::exception) SAL_OVERRIDE;
virtual void SAL_CALL startUnknownElement(const OUString & Namespace, const OUString & Name,
const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs)
throw (css::uno::RuntimeException, css::xml::sax::SAXException, std::exception) SAL_OVERRIDE;
virtual void SAL_CALL endFastElement(sal_Int32 Element)
throw (css::uno::RuntimeException, css::xml::sax::SAXException, std::exception) SAL_OVERRIDE;
virtual void SAL_CALL endUnknownElement(const OUString & Namespace, const OUString & Name)
throw (css::uno::RuntimeException, css::xml::sax::SAXException, std::exception) SAL_OVERRIDE;
virtual css::uno::Reference< XFastContextHandler > SAL_CALL createFastChildContext(sal_Int32 Element,
const css::uno::Reference<css::xml::sax::XFastAttributeList>& Attribs)
throw (css::uno::RuntimeException, css::xml::sax::SAXException, std::exception) SAL_OVERRIDE;
virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createUnknownChildContext(
const OUString & Namespace, const OUString & Name,
const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs)
throw (css::uno::RuntimeException, css::xml::sax::SAXException, std::exception) SAL_OVERRIDE;
virtual void SAL_CALL characters(const OUString & aChars)
throw (css::uno::RuntimeException, css::xml::sax::SAXException, std::exception) SAL_OVERRIDE;
// #i124143# allow to copy evtl. useful data from another temporary import context, e.g. used to
// support multiple images and to rescue evtl. GluePoints imported with one of the
// to be deprecated contents
......
......@@ -48,11 +48,15 @@
#include <xmloff/shapeimport.hxx>
#include <xmloff/SchXMLImportHelper.hxx>
#include <xmloff/ProgressBarHelper.hxx>
#include <cppuhelper/implbase6.hxx>
#include <cppuhelper/implbase7.hxx>
#include <xmloff/formlayerimport.hxx>
#include <com/sun/star/beans/NamedValue.hpp>
#include <com/sun/star/xml/sax/XFastDocumentHandler.hpp>
#include <com/sun/star/xml/sax/XFastContextHandler.hpp>
#include <com/sun/star/xml/sax/XFastAttributeList.hpp>
namespace com { namespace sun { namespace star {
namespace frame { class XModel; }
namespace io { class XOutputStream; }
......@@ -71,6 +75,8 @@ class XMLErrors;
class StyleMap;
typedef std::vector<SvXMLImportContext *> SvXMLImportContexts_Impl;
typedef std::vector< ::css::uno::Reference< ::css::xml::sax::XFastContextHandler>>
FastSvXMLImportContexts_Impl;
namespace xmloff {
class RDFaImportHelper;
......@@ -90,8 +96,9 @@ namespace xmloff {
class XMLOFF_DLLPUBLIC SvXMLImport : public ::cppu::WeakImplHelper6<
class XMLOFF_DLLPUBLIC SvXMLImport : public ::cppu::WeakImplHelper7<
::com::sun::star::xml::sax::XExtendedDocumentHandler,
::com::sun::star::xml::sax::XFastDocumentHandler,
::com::sun::star::lang::XServiceInfo,
::com::sun::star::lang::XInitialization,
::com::sun::star::document::XImporter,
......@@ -131,6 +138,7 @@ class XMLOFF_DLLPUBLIC SvXMLImport : public ::cppu::WeakImplHelper6<
SvXMLNamespaceMap *mpNamespaceMap;
SvXMLUnitConverter *mpUnitConv;
SvXMLImportContexts_Impl *mpContexts;
FastSvXMLImportContexts_Impl *mpFastContexts;
SvXMLNumFmtHelper *mpNumImport;
ProgressBarHelper *mpProgressBarHelper;
XMLEventImportHelper *mpEventImportHelper;
......@@ -156,6 +164,8 @@ protected:
virtual SvXMLImportContext *CreateContext( sal_uInt16 nPrefix,
const OUString& rLocalName,
const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList );
virtual SvXMLImportContext *CreateFastContext( sal_Int32 Element,
const ::css::uno::Reference< ::css::xml::sax::XFastAttributeList >& xAttrList );
virtual XMLTextImportHelper* CreateTextImport();
inline void ClearTextImport() { mxTextImport = 0; }
......@@ -205,7 +215,7 @@ public:
::com::sun::star::uno::RuntimeException,
std::exception) SAL_OVERRIDE;
virtual void SAL_CALL startElement(const OUString& aName,
const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > & xAttribs)
const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > & xAttribs)
throw( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
virtual void SAL_CALL endElement(const OUString& aName)
throw( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
......@@ -219,6 +229,28 @@ public:
virtual void SAL_CALL setDocumentLocator(const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XLocator > & xLocator)
throw( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
// ::css::xml::sax::XFastContextHandler
virtual void SAL_CALL startFastElement(sal_Int32 Element,
const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs)
throw (css::uno::RuntimeException, css::xml::sax::SAXException, std::exception) SAL_OVERRIDE;
virtual void SAL_CALL startUnknownElement(const OUString & Namespace,
const OUString & Name,
const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs)
throw (css::uno::RuntimeException, css::xml::sax::SAXException, std::exception) SAL_OVERRIDE;
virtual void SAL_CALL endFastElement(sal_Int32 Element)
throw (css::uno::RuntimeException, css::xml::sax::SAXException, std::exception) SAL_OVERRIDE;
virtual void SAL_CALL endUnknownElement(const OUString & Namespace,
const OUString & Name)
throw (css::uno::RuntimeException, css::xml::sax::SAXException, std::exception) SAL_OVERRIDE;
virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL
createFastChildContext(sal_Int32 Element,
const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs)
throw (css::uno::RuntimeException, css::xml::sax::SAXException, std::exception) SAL_OVERRIDE;
virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL
createUnknownChildContext(const OUString & Namespace, const OUString & Name,
const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs)
throw (css::uno::RuntimeException, css::xml::sax::SAXException, std::exception) SAL_OVERRIDE;
// ::com::sun::star::xml::sax::XExtendedDocumentHandler
virtual void SAL_CALL startCDATA(void) throw( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
virtual void SAL_CALL endCDATA(void) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
......
......@@ -39,6 +39,12 @@ SvXMLImportContext::SvXMLImportContext( SvXMLImport& rImp, sal_uInt16 nPrfx,
{
}
SvXMLImportContext::SvXMLImportContext( SvXMLImport& rImp ) :
mrImport( rImp ),
mpRewindMap( 0 )
{
}
SvXMLImportContext::~SvXMLImportContext()
{
}
......@@ -62,6 +68,47 @@ void SvXMLImportContext::Characters( const OUString& )
{
}
// ::com::sun::star::xml::sax::XFastContextHandler:
void SAL_CALL SvXMLImportContext::startFastElement(sal_Int32, const uno::Reference< xml::sax::XFastAttributeList > &)
throw (uno::RuntimeException, xml::sax::SAXException, std::exception)
{
}
void SAL_CALL SvXMLImportContext::startUnknownElement(const OUString &, const OUString &,
const uno::Reference< xml::sax::XFastAttributeList > &)
throw (uno::RuntimeException, xml::sax::SAXException, std::exception)
{
}
void SAL_CALL SvXMLImportContext::endFastElement(sal_Int32)
throw (uno::RuntimeException, xml::sax::SAXException, std::exception)
{
}
void SAL_CALL SvXMLImportContext::endUnknownElement (const OUString & , const OUString & )
throw (uno::RuntimeException, xml::sax::SAXException, std::exception)
{
}
uno::Reference< xml::sax::XFastContextHandler > SAL_CALL SvXMLImportContext::createFastChildContext
(sal_Int32 Element, const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
throw (uno::RuntimeException, xml::sax::SAXException, std::exception)
{
return mrImport.CreateFastContext( Element, Attribs );
}
uno::Reference< xml::sax::XFastContextHandler > SAL_CALL SvXMLImportContext::createUnknownChildContext
(const OUString &, const OUString &, const uno::Reference< xml::sax::XFastAttributeList > &)
throw (uno::RuntimeException, xml::sax::SAXException, std::exception)
{
return 0;
}
void SAL_CALL SvXMLImportContext::characters(const OUString &)
throw (uno::RuntimeException, xml::sax::SAXException, std::exception)
{
}
void SvXMLImportContext::onDemandRescueUsefulDataFromTemporary( const SvXMLImportContext& )
{
}
......
......@@ -346,6 +346,12 @@ SvXMLImportContext *SvXMLImport::CreateContext( sal_uInt16 nPrefix,
return new SvXMLImportContext( *this, nPrefix, rLocalName );
}
SvXMLImportContext *SvXMLImport::CreateFastContext( sal_Int32 /*Element*/,
const uno::Reference< xml::sax::XFastAttributeList >& /*xAttrList*/ )
{
return new SvXMLImportContext( *this );
}
void SvXMLImport::_InitCtor()
{
if( mnImportFlags != 0 )
......@@ -415,6 +421,7 @@ SvXMLImport::SvXMLImport(
util::MeasureUnit::MM_100TH, util::MeasureUnit::MM_100TH) ),
mpContexts( new SvXMLImportContexts_Impl ),
mpFastContexts( new FastSvXMLImportContexts_Impl ),
mpNumImport( NULL ),
mpProgressBarHelper( NULL ),
mpEventImportHelper( NULL ),
......@@ -780,6 +787,10 @@ void SAL_CALL SvXMLImport::characters( const OUString& rChars )
{
mpContexts->back()->Characters( rChars );
}
else if ( !mpFastContexts->empty() )
{
mpFastContexts->back()->characters( rChars );
}
}
void SAL_CALL SvXMLImport::ignorableWhitespace( const OUString& )
......@@ -799,6 +810,72 @@ void SAL_CALL SvXMLImport::setDocumentLocator( const uno::Reference< xml::sax::X
mxLocator = rLocator;
}
// XFastContextHandler
void SAL_CALL SvXMLImport::startFastElement (sal_Int32 Element,
const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
throw (uno::RuntimeException, xml::sax::SAXException, std::exception)
{
//Namespace handling is unnecessary. It is done by the fastparser itself.
uno::Reference<XFastContextHandler> xContext;
sal_uInt16 nCount = mpFastContexts->size();
if( nCount > 0 )
{
uno::Reference< XFastContextHandler > pHandler = (*mpFastContexts)[nCount - 1];
xContext = pHandler->createFastChildContext( Element, Attribs );
}
else
xContext.set( CreateFastContext( Element, Attribs ) );
if ( !xContext.is() )
xContext.set( new SvXMLImportContext( *this ) );
// Call a startElement at the new context.
xContext->startFastElement( Element, Attribs );
// Push context on stack.
mpFastContexts->push_back( xContext );
}
void SAL_CALL SvXMLImport::startUnknownElement (const OUString &, const OUString &,
const uno::Reference< xml::sax::XFastAttributeList > &)
throw (uno::RuntimeException, xml::sax::SAXException, std::exception)
{
}
void SAL_CALL SvXMLImport::endFastElement (sal_Int32 Element)
throw (uno::RuntimeException, xml::sax::SAXException, std::exception)
{
sal_uInt16 nCount = mpFastContexts->size();
if( nCount > 0 )
{
uno::Reference< XFastContextHandler > xContext = mpFastContexts->back();
mpFastContexts->pop_back();
xContext->endFastElement( Element );
xContext = 0;
}
}
void SAL_CALL SvXMLImport::endUnknownElement (const OUString &, const OUString &)
throw (uno::RuntimeException, xml::sax::SAXException, std::exception)
{
}
uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
SvXMLImport::createFastChildContext (sal_Int32,
const uno::Reference< xml::sax::XFastAttributeList > &)
throw (uno::RuntimeException, xml::sax::SAXException, std::exception)
{
return this;
}
uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
SvXMLImport::createUnknownChildContext (const OUString &, const OUString &,
const uno::Reference< xml::sax::XFastAttributeList > &)
throw (uno::RuntimeException, xml::sax::SAXException, std::exception)
{
return this;
}
// XExtendedDocumentHandler
void SAL_CALL SvXMLImport::startCDATA( void ) throw(xml::sax::SAXException, uno::RuntimeException, std::exception)
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment