From a0abb2f6a4e2392ce44634a58f3a5d1af1868499 Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Tue, 1 Aug 2017 15:09:03 +0200 Subject: EPUB export: invoke the underlying ODT exporter The document handler is still missing, though. Change-Id: I26aa9c2211fafb311e297f48d4301c0c26ec8edf Reviewed-on: https://gerrit.libreoffice.org/40636 Tested-by: Jenkins Reviewed-by: Miklos Vajna --- writerperfect/source/writer/EPUBExportFilter.cxx | 25 ++++++++++++++++++------ writerperfect/source/writer/EPUBExportFilter.hxx | 4 +++- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/writerperfect/source/writer/EPUBExportFilter.cxx b/writerperfect/source/writer/EPUBExportFilter.cxx index d7fb0cac0e0d..36cff7ab9dd6 100644 --- a/writerperfect/source/writer/EPUBExportFilter.cxx +++ b/writerperfect/source/writer/EPUBExportFilter.cxx @@ -9,7 +9,9 @@ #include "EPUBExportFilter.hxx" +#include #include +#include #include @@ -18,14 +20,25 @@ using namespace com::sun::star; namespace writerperfect { -EPUBExportFilter::EPUBExportFilter() +EPUBExportFilter::EPUBExportFilter(const uno::Reference &xContext) + : mxContext(xContext) { } -sal_Bool EPUBExportFilter::filter(const uno::Sequence &/*rDescriptor*/) +sal_Bool EPUBExportFilter::filter(const uno::Sequence &rDescriptor) { - SAL_WARN("writerperfect", "EPUBExportFilter::filter: implement me"); - return true; + // Create ODT exporter, this will feed our document handler. + uno::Reference xInitialization(mxContext->getServiceManager()->createInstanceWithContext("com.sun.star.comp.Writer.XMLOasisExporter", mxContext), uno::UNO_QUERY); + + // The document handler will make the calls on the text interface provided by the EPUB export. + uno::Reference xExportHandler; + + // Let the ODT exporter read the doc model and invoke the doc handler. + xInitialization->initialize({uno::makeAny(xExportHandler)}); + uno::Reference xExporter(xInitialization, uno::UNO_QUERY); + xExporter->setSourceDocument(mxSourceDocument); + uno::Reference xFilter(xInitialization, uno::UNO_QUERY); + return xFilter->filter(rDescriptor); } void EPUBExportFilter::cancel() @@ -56,9 +69,9 @@ uno::Sequence EPUBExportFilter::getSupportedServiceNames() return aRet; } -extern "C" SAL_DLLPUBLIC_EXPORT uno::XInterface *SAL_CALL com_sun_star_comp_Writer_EPUBExportFilter_get_implementation(uno::XComponentContext *, uno::Sequence const &) +extern "C" SAL_DLLPUBLIC_EXPORT uno::XInterface *SAL_CALL com_sun_star_comp_Writer_EPUBExportFilter_get_implementation(uno::XComponentContext *pContext, uno::Sequence const &) { - return cppu::acquire(new EPUBExportFilter); + return cppu::acquire(new EPUBExportFilter(pContext)); } } // namespace writerperfect diff --git a/writerperfect/source/writer/EPUBExportFilter.hxx b/writerperfect/source/writer/EPUBExportFilter.hxx index 101a4f85bf42..10f39dcfbef4 100644 --- a/writerperfect/source/writer/EPUBExportFilter.hxx +++ b/writerperfect/source/writer/EPUBExportFilter.hxx @@ -15,6 +15,7 @@ #include #include #include +#include namespace writerperfect { @@ -27,10 +28,11 @@ class EPUBExportFilter : public cppu::WeakImplHelper css::lang::XServiceInfo > { + css::uno::Reference mxContext; css::uno::Reference mxSourceDocument; public: - EPUBExportFilter(); + EPUBExportFilter(const css::uno::Reference &xContext); // XFilter sal_Bool SAL_CALL filter(const css::uno::Sequence &rDescriptor) override; -- cgit