From 2ddabce031c6c408688477544f9b16a28b7b9cb1 Mon Sep 17 00:00:00 2001 From: Fridrich Strba Date: Tue, 27 May 2014 12:35:54 +0200 Subject: Port inkscape to librevenge framework for WPG, CDR and VSD imports (bzr r13398.1.1) --- configure.ac | 24 +++++---------------- src/extension/internal/cdr-input.cpp | 20 ++++++++++-------- src/extension/internal/vsd-input.cpp | 20 ++++++++++-------- src/extension/internal/wpg-input.cpp | 41 ++++++++++++------------------------ src/ui/dialog/symbols.cpp | 10 +++++---- 5 files changed, 46 insertions(+), 69 deletions(-) diff --git a/configure.ac b/configure.ac index bc2633253..205638507 100644 --- a/configure.ac +++ b/configure.ac @@ -526,28 +526,14 @@ AC_ARG_ENABLE(wpg, with_libwpg=no if test "x$enable_wpg" = "xyes"; then - PKG_CHECK_MODULES(LIBWPG01, libwpg-0.1 libwpg-stream-0.1, with_libwpg01=yes, with_libwpg01=no) - if test "x$with_libwpg01" = "xyes"; then - AC_DEFINE(WITH_LIBWPG01,1,[Build in libwpg 0.1.x]) - with_libwpg=yes - AC_SUBST(LIBWPG_LIBS, $LIBWPG01_LIBS) - AC_SUBST(LIBWPG_CFLAGS, $LIBWPG01_CFLAGS) - fi - - PKG_CHECK_MODULES(LIBWPG02, libwpg-0.2 libwpd-0.9 libwpd-stream-0.9, with_libwpg02=yes, with_libwpg02=no) - if test "x$with_libwpg02" = "xyes"; then - AC_DEFINE(WITH_LIBWPG02,1,[Build in libwpg 0.2.x]) - with_libwpg=yes - AC_SUBST(LIBWPG_LIBS, $LIBWPG02_LIBS) - AC_SUBST(LIBWPG_CFLAGS, $LIBWPG02_CFLAGS) - fi + PKG_CHECK_MODULES(LIBWPG, libwpg-0.3 librevenge-0.0 librevenge-stream-0.0, with_libwpg=yes, with_libwpg=no) if test "x$with_libwpg" = "xyes"; then AC_DEFINE(WITH_LIBWPG,1,[Build in libwpg]) fi fi -AM_CONDITIONAL(WITH_LIBWPG01, test "x$with_libwpg01" = "xyes") -AM_CONDITIONAL(WITH_LIBWPG02, test "x$with_libwpg02" = "xyes") +AC_SUBST(LIBWPG_LIBS) +AC_SUBST(LIBWPG_CFLAGS) AM_CONDITIONAL(WITH_LIBWPG, test "x$with_libwpg" = "xyes") dnl ******************************** @@ -561,7 +547,7 @@ AC_ARG_ENABLE(visio, with_libvisio=no if test "x$enable_visio" = "xyes"; then - PKG_CHECK_MODULES(LIBVISIO, libvisio-0.0 >= 0.0.20 libwpd-0.9 libwpd-stream-0.9 libwpg-0.2, with_libvisio=yes, with_libvisio=no) + PKG_CHECK_MODULES(LIBVISIO, libvisio-0.1 librevenge-0.0 librevenge-stream-0.0, with_libvisio=yes, with_libvisio=no) if test "x$with_libvisio" = "xyes"; then AC_DEFINE(WITH_LIBVISIO,1,[Build in libvisio]) @@ -582,7 +568,7 @@ AC_ARG_ENABLE(cdr, with_libcdr=no if test "x$enable_cdr" = "xyes"; then - PKG_CHECK_MODULES(LIBCDR, libcdr-0.0 >= 0.0.3 libwpd-0.9 libwpd-stream-0.9 libwpg-0.2, with_libcdr=yes, with_libcdr=no) + PKG_CHECK_MODULES(LIBCDR, libcdr-0.1 librevenge-0.0 librevenge-stream-0.0, with_libcdr=yes, with_libcdr=no) if test "x$with_libcdr" = "xyes"; then AC_DEFINE(WITH_LIBCDR,1,[Build in libcdr]) diff --git a/src/extension/internal/cdr-input.cpp b/src/extension/internal/cdr-input.cpp index 0111ed626..c4f251361 100644 --- a/src/extension/internal/cdr-input.cpp +++ b/src/extension/internal/cdr-input.cpp @@ -24,7 +24,7 @@ #include #include -#include +#include #include #include @@ -60,7 +60,7 @@ namespace Internal { class CdrImportDialog : public Gtk::Dialog { public: - CdrImportDialog(const std::vector &vec); + CdrImportDialog(const std::vector &vec); virtual ~CdrImportDialog(); bool showDialog(); @@ -86,12 +86,12 @@ private: class Gtk::VBox * vbox2; class Gtk::Widget * _previewArea; - const std::vector &_vec; // Document to be imported + const std::vector &_vec; // Document to be imported unsigned _current_page; // Current selected page int _preview_width, _preview_height; // Size of the preview area }; -CdrImportDialog::CdrImportDialog(const std::vector &vec) +CdrImportDialog::CdrImportDialog(const std::vector &vec) : _vec(vec), _current_page(1) { int num_pages = _vec.size(); @@ -210,14 +210,16 @@ void CdrImportDialog::_setPreviewPage(unsigned page) SPDocument *CdrInput::open(Inkscape::Extension::Input * /*mod*/, const gchar * uri) { - WPXFileStream input(uri); + librevenge::RVNGFileStream input(uri); if (!libcdr::CDRDocument::isSupported(&input)) { return NULL; } - libcdr::CDRStringVector output; - if (!libcdr::CDRDocument::generateSVG(&input, output)) { + librevenge::RVNGStringVector output; + librevenge::RVNGSVGDrawingGenerator generator(output, "svg"); + + if (!libcdr::CDRDocument::parse(&input, &generator)) { return NULL; } @@ -225,9 +227,9 @@ SPDocument *CdrInput::open(Inkscape::Extension::Input * /*mod*/, const gchar * u return NULL; } - std::vector tmpSVGOutput; + std::vector tmpSVGOutput; for (unsigned i=0; i\n\n"); + librevenge::RVNGString tmpString("\n\n"); tmpString.append(output[i]); tmpSVGOutput.push_back(tmpString); } diff --git a/src/extension/internal/vsd-input.cpp b/src/extension/internal/vsd-input.cpp index 6fc79237b..b7e8669b8 100644 --- a/src/extension/internal/vsd-input.cpp +++ b/src/extension/internal/vsd-input.cpp @@ -24,7 +24,7 @@ #include #include -#include +#include #include #include @@ -59,7 +59,7 @@ namespace Internal { class VsdImportDialog : public Gtk::Dialog { public: - VsdImportDialog(const std::vector &vec); + VsdImportDialog(const std::vector &vec); virtual ~VsdImportDialog(); bool showDialog(); @@ -85,12 +85,12 @@ private: class Gtk::VBox * vbox2; class Gtk::Widget * _previewArea; - const std::vector &_vec; // Document to be imported + const std::vector &_vec; // Document to be imported unsigned _current_page; // Current selected page int _preview_width, _preview_height; // Size of the preview area }; -VsdImportDialog::VsdImportDialog(const std::vector &vec) +VsdImportDialog::VsdImportDialog(const std::vector &vec) : _vec(vec), _current_page(1) { int num_pages = _vec.size(); @@ -209,14 +209,16 @@ void VsdImportDialog::_setPreviewPage(unsigned page) SPDocument *VsdInput::open(Inkscape::Extension::Input * /*mod*/, const gchar * uri) { - WPXFileStream input(uri); + librevenge::RVNGFileStream input(uri); if (!libvisio::VisioDocument::isSupported(&input)) { return NULL; } - libvisio::VSDStringVector output; - if (!libvisio::VisioDocument::generateSVG(&input, output)) { + librevenge::RVNGStringVector output; + librevenge::RVNGSVGDrawingGenerator generator(output, "svg"); + + if (!libvisio::VisioDocument::parse(&input, &generator)) { return NULL; } @@ -224,9 +226,9 @@ SPDocument *VsdInput::open(Inkscape::Extension::Input * /*mod*/, const gchar * u return NULL; } - std::vector tmpSVGOutput; + std::vector tmpSVGOutput; for (unsigned i=0; i\n\n"); + librevenge::RVNGString tmpString("\n\n"); tmpString.append(output[i]); tmpSVGOutput.push_back(tmpString); } diff --git a/src/extension/internal/wpg-input.cpp b/src/extension/internal/wpg-input.cpp index 14ff3ec77..c10926361 100644 --- a/src/extension/internal/wpg-input.cpp +++ b/src/extension/internal/wpg-input.cpp @@ -52,17 +52,8 @@ #include "util/units.h" #include -// Take a guess and fallback to 0.1.x if no configure has run -#if !defined(WITH_LIBWPG01) && !defined(WITH_LIBWPG02) -#define WITH_LIBWPG01 1 -#endif - #include "libwpg/libwpg.h" -#if WITH_LIBWPG01 -#include "libwpg/WPGStreamImplementation.h" -#elif WITH_LIBWPG02 -#include "libwpd-stream/libwpd-stream.h" -#endif +#include "librevenge-stream/librevenge-stream.h" using namespace libwpg; @@ -73,17 +64,9 @@ namespace Internal { SPDocument *WpgInput::open(Inkscape::Extension::Input * /*mod*/, const gchar * uri) { -#if WITH_LIBWPG01 - WPXInputStream* input = new libwpg::WPGFileStream(uri); -#elif WITH_LIBWPG02 - WPXInputStream* input = new WPXFileStream(uri); -#endif - if (input->isOLEStream()) { -#if WITH_LIBWPG01 - WPXInputStream* olestream = input->getDocumentOLEStream(); -#elif WITH_LIBWPG02 - WPXInputStream* olestream = input->getDocumentOLEStream("PerfectOffice_MAIN"); -#endif + librevenge::RVNGInputStream* input = new librevenge::RVNGFileStream(uri); + if (input->isStructured()) { + librevenge::RVNGInputStream* olestream = input->getSubStreamByName("PerfectOffice_MAIN"); if (olestream) { delete input; input = olestream; @@ -98,15 +81,17 @@ SPDocument *WpgInput::open(Inkscape::Extension::Input * /*mod*/, const gchar * u return NULL; } -#if WITH_LIBWPG01 - libwpg::WPGString output; -#elif WITH_LIBWPG02 - WPXString output; -#endif - if (!libwpg::WPGraphics::generateSVG(input, output)) { + librevenge::RVNGStringVector vec; + librevenge::RVNGSVGDrawingGenerator generator(vec, ""); + + if (!libwpg::WPGraphics::parse(input, &generator) || vec.empty() || vec[0].empty()) + { delete input; return NULL; - } + } + + librevenge::RVNGString output("\n\n"); + output.append(vec[0]); //printf("I've got a doc: \n%s", painter.document.c_str()); diff --git a/src/ui/dialog/symbols.cpp b/src/ui/dialog/symbols.cpp index 8e0d085a4..0b048ed82 100644 --- a/src/ui/dialog/symbols.cpp +++ b/src/ui/dialog/symbols.cpp @@ -63,7 +63,7 @@ #ifdef WITH_LIBVISIO #include -#include +#include #endif #include "verbs.h" @@ -449,14 +449,16 @@ void SymbolsDialog::iconChanged() { // Read Visio stencil files SPDocument* read_vss( gchar* fullname, gchar* filename ) { - WPXFileStream input(fullname); + librevenge::RVNGFileStream input(fullname); if (!libvisio::VisioDocument::isSupported(&input)) { return NULL; } - libvisio::VSDStringVector output; - if (!libvisio::VisioDocument::generateSVGStencils(&input, output)) { + librevenge::RVNGStringVector output; + librevenge::RVNGSVGDrawingGenerator generator(output, "svg"); + + if (!libvisio::VisioDocument::parseStencils(&input, &generator)) { return NULL; } -- cgit v1.2.3 From 4a6dfa29131adb8c7470ab66a839d144b02542e5 Mon Sep 17 00:00:00 2001 From: su_v Date: Tue, 26 Aug 2014 10:41:57 +0200 Subject: librevenge: update to latest patch from bug #1323592 (support old and new versions of libwpg, libcdr and libvisio ) (bzr r13398.1.7) --- configure.ac | 75 +++++++++++++++++++++++++++++++----- src/extension/internal/cdr-input.cpp | 34 ++++++++++++---- src/extension/internal/vsd-input.cpp | 35 +++++++++++++---- src/extension/internal/wpg-input.cpp | 50 +++++++++++++++++++----- src/ui/dialog/symbols.cpp | 24 ++++++++++-- 5 files changed, 179 insertions(+), 39 deletions(-) diff --git a/configure.ac b/configure.ac index d178d19fe..5d4e0bc13 100644 --- a/configure.ac +++ b/configure.ac @@ -531,14 +531,33 @@ AC_ARG_ENABLE(wpg, with_libwpg=no if test "x$enable_wpg" = "xyes"; then - PKG_CHECK_MODULES(LIBWPG, libwpg-0.3 librevenge-0.0 librevenge-stream-0.0, with_libwpg=yes, with_libwpg=no) + dnl ************************************************************** + dnl Try using librevenge framework first. Fall back to old libs + dnl if unavailable. + dnl TODO: Drop subsequent tests once this is widespread in distros + dnl ************************************************************** + PKG_CHECK_MODULES(LIBWPG03, libwpg-0.3 librevenge-0.0 librevenge-stream-0.0, with_libwpg03=yes, with_libwpg03=no) + if test "x$with_libwpg03" = "xyes"; then + AC_DEFINE(WITH_LIBWPG03,1,[Build using libwpg 0.3.x]) + with_libwpg=yes + AC_SUBST(LIBWPG_LIBS, $LIBWPG03_LIBS) + AC_SUBST(LIBWPG_CFLAGS, $LIBWPG03_CFLAGS) + else + PKG_CHECK_MODULES(LIBWPG02, libwpg-0.2 libwpd-0.9 libwpd-stream-0.9, with_libwpg02=yes, with_libwpg02=no) + if test "x$with_libwpg02" = "xyes"; then + AC_DEFINE(WITH_LIBWPG02,1,[Build using libwpg 0.2.x]) + with_libwpg=yes + AC_SUBST(LIBWPG_LIBS, $LIBWPG02_LIBS) + AC_SUBST(LIBWPG_CFLAGS, $LIBWPG02_CFLAGS) + fi + fi if test "x$with_libwpg" = "xyes"; then AC_DEFINE(WITH_LIBWPG,1,[Build in libwpg]) fi fi -AC_SUBST(LIBWPG_LIBS) -AC_SUBST(LIBWPG_CFLAGS) +AM_CONDITIONAL(WITH_LIBWPG03, test "x$with_libwpg03" = "xyes") +AM_CONDITIONAL(WITH_LIBWPG02, test "x$with_libwpg02" = "xyes") AM_CONDITIONAL(WITH_LIBWPG, test "x$with_libwpg" = "xyes") dnl ******************************** @@ -552,14 +571,33 @@ AC_ARG_ENABLE(visio, with_libvisio=no if test "x$enable_visio" = "xyes"; then - PKG_CHECK_MODULES(LIBVISIO, libvisio-0.1 librevenge-0.0 librevenge-stream-0.0, with_libvisio=yes, with_libvisio=no) + dnl ************************************************************** + dnl Try using librevenge framework first. Fall back to old libs + dnl if unavailable. + dnl TODO: Drop subsequent tests once this is widespread in distros + dnl ************************************************************** + PKG_CHECK_MODULES(LIBVISIO01, libvisio-0.1 librevenge-0.0 librevenge-stream-0.0, with_libvisio01=yes, with_libvisio01=no) + if test "x$with_libvisio01" = "xyes"; then + AC_DEFINE(WITH_LIBVISIO01,1,[Build using libvisio 0.1.x]) + with_libvisio=yes + AC_SUBST(LIBVISIO_LIBS, $LIBVISIO01_LIBS) + AC_SUBST(LIBVISIO_CFLAGS, $LIBVISIO01_CFLAGS) + else + PKG_CHECK_MODULES(LIBVISIO00, libvisio-0.0 >= 0.0.20 libwpd-0.9 libwpd-stream-0.9 libwpg-0.2, with_libvisio00=yes, with_libvisio00=no) + if test "x$with_libvisio00" = "xyes"; then + AC_DEFINE(WITH_LIBVISIO00,1,[Build using libvisio 0.0.x]) + with_libvisio=yes + AC_SUBST(LIBVISIO_LIBS, $LIBVISIO00_LIBS) + AC_SUBST(LIBVISIO_CFLAGS, $LIBVISIO00_CFLAGS) + fi + fi if test "x$with_libvisio" = "xyes"; then AC_DEFINE(WITH_LIBVISIO,1,[Build in libvisio]) fi fi -AC_SUBST(LIBVISIO_LIBS) -AC_SUBST(LIBVISIO_CFLAGS) +AM_CONDITIONAL(WITH_LIBVISIO01, test "x$with_libvisio01" = "xyes") +AM_CONDITIONAL(WITH_LIBVISIO00, test "x$with_libvisio00" = "xyes") AM_CONDITIONAL(WITH_LIBVISIO, test "x$with_libvisio" = "xyes") dnl ******************************** @@ -573,14 +611,33 @@ AC_ARG_ENABLE(cdr, with_libcdr=no if test "x$enable_cdr" = "xyes"; then - PKG_CHECK_MODULES(LIBCDR, libcdr-0.1 librevenge-0.0 librevenge-stream-0.0, with_libcdr=yes, with_libcdr=no) + dnl ************************************************************** + dnl Try using librevenge framework first. Fall back to old libs + dnl if unavailable. + dnl TODO: Drop subsequent tests once this is widespread in distros + dnl ************************************************************** + PKG_CHECK_MODULES(LIBCDR01, libcdr-0.1 librevenge-0.0 librevenge-stream-0.0, with_libcdr01=yes, with_libcdr01=no) + if test "x$with_libcdr01" = "xyes"; then + AC_DEFINE(WITH_LIBCDR01,1,[Build using libcdr 0.1.x]) + with_libcdr=yes + AC_SUBST(LIBCDR_LIBS, $LIBCDR01_LIBS) + AC_SUBST(LIBCDR_CFLAGS, $LIBCDR01_CFLAGS) + else + PKG_CHECK_MODULES(LIBCDR00, libcdr-0.0 >= 0.0.3 libwpd-0.9 libwpd-stream-0.9 libwpg-0.2, with_libcdr00=yes, with_libcdr00=no) + if test "x$with_libcdr00" = "xyes"; then + AC_DEFINE(WITH_LIBCDR00,1,[Build using libcdr 0.0.x]) + with_libcdr=yes + AC_SUBST(LIBCDR_LIBS, $LIBCDR00_LIBS) + AC_SUBST(LIBCDR_CFLAGS, $LIBCDR00_CFLAGS) + fi + fi if test "x$with_libcdr" = "xyes"; then AC_DEFINE(WITH_LIBCDR,1,[Build in libcdr]) fi fi -AC_SUBST(LIBCDR_LIBS) -AC_SUBST(LIBCDR_CFLAGS) +AM_CONDITIONAL(WITH_LIBCDR01, test "x$with_libcdr01" = "xyes") +AM_CONDITIONAL(WITH_LIBCDR00, test "x$with_libcdr00" = "xyes") AM_CONDITIONAL(WITH_LIBCDR, test "x$with_libcdr" = "xyes") dnl ****************************** diff --git a/src/extension/internal/cdr-input.cpp b/src/extension/internal/cdr-input.cpp index c4f251361..748bf4477 100644 --- a/src/extension/internal/cdr-input.cpp +++ b/src/extension/internal/cdr-input.cpp @@ -24,7 +24,21 @@ #include #include -#include + +// TODO: Drop this check when librevenge is widespread. +#if WITH_LIBCDR01 + #include + + using librevenge::RVNGString; + using librevenge::RVNGFileStream; + using librevenge::RVNGStringVector; +#else + #include + + typedef WPXString RVNGString; + typedef WPXFileStream RVNGFileStream; + typedef libcdr::CDRStringVector RVNGStringVector; +#endif #include #include @@ -60,7 +74,7 @@ namespace Internal { class CdrImportDialog : public Gtk::Dialog { public: - CdrImportDialog(const std::vector &vec); + CdrImportDialog(const std::vector &vec); virtual ~CdrImportDialog(); bool showDialog(); @@ -86,12 +100,12 @@ private: class Gtk::VBox * vbox2; class Gtk::Widget * _previewArea; - const std::vector &_vec; // Document to be imported + const std::vector &_vec; // Document to be imported unsigned _current_page; // Current selected page int _preview_width, _preview_height; // Size of the preview area }; -CdrImportDialog::CdrImportDialog(const std::vector &vec) +CdrImportDialog::CdrImportDialog(const std::vector &vec) : _vec(vec), _current_page(1) { int num_pages = _vec.size(); @@ -210,16 +224,20 @@ void CdrImportDialog::_setPreviewPage(unsigned page) SPDocument *CdrInput::open(Inkscape::Extension::Input * /*mod*/, const gchar * uri) { - librevenge::RVNGFileStream input(uri); + RVNGFileStream input(uri); if (!libcdr::CDRDocument::isSupported(&input)) { return NULL; } - librevenge::RVNGStringVector output; + RVNGStringVector output; +#if WITH_LIBCDR01 librevenge::RVNGSVGDrawingGenerator generator(output, "svg"); if (!libcdr::CDRDocument::parse(&input, &generator)) { +#else + if (!libcdr::CDRDocument::generateSVG(&input, output)) { +#endif return NULL; } @@ -227,9 +245,9 @@ SPDocument *CdrInput::open(Inkscape::Extension::Input * /*mod*/, const gchar * u return NULL; } - std::vector tmpSVGOutput; + std::vector tmpSVGOutput; for (unsigned i=0; i\n\n"); + RVNGString tmpString("\n\n"); tmpString.append(output[i]); tmpSVGOutput.push_back(tmpString); } diff --git a/src/extension/internal/vsd-input.cpp b/src/extension/internal/vsd-input.cpp index b7e8669b8..674997d54 100644 --- a/src/extension/internal/vsd-input.cpp +++ b/src/extension/internal/vsd-input.cpp @@ -24,7 +24,22 @@ #include #include -#include + +// TODO: Drop this check when librevenge is widespread. +#if WITH_LIBVISIO01 + #include + + using librevenge::RVNGString; + using librevenge::RVNGFileStream; + using librevenge::RVNGStringVector; +#else + #include + + typedef WPXString RVNGString; + typedef WPXFileStream RVNGFileStream; + typedef libvisio::VSDStringVector RVNGStringVector; +#endif + #include #include @@ -59,7 +74,7 @@ namespace Internal { class VsdImportDialog : public Gtk::Dialog { public: - VsdImportDialog(const std::vector &vec); + VsdImportDialog(const std::vector &vec); virtual ~VsdImportDialog(); bool showDialog(); @@ -85,12 +100,12 @@ private: class Gtk::VBox * vbox2; class Gtk::Widget * _previewArea; - const std::vector &_vec; // Document to be imported + const std::vector &_vec; // Document to be imported unsigned _current_page; // Current selected page int _preview_width, _preview_height; // Size of the preview area }; -VsdImportDialog::VsdImportDialog(const std::vector &vec) +VsdImportDialog::VsdImportDialog(const std::vector &vec) : _vec(vec), _current_page(1) { int num_pages = _vec.size(); @@ -209,16 +224,20 @@ void VsdImportDialog::_setPreviewPage(unsigned page) SPDocument *VsdInput::open(Inkscape::Extension::Input * /*mod*/, const gchar * uri) { - librevenge::RVNGFileStream input(uri); + RVNGFileStream input(uri); if (!libvisio::VisioDocument::isSupported(&input)) { return NULL; } - librevenge::RVNGStringVector output; + RVNGStringVector output; +#if WITH_LIBVISIO01 librevenge::RVNGSVGDrawingGenerator generator(output, "svg"); if (!libvisio::VisioDocument::parse(&input, &generator)) { +#else + if (!libvisio::VisioDocument::generateSVG(&input, output)) { +#endif return NULL; } @@ -226,9 +245,9 @@ SPDocument *VsdInput::open(Inkscape::Extension::Input * /*mod*/, const gchar * u return NULL; } - std::vector tmpSVGOutput; + std::vector tmpSVGOutput; for (unsigned i=0; i\n\n"); + RVNGString tmpString("\n\n"); tmpString.append(output[i]); tmpSVGOutput.push_back(tmpString); } diff --git a/src/extension/internal/wpg-input.cpp b/src/extension/internal/wpg-input.cpp index c10926361..12d86a99a 100644 --- a/src/extension/internal/wpg-input.cpp +++ b/src/extension/internal/wpg-input.cpp @@ -52,8 +52,25 @@ #include "util/units.h" #include +// Take a guess and fallback to 0.2.x if no configure has run +#if !defined(WITH_LIBWPG03) && !defined(WITH_LIBWPG02) +#define WITH_LIBWPG02 1 +#endif + #include "libwpg/libwpg.h" -#include "librevenge-stream/librevenge-stream.h" +#if WITH_LIBWPG03 + #include + + using librevenge::RVNGString; + using librevenge::RVNGFileStream; + using librevenge::RVNGInputStream; +#else + #include "libwpd-stream/libwpd-stream.h" + + typedef WPXString RVNGString; + typedef WPXFileStream RVNGFileStream; + typedef WPXInputStream RVNGInputStream; +#endif using namespace libwpg; @@ -64,9 +81,15 @@ namespace Internal { SPDocument *WpgInput::open(Inkscape::Extension::Input * /*mod*/, const gchar * uri) { - librevenge::RVNGInputStream* input = new librevenge::RVNGFileStream(uri); + RVNGInputStream* input = new RVNGFileStream(uri); +#if WITH_LIBWPG03 if (input->isStructured()) { - librevenge::RVNGInputStream* olestream = input->getSubStreamByName("PerfectOffice_MAIN"); + RVNGInputStream* olestream = input->getSubStreamByName("PerfectOffice_MAIN"); +#else + if (input->isOLEStream()) { + RVNGInputStream* olestream = input->getDocumentOLEStream("PerfectOffice_MAIN"); +#endif + if (olestream) { delete input; input = olestream; @@ -81,17 +104,24 @@ SPDocument *WpgInput::open(Inkscape::Extension::Input * /*mod*/, const gchar * u return NULL; } - librevenge::RVNGStringVector vec; - librevenge::RVNGSVGDrawingGenerator generator(vec, ""); +#if WITH_LIBWPG03 + librevenge::RVNGStringVector vec; + librevenge::RVNGSVGDrawingGenerator generator(vec, ""); - if (!libwpg::WPGraphics::parse(input, &generator) || vec.empty() || vec[0].empty()) - { + if (!libwpg::WPGraphics::parse(input, &generator) || vec.empty() || vec[0].empty()) { delete input; return NULL; - } + } - librevenge::RVNGString output("\n\n"); - output.append(vec[0]); + RVNGString output("\n\n"); + output.append(vec[0]); +#else + RVNGString output; + if (!libwpg::WPGraphics::generateSVG(input, output)) { + delete input; + return NULL; + } +#endif //printf("I've got a doc: \n%s", painter.document.c_str()); diff --git a/src/ui/dialog/symbols.cpp b/src/ui/dialog/symbols.cpp index 27e40f552..a9cf8d068 100644 --- a/src/ui/dialog/symbols.cpp +++ b/src/ui/dialog/symbols.cpp @@ -62,8 +62,20 @@ #include "widgets/icon.h" #ifdef WITH_LIBVISIO -#include -#include + #include + + // TODO: Drop this check when librevenge is widespread. + #if WITH_LIBVISIO01 + #include + + using librevenge::RVNGFileStream; + using librevenge::RVNGStringVector; + #else + #include + + typedef WPXFileStream RVNGFileStream; + typedef libvisio::VSDStringVector RVNGStringVector; + #endif #endif #include "verbs.h" @@ -495,16 +507,20 @@ void SymbolsDialog::iconChanged() { // Read Visio stencil files SPDocument* read_vss( gchar* fullname, gchar* filename ) { - librevenge::RVNGFileStream input(fullname); + RVNGFileStream input(fullname); if (!libvisio::VisioDocument::isSupported(&input)) { return NULL; } - librevenge::RVNGStringVector output; + RVNGStringVector output; +#if WITH_LIBVISIO01 librevenge::RVNGSVGDrawingGenerator generator(output, "svg"); if (!libvisio::VisioDocument::parseStencils(&input, &generator)) { +#else + if (!libvisio::VisioDocument::generateSVGStencils(&input, output)) { +#endif return NULL; } -- cgit v1.2.3