writerperfect/CppunitTest_writerperfect_wpftimport.mk | 1 writerperfect/inc/ImportFilter.hxx | 18 ++++++++++----- writerperfect/source/calc/MSWorksCalcImportFilter.cxx | 15 ++++++++---- writerperfect/source/writer/WordPerfectImportFilter.cxx | 19 ++++++++++------ 4 files changed, 35 insertions(+), 18 deletions(-)
New commits: commit 90fa4426a1be8874baacd21eff8c7c46f8a4371a Author: Noel <noelgran...@gmail.com> AuthorDate: Fri Oct 16 09:14:52 2020 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Fri Oct 16 14:18:19 2020 +0200 writerfilter: use the fastparser API when possible part of the process of making SvXMLImport fastparser-only Change-Id: I9bb2d337954354be63984892e1fc4a7950ca3628 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104411 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/writerperfect/CppunitTest_writerperfect_wpftimport.mk b/writerperfect/CppunitTest_writerperfect_wpftimport.mk index 101908aadeb4..b43836d45e7e 100644 --- a/writerperfect/CppunitTest_writerperfect_wpftimport.mk +++ b/writerperfect/CppunitTest_writerperfect_wpftimport.mk @@ -32,6 +32,7 @@ $(eval $(call gb_CppunitTest_use_libraries,writerperfect_wpftimport,\ vcl \ wpftqahelper \ writerperfect \ + xo \ )) $(eval $(call gb_CppunitTest_use_external,writerperfect_wpftimport,boost_headers)) diff --git a/writerperfect/inc/ImportFilter.hxx b/writerperfect/inc/ImportFilter.hxx index 4328b902181c..56f352556c73 100644 --- a/writerperfect/inc/ImportFilter.hxx +++ b/writerperfect/inc/ImportFilter.hxx @@ -18,7 +18,7 @@ #include <com/sun/star/lang/XServiceInfo.hpp> #include <com/sun/star/uno/Reference.h> #include <com/sun/star/uno/XComponentContext.hpp> -#include <com/sun/star/xml/sax/XDocumentHandler.hpp> +#include <com/sun/star/xml/sax/XFastDocumentHandler.hpp> #include <osl/diagnose.h> #include <cppuhelper/implbase.hxx> @@ -26,6 +26,7 @@ #include <unotools/mediadescriptor.hxx> #include <vcl/svapp.hxx> #include <vcl/weld.hxx> +#include <xmloff/xmlimp.hxx> #include "DocumentHandler.hxx" #include "WPXSvInputStream.hxx" @@ -70,19 +71,24 @@ public: aDescriptor["ParentWindow"] >>= xDialogParent; // An XML import service: what we push sax messages to... - css::uno::Reference<css::xml::sax::XDocumentHandler> xInternalHandler( - mxContext->getServiceManager()->createInstanceWithContext( - DocumentHandlerFor<Generator>::name(), mxContext), - css::uno::UNO_QUERY_THROW); + css::uno::Reference<XInterface> xInternalFilter + = mxContext->getServiceManager()->createInstanceWithContext( + DocumentHandlerFor<Generator>::name(), mxContext); + assert(xInternalFilter); + css::uno::Reference<css::xml::sax::XFastDocumentHandler> xInternalHandler( + xInternalFilter, css::uno::UNO_QUERY); + assert(xInternalHandler); // The XImporter sets up an empty target document for XDocumentHandler to write to... css::uno::Reference<css::document::XImporter> xImporter(xInternalHandler, css::uno::UNO_QUERY); + assert(xImporter); xImporter->setTargetDocument(mxDoc); // OO Graphics Handler: abstract class to handle document SAX messages, concrete implementation here // writes to in-memory target doc - DocumentHandler aHandler(xInternalHandler); + DocumentHandler aHandler( + new SvXMLLegacyToFastDocHandler(dynamic_cast<SvXMLImport*>(xInternalHandler.get()))); WPXSvInputStream input(xInputStream); diff --git a/writerperfect/source/calc/MSWorksCalcImportFilter.cxx b/writerperfect/source/calc/MSWorksCalcImportFilter.cxx index 521b7c0dbf5d..83035d8b9926 100644 --- a/writerperfect/source/calc/MSWorksCalcImportFilter.cxx +++ b/writerperfect/source/calc/MSWorksCalcImportFilter.cxx @@ -317,18 +317,23 @@ MSWorksCalcImportFilter::filter(const css::uno::Sequence<css::beans::PropertyVal } // An XML import service: what we push sax messages to... - css::uno::Reference<css::xml::sax::XDocumentHandler> xInternalHandler( - getXContext()->getServiceManager()->createInstanceWithContext( - writerperfect::DocumentHandlerFor<OdsGenerator>::name(), getXContext()), - css::uno::UNO_QUERY_THROW); + css::uno::Reference<XInterface> xInternalFilter + = getXContext()->getServiceManager()->createInstanceWithContext( + writerperfect::DocumentHandlerFor<OdsGenerator>::name(), getXContext()); + assert(xInternalFilter); + css::uno::Reference<css::xml::sax::XFastDocumentHandler> xInternalHandler(xInternalFilter, + css::uno::UNO_QUERY); + assert(xInternalHandler); // The XImporter sets up an empty target document for XDocumentHandler to write to... css::uno::Reference<css::document::XImporter> xImporter(xInternalHandler, css::uno::UNO_QUERY); + assert(xImporter); xImporter->setTargetDocument(getTargetDocument()); // OO Graphics Handler: abstract class to handle document SAX messages, concrete implementation here // writes to in-memory target doc - writerperfect::DocumentHandler aHandler(xInternalHandler); + writerperfect::DocumentHandler aHandler( + new SvXMLLegacyToFastDocHandler(dynamic_cast<SvXMLImport*>(xInternalHandler.get()))); writerperfect::WPXSvInputStream input(xInputStream); OdsGenerator exporter; diff --git a/writerperfect/source/writer/WordPerfectImportFilter.cxx b/writerperfect/source/writer/WordPerfectImportFilter.cxx index ca27d5fbc1ec..8888134e2ebf 100644 --- a/writerperfect/source/writer/WordPerfectImportFilter.cxx +++ b/writerperfect/source/writer/WordPerfectImportFilter.cxx @@ -12,7 +12,7 @@ #include <com/sun/star/awt/XWindow.hpp> #include <com/sun/star/io/XInputStream.hpp> -#include <com/sun/star/xml/sax/XDocumentHandler.hpp> +#include <com/sun/star/xml/sax/XFastDocumentHandler.hpp> #include <com/sun/star/uno/Reference.h> #include <cppuhelper/supportsservice.hxx> @@ -22,6 +22,7 @@ #include <sfx2/passwd.hxx> #include <ucbhelper/content.hxx> #include <vcl/svapp.hxx> +#include <xmloff/xmlimp.hxx> #include <libwpd/libwpd.h> #include <libwpg/libwpg.h> @@ -33,7 +34,7 @@ using com::sun::star::uno::Reference; using com::sun::star::awt::XWindow; using com::sun::star::document::XImporter; using com::sun::star::io::XInputStream; -using com::sun::star::xml::sax::XDocumentHandler; +using com::sun::star::xml::sax::XFastDocumentHandler; using writerperfect::DocumentHandler; using writerperfect::WPXSvInputStream; @@ -122,10 +123,13 @@ bool WordPerfectImportFilter::importImpl( } // An XML import service: what we push sax messages to. - Reference<XDocumentHandler> xInternalHandler( - mxContext->getServiceManager()->createInstanceWithContext( - "com.sun.star.comp.Writer.XMLOasisImporter", mxContext), - css::uno::UNO_QUERY_THROW); + Reference<XInterface> xInternalFilter + = mxContext->getServiceManager()->createInstanceWithContext( + "com.sun.star.comp.Writer.XMLOasisImporter", mxContext); + assert(xInternalFilter); + css::uno::Reference<css::xml::sax::XFastDocumentHandler> xInternalHandler(xInternalFilter, + css::uno::UNO_QUERY); + assert(xInternalHandler); // The XImporter sets up an empty target document for XDocumentHandler to write to. Reference<XImporter> xImporter(xInternalHandler, css::uno::UNO_QUERY); @@ -133,7 +137,8 @@ bool WordPerfectImportFilter::importImpl( // OO Document Handler: abstract class to handle document SAX messages, concrete implementation here // writes to in-memory target doc - DocumentHandler aHandler(xInternalHandler); + DocumentHandler aHandler( + new SvXMLLegacyToFastDocHandler(dynamic_cast<SvXMLImport*>(xInternalHandler.get()))); OdtGenerator collector; collector.addDocumentHandler(&aHandler, ODF_FLAT_XML); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits