diff options
author | Noel <noelgrandin@gmail.com> | 2020-10-16 09:20:23 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2020-10-16 13:21:22 +0200 |
commit | 30668130ce82c3f45af38ab419ec04fdb67c4509 (patch) | |
tree | c0fa7920f9f324be8f21c7d964617554b407d603 /sc | |
parent | d3fff9073f70bdd9caf619a9cfe7afd7c04cffe1 (diff) |
sc: use the fastparser API when possible
part of the process of making SvXMLImport fastparser-only
Change-Id: Idf785f38b233e26c00d699302b7eab7e41fe817a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104413
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'sc')
-rw-r--r-- | sc/inc/xmlwrap.hxx | 1 | ||||
-rw-r--r-- | sc/source/filter/xml/xmlwrap.cxx | 40 |
2 files changed, 19 insertions, 22 deletions
diff --git a/sc/inc/xmlwrap.hxx b/sc/inc/xmlwrap.hxx index 2b6c8b6ed33e..f1955f530d20 100644 --- a/sc/inc/xmlwrap.hxx +++ b/sc/inc/xmlwrap.hxx @@ -68,7 +68,6 @@ class ScXMLImportWrapper ErrCode ImportFromComponent(const css::uno::Reference<css::uno::XComponentContext>& xContext, const css::uno::Reference<css::frame::XModel>& xModel, - const css::uno::Reference<css::xml::sax::XParser>& xParser, css::xml::sax::InputSource& aParserInput, const OUString& sComponentName, const OUString& sDocName, const css::uno::Sequence<css::uno::Any>& aArgs, diff --git a/sc/source/filter/xml/xmlwrap.cxx b/sc/source/filter/xml/xmlwrap.cxx index c476df1955d5..c55c8d811d8f 100644 --- a/sc/source/filter/xml/xmlwrap.cxx +++ b/sc/source/filter/xml/xmlwrap.cxx @@ -104,7 +104,7 @@ uno::Reference <task::XStatusIndicator> ScXMLImportWrapper::GetStatusIndicator() } ErrCode ScXMLImportWrapper::ImportFromComponent(const uno::Reference<uno::XComponentContext>& xContext, - const uno::Reference<frame::XModel>& xModel, const uno::Reference<xml::sax::XParser>& xParser, + const uno::Reference<frame::XModel>& xModel, xml::sax::InputSource& aParserInput, const OUString& sComponentName, const OUString& sDocName, const uno::Sequence<uno::Any>& aArgs, @@ -160,12 +160,11 @@ ErrCode ScXMLImportWrapper::ImportFromComponent(const uno::Reference<uno::XCompo ErrCode nReturn = ERRCODE_NONE; rDoc.SetRangeOverflowType(ERRCODE_NONE); // is modified by the importer if limits are exceeded - uno::Reference<xml::sax::XDocumentHandler> xDocHandler( + uno::Reference<XInterface> xImportInterface = xContext->getServiceManager()->createInstanceWithArgumentsAndContext( - sComponentName, aArgs, xContext ), - uno::UNO_QUERY ); - OSL_ENSURE( xDocHandler.is(), "can't get Calc importer" ); - uno::Reference<document::XImporter> xImporter( xDocHandler, uno::UNO_QUERY ); + sComponentName, aArgs, xContext ); + SAL_WARN_IF( !xImportInterface, "sc", "can't get Calc importer " << sComponentName ); + uno::Reference<document::XImporter> xImporter( xImportInterface, uno::UNO_QUERY ); if (xImporter.is()) xImporter->setTargetDocument( xModel ); @@ -174,16 +173,21 @@ ErrCode ScXMLImportWrapper::ImportFromComponent(const uno::Reference<uno::XCompo pImporterImpl->SetPostProcessData(&maPostProcessData); // connect parser and filter - uno::Reference< xml::sax::XFastParser > xFastParser = dynamic_cast< - xml::sax::XFastParser* >( xDocHandler.get() ); - xParser->setDocumentHandler( xDocHandler ); - try { - if( xFastParser.is() ) + // xImportInterface is either ScXMLImport or an XMLTransformer subclass. + // ScXMLImport implements XFastParser, but XMLTransformer only implements XExtendedDocumentHandler + + uno::Reference< xml::sax::XFastParser > xFastParser(xImportInterface, uno::UNO_QUERY); + if (xFastParser) xFastParser->parseStream( aParserInput ); else + { + uno::Reference<xml::sax::XParser> xParser = xml::sax::Parser::create(xContext); + uno::Reference<css::xml::sax::XDocumentHandler> xDocumentHandler(xImportInterface, uno::UNO_QUERY); + xParser->setDocumentHandler( xDocumentHandler ); xParser->parseStream( aParserInput ); + } } catch( const xml::sax::SAXParseException& r ) { @@ -273,9 +277,6 @@ ErrCode ScXMLImportWrapper::ImportFromComponent(const uno::Reference<uno::XCompo if (rDoc.HasRangeOverflow() && !nReturn) nReturn = rDoc.GetRangeOverflowType(); - // free the component - xParser->setDocumentHandler( nullptr ); - // success! return nReturn; } @@ -291,9 +292,6 @@ bool ScXMLImportWrapper::Import( ImportFlags nMode, ErrCode& rError ) if ( !xStorage.is() && pMedium ) xStorage = pMedium->GetStorage(); - // get parser - uno::Reference<xml::sax::XParser> xXMLParser = xml::sax::Parser::create(xContext); - // get filter uno::Reference<frame::XModel> xModel = mrDocShell.GetModel(); @@ -425,7 +423,7 @@ bool ScXMLImportWrapper::Import( ImportFlags nMode, ErrCode& rError ) SAL_INFO( "sc.filter", "meta import start" ); nMetaRetval = ImportFromComponent( - xContext, xModel, xXMLParser, aParserInput, + xContext, xModel, aParserInput, bOasis ? OUString("com.sun.star.comp.Calc.XMLOasisMetaImporter") : OUString("com.sun.star.comp.Calc.XMLMetaImporter"), "meta.xml", aMetaArgs, false); @@ -467,7 +465,7 @@ bool ScXMLImportWrapper::Import( ImportFlags nMode, ErrCode& rError ) SAL_INFO( "sc.filter", "settings import start" ); nSettingsRetval = ImportFromComponent( - xContext, xModel, xXMLParser, aParserInput, + xContext, xModel, aParserInput, bOasis ? OUString("com.sun.star.comp.Calc.XMLOasisSettingsImporter") : OUString("com.sun.star.comp.Calc.XMLSettingsImporter"), "settings.xml", aSettingsArgs, false); @@ -480,7 +478,7 @@ bool ScXMLImportWrapper::Import( ImportFlags nMode, ErrCode& rError ) { SAL_INFO( "sc.filter", "styles import start" ); - nStylesRetval = ImportFromComponent(xContext, xModel, xXMLParser, aParserInput, + nStylesRetval = ImportFromComponent(xContext, xModel, aParserInput, bOasis ? OUString("com.sun.star.comp.Calc.XMLOasisStylesImporter") : OUString("com.sun.star.comp.Calc.XMLStylesImporter"), "styles.xml", @@ -505,7 +503,7 @@ bool ScXMLImportWrapper::Import( ImportFlags nMode, ErrCode& rError ) SAL_INFO( "sc.filter", "content import start" ); - nDocRetval = ImportFromComponent(xContext, xModel, xXMLParser, aParserInput, + nDocRetval = ImportFromComponent(xContext, xModel, aParserInput, bOasis ? OUString("com.sun.star.comp.Calc.XMLOasisContentImporter") : OUString("com.sun.star.comp.Calc.XMLContentImporter"), "content.xml", |