[Libreoffice-commits] core.git: 4 commits - configure.ac sw/inc sw/source writerfilter/Library_writerfilter.mk writerfilter/source
Miklos Vajna
vmiklos at collabora.co.uk
Sun Feb 22 08:41:03 PST 2015
configure.ac | 12
sw/inc/redline.hxx | 1
sw/source/core/doc/docredln.cxx | 83 +++---
writerfilter/Library_writerfilter.mk | 2
writerfilter/source/filter/ImportFilter.cxx | 354 --------------------------
writerfilter/source/filter/WriterFilter.cxx | 381 ++++++++++++++++++++++++++++
writerfilter/source/filter/WriterFilter.hxx | 98 -------
7 files changed, 435 insertions(+), 496 deletions(-)
New commits:
commit 7b7d11209bf15604532467126d8704eaf5f51799
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Sun Feb 22 12:07:43 2015 +0100
Extract SwRangeRedline::dumpAsXml() from SwRedlineTbl
Change-Id: Ia0eea8a0c4ef7a8297da185d8187017e76bea422
diff --git a/sw/inc/redline.hxx b/sw/inc/redline.hxx
index b789ce6..533c027 100644
--- a/sw/inc/redline.hxx
+++ b/sw/inc/redline.hxx
@@ -293,6 +293,7 @@ public:
bool operator==( const SwRangeRedline& ) const;
bool operator<( const SwRangeRedline& ) const;
+ void dumpAsXml(struct _xmlTextWriter* pWriter) const;
};
/// Base object for 'Redlines' that are not of 'Ranged' type (like table row insert\delete)
diff --git a/sw/source/core/doc/docredln.cxx b/sw/source/core/doc/docredln.cxx
index 20dcda5..82ce470 100644
--- a/sw/source/core/doc/docredln.cxx
+++ b/sw/source/core/doc/docredln.cxx
@@ -572,47 +572,9 @@ void SwRedlineTbl::dumpAsXml(xmlTextWriterPtr pWriter) const
xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST("ptr"), "%p", this);
for (sal_uInt16 nCurRedlinePos = 0; nCurRedlinePos < size(); ++nCurRedlinePos)
- {
- const SwRangeRedline* pRedline = operator[](nCurRedlinePos);
- xmlTextWriterStartElement(pWriter, BAD_CAST("swRangeRedline"));
-
- xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST("ptr"), "%p", pRedline);
- xmlTextWriterWriteAttribute(pWriter, BAD_CAST("id"), BAD_CAST(OString::number(pRedline->GetSeqNo()).getStr()));
- xmlTextWriterWriteAttribute(pWriter, BAD_CAST("author"), BAD_CAST(SW_MOD()->GetRedlineAuthor(pRedline->GetAuthor()).toUtf8().getStr()));
- xmlTextWriterWriteAttribute(pWriter, BAD_CAST("date"), BAD_CAST(DateTimeToOString(pRedline->GetTimeStamp()).getStr()));
+ operator[](nCurRedlinePos)->dumpAsXml(pWriter);
- OString sRedlineType;
- switch (pRedline->GetType())
- {
- case nsRedlineType_t::REDLINE_INSERT:
- sRedlineType = "REDLINE_INSERT";
- break;
- case nsRedlineType_t::REDLINE_DELETE:
- sRedlineType = "REDLINE_DELETE";
- break;
- case nsRedlineType_t::REDLINE_FORMAT:
- sRedlineType = "REDLINE_FORMAT";
- break;
- default:
- sRedlineType = "UNKNOWN";
- break;
- }
- xmlTextWriterWriteAttribute(pWriter, BAD_CAST("type"), BAD_CAST(sRedlineType.getStr()));
-
- xmlTextWriterStartElement(pWriter, BAD_CAST("point"));
- pRedline->GetPoint()->dumpAsXml(pWriter);
- xmlTextWriterEndElement(pWriter);
- xmlTextWriterStartElement(pWriter, BAD_CAST("mark"));
- pRedline->GetMark()->dumpAsXml(pWriter);
- xmlTextWriterEndElement(pWriter);
-
- const SwRedlineExtraData* pExtraRedlineData = pRedline->GetExtraData();
- xmlTextWriterStartElement(pWriter, BAD_CAST("swRedlineExtraData"));
- xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST("symbol"), "%s", BAD_CAST(typeid(pExtraRedlineData).name()));
- xmlTextWriterEndElement(pWriter); // swRadlineExtraData
- xmlTextWriterEndElement(pWriter); // swRangeRedline
- }
- xmlTextWriterEndElement(pWriter); // swRedlineTbl
+ xmlTextWriterEndElement(pWriter);
}
SwRedlineExtraData::~SwRedlineExtraData()
@@ -1651,6 +1613,47 @@ OUString SwRangeRedline::GetDescr(sal_uInt16 nPos)
return aResult;
}
+void SwRangeRedline::dumpAsXml(xmlTextWriterPtr pWriter) const
+{
+ xmlTextWriterStartElement(pWriter, BAD_CAST("swRangeRedline"));
+
+ xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST("ptr"), "%p", this);
+ xmlTextWriterWriteAttribute(pWriter, BAD_CAST("id"), BAD_CAST(OString::number(GetSeqNo()).getStr()));
+ xmlTextWriterWriteAttribute(pWriter, BAD_CAST("author"), BAD_CAST(SW_MOD()->GetRedlineAuthor(GetAuthor()).toUtf8().getStr()));
+ xmlTextWriterWriteAttribute(pWriter, BAD_CAST("date"), BAD_CAST(DateTimeToOString(GetTimeStamp()).getStr()));
+
+ OString sRedlineType;
+ switch (GetType())
+ {
+ case nsRedlineType_t::REDLINE_INSERT:
+ sRedlineType = "REDLINE_INSERT";
+ break;
+ case nsRedlineType_t::REDLINE_DELETE:
+ sRedlineType = "REDLINE_DELETE";
+ break;
+ case nsRedlineType_t::REDLINE_FORMAT:
+ sRedlineType = "REDLINE_FORMAT";
+ break;
+ default:
+ sRedlineType = "UNKNOWN";
+ break;
+ }
+ xmlTextWriterWriteAttribute(pWriter, BAD_CAST("type"), BAD_CAST(sRedlineType.getStr()));
+
+ xmlTextWriterStartElement(pWriter, BAD_CAST("point"));
+ GetPoint()->dumpAsXml(pWriter);
+ xmlTextWriterEndElement(pWriter);
+ xmlTextWriterStartElement(pWriter, BAD_CAST("mark"));
+ GetMark()->dumpAsXml(pWriter);
+ xmlTextWriterEndElement(pWriter);
+
+ const SwRedlineExtraData* pExtraRedlineData = GetExtraData();
+ xmlTextWriterStartElement(pWriter, BAD_CAST("swRedlineExtraData"));
+ xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST("symbol"), "%s", BAD_CAST(typeid(pExtraRedlineData).name()));
+ xmlTextWriterEndElement(pWriter); // swRadlineExtraData
+ xmlTextWriterEndElement(pWriter);
+}
+
bool SwExtraRedlineTbl::Insert( SwExtraRedline* p )
{
m_aExtraRedlines.push_back( p );
commit 4e91003337f8f35810efa00322d041fb4ff94df7
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Sun Feb 22 11:48:24 2015 +0100
configure: add default value for --with-android-ndk
Change-Id: I2ab9d6fe4ac81f4a102a3f4242aa6d41e81fab88
diff --git a/configure.ac b/configure.ac
index a9edea1..2bd85d5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -294,6 +294,9 @@ AC_ARG_WITH(android-sdk,
,)
ANDROID_NDK_HOME=
+if test -z "$with_android_ndk" -a -e "$SRC_ROOT/external/android-ndk"; then
+ with_android_ndk="$SRC_ROOT/external/android-ndk"
+fi
if test -n "$with_android_ndk"; then
ANDROID_NDK_HOME=$with_android_ndk
@@ -760,7 +763,7 @@ linux-android*)
_os=Android
if test -z "$with_android_ndk"; then
- AC_MSG_ERROR([the --with-android-ndk option is mandatory])
+ AC_MSG_ERROR([the --with-android-ndk option is mandatory, unless it is available at external/android-ndk/.])
fi
if test -z "$with_android_ndk_toolchain_version"; then
commit 315e72d4300e688e921b1122109dd9a545016feb
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Sun Feb 22 11:48:12 2015 +0100
configure: add default value for --with-android-sdk
Change-Id: Ib19b57e877c5829dd816d4b4e84bb8f632354789
diff --git a/configure.ac b/configure.ac
index a7ad5e1..a9edea1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -503,9 +503,12 @@ AC_SUBST(ANDROID_NDK_GDBSERVER)
AC_SUBST(ANDROID_APP_ABI)
dnl ===================================================================
-dnl Also --with-android-sdk is mandatory
+dnl --with-android-sdk
dnl ===================================================================
ANDROID_SDK_HOME=
+if test -z "$with_android_sdk" -a -e "$SRC_ROOT/external/android-sdk-linux"; then
+ with_android_sdk="$SRC_ROOT/external/android-sdk-linux"
+fi
if test -n "$with_android_sdk"; then
ANDROID_SDK_HOME=$with_android_sdk
PATH="$ANDROID_SDK_HOME/platform-tools:$ANDROID_SDK_HOME/tools:$PATH"
@@ -780,7 +783,7 @@ esac
if echo "$host_os" | grep -q linux-android ; then
if test -z "$with_android_sdk"; then
- AC_MSG_ERROR([the --with-android-sdk option is mandatory])
+ AC_MSG_ERROR([the --with-android-sdk option is mandatory, unless it is available at external/android-sdk-linux/.])
fi
if test ! -d "$ANDROID_SDK_HOME/platforms"; then
commit 9ea95a1dbd7e10343a3549c2cbc1b909a873f5f7
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Sun Feb 22 11:31:16 2015 +0100
writerfilter: clean up DOCX XFilter implementation
Change-Id: I4524d0a93231f291e074d1eeb10d00efc64e0cc5
diff --git a/writerfilter/Library_writerfilter.mk b/writerfilter/Library_writerfilter.mk
index f3af37a..6149401 100644
--- a/writerfilter/Library_writerfilter.mk
+++ b/writerfilter/Library_writerfilter.mk
@@ -112,8 +112,8 @@ $(eval $(call gb_Library_add_exception_objects,writerfilter,\
writerfilter/source/dmapper/ThemeTable \
writerfilter/source/dmapper/WrapPolygonHandler \
writerfilter/source/dmapper/util \
- writerfilter/source/filter/ImportFilter \
writerfilter/source/filter/RtfFilter \
+ writerfilter/source/filter/WriterFilter \
writerfilter/source/filter/WriterFilterDetection \
writerfilter/source/ooxml/Handler \
writerfilter/source/ooxml/OOXMLBinaryObjectReference \
diff --git a/writerfilter/source/filter/ImportFilter.cxx b/writerfilter/source/filter/ImportFilter.cxx
deleted file mode 100644
index 5d43ff5..0000000
--- a/writerfilter/source/filter/ImportFilter.cxx
+++ /dev/null
@@ -1,354 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <osl/diagnose.h>
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
-#include <com/sun/star/io/XInputStream.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/lang/WrappedTargetRuntimeException.hpp>
-#include <com/sun/star/io/WrongFormatException.hpp>
-#include <com/sun/star/xml/sax/SAXParseException.hpp>
-#include <unotools/mediadescriptor.hxx>
-#include <cppuhelper/exc_hlp.hxx>
-#include <cppuhelper/supportsservice.hxx>
-#include <oox/core/filterdetect.hxx>
-#include <dmapper/DomainMapperFactory.hxx>
-#include <WriterFilter.hxx>
-#include <ooxml/OOXMLDocument.hxx>
-#ifdef DEBUG_WRITERFILTER
-#include <iostream>
-#include <osl/process.h>
-#endif
-
-#include <oox/ole/olestorage.hxx>
-#include <oox/ole/vbaproject.hxx>
-#include <oox/helper/graphichelper.hxx>
-
-using namespace ::com::sun::star;
-
-
-static OUString lcl_GetExceptionMessageRec(xml::sax::SAXException const& e);
-
-static OUString lcl_GetExceptionMessage(xml::sax::SAXException const& e)
-{
- OUString const thisMessage("SAXParseException: "
- "\"" + e.Message + "\"");
- OUString const restMessage(lcl_GetExceptionMessageRec(e));
- return restMessage + "\n" + thisMessage;
-}
-static OUString lcl_GetExceptionMessage(xml::sax::SAXParseException const& e)
-{
- OUString const thisMessage("SAXParseException: "
- "\"" + e.Message + "\" "
- "stream \"" + e.SystemId + "\""
- ", Line " + OUString::number(e.LineNumber)
- + ", Column " + OUString::number(e.ColumnNumber));
- OUString const restMessage(lcl_GetExceptionMessageRec(e));
- return restMessage + "\n" + thisMessage;
-}
-static OUString lcl_GetExceptionMessageRec(xml::sax::SAXException const& e)
-{
- xml::sax::SAXParseException saxpe;
- if (e.WrappedException >>= saxpe)
- {
- return lcl_GetExceptionMessage(saxpe);
- }
- xml::sax::SAXException saxe;
- if (e.WrappedException >>= saxe)
- {
- return lcl_GetExceptionMessage(saxe);
- }
- uno::Exception ue;
- if (e.WrappedException >>= ue)
- {
- return ue.Message;
- }
- return OUString();
-}
-
-sal_Bool WriterFilter::filter( const uno::Sequence< beans::PropertyValue >& aDescriptor )
- throw (uno::RuntimeException, std::exception)
-{
- if( m_xSrcDoc.is() )
- {
- uno::Reference< lang::XMultiServiceFactory > xMSF(m_xContext->getServiceManager(), uno::UNO_QUERY_THROW);
- uno::Reference< uno::XInterface > xIfc;
- try {
- xIfc.set(
- xMSF->createInstance("com.sun.star.comp.Writer.DocxExport"),
- uno::UNO_QUERY_THROW);
- } catch (css::uno::RuntimeException &) {
- throw;
- } catch (css::uno::Exception & e) {
- css::uno::Any a(cppu::getCaughtException());
- throw css::lang::WrappedTargetRuntimeException(
- "wrapped " + a.getValueTypeName() + ": " + e.Message,
- css::uno::Reference<css::uno::XInterface>(), a);
- }
- uno::Reference< document::XExporter > xExprtr(xIfc, uno::UNO_QUERY_THROW);
- uno::Reference< document::XFilter > xFltr(xIfc, uno::UNO_QUERY_THROW);
- if (!xExprtr.is() || !xFltr.is())
- return sal_False;
- xExprtr->setSourceDocument(m_xSrcDoc);
- return xFltr->filter(aDescriptor);
- }
- else if (m_xDstDoc.is())
- {
- utl::MediaDescriptor aMediaDesc( aDescriptor );
- bool bRepairStorage = aMediaDesc.getUnpackedValueOrDefault( "RepairPackage", false );
-
- uno::Reference< io::XInputStream > xInputStream;
- try
- {
- // use the oox.core.FilterDetect implementation to extract the decrypted ZIP package
- ::oox::core::FilterDetect aDetector( m_xContext );
- xInputStream = aDetector.extractUnencryptedPackage( aMediaDesc );
- }
- catch( uno::Exception& )
- {
- }
-
- if ( !xInputStream.is() )
- return sal_False;
-
- writerfilter::dmapper::SourceDocumentType eType = writerfilter::dmapper::SourceDocumentType::OOXML;
- writerfilter::Stream::Pointer_t pStream(
- writerfilter::dmapper::DomainMapperFactory::createMapper(m_xContext, xInputStream, m_xDstDoc, bRepairStorage, eType, uno::Reference<text::XTextRange>(), aMediaDesc));
- //create the tokenizer and domain mapper
- writerfilter::ooxml::OOXMLStream::Pointer_t pDocStream = writerfilter::ooxml::OOXMLDocumentFactory::createStream(m_xContext, xInputStream, bRepairStorage);
- uno::Reference<task::XStatusIndicator> xStatusIndicator = aMediaDesc.getUnpackedValueOrDefault(utl::MediaDescriptor::PROP_STATUSINDICATOR(), uno::Reference<task::XStatusIndicator>());
- writerfilter::ooxml::OOXMLDocument::Pointer_t pDocument(writerfilter::ooxml::OOXMLDocumentFactory::createDocument(pDocStream, xStatusIndicator));
-
- uno::Reference<frame::XModel> xModel(m_xDstDoc, uno::UNO_QUERY_THROW);
- pDocument->setModel(xModel);
-
- uno::Reference<drawing::XDrawPageSupplier> xDrawings
- (m_xDstDoc, uno::UNO_QUERY_THROW);
- uno::Reference<drawing::XDrawPage> xDrawPage
- (xDrawings->getDrawPage(), uno::UNO_SET_THROW);
- pDocument->setDrawPage(xDrawPage);
-
- try
- {
- pDocument->resolve(*pStream);
- }
- catch (xml::sax::SAXParseException const& e)
- {
- // note: SfxObjectShell checks for WrongFormatException
- io::WrongFormatException wfe(lcl_GetExceptionMessage(e));
- throw lang::WrappedTargetRuntimeException("",
- static_cast<OWeakObject*>(this), uno::makeAny(wfe));
- }
- catch (xml::sax::SAXException const& e)
- {
- // note: SfxObjectShell checks for WrongFormatException
- io::WrongFormatException wfe(lcl_GetExceptionMessage(e));
- throw lang::WrappedTargetRuntimeException("",
- static_cast<OWeakObject*>(this), uno::makeAny(wfe));
- }
- catch (uno::RuntimeException const&)
- {
- throw;
- }
- catch (uno::Exception const& e)
- {
- SAL_WARN("writerfilter", "WriterFilter::filter(): "
- "failed with exception " << e.Message);
- throw lang::WrappedTargetRuntimeException("",
- static_cast<OWeakObject*>(this), uno::makeAny(e));
- }
-
- // Adding some properties to the document's grab bag for interoperability purposes:
- comphelper::SequenceAsHashMap aGrabBagProperties;
-
- // Adding the saved Theme DOM
- aGrabBagProperties["OOXTheme"] = uno::makeAny( pDocument->getThemeDom() );
-
- // Adding the saved custom xml DOM
- aGrabBagProperties["OOXCustomXml"] = uno::makeAny( pDocument->getCustomXmlDomList() );
- aGrabBagProperties["OOXCustomXmlProps"] = uno::makeAny( pDocument->getCustomXmlDomPropsList() );
-
- // Adding the saved ActiveX DOM
- aGrabBagProperties["OOXActiveX"] = uno::makeAny( pDocument->getActiveXDomList() );
- aGrabBagProperties["OOXActiveXBin"] = uno::makeAny( pDocument->getActiveXBinList() );
-
- // Adding the saved Glossary Documnet DOM to the document's grab bag
- aGrabBagProperties["OOXGlossary"] = uno::makeAny( pDocument->getGlossaryDocDom() );
- aGrabBagProperties["OOXGlossaryDom"] = uno::makeAny( pDocument->getGlossaryDomList() );
-
- // Adding the saved embedding document to document's grab bag
- aGrabBagProperties["OOXEmbeddings"] = uno::makeAny( pDocument->getEmbeddingsList() );
-
- putPropertiesToDocumentGrabBag( aGrabBagProperties );
-
- writerfilter::ooxml::OOXMLStream::Pointer_t pVBAProjectStream(writerfilter::ooxml::OOXMLDocumentFactory::createStream( pDocStream, writerfilter::ooxml::OOXMLStream::VBAPROJECT ));
- oox::StorageRef xVbaPrjStrg( new ::oox::ole::OleStorage( m_xContext, pVBAProjectStream->getDocumentStream(), false ) );
- if( xVbaPrjStrg.get() && xVbaPrjStrg->isStorage() )
- {
- ::oox::ole::VbaProject aVbaProject( m_xContext, xModel, "Writer" );
- uno::Reference< frame::XFrame > xFrame = aMediaDesc.getUnpackedValueOrDefault( utl::MediaDescriptor::PROP_FRAME(), uno::Reference< frame::XFrame > () );
-
- // if no XFrame try fallback to what we can glean from the Model
- if ( !xFrame.is() )
- {
- uno::Reference< frame::XController > xController = xModel->getCurrentController();
- xFrame = xController.is() ? xController->getFrame() : nullptr;
- }
-
- oox::GraphicHelper gHelper( m_xContext, xFrame, xVbaPrjStrg );
- aVbaProject.importVbaProject( *xVbaPrjStrg, gHelper );
- }
-
- // Document signature.
- writerfilter::ooxml::OOXMLStream::Pointer_t pSignatureStream;
- pSignatureStream = writerfilter::ooxml::OOXMLDocumentFactory::createStream(m_xContext, xInputStream, bRepairStorage, writerfilter::ooxml::OOXMLStream::SIGNATURE);
- if (pSignatureStream->getDocumentStream().is())
- {
- // TODO found, handle it.
- }
-
- pStream.reset();
-
- return sal_True;
- }
- return sal_False;
-}
-
-
-void WriterFilter::cancel( ) throw (uno::RuntimeException, std::exception)
-{
-}
-
-
-
-void WriterFilter::setTargetDocument( const uno::Reference< lang::XComponent >& xDoc )
- throw (lang::IllegalArgumentException, uno::RuntimeException, std::exception)
-{
- m_xDstDoc = xDoc;
-
- // Set some compatibility options that are valid for all the formats
- uno::Reference< lang::XMultiServiceFactory > xFactory( xDoc, uno::UNO_QUERY );
- uno::Reference< beans::XPropertySet > xSettings( xFactory->createInstance("com.sun.star.document.Settings"), uno::UNO_QUERY );
-
- xSettings->setPropertyValue( "AddFrameOffsets", uno::makeAny( sal_True ) );
- xSettings->setPropertyValue( "UseOldNumbering", uno::makeAny( sal_False ) );
- xSettings->setPropertyValue( "IgnoreFirstLineIndentInNumbering", uno::makeAny( sal_False ) );
- xSettings->setPropertyValue( "DoNotResetParaAttrsForNumFont", uno::makeAny( sal_False ) );
- xSettings->setPropertyValue( "UseFormerLineSpacing", uno::makeAny( sal_False ) );
- xSettings->setPropertyValue( "AddParaSpacingToTableCells", uno::makeAny( sal_True ) );
- xSettings->setPropertyValue( "UseFormerObjectPositioning", uno::makeAny( sal_False ) );
- xSettings->setPropertyValue( "ConsiderTextWrapOnObjPos", uno::makeAny( sal_True ) );
- xSettings->setPropertyValue( "UseFormerTextWrapping", uno::makeAny( sal_False ) );
- xSettings->setPropertyValue( "TableRowKeep", uno::makeAny( sal_True ) );
- xSettings->setPropertyValue( "IgnoreTabsAndBlanksForLineCalculation", uno::makeAny( sal_True ) );
- xSettings->setPropertyValue( "InvertBorderSpacing", uno::makeAny( sal_True ) );
- xSettings->setPropertyValue( "CollapseEmptyCellPara", uno::makeAny( sal_True ) );
- xSettings->setPropertyValue( "TabOverflow", uno::makeAny( sal_True ) );
- xSettings->setPropertyValue( "UnbreakableNumberings", uno::makeAny( sal_True ) );
-
- xSettings->setPropertyValue("FloattableNomargins", uno::makeAny( sal_True ));
- xSettings->setPropertyValue( "ClippedPictures", uno::makeAny( sal_True ) );
- xSettings->setPropertyValue( "BackgroundParaOverDrawings", uno::makeAny( sal_True ) );
- xSettings->setPropertyValue( "TabOverMargin", uno::makeAny( sal_True ) );
- xSettings->setPropertyValue("PropLineSpacingShrinksFirstLine", uno::makeAny(sal_True));
-}
-
-void WriterFilter::setSourceDocument( const uno::Reference< lang::XComponent >& xDoc )
- throw (lang::IllegalArgumentException, uno::RuntimeException, std::exception)
-{
- m_xSrcDoc = xDoc;
-}
-
-
-
-void WriterFilter::initialize( const uno::Sequence< uno::Any >& /*aArguments*/ ) throw (uno::Exception, uno::RuntimeException, std::exception)
-{
-}
-
-
-OUString WriterFilter_getImplementationName () throw (uno::RuntimeException)
-{
- return OUString ( "com.sun.star.comp.Writer.WriterFilter" );
-}
-
-uno::Sequence< OUString > WriterFilter_getSupportedServiceNames( ) throw (uno::RuntimeException)
-{
- uno::Sequence < OUString > aRet(2);
- OUString* pArray = aRet.getArray();
- pArray[0] = "com.sun.star.document.ImportFilter";
- pArray[1] = "com.sun.star.document.ExportFilter";
- return aRet;
-}
-
-OUString WriterFilter::getImplementationName( ) throw (uno::RuntimeException, std::exception)
-{
- return WriterFilter_getImplementationName();
-}
-
-
-sal_Bool WriterFilter::supportsService( const OUString& rServiceName ) throw (uno::RuntimeException, std::exception)
-{
- return cppu::supportsService( this, rServiceName );
-}
-
-
-uno::Sequence< OUString > WriterFilter::getSupportedServiceNames( ) throw (uno::RuntimeException, std::exception)
-{
- return WriterFilter_getSupportedServiceNames();
-}
-
-void WriterFilter::putPropertiesToDocumentGrabBag( const comphelper::SequenceAsHashMap& rProperties )
-{
- try
- {
- uno::Reference<beans::XPropertySet> xDocProps(m_xDstDoc, uno::UNO_QUERY);
- if( xDocProps.is() )
- {
- uno::Reference<beans::XPropertySetInfo> xPropsInfo = xDocProps->getPropertySetInfo();
-
- const OUString aGrabBagPropName = "InteropGrabBag";
- if( xPropsInfo.is() && xPropsInfo->hasPropertyByName( aGrabBagPropName ) )
- {
- // get existing grab bag
- comphelper::SequenceAsHashMap aGrabBag(xDocProps->getPropertyValue(aGrabBagPropName));
-
- // put the new items
- aGrabBag.update(rProperties);
-
- // put it back to the document
- xDocProps->setPropertyValue(aGrabBagPropName, uno::Any(aGrabBag.getAsConstPropertyValueList()));
- }
- }
- }
- catch(const uno::Exception&)
- {
- SAL_WARN("writerfilter","Failed to save documents grab bag");
- }
-}
-
-extern "C" SAL_DLLPUBLIC_EXPORT ::com::sun::star::uno::XInterface* SAL_CALL
-com_sun_star_comp_Writer_WriterFilter_get_implementation(::com::sun::star::uno::XComponentContext* component,
- ::com::sun::star::uno::Sequence<css::uno::Any> const &)
-{
- return cppu::acquire(new WriterFilter(component));
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/filter/WriterFilter.cxx b/writerfilter/source/filter/WriterFilter.cxx
new file mode 100644
index 0000000..7a5fc1d
--- /dev/null
+++ b/writerfilter/source/filter/WriterFilter.cxx
@@ -0,0 +1,381 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifdef DEBUG_WRITERFILTER
+#include <iostream>
+#include <osl/process.h>
+#endif
+
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/document/XExporter.hpp>
+#include <com/sun/star/document/XFilter.hpp>
+#include <com/sun/star/document/XImporter.hpp>
+#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
+#include <com/sun/star/io/WrongFormatException.hpp>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <com/sun/star/lang/WrappedTargetRuntimeException.hpp>
+#include <com/sun/star/lang/XInitialization.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/xml/sax/SAXParseException.hpp>
+#include <cppuhelper/exc_hlp.hxx>
+#include <cppuhelper/implbase.hxx>
+#include <cppuhelper/supportsservice.hxx>
+#include <dmapper/DomainMapperFactory.hxx>
+#include <oox/core/filterdetect.hxx>
+#include <oox/helper/graphichelper.hxx>
+#include <oox/ole/olestorage.hxx>
+#include <oox/ole/vbaproject.hxx>
+#include <ooxml/OOXMLDocument.hxx>
+#include <osl/diagnose.h>
+#include <unotools/mediadescriptor.hxx>
+
+using namespace ::com::sun::star;
+
+static OUString lcl_GetExceptionMessageRec(xml::sax::SAXException const& e);
+
+static OUString lcl_GetExceptionMessage(xml::sax::SAXException const& e)
+{
+ OUString const thisMessage("SAXParseException: \"" + e.Message + "\"");
+ OUString const restMessage(lcl_GetExceptionMessageRec(e));
+ return restMessage + "\n" + thisMessage;
+}
+static OUString lcl_GetExceptionMessage(xml::sax::SAXParseException const& e)
+{
+ OUString const thisMessage("SAXParseException: '" + e.Message + "', Stream '" + e.SystemId + "', Line " + OUString::number(e.LineNumber)
+ + ", Column " + OUString::number(e.ColumnNumber));
+ OUString const restMessage(lcl_GetExceptionMessageRec(e));
+ return restMessage + "\n" + thisMessage;
+}
+
+static OUString lcl_GetExceptionMessageRec(xml::sax::SAXException const& e)
+{
+ xml::sax::SAXParseException saxpe;
+ if (e.WrappedException >>= saxpe)
+ {
+ return lcl_GetExceptionMessage(saxpe);
+ }
+ xml::sax::SAXException saxe;
+ if (e.WrappedException >>= saxe)
+ {
+ return lcl_GetExceptionMessage(saxe);
+ }
+ uno::Exception ue;
+ if (e.WrappedException >>= ue)
+ {
+ return ue.Message;
+ }
+ return OUString();
+}
+
+/// Common DOCX filter, calls DocxExportFilter via UNO or does the DOCX import.
+class WriterFilter : public cppu::WeakImplHelper
+ <
+ document::XFilter,
+ document::XImporter,
+ document::XExporter,
+ lang::XInitialization,
+ lang::XServiceInfo
+ >
+{
+
+protected:
+ uno::Reference<uno::XComponentContext> m_xContext;
+ uno::Reference<lang::XComponent> m_xSrcDoc, m_xDstDoc;
+
+public:
+ WriterFilter(const uno::Reference<uno::XComponentContext>& rxContext)
+ : m_xContext(rxContext)
+ {}
+ virtual ~WriterFilter() {}
+
+ // XFilter
+ virtual sal_Bool SAL_CALL filter(const uno::Sequence<beans::PropertyValue>& rDescriptor) throw (uno::RuntimeException, std::exception) SAL_OVERRIDE;
+ virtual void SAL_CALL cancel() throw (uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+ // XImporter
+ virtual void SAL_CALL setTargetDocument(const uno::Reference<lang::XComponent>& xDoc) throw (lang::IllegalArgumentException, uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+ // XExporter
+ virtual void SAL_CALL setSourceDocument(const uno::Reference<lang::XComponent>& xDoc) throw (lang::IllegalArgumentException, uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+ // XInitialization
+ virtual void SAL_CALL initialize(const uno::Sequence<uno::Any>& rArguments) throw (uno::Exception, uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+ // XServiceInfo
+ virtual OUString SAL_CALL getImplementationName() throw (uno::RuntimeException, std::exception) SAL_OVERRIDE;
+ virtual sal_Bool SAL_CALL supportsService(const OUString& rServiceName) throw (uno::RuntimeException, std::exception) SAL_OVERRIDE;
+ virtual uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() throw (uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+private:
+ void putPropertiesToDocumentGrabBag(const comphelper::SequenceAsHashMap& rProperties);
+
+};
+
+sal_Bool WriterFilter::filter(const uno::Sequence< beans::PropertyValue >& aDescriptor) throw (uno::RuntimeException, std::exception)
+{
+ if (m_xSrcDoc.is())
+ {
+ uno::Reference< lang::XMultiServiceFactory > xMSF(m_xContext->getServiceManager(), uno::UNO_QUERY_THROW);
+ uno::Reference< uno::XInterface > xIfc;
+ try
+ {
+ xIfc.set(xMSF->createInstance("com.sun.star.comp.Writer.DocxExport"), uno::UNO_QUERY_THROW);
+ }
+ catch (uno::RuntimeException&)
+ {
+ throw;
+ }
+ catch (uno::Exception& e)
+ {
+ uno::Any a(cppu::getCaughtException());
+ throw lang::WrappedTargetRuntimeException("wrapped " + a.getValueTypeName() + ": " + e.Message, uno::Reference<uno::XInterface>(), a);
+ }
+ uno::Reference< document::XExporter > xExprtr(xIfc, uno::UNO_QUERY_THROW);
+ uno::Reference< document::XFilter > xFltr(xIfc, uno::UNO_QUERY_THROW);
+ if (!xExprtr.is() || !xFltr.is())
+ return sal_False;
+ xExprtr->setSourceDocument(m_xSrcDoc);
+ return xFltr->filter(aDescriptor);
+ }
+ else if (m_xDstDoc.is())
+ {
+ utl::MediaDescriptor aMediaDesc(aDescriptor);
+ bool bRepairStorage = aMediaDesc.getUnpackedValueOrDefault("RepairPackage", false);
+
+ uno::Reference< io::XInputStream > xInputStream;
+ try
+ {
+ // use the oox.core.FilterDetect implementation to extract the decrypted ZIP package
+ ::oox::core::FilterDetect aDetector(m_xContext);
+ xInputStream = aDetector.extractUnencryptedPackage(aMediaDesc);
+ }
+ catch (uno::Exception&)
+ {
+ }
+
+ if (!xInputStream.is())
+ return sal_False;
+
+ writerfilter::dmapper::SourceDocumentType eType = writerfilter::dmapper::SourceDocumentType::OOXML;
+ writerfilter::Stream::Pointer_t pStream(
+ writerfilter::dmapper::DomainMapperFactory::createMapper(m_xContext, xInputStream, m_xDstDoc, bRepairStorage, eType, uno::Reference<text::XTextRange>(), aMediaDesc));
+ //create the tokenizer and domain mapper
+ writerfilter::ooxml::OOXMLStream::Pointer_t pDocStream = writerfilter::ooxml::OOXMLDocumentFactory::createStream(m_xContext, xInputStream, bRepairStorage);
+ uno::Reference<task::XStatusIndicator> xStatusIndicator = aMediaDesc.getUnpackedValueOrDefault(utl::MediaDescriptor::PROP_STATUSINDICATOR(), uno::Reference<task::XStatusIndicator>());
+ writerfilter::ooxml::OOXMLDocument::Pointer_t pDocument(writerfilter::ooxml::OOXMLDocumentFactory::createDocument(pDocStream, xStatusIndicator));
+
+ uno::Reference<frame::XModel> xModel(m_xDstDoc, uno::UNO_QUERY_THROW);
+ pDocument->setModel(xModel);
+
+ uno::Reference<drawing::XDrawPageSupplier> xDrawings
+ (m_xDstDoc, uno::UNO_QUERY_THROW);
+ uno::Reference<drawing::XDrawPage> xDrawPage
+ (xDrawings->getDrawPage(), uno::UNO_SET_THROW);
+ pDocument->setDrawPage(xDrawPage);
+
+ try
+ {
+ pDocument->resolve(*pStream);
+ }
+ catch (xml::sax::SAXParseException const& e)
+ {
+ // note: SfxObjectShell checks for WrongFormatException
+ io::WrongFormatException wfe(lcl_GetExceptionMessage(e));
+ throw lang::WrappedTargetRuntimeException("",
+ static_cast<OWeakObject*>(this), uno::makeAny(wfe));
+ }
+ catch (xml::sax::SAXException const& e)
+ {
+ // note: SfxObjectShell checks for WrongFormatException
+ io::WrongFormatException wfe(lcl_GetExceptionMessage(e));
+ throw lang::WrappedTargetRuntimeException("",
+ static_cast<OWeakObject*>(this), uno::makeAny(wfe));
+ }
+ catch (uno::RuntimeException const&)
+ {
+ throw;
+ }
+ catch (uno::Exception const& e)
+ {
+ SAL_WARN("writerfilter", "WriterFilter::filter(): "
+ "failed with exception " << e.Message);
+ throw lang::WrappedTargetRuntimeException("",
+ static_cast<OWeakObject*>(this), uno::makeAny(e));
+ }
+
+ // Adding some properties to the document's grab bag for interoperability purposes:
+ comphelper::SequenceAsHashMap aGrabBagProperties;
+
+ // Adding the saved Theme DOM
+ aGrabBagProperties["OOXTheme"] = uno::makeAny(pDocument->getThemeDom());
+
+ // Adding the saved custom xml DOM
+ aGrabBagProperties["OOXCustomXml"] = uno::makeAny(pDocument->getCustomXmlDomList());
+ aGrabBagProperties["OOXCustomXmlProps"] = uno::makeAny(pDocument->getCustomXmlDomPropsList());
+
+ // Adding the saved ActiveX DOM
+ aGrabBagProperties["OOXActiveX"] = uno::makeAny(pDocument->getActiveXDomList());
+ aGrabBagProperties["OOXActiveXBin"] = uno::makeAny(pDocument->getActiveXBinList());
+
+ // Adding the saved Glossary Documnet DOM to the document's grab bag
+ aGrabBagProperties["OOXGlossary"] = uno::makeAny(pDocument->getGlossaryDocDom());
+ aGrabBagProperties["OOXGlossaryDom"] = uno::makeAny(pDocument->getGlossaryDomList());
+
+ // Adding the saved embedding document to document's grab bag
+ aGrabBagProperties["OOXEmbeddings"] = uno::makeAny(pDocument->getEmbeddingsList());
+
+ putPropertiesToDocumentGrabBag(aGrabBagProperties);
+
+ writerfilter::ooxml::OOXMLStream::Pointer_t pVBAProjectStream(writerfilter::ooxml::OOXMLDocumentFactory::createStream(pDocStream, writerfilter::ooxml::OOXMLStream::VBAPROJECT));
+ oox::StorageRef xVbaPrjStrg(new ::oox::ole::OleStorage(m_xContext, pVBAProjectStream->getDocumentStream(), false));
+ if (xVbaPrjStrg.get() && xVbaPrjStrg->isStorage())
+ {
+ ::oox::ole::VbaProject aVbaProject(m_xContext, xModel, "Writer");
+ uno::Reference< frame::XFrame > xFrame = aMediaDesc.getUnpackedValueOrDefault(utl::MediaDescriptor::PROP_FRAME(), uno::Reference< frame::XFrame > ());
+
+ // if no XFrame try fallback to what we can glean from the Model
+ if (!xFrame.is())
+ {
+ uno::Reference< frame::XController > xController = xModel->getCurrentController();
+ xFrame = xController.is() ? xController->getFrame() : nullptr;
+ }
+
+ oox::GraphicHelper gHelper(m_xContext, xFrame, xVbaPrjStrg);
+ aVbaProject.importVbaProject(*xVbaPrjStrg, gHelper);
+ }
+
+ // Document signature.
+ writerfilter::ooxml::OOXMLStream::Pointer_t pSignatureStream;
+ pSignatureStream = writerfilter::ooxml::OOXMLDocumentFactory::createStream(m_xContext, xInputStream, bRepairStorage, writerfilter::ooxml::OOXMLStream::SIGNATURE);
+ if (pSignatureStream->getDocumentStream().is())
+ {
+ // TODO found, handle it.
+ }
+
+ pStream.reset();
+
+ return sal_True;
+ }
+ return sal_False;
+}
+
+
+void WriterFilter::cancel() throw (uno::RuntimeException, std::exception)
+{
+}
+
+void WriterFilter::setTargetDocument(const uno::Reference< lang::XComponent >& xDoc) throw (lang::IllegalArgumentException, uno::RuntimeException, std::exception)
+{
+ m_xDstDoc = xDoc;
+
+ // Set some compatibility options that are valid for all the formats
+ uno::Reference< lang::XMultiServiceFactory > xFactory(xDoc, uno::UNO_QUERY);
+ uno::Reference< beans::XPropertySet > xSettings(xFactory->createInstance("com.sun.star.document.Settings"), uno::UNO_QUERY);
+
+ xSettings->setPropertyValue("AddFrameOffsets", uno::makeAny(sal_True));
+ xSettings->setPropertyValue("UseOldNumbering", uno::makeAny(sal_False));
+ xSettings->setPropertyValue("IgnoreFirstLineIndentInNumbering", uno::makeAny(sal_False));
+ xSettings->setPropertyValue("DoNotResetParaAttrsForNumFont", uno::makeAny(sal_False));
+ xSettings->setPropertyValue("UseFormerLineSpacing", uno::makeAny(sal_False));
+ xSettings->setPropertyValue("AddParaSpacingToTableCells", uno::makeAny(sal_True));
+ xSettings->setPropertyValue("UseFormerObjectPositioning", uno::makeAny(sal_False));
+ xSettings->setPropertyValue("ConsiderTextWrapOnObjPos", uno::makeAny(sal_True));
+ xSettings->setPropertyValue("UseFormerTextWrapping", uno::makeAny(sal_False));
+ xSettings->setPropertyValue("TableRowKeep", uno::makeAny(sal_True));
+ xSettings->setPropertyValue("IgnoreTabsAndBlanksForLineCalculation", uno::makeAny(sal_True));
+ xSettings->setPropertyValue("InvertBorderSpacing", uno::makeAny(sal_True));
+ xSettings->setPropertyValue("CollapseEmptyCellPara", uno::makeAny(sal_True));
+ xSettings->setPropertyValue("TabOverflow", uno::makeAny(sal_True));
+ xSettings->setPropertyValue("UnbreakableNumberings", uno::makeAny(sal_True));
+
+ xSettings->setPropertyValue("FloattableNomargins", uno::makeAny(sal_True));
+ xSettings->setPropertyValue("ClippedPictures", uno::makeAny(sal_True));
+ xSettings->setPropertyValue("BackgroundParaOverDrawings", uno::makeAny(sal_True));
+ xSettings->setPropertyValue("TabOverMargin", uno::makeAny(sal_True));
+ xSettings->setPropertyValue("PropLineSpacingShrinksFirstLine", uno::makeAny(sal_True));
+}
+
+void WriterFilter::setSourceDocument(const uno::Reference< lang::XComponent >& xDoc) throw (lang::IllegalArgumentException, uno::RuntimeException, std::exception)
+{
+ m_xSrcDoc = xDoc;
+}
+
+void WriterFilter::initialize(const uno::Sequence< uno::Any >& /*rArguments*/) throw (uno::Exception, uno::RuntimeException, std::exception)
+{
+}
+
+OUString WriterFilter::getImplementationName() throw (uno::RuntimeException, std::exception)
+{
+ return OUString("com.sun.star.comp.Writer.WriterFilter");
+}
+
+
+sal_Bool WriterFilter::supportsService(const OUString& rServiceName) throw (uno::RuntimeException, std::exception)
+{
+ return cppu::supportsService(this, rServiceName);
+}
+
+
+uno::Sequence<OUString> WriterFilter::getSupportedServiceNames() throw (uno::RuntimeException, std::exception)
+{
+ uno::Sequence<OUString> aRet =
+ {
+ OUString("com.sun.star.document.ImportFilter"),
+ OUString("com.sun.star.document.ExportFilter")
+ };
+ return aRet;
+}
+
+void WriterFilter::putPropertiesToDocumentGrabBag(const comphelper::SequenceAsHashMap& rProperties)
+{
+ try
+ {
+ uno::Reference<beans::XPropertySet> xDocProps(m_xDstDoc, uno::UNO_QUERY);
+ if (xDocProps.is())
+ {
+ uno::Reference<beans::XPropertySetInfo> xPropsInfo = xDocProps->getPropertySetInfo();
+
+ const OUString aGrabBagPropName = "InteropGrabBag";
+ if (xPropsInfo.is() && xPropsInfo->hasPropertyByName(aGrabBagPropName))
+ {
+ // get existing grab bag
+ comphelper::SequenceAsHashMap aGrabBag(xDocProps->getPropertyValue(aGrabBagPropName));
+
+ // put the new items
+ aGrabBag.update(rProperties);
+
+ // put it back to the document
+ xDocProps->setPropertyValue(aGrabBagPropName, uno::Any(aGrabBag.getAsConstPropertyValueList()));
+ }
+ }
+ }
+ catch (const uno::Exception&)
+ {
+ SAL_WARN("writerfilter","Failed to save documents grab bag");
+ }
+}
+
+extern "C" SAL_DLLPUBLIC_EXPORT uno::XInterface* SAL_CALL com_sun_star_comp_Writer_WriterFilter_get_implementation(uno::XComponentContext* component, uno::Sequence<uno::Any> const&)
+{
+ return cppu::acquire(new WriterFilter(component));
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/filter/WriterFilter.hxx b/writerfilter/source/filter/WriterFilter.hxx
deleted file mode 100644
index bb32213..0000000
--- a/writerfilter/source/filter/WriterFilter.hxx
+++ /dev/null
@@ -1,98 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_FILTER_WRITERFILTER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_FILTER_WRITERFILTER_HXX
-
-#include <com/sun/star/document/XFilter.hpp>
-#include <com/sun/star/document/XImporter.hpp>
-#include <com/sun/star/document/XExporter.hpp>
-#include <com/sun/star/lang/XInitialization.hpp>
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/xml/sax/XDocumentHandler.hpp>
-#include <cppuhelper/implbase5.hxx>
-#include <comphelper/sequenceashashmap.hxx>
-
-/// Common DOC/DOCX filter, calls DocxExportFilter via UNO or does the DOCX import.
-class WriterFilter : public cppu::WeakImplHelper5
-<
- com::sun::star::document::XFilter,
- com::sun::star::document::XImporter,
- com::sun::star::document::XExporter,
- com::sun::star::lang::XInitialization,
- com::sun::star::lang::XServiceInfo
->
-{
-
-protected:
- ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > m_xContext;
- ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent > m_xSrcDoc, m_xDstDoc;
- ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler > m_xHandler;
-
-
-public:
- WriterFilter( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext)
- : m_xContext( rxContext )
- {}
- virtual ~WriterFilter() {}
-
- // XFilter
- virtual sal_Bool SAL_CALL filter( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aDescriptor )
- throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
- virtual void SAL_CALL cancel( )
- throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
-
- // XImporter
- virtual void SAL_CALL setTargetDocument( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& xDoc )
- throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
-
- // XExporter
- virtual void SAL_CALL setSourceDocument( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& xDoc )
- throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
-
- // XInitialization
- virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments )
- throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
-
- // XServiceInfo
- virtual OUString SAL_CALL getImplementationName( )
- throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
- virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName )
- throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
- virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames()
- throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
-
-private:
- void putPropertiesToDocumentGrabBag(const comphelper::SequenceAsHashMap& rProperties);
-
-};
-
-
-OUString WriterFilter_getImplementationName()
- throw ( ::com::sun::star::uno::RuntimeException );
-
-bool SAL_CALL WriterFilter_supportsService( const OUString& ServiceName )
- throw ( ::com::sun::star::uno::RuntimeException );
-
-::com::sun::star::uno::Sequence< OUString > SAL_CALL WriterFilter_getSupportedServiceNames( )
- throw ( ::com::sun::star::uno::RuntimeException );
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
More information about the Libreoffice-commits
mailing list