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>
diff --git a/sc/inc/xmlwrap.hxx b/sc/inc/xmlwrap.hxx
index 2b6c8b6..f1955f5 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 c476df1..c55c8d8 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",