summaryrefslogtreecommitdiff
path: root/writerperfect
diff options
context:
space:
mode:
authorosnola <alonso@loria.fr>2014-05-29 15:35:18 +0200
committerDavid Tardon <dtardon@redhat.com>2014-05-29 16:22:30 +0200
commit696c8edf7a7731ea4e0f3e4ec4dfeadac2f8ffad (patch)
tree61fa720ebe60a3cb9345e574797c05ee97c87818 /writerperfect
parent626a4283672be163085b90d2240638eb0126c654 (diff)
Add new libmwaw's database/spreadsheet formats...
Change-Id: If07a9e548e1db15b403126263f63d9d09575eb95
Diffstat (limited to 'writerperfect')
-rw-r--r--writerperfect/Library_wpftcalc.mk2
-rw-r--r--writerperfect/source/calc/MWAWCalcImportFilter.cxx191
-rw-r--r--writerperfect/source/calc/MWAWCalcImportFilter.hxx53
-rw-r--r--writerperfect/source/calc/wpftcalc.component4
-rw-r--r--writerperfect/source/calc/wpftcalc_genericfilter.cxx4
5 files changed, 254 insertions, 0 deletions
diff --git a/writerperfect/Library_wpftcalc.mk b/writerperfect/Library_wpftcalc.mk
index 2e69c3b80e60..e09c195fd183 100644
--- a/writerperfect/Library_wpftcalc.mk
+++ b/writerperfect/Library_wpftcalc.mk
@@ -39,6 +39,7 @@ $(eval $(call gb_Library_use_libraries,wpftcalc,\
$(eval $(call gb_Library_use_externals,wpftcalc,\
odfgen \
revenge \
+ mwaw \
wps \
zlib \
lcms2 \
@@ -50,6 +51,7 @@ $(eval $(call gb_Library_use_externals,wpftcalc,\
$(eval $(call gb_Library_add_exception_objects,wpftcalc,\
writerperfect/source/calc/ImportFilterBase \
writerperfect/source/calc/MSWorksCalcImportFilter \
+ writerperfect/source/calc/MWAWCalcImportFilter \
writerperfect/source/calc/wpftcalc_genericfilter \
))
diff --git a/writerperfect/source/calc/MWAWCalcImportFilter.cxx b/writerperfect/source/calc/MWAWCalcImportFilter.cxx
new file mode 100644
index 000000000000..0f5101fe0a80
--- /dev/null
+++ b/writerperfect/source/calc/MWAWCalcImportFilter.cxx
@@ -0,0 +1,191 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* MWAWCalcImportFilter: Sets up the filter, and calls DocumentCollector
+ * to do the actual filtering
+ *
+ * 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/.
+ */
+
+#include <com/sun/star/uno/Reference.h>
+#include <cppuhelper/supportsservice.hxx>
+
+#include <libmwaw/libmwaw.hxx>
+#include <libodfgen/libodfgen.hxx>
+
+#include "MWAWCalcImportFilter.hxx"
+
+using com::sun::star::uno::Sequence;
+using com::sun::star::uno::Reference;
+using com::sun::star::uno::Any;
+using com::sun::star::uno::XInterface;
+using com::sun::star::uno::Exception;
+using com::sun::star::uno::RuntimeException;
+using com::sun::star::uno::XComponentContext;
+
+static bool handleEmbeddedMWAWGraphicObject(const librevenge::RVNGBinaryData &data, OdfDocumentHandler *pHandler, const OdfStreamType streamType)
+{
+ OdgGenerator exporter;
+ exporter.addDocumentHandler(pHandler, streamType);
+ return MWAWDocument::decodeGraphic(data, &exporter);
+}
+
+static bool handleEmbeddedMWAWSpreadsheetObject(const librevenge::RVNGBinaryData &data, OdfDocumentHandler *pHandler, const OdfStreamType streamType)
+{
+ OdsGenerator exporter;
+ exporter.addDocumentHandler(pHandler, streamType);
+ return MWAWDocument::decodeSpreadsheet(data, &exporter);
+}
+
+bool MWAWCalcImportFilter::doImportDocument( librevenge::RVNGInputStream &rInput, librevenge::RVNGSpreadsheetInterface &rGenerator )
+{
+ return MWAWDocument::MWAW_R_OK == MWAWDocument::parse(&rInput, &rGenerator);
+}
+
+bool MWAWCalcImportFilter::doDetectFormat( librevenge::RVNGInputStream &rInput, OUString &rTypeName )
+{
+ rTypeName = "";
+
+ MWAWDocument::Type docType = MWAWDocument::MWAW_T_UNKNOWN;
+ MWAWDocument::Kind docKind = MWAWDocument::MWAW_K_UNKNOWN;
+ const MWAWDocument::Confidence confidence = MWAWDocument::isFileFormatSupported(&rInput, docType, docKind);
+
+ if (confidence == MWAWDocument::MWAW_C_EXCELLENT)
+ {
+ if ( docKind == MWAWDocument::MWAW_K_SPREADSHEET || docKind == MWAWDocument::MWAW_K_DATABASE )
+ {
+ switch (docType)
+ {
+ case MWAWDocument::MWAW_T_BEAGLEWORKS:
+ rTypeName = "calc_Beagle_Works";
+ break;
+ case MWAWDocument::MWAW_T_CLARISRESOLVE:
+ rTypeName = "calc_Claris_Resolve";
+ break;
+ case MWAWDocument::MWAW_T_CLARISWORKS:
+ rTypeName = "calc_ClarisWorks";
+ break;
+ case MWAWDocument::MWAW_T_GREATWORKS:
+ rTypeName = "calc_Great_Works";
+ break;
+ case MWAWDocument::MWAW_T_MICROSOFTWORKS:
+ rTypeName = "calc_Mac_Works";
+ break;
+ case MWAWDocument::MWAW_T_WINGZ:
+ rTypeName = "calc_Mac_Wingz";
+ break;
+
+ case MWAWDocument::MWAW_T_ACTA:
+ case MWAWDocument::MWAW_T_ADOBEILLUSTRATOR:
+ case MWAWDocument::MWAW_T_DBASE:
+ case MWAWDocument::MWAW_T_DOCMAKER:
+ case MWAWDocument::MWAW_T_EDOC:
+ case MWAWDocument::MWAW_T_FAMILYTREEMAKER:
+ case MWAWDocument::MWAW_T_FILEMAKER:
+ case MWAWDocument::MWAW_T_FOXBASE:
+ case MWAWDocument::MWAW_T_FRAMEMAKER:
+ case MWAWDocument::MWAW_T_FULLIMPACT:
+ case MWAWDocument::MWAW_T_FULLPAINT:
+ case MWAWDocument::MWAW_T_FULLWRITE:
+ case MWAWDocument::MWAW_T_INFOGENIE:
+ case MWAWDocument::MWAW_T_KALEIDAGRAPH:
+ case MWAWDocument::MWAW_T_HANMACWORDJ:
+ case MWAWDocument::MWAW_T_HANMACWORDK:
+ case MWAWDocument::MWAW_T_LIGHTWAYTEXT:
+ case MWAWDocument::MWAW_T_MACDOC:
+ case MWAWDocument::MWAW_T_MACDRAFT:
+ case MWAWDocument::MWAW_T_MACDRAW:
+ case MWAWDocument::MWAW_T_MACDRAWPRO:
+ case MWAWDocument::MWAW_T_MACPAINT:
+ case MWAWDocument::MWAW_T_MACWRITE:
+ case MWAWDocument::MWAW_T_MACWRITEPRO:
+ case MWAWDocument::MWAW_T_MARINERWRITE:
+ case MWAWDocument::MWAW_T_MINDWRITE:
+ case MWAWDocument::MWAW_T_MICROSOFTFILE:
+ case MWAWDocument::MWAW_T_MICROSOFTMULTIPLAN:
+ case MWAWDocument::MWAW_T_MICROSOFTWORD:
+ case MWAWDocument::MWAW_T_MORE:
+ case MWAWDocument::MWAW_T_NISUSWRITER:
+ case MWAWDocument::MWAW_T_OVERVUE:
+ case MWAWDocument::MWAW_T_PAGEMAKER:
+ case MWAWDocument::MWAW_T_PIXELPAINT:
+ case MWAWDocument::MWAW_T_RAGTIME:
+ case MWAWDocument::MWAW_T_READYSETGO:
+ case MWAWDocument::MWAW_T_SUPERPAINT:
+ case MWAWDocument::MWAW_T_SYMPOSIUM:
+ case MWAWDocument::MWAW_T_TEACHTEXT:
+ case MWAWDocument::MWAW_T_TEXEDIT:
+ case MWAWDocument::MWAW_T_TRAPEZE:
+ case MWAWDocument::MWAW_T_WRITENOW:
+ case MWAWDocument::MWAW_T_WRITERPLUS:
+ case MWAWDocument::MWAW_T_XPRESS:
+ case MWAWDocument::MWAW_T_ZWRITE:
+ case MWAWDocument::MWAW_T_4DIMENSION:
+
+ case MWAWDocument::MWAW_T_RESERVED1:
+ case MWAWDocument::MWAW_T_RESERVED2:
+ case MWAWDocument::MWAW_T_RESERVED3:
+ case MWAWDocument::MWAW_T_RESERVED4:
+ case MWAWDocument::MWAW_T_RESERVED5:
+ case MWAWDocument::MWAW_T_RESERVED6:
+ case MWAWDocument::MWAW_T_RESERVED7:
+ case MWAWDocument::MWAW_T_RESERVED8:
+ case MWAWDocument::MWAW_T_RESERVED9:
+ case MWAWDocument::MWAW_T_UNKNOWN:
+ default:
+ break;
+ }
+ }
+ }
+
+ return !rTypeName.isEmpty();
+}
+
+void MWAWCalcImportFilter::doRegisterHandlers( OdsGenerator &rGenerator )
+{
+ rGenerator.registerEmbeddedObjectHandler("image/mwaw-odg", &handleEmbeddedMWAWGraphicObject);
+ rGenerator.registerEmbeddedObjectHandler("image/mwaw-ods", &handleEmbeddedMWAWSpreadsheetObject);
+}
+
+OUString MWAWCalcImportFilter_getImplementationName ()
+throw (RuntimeException)
+{
+ return OUString ( "com.sun.star.comp.Calc.MWAWCalcImportFilter" );
+}
+
+Sequence< OUString > SAL_CALL MWAWCalcImportFilter_getSupportedServiceNames( )
+throw (RuntimeException)
+{
+ Sequence < OUString > aRet(2);
+ OUString *pArray = aRet.getArray();
+ pArray[0] = "com.sun.star.document.ImportFilter";
+ pArray[1] = "com.sun.star.document.ExtendedTypeDetection";
+ return aRet;
+}
+
+Reference< XInterface > SAL_CALL MWAWCalcImportFilter_createInstance( const Reference< XComponentContext > &rContext)
+throw( Exception )
+{
+ return (cppu::OWeakObject *) new MWAWCalcImportFilter( rContext );
+}
+
+// XServiceInfo
+OUString SAL_CALL MWAWCalcImportFilter::getImplementationName( )
+throw (RuntimeException, std::exception)
+{
+ return MWAWCalcImportFilter_getImplementationName();
+}
+sal_Bool SAL_CALL MWAWCalcImportFilter::supportsService( const OUString &rServiceName )
+throw (RuntimeException, std::exception)
+{
+ return cppu::supportsService( this, rServiceName );
+}
+Sequence< OUString > SAL_CALL MWAWCalcImportFilter::getSupportedServiceNames( )
+throw (RuntimeException, std::exception)
+{
+ return MWAWCalcImportFilter_getSupportedServiceNames();
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerperfect/source/calc/MWAWCalcImportFilter.hxx b/writerperfect/source/calc/MWAWCalcImportFilter.hxx
new file mode 100644
index 000000000000..8062f6be1b42
--- /dev/null
+++ b/writerperfect/source/calc/MWAWCalcImportFilter.hxx
@@ -0,0 +1,53 @@
+/* -*- 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/.
+ */
+
+#ifndef _MWAWCALCIMPORTFILTER_HXX
+#define _MWAWCALCIMPORTFILTER_HXX
+
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
+
+#include "ImportFilterBase.hxx"
+
+/* This component will be instantiated for both import or export. Whether it calls
+ * setSourceDocument or setTargetDocument determines which Impl function the filter
+ * member calls */
+class MWAWCalcImportFilter : public writerperfect::calc::ImportFilterBase
+{
+public:
+ MWAWCalcImportFilter( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > &rxContext )
+ : writerperfect::calc::ImportFilterBase( rxContext ) {}
+
+ // 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:
+ virtual bool doDetectFormat( librevenge::RVNGInputStream &rInput, OUString &rTypeName ) SAL_OVERRIDE;
+ virtual bool doImportDocument( librevenge::RVNGInputStream &rInput, librevenge::RVNGSpreadsheetInterface &rGenerator ) SAL_OVERRIDE;
+ virtual void doRegisterHandlers( OdsGenerator &rGenerator ) SAL_OVERRIDE;
+};
+
+OUString MWAWCalcImportFilter_getImplementationName()
+throw ( ::com::sun::star::uno::RuntimeException );
+
+::com::sun::star::uno::Sequence< OUString > SAL_CALL MWAWCalcImportFilter_getSupportedServiceNames( )
+throw ( ::com::sun::star::uno::RuntimeException );
+
+::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >
+SAL_CALL MWAWCalcImportFilter_createInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > &rContext)
+throw ( ::com::sun::star::uno::Exception );
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerperfect/source/calc/wpftcalc.component b/writerperfect/source/calc/wpftcalc.component
index c2def1e6c450..68c5f85cef70 100644
--- a/writerperfect/source/calc/wpftcalc.component
+++ b/writerperfect/source/calc/wpftcalc.component
@@ -13,4 +13,8 @@
<service name="com.sun.star.document.ImportFilter"/>
<service name="com.sun.star.document.ExtendedTypeDetection"/>
</implementation>
+ <implementation name="com.sun.star.comp.Calc.MWAWCalcImportFilter">
+ <service name="com.sun.star.document.ImportFilter"/>
+ <service name="com.sun.star.document.ExtendedTypeDetection"/>
+ </implementation>
</component>
diff --git a/writerperfect/source/calc/wpftcalc_genericfilter.cxx b/writerperfect/source/calc/wpftcalc_genericfilter.cxx
index eecd0b0f04c3..26410102f276 100644
--- a/writerperfect/source/calc/wpftcalc_genericfilter.cxx
+++ b/writerperfect/source/calc/wpftcalc_genericfilter.cxx
@@ -30,6 +30,7 @@
#include "sal/types.h"
#include "MSWorksCalcImportFilter.hxx"
+#include "MWAWCalcImportFilter.hxx"
namespace {
@@ -37,6 +38,9 @@ static cppu::ImplementationEntry const services[] = {
{ &MSWorksCalcImportFilter_createInstance, &MSWorksCalcImportFilter_getImplementationName,
&MSWorksCalcImportFilter_getSupportedServiceNames,
&cppu::createSingleComponentFactory, 0, 0 },
+ { &MWAWCalcImportFilter_createInstance, &MWAWCalcImportFilter_getImplementationName,
+ &MWAWCalcImportFilter_getSupportedServiceNames,
+ &cppu::createSingleComponentFactory, 0, 0 },
{ 0, 0, 0, 0, 0, 0 } };
}