diff options
-rw-r--r-- | writerfilter/source/ooxml/OOXMLDocumentImpl.cxx | 12 | ||||
-rw-r--r-- | writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx | 62 | ||||
-rw-r--r-- | writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx | 11 |
3 files changed, 43 insertions, 42 deletions
diff --git a/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx b/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx index 29c64ade8028..09ded156e1b5 100644 --- a/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx +++ b/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx @@ -66,10 +66,8 @@ void OOXMLDocumentImpl::resolveFastSubStream(Stream & rStreamHandler, { uno::Reference<uno::XComponentContext> xContext(mpStream->getContext()); OOXMLFastDocumentHandler * pDocHandler = - new OOXMLFastDocumentHandler(xContext); - pDocHandler->setStream(&rStreamHandler); - pDocHandler->setDocument(this); - pDocHandler->setXNoteId(mnXNoteId); + new OOXMLFastDocumentHandler( + xContext, &rStreamHandler, this, mnXNoteId ); uno::Reference < xml::sax::XFastDocumentHandler > xDocumentHandler (pDocHandler); @@ -317,10 +315,8 @@ void OOXMLDocumentImpl::resolve(Stream & rStream) uno::Reference<uno::XComponentContext> xContext(mpStream->getContext()); OOXMLFastDocumentHandler * pDocHandler = - new OOXMLFastDocumentHandler(xContext); - pDocHandler->setStream(&rStream); - pDocHandler->setDocument(this); - pDocHandler->setXNoteId(mnXNoteId); + new OOXMLFastDocumentHandler( + xContext, &rStream, this, mnXNoteId ); pDocHandler->setIsSubstream( mbIsSubstream ); uno::Reference < xml::sax::XFastDocumentHandler > xDocumentHandler (pDocHandler); diff --git a/writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx index f6f6b60d27d0..893ed7486844 100644 --- a/writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx +++ b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx @@ -35,10 +35,28 @@ using namespace ::com::sun::star; using namespace ::std; -OOXMLFastDocumentHandler::OOXMLFastDocumentHandler -(uno::Reference< uno::XComponentContext > const & context) -: m_xContext(context), mpStream(0), mpDocument(0) -{} +OOXMLFastDocumentHandler::OOXMLFastDocumentHandler( + uno::Reference< uno::XComponentContext > const & context, + Stream* pStream, + OOXMLDocument* pDocument, + sal_Int32 nXNoteId ) + : m_xContext(context) + , mpStream( pStream ) +#ifdef DEBUG_ELEMENT + , mpTmpStream() +#endif + , mpDocument( pDocument ) + , mnXNoteId( nXNoteId ) + , mpContextHandler() +{ +#ifdef DEBUG_PROTOCOL + if ( pStream ) + { + mpTmpStream.reset( new StreamProtocol( pStream, debug_logger ) ); + mpStream = mpTmpStream.get(); + } +#endif +} // ::com::sun::star::xml::sax::XFastContextHandler: void SAL_CALL OOXMLFastDocumentHandler::startFastElement @@ -141,6 +159,13 @@ uno::Reference< xml::sax::XFastContextHandler > SAL_CALL << endl; #endif + if ( mpStream == 0 && mpDocument == 0 ) + { + // document handler has been created as unknown child - see <OOXMLFastDocumentHandler::createUnknownChildContext(..)> + // --> do not provide a child context + return NULL; + } + return OOXMLFactory::getInstance()->createFastChildContextFromStart(getContextHandler().get(), Element); } @@ -167,13 +192,12 @@ Name #endif return uno::Reference< xml::sax::XFastContextHandler > - (new OOXMLFastDocumentHandler(m_xContext)); + ( new OOXMLFastDocumentHandler( m_xContext, 0, 0, 0 ) ); } void SAL_CALL OOXMLFastDocumentHandler::characters(const OUString & /*aChars*/) throw (uno::RuntimeException, xml::sax::SAXException) { - // TODO: Insert your implementation for "characters" here. } // ::com::sun::star::xml::sax::XFastDocumentHandler: @@ -191,32 +215,14 @@ void SAL_CALL OOXMLFastDocumentHandler::setDocumentLocator (const uno::Reference< xml::sax::XLocator > & /*xLocator*/) throw (uno::RuntimeException, xml::sax::SAXException) { - // TODO: Insert your implementation for "setDocumentLocator" here. -} - -void OOXMLFastDocumentHandler::setStream(Stream * pStream) -{ -#ifdef DEBUG_PROTOCOL - mpTmpStream.reset(new StreamProtocol(pStream, debug_logger)); - mpStream = mpTmpStream.get(); -#else - mpStream = pStream; -#endif -} - -void OOXMLFastDocumentHandler::setDocument(OOXMLDocument * pDocument) -{ - mpDocument = pDocument; -} - -void OOXMLFastDocumentHandler::setXNoteId(const sal_Int32 nXNoteId) -{ - mnXNoteId = nXNoteId; } void OOXMLFastDocumentHandler::setIsSubstream( bool bSubstream ) { - getContextHandler( )->getParserState( )->setInSectionGroup( bSubstream ); + if ( mpStream != 0 && mpDocument != 0 ) + { + getContextHandler( )->getParserState( )->setInSectionGroup( bSubstream ); + } } }} diff --git a/writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx index 50f06321f02a..92723181ce3d 100644 --- a/writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx +++ b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx @@ -40,8 +40,11 @@ class OOXMLFastDocumentHandler: xml::sax::XFastDocumentHandler> { public: - OOXMLFastDocumentHandler - (uno::Reference< uno::XComponentContext > const & context); + OOXMLFastDocumentHandler( + uno::Reference< uno::XComponentContext > const & context, + Stream* pStream, + OOXMLDocument* pDocument, + sal_Int32 nXNoteId ); virtual ~OOXMLFastDocumentHandler() {} // ::com::sun::star::xml::sax::XFastDocumentHandler: @@ -83,10 +86,6 @@ public: virtual void SAL_CALL characters(const OUString & aChars) throw (uno::RuntimeException, xml::sax::SAXException); - void setStream(Stream * pStream); - void setDocument(OOXMLDocument * pDocument); - void setXNoteId(const sal_Int32 nXNoteId); - void setIsSubstream( bool bSubstream ); private: |