Your message dated Sat, 9 Aug 2014 09:30:51 +0200
with message-id <20140809073051.gg23...@rene-engelhard.de>
and subject line [only...@debian.org: Accepted abiword 3.0.0-6 (source all 
amd64) into unstable]
has caused the Debian Bug report #753428,
regarding src:abiword: needs to adapt for libwpg 0.3/libwps 0.3/libwpd 0.10 
(and librevenge)
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact ow...@bugs.debian.org
immediately.)


-- 
753428: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=753428
Debian Bug Tracking System
Contact ow...@bugs.debian.org with problems
--- Begin Message ---
Package: src:abiword
Version: 3.0.0-4
Severity: important
Tags: patch

Hi,

New upstreams of libwpd, libwpg and libwps are there and all of them are now
using librevenge as base, so they changed API and ABI version and it needs some
bigger adaptions to the code.

Fortunately the librevenge authors provided patches (or did it themselves, as
for LO) for all known affected applications - this includes abiword.
(Though I got this specific specific one from Fedora git[1] instead of the
"general" one from librevenge upstreams[2])

I attach a full debdiff for reference.

Note that
 a) abiword checked for libwpd-0.9 before but didn't specify it as
    Build-Depends, I added that
 b) abiword configure.ac doesn't explicitely check for librevenge, but it's
    used directly, so I added that to Build-Depends:, too.
 c) I've no idea (did look but didn't see it, maybe too blind) how
    plugin-configure.m4 is composed. At least it didn't get the values from
    the patched m4s directly so I added the changes there manually, too

The libraries are all also in experimental to test.

Note that this bug _might_ become serious _before_ the jessie release,
the transition starts. (LO 4.3 also needs all those new libs and doesn't
support the old ones anymore, and I still hope for it for jessie.)

The transition is tracked in #753426.

Regards,

Rene

[1]
http://pkgs.fedoraproject.org/cgit/abiword.git/commit/?id=b80ffb45700c081c1e883287147397f0b28f5e28
[2]
#libreoffice-dev.05-27.log:22:16 <@dtardon> _rene_, patches for calligra, 
inkscape and abiword are available at 
http://dtardon.fedorapeople.org/librevenge/0001-switch-to-librevenge-based-import-libs.patch,
 http://people.freedesktop.org/~fridrich/abiword-librevenge.diff and 
http://people.freedesktop.org/~fridrich/inkscape-librevenge.diff

diff -Nru abiword-3.0.0/debian/changelog abiword-3.0.0/debian/changelog
--- abiword-3.0.0/debian/changelog      2014-02-05 19:04:16.000000000 +0100
+++ abiword-3.0.0/debian/changelog      2014-05-31 16:45:31.000000000 +0200
@@ -1,3 +1,13 @@
+abiword (3.0.0-4.1) UNRELEASED; urgency=medium
+
+  * Non-maintainer upload.
+  * add abiword-3.0.0-librevenge.patch (from Fedora 20) to fix build with new
+    librevenge/libwp{,g} 0.3 and adapt Build-Depends:
+  * Add exta dh_autoreconf calls for plugins/wpg and plugins/wordperfect dirs 
so
+    they get generated (and dh_autoreconf_clean)
+
+ -- Rene Engelhard <r...@debian.org>  Sat, 31 May 2014 16:45:19 +0200
+
 abiword (3.0.0-4) unstable; urgency=medium
 
   * New patch to fix FTBFS with libboost1.54 (Closes: #737551).
diff -Nru abiword-3.0.0/debian/control abiword-3.0.0/debian/control
--- abiword-3.0.0/debian/control        2013-11-10 01:30:52.000000000 +0100
+++ abiword-3.0.0/debian/control        2014-05-31 13:28:15.000000000 +0200
@@ -27,13 +27,15 @@
  ,libpng-dev
  ,librdf0-dev
  ,libreadline-dev
+ ,librevenge-dev
  ,librsvg2-dev
  ,libsoup2.4-dev
  ,libtelepathy-glib-dev
  ,libtidy-dev
  ,libwmf-dev
- ,libwpg-dev
- ,libwps-dev
+ ,libwpd-dev (>= 0.10)
+ ,libwpg-dev (>= 0.3)
+ ,libwps-dev (>= 0.3)
  ,libwv-dev
  ,libxslt-dev | libxslt1-dev
 # subversion is used by get-orig-source
diff -Nru abiword-3.0.0/debian/patches/abiword-3.0.0-librevenge.patch 
abiword-3.0.0/debian/patches/abiword-3.0.0-librevenge.patch
--- abiword-3.0.0/debian/patches/abiword-3.0.0-librevenge.patch 1970-01-01 
01:00:00.000000000 +0100
+++ abiword-3.0.0/debian/patches/abiword-3.0.0-librevenge.patch 2014-05-31 
16:44:54.000000000 +0200
@@ -0,0 +1,1216 @@
+Index: plugins/wpg/xp/ie_impGraphic_WPG.cpp
+===================================================================
+--- a/plugins/wpg/xp/ie_impGraphic_WPG.cpp     (revision 34460)
++++ b/plugins/wpg/xp/ie_impGraphic_WPG.cpp     (working copy)
+@@ -31,7 +31,7 @@
+ #include <gsf/gsf-input-memory.h>
+ #include <gsf/gsf-input-stdio.h>
+ #include <gsf/gsf-infile-msole.h>
+-#include <libwpd-stream/libwpd-stream.h>
++#include <librevenge-stream/librevenge-stream.h>
+ #include "xap_Module.h"
+ 
+ using libwpg::WPGraphics;
+@@ -38,30 +38,35 @@
+ 
+ ABI_PLUGIN_DECLARE("WPG")
+ 
+-class AbiWordPerfectGraphicsInputStream : public WPXInputStream
++class AbiWordPerfectGraphicsInputStream : public librevenge::RVNGInputStream
+ {
+ public:
+       AbiWordPerfectGraphicsInputStream(GsfInput *input);
+       ~AbiWordPerfectGraphicsInputStream();
+ 
+-      virtual bool isOLEStream();
+-      virtual WPXInputStream * getDocumentOLEStream();
+-      virtual WPXInputStream * getDocumentOLEStream(const char * name);
++      virtual bool isStructured();
++      virtual unsigned subStreamCount();
++      virtual const char* subStreamName(unsigned);
++      bool existsSubStream(const char*);
++      virtual librevenge::RVNGInputStream* getSubStreamByName(const char*);
++      virtual librevenge::RVNGInputStream* getSubStreamById(unsigned);
+       virtual const unsigned char *read(unsigned long numBytes, unsigned long 
&numBytesRead);
+-      virtual int seek(long offset, WPX_SEEK_TYPE seekType);
++      virtual int seek(long offset, librevenge::RVNG_SEEK_TYPE seekType);
+       virtual long tell();
+-      virtual bool atEOS();
++      virtual bool isEnd();
+ 
+ private:
+ 
+       GsfInput *m_input;
+       GsfInfile *m_ole;
++      std::map<unsigned, std::string> m_substreams;
+ };
+ 
+ AbiWordPerfectGraphicsInputStream::AbiWordPerfectGraphicsInputStream(GsfInput 
*input) :
+-      WPXInputStream(),
++      librevenge::RVNGInputStream(),
+       m_input(input),
+-      m_ole(NULL)
++      m_ole(NULL),
++      m_substreams()
+ {
+       g_object_ref(G_OBJECT(input));
+ }
+@@ -86,50 +91,120 @@
+       return buf;
+ }
+ 
+-int AbiWordPerfectGraphicsInputStream::seek(long offset, WPX_SEEK_TYPE 
seekType) 
++int AbiWordPerfectGraphicsInputStream::seek(long offset, 
librevenge::RVNG_SEEK_TYPE seekType) 
+ {
+       GSeekType gsfSeekType = G_SEEK_SET;
+       switch(seekType)
+       {
+-      case WPX_SEEK_CUR:
++      case librevenge::RVNG_SEEK_CUR:
+               gsfSeekType = G_SEEK_CUR;
+               break;
+-      case WPX_SEEK_SET:
++      case librevenge::RVNG_SEEK_SET:
+               gsfSeekType = G_SEEK_SET;
+               break;
++      case librevenge::RVNG_SEEK_END:
++              gsfSeekType = G_SEEK_END;
++              break;
+       }
+ 
+       return gsf_input_seek(m_input, offset, gsfSeekType);
+ }
+ 
+-bool AbiWordPerfectGraphicsInputStream::isOLEStream()
++bool AbiWordPerfectGraphicsInputStream::isStructured()
+ {
+       if (!m_ole)
+               m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); 
+ 
+-      if (m_ole != NULL)
++      if (!m_ole)
++              m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); 
++      
++      if (m_ole)
+               return true;
+ 
+       return false;
+ }
+ 
+-WPXInputStream * AbiWordPerfectGraphicsInputStream::getDocumentOLEStream()
++unsigned AbiWordPerfectGraphicsInputStream::subStreamCount()
+ {
+-      return getDocumentOLEStream("PerfectOffice_MAIN");
++      if (!m_ole)
++              m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); 
++      
++      if (!m_ole)
++              m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); 
++      
++      if (m_ole)
++              {
++                      int numChildren = gsf_infile_num_children(m_ole);
++                      if (numChildren > 0)
++                              return numChildren;
++                      return 0;
++              }
++      
++      return 0;
+ }
+ 
+-WPXInputStream * 
AbiWordPerfectGraphicsInputStream::getDocumentOLEStream(const char * name)
++const char * AbiWordPerfectGraphicsInputStream::subStreamName(unsigned id)
+ {
+-      WPXInputStream *documentStream = NULL;
++      if (!m_ole)
++              m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); 
+       
+       if (!m_ole)
++              m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); 
++      
++      if (m_ole)
++              {
++                      if ((int)id >= gsf_infile_num_children(m_ole))
++                      {
++                              return 0;
++                      }
++                      std::map<unsigned, std::string>::iterator i = 
m_substreams.lower_bound(id);
++                      if (i == m_substreams.end() || 
m_substreams.key_comp()(id, i->first))
++                              {
++                                      std::string name = 
gsf_infile_name_by_index(m_ole, (int)id);
++                                      i = m_substreams.insert(i, 
std::map<unsigned, std::string>::value_type(id, name));
++                              }
++                      return i->second.c_str();
++              }
++      
++      return 0;
++}
++
++bool AbiWordPerfectGraphicsInputStream::existsSubStream(const char * name)
++{
++      if (!m_ole)
+               m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); 
+       
++      if (!m_ole)
++              m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); 
++      
+       if (m_ole)
+               {
+                       GsfInput *document = gsf_infile_child_by_name(m_ole, 
name);
+                       if (document) 
+                               {
++                                      g_object_unref(G_OBJECT (document));
++                                      return true;
++                              }
++              }
++      
++      return false;
++}
++
++librevenge::RVNGInputStream * 
AbiWordPerfectGraphicsInputStream::getSubStreamByName(const char * name)
++{
++      librevenge::RVNGInputStream *documentStream = NULL;
++      
++      if (!m_ole)
++              m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); 
++      
++      if (!m_ole)
++              m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); 
++      
++      if (m_ole)
++              {
++                      GsfInput *document = gsf_infile_child_by_name(m_ole, 
name);
++                      if (document) 
++                              {
+                                       documentStream = new 
AbiWordPerfectGraphicsInputStream(document);
+                                       g_object_unref(G_OBJECT (document)); // 
the only reference should be encapsulated within the new stream
+                               }
+@@ -138,12 +213,35 @@
+       return documentStream;
+ }
+ 
++librevenge::RVNGInputStream * 
AbiWordPerfectGraphicsInputStream::getSubStreamById(unsigned id)
++{
++      librevenge::RVNGInputStream *documentStream = NULL;
++      
++      if (!m_ole)
++              m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); 
++      
++      if (!m_ole)
++              m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); 
++      
++      if (m_ole)
++              {
++                      GsfInput *document = gsf_infile_child_by_index(m_ole, 
(int)id);
++                      if (document) 
++                              {
++                                      documentStream = new 
AbiWordPerfectGraphicsInputStream(document);
++                                      g_object_unref(G_OBJECT (document)); // 
the only reference should be encapsulated within the new stream
++                              }
++              }
++      
++      return documentStream;
++}
++
+ long AbiWordPerfectGraphicsInputStream::tell()
+ {
+       return gsf_input_tell(m_input);
+ }
+ 
+-bool AbiWordPerfectGraphicsInputStream::atEOS()
++bool AbiWordPerfectGraphicsInputStream::isEnd()
+ {
+       return gsf_input_eof(m_input);
+ }
+@@ -244,14 +342,24 @@
+ UT_Error IE_Imp_WordPerfectGraphics::importGraphic(GsfInput *input, 
FG_Graphic **ppfg)
+ {
+       AbiWordPerfectGraphicsInputStream gsfInput(input);
+-      WPXString svgOutput;
+-      if (WPGraphics::generateSVG(&gsfInput, svgOutput))
++      librevenge::RVNGString svgOutput;
++      librevenge::RVNGStringVector vec;
++      librevenge::RVNGSVGDrawingGenerator generator(vec, "");
++
++      if (!libwpg::WPGraphics::parse(&gsfInput, &generator) || vec.empty() || 
vec[0].empty())
+       {
+-              GsfInput * svgInput = gsf_input_memory_new((const 
guint8*)svgOutput.cstr(), svgOutput.len(), false);
+-              UT_Error result = IE_ImpGraphic::loadGraphic(svgInput, 
IE_ImpGraphic::fileTypeForSuffix(".svg"), ppfg);
+-              g_object_unref(svgInput);
+-              return result;
++              return UT_ERROR;
+       }
+-      return UT_ERROR;
++
++      svgOutput.append("<?xml version=\"1.0\" encoding=\"UTF-8\" 
standalone=\"no\"?>\n");
++      svgOutput.append("<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"");
++      svgOutput.append(" 
\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\";>\n");
++      svgOutput.append(vec[0]);
++      svgOutput.append("\n");
++
++      GsfInput * svgInput = gsf_input_memory_new((const 
guint8*)svgOutput.cstr(), svgOutput.len(), false);
++      UT_Error result = IE_ImpGraphic::loadGraphic(svgInput, 
IE_ImpGraphic::fileTypeForSuffix(".svg"), ppfg);
++      g_object_unref(svgInput);
++      return result;
+ }
+ 
+Index: plugins/wpg/plugin.m4
+===================================================================
+--- a/plugins/wpg/plugin.m4    (revision 34460)
++++ b/plugins/wpg/plugin.m4    (working copy)
+@@ -1,5 +1,5 @@
+ 
+-wpg_pkgs="$gsf_req libwpg-0.2 >= 0.2.0 libwpd-0.9 >= 0.9.0 libwpd-stream-0.9 
>= 0.9.0"
++wpg_pkgs="libwpg-0.3 $gsf_req"
+ wpg_deps="no"
+ 
+ if test "$enable_wpg" != ""; then
+Index: plugins/wordperfect/xp/ie_imp_WordPerfect.h
+===================================================================
+--- a/plugins/wordperfect/xp/ie_imp_WordPerfect.h      (revision 34460)
++++ b/plugins/wordperfect/xp/ie_imp_WordPerfect.h      (working copy)
+@@ -30,7 +30,7 @@
+ #define IE_IMP_WP_H
+ 
+ #include <stdio.h>
+-#include <libwpd/libwpd.h>
++#include <librevenge/librevenge.h>
+ #include "ie_imp.h"
+ #include "ut_string.h"
+ #include "ut_string_class.h"
+@@ -92,7 +92,7 @@
+                                       IE_Imp ** ppie);
+ };
+ 
+-class IE_Imp_WordPerfect : public IE_Imp, public WPXDocumentInterface
++class IE_Imp_WordPerfect : public IE_Imp, public librevenge::RVNGTextInterface
+ {
+ public:
+     IE_Imp_WordPerfect(PD_Document * pDocument);
+@@ -101,69 +101,83 @@
+     virtual void pasteFromBuffer(PD_DocumentRange * pDocRange,
+                                UT_uint8 * pData, UT_uint32 lenData, const 
char * szEncoding = 0);
+ 
+-    virtual void setDocumentMetaData(const WPXPropertyList &propList);
++      virtual void setDocumentMetaData(const librevenge::RVNGPropertyList 
&propList);
+ 
+-    virtual void startDocument();
+-    virtual void endDocument();
++      virtual void startDocument(const librevenge::RVNGPropertyList 
&propList);
++      virtual void endDocument();
+ 
+-    virtual void openPageSpan(const WPXPropertyList &propList);
+-    virtual void closePageSpan() {}
+-    virtual void openHeader(const WPXPropertyList &propList);
+-    virtual void closeHeader();
+-    virtual void openFooter(const WPXPropertyList &propList);
+-    virtual void closeFooter();
++      virtual void defineEmbeddedFont(const librevenge::RVNGPropertyList & /* 
propList */) {}
+ 
+-    virtual void openParagraph(const WPXPropertyList &propList, const 
WPXPropertyListVector &tabStops);
+-    virtual void closeParagraph() {}
++      virtual void definePageStyle(const librevenge::RVNGPropertyList &) {}
++      virtual void openPageSpan(const librevenge::RVNGPropertyList &propList);
++      virtual void closePageSpan() {}
++      virtual void openHeader(const librevenge::RVNGPropertyList &propList);
++      virtual void closeHeader();
++      virtual void openFooter(const librevenge::RVNGPropertyList &propList);
++      virtual void closeFooter();
+ 
+-    virtual void openSpan(const WPXPropertyList &propList);
+-    virtual void closeSpan() {}
++      virtual void defineSectionStyle(const librevenge::RVNGPropertyList &) {}
++      virtual void openSection(const librevenge::RVNGPropertyList &propList);
++      virtual void closeSection() {}
+ 
+-    virtual void openSection(const WPXPropertyList &propList, const 
WPXPropertyListVector &columns);
+-    virtual void closeSection() {}
++      virtual void defineParagraphStyle(const librevenge::RVNGPropertyList &) 
{}
++      virtual void openParagraph(const librevenge::RVNGPropertyList 
&propList);
++      virtual void closeParagraph() {}
+ 
+-    virtual void insertTab();
+-    virtual void insertText(const WPXString &text);
+-    virtual void insertLineBreak();
++      virtual void defineCharacterStyle(const librevenge::RVNGPropertyList &) 
{}
++      virtual void openSpan(const librevenge::RVNGPropertyList &propList);
++      virtual void closeSpan() {}
+ 
+-    virtual void defineOrderedListLevel(const WPXPropertyList &propList);
+-    virtual void defineUnorderedListLevel(const WPXPropertyList &propList);
+-    virtual void openOrderedListLevel(const WPXPropertyList &propList);
+-    virtual void openUnorderedListLevel(const WPXPropertyList &propList);
+-    virtual void closeOrderedListLevel();
+-    virtual void closeUnorderedListLevel();
+-    virtual void openListElement(const WPXPropertyList &propList, const 
WPXPropertyListVector &tabStops);
+-    virtual void closeListElement() {}
++      virtual void openLink(const librevenge::RVNGPropertyList & /* propList 
*/) {}
++      virtual void closeLink() {}
+ 
+-    virtual void openFootnote(const WPXPropertyList &propList);
+-    virtual void closeFootnote();
+-    virtual void openEndnote(const WPXPropertyList &propList);
+-    virtual void closeEndnote();
++      virtual void insertTab();
++      virtual void insertText(const librevenge::RVNGString &text);
++      virtual void insertSpace();
++      virtual void insertLineBreak();
++      virtual void insertField(const librevenge::RVNGPropertyList & /* 
propList */) {}
+ 
+-    virtual void openTable(const WPXPropertyList &propList, const 
WPXPropertyListVector &columns);
+-    virtual void openTableRow(const WPXPropertyList &propList);
+-    virtual void closeTableRow() {}
+-    virtual void openTableCell(const WPXPropertyList &propList);
+-    virtual void closeTableCell() {}
+-    virtual void insertCoveredTableCell(const WPXPropertyList & /*propList*/) 
{}
+-    virtual void closeTable();
++      virtual void openOrderedListLevel(const librevenge::RVNGPropertyList 
&propList);
++      virtual void openUnorderedListLevel(const librevenge::RVNGPropertyList 
&propList);
++      virtual void closeOrderedListLevel();
++      virtual void closeUnorderedListLevel();
++      virtual void openListElement(const librevenge::RVNGPropertyList 
&propList);
++      virtual void closeListElement() {}
+ 
+-    virtual void definePageStyle(const WPXPropertyList&) {}
+-    virtual void defineParagraphStyle(const WPXPropertyList&, const 
WPXPropertyListVector&) {}
+-    virtual void defineCharacterStyle(const WPXPropertyList&) {}
+-    virtual void defineSectionStyle(const WPXPropertyList&, const 
WPXPropertyListVector&) {}
+-    virtual void insertSpace() {}
+-    virtual void insertField(const WPXString&, const WPXPropertyList&) {}
+-    virtual void openComment(const WPXPropertyList&) {}
+-    virtual void closeComment() {}
+-    virtual void openTextBox(const WPXPropertyList&) {}
+-    virtual void closeTextBox() {}
+-    virtual void openFrame(const WPXPropertyList&) {}
+-    virtual void closeFrame() {}
+-    virtual void insertBinaryObject(const WPXPropertyList&, const 
WPXBinaryData&) {}
+-    virtual void insertEquation(const WPXPropertyList&, const WPXString&) {}
++      virtual void openFootnote(const librevenge::RVNGPropertyList &propList);
++      virtual void closeFootnote();
++      virtual void openEndnote(const librevenge::RVNGPropertyList &propList);
++      virtual void closeEndnote();
++      virtual void openComment(const librevenge::RVNGPropertyList & /* 
propList */) {}
++      virtual void closeComment() {}
++      virtual void openTextBox(const librevenge::RVNGPropertyList & /* 
propList */) {}
++      virtual void closeTextBox() {}
+ 
++      virtual void openTable(const librevenge::RVNGPropertyList &propList);
++      virtual void openTableRow(const librevenge::RVNGPropertyList &propList);
++      virtual void closeTableRow() {}
++      virtual void openTableCell(const librevenge::RVNGPropertyList 
&propList);
++      virtual void closeTableCell() {}
++      virtual void insertCoveredTableCell(const librevenge::RVNGPropertyList 
& /* propList */) {}
++      virtual void closeTable();
+ 
++      virtual void openFrame(const librevenge::RVNGPropertyList & /* propList 
*/) {}
++      virtual void closeFrame() {}
++
++      virtual void openGroup(const librevenge::RVNGPropertyList & /* propList 
*/) {}
++      virtual void closeGroup() {}
++
++      virtual void defineGraphicStyle(const librevenge::RVNGPropertyList & /* 
propList */) {}
++      virtual void drawRectangle(const librevenge::RVNGPropertyList & /* 
propList */) {}
++      virtual void drawEllipse(const librevenge::RVNGPropertyList & /* 
propList */) {}
++      virtual void drawPolygon(const librevenge::RVNGPropertyList & /* 
propList */) {}
++      virtual void drawPolyline(const librevenge::RVNGPropertyList & /* 
propList */) {}
++      virtual void drawPath(const librevenge::RVNGPropertyList & /* propList 
*/) {}
++      virtual void drawConnector(const librevenge::RVNGPropertyList & /* 
propList */) {}
++
++      virtual void insertBinaryObject(const librevenge::RVNGPropertyList & /* 
propList */) {}
++      virtual void insertEquation(const librevenge::RVNGPropertyList & /* 
propList */) {}
++
+ protected:
+       virtual UT_Error _loadFile(GsfInput * input);
+     UT_Error                                                  
_appendSection(int numColumns, const float, const float);
+Index: plugins/wordperfect/xp/ie_impexp_WordPerfect.cpp
+===================================================================
+--- a/plugins/wordperfect/xp/ie_impexp_WordPerfect.cpp (revision 34460)
++++ b/plugins/wordperfect/xp/ie_impexp_WordPerfect.cpp (working copy)
+@@ -35,7 +35,6 @@
+ ABI_PLUGIN_DECLARE("WordPerfect")
+ 
+ static IE_Imp_WordPerfect_Sniffer * m_ImpSniffer = 0;
+-static IE_Exp_WordPerfect_Sniffer * m_ExpSniffer = 0;
+ 
+ #ifdef HAVE_LIBWPS
+ static IE_Imp_MSWorks_Sniffer * m_MSWorks_ImpSniffer = 0;
+@@ -49,13 +48,7 @@
+               m_ImpSniffer = new IE_Imp_WordPerfect_Sniffer ();
+       }
+ 
+-      if (!m_ExpSniffer)
+-      {
+-              m_ExpSniffer = new IE_Exp_WordPerfect_Sniffer ();
+-      }
+-
+       UT_ASSERT (m_ImpSniffer);
+-      UT_ASSERT (m_ExpSniffer);
+ 
+ #ifdef HAVE_LIBWPS
+       if (!m_MSWorks_ImpSniffer)
+@@ -79,7 +72,7 @@
+       mi->usage   = "No Usage";
+ 
+       IE_Imp::registerImporter (m_ImpSniffer);
+-      //IE_Exp::registerExporter (m_ExpSniffer);
++
+       return 1;
+ }
+ 
+@@ -93,18 +86,11 @@
+       mi->usage   = 0;
+ 
+       UT_ASSERT (m_ImpSniffer);
+-      UT_ASSERT (m_ExpSniffer);
+ 
+       IE_Imp::unregisterImporter (m_ImpSniffer);
+       delete m_ImpSniffer;
+       m_ImpSniffer = 0;
+       
+-      /*
+-      IE_Exp::unregisterExporter (m_ExpSniffer);
+-      delete m_ExpSniffer;
+-      m_ExpSniffer = 0;
+-      */
+-
+ #ifdef HAVE_LIBWPS
+       IE_Imp::unregisterImporter (m_MSWorks_ImpSniffer);
+       delete m_MSWorks_ImpSniffer;
+Index: plugins/wordperfect/xp/ie_imp_WordPerfect.cpp
+===================================================================
+--- a/plugins/wordperfect/xp/ie_imp_WordPerfect.cpp    (revision 34460)
++++ b/plugins/wordperfect/xp/ie_imp_WordPerfect.cpp    (working copy)
+@@ -31,6 +31,8 @@
+ #include <stdlib.h>
+ #include <string.h>
+ #include <math.h>
++#include <map>
++#include <string>
+ #include <gsf/gsf-utils.h>
+ #include <gsf/gsf-input-memory.h>
+ #include <gsf/gsf-input-stdio.h>
+@@ -60,42 +62,47 @@
+ 
+ // Stream class
+ 
+-#include <libwpd-stream/libwpd-stream.h>
++#include <librevenge-stream/librevenge-stream.h>
++#include <libwpd/libwpd.h>
+ 
+ #include <gsf/gsf-input.h>
+ #include <gsf/gsf-infile.h>
+ #include <gsf/gsf-infile-msole.h>
++#include <gsf/gsf-infile-zip.h>
+ 
+ #ifdef HAVE_LIBWPS
+ #include <libwps/libwps.h>
+ #endif
+ 
+-class AbiWordperfectInputStream : public WPXInputStream
++class AbiWordperfectInputStream : public librevenge::RVNGInputStream
+ {
+ public:
+       AbiWordperfectInputStream(GsfInput *input);
+       ~AbiWordperfectInputStream();
+ 
+-      virtual bool isOLEStream();
+-      virtual WPXInputStream * getDocumentOLEStream();
+-
+-      virtual WPXInputStream * getDocumentOLEStream(const char * name);
+-
++      virtual bool isStructured();
++      virtual unsigned subStreamCount();
++      virtual const char* subStreamName(unsigned);
++      bool existsSubStream(const char*);
++      virtual librevenge::RVNGInputStream* getSubStreamByName(const char*);
++      virtual librevenge::RVNGInputStream* getSubStreamById(unsigned);
+       virtual const unsigned char *read(unsigned long numBytes, unsigned long 
&numBytesRead);
+-      virtual int seek(long offset, WPX_SEEK_TYPE seekType);
++      virtual int seek(long offset, librevenge::RVNG_SEEK_TYPE seekType);
+       virtual long tell();
+-      virtual bool atEOS();
++      virtual bool isEnd();
+ 
+ private:
+ 
+       GsfInput *m_input;
+       GsfInfile *m_ole;
++      std::map<unsigned, std::string> m_substreams;
+ };
+ 
+ AbiWordperfectInputStream::AbiWordperfectInputStream(GsfInput *input) :
+-      WPXInputStream(),
++      librevenge::RVNGInputStream(),
+       m_input(input),
+-      m_ole(NULL)
++      m_ole(NULL),
++      m_substreams()
+ {
+       g_object_ref(G_OBJECT(input));
+ }
+@@ -120,50 +127,120 @@
+       return buf;
+ }
+ 
+-int AbiWordperfectInputStream::seek(long offset, WPX_SEEK_TYPE seekType) 
++int AbiWordperfectInputStream::seek(long offset, librevenge::RVNG_SEEK_TYPE 
seekType) 
+ {
+       GSeekType gsfSeekType = G_SEEK_SET;
+       switch(seekType)
+       {
+-      case WPX_SEEK_CUR:
++      case librevenge::RVNG_SEEK_CUR:
+               gsfSeekType = G_SEEK_CUR;
+               break;
+-      case WPX_SEEK_SET:
++      case librevenge::RVNG_SEEK_SET:
+               gsfSeekType = G_SEEK_SET;
+               break;
++      case librevenge::RVNG_SEEK_END:
++              gsfSeekType = G_SEEK_END;
++              break;
+       }
+ 
+       return gsf_input_seek(m_input, offset, gsfSeekType);
+ }
+ 
+-bool AbiWordperfectInputStream::isOLEStream()
++bool AbiWordperfectInputStream::isStructured()
+ {
+       if (!m_ole)
+               m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); 
+ 
+-      if (m_ole != NULL)
++      if (!m_ole)
++              m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); 
++      
++      if (m_ole)
+               return true;
+ 
+       return false;
+ }
+ 
+-WPXInputStream * AbiWordperfectInputStream::getDocumentOLEStream()
++unsigned AbiWordperfectInputStream::subStreamCount()
+ {
+-      return getDocumentOLEStream("PerfectOffice_MAIN");
++      if (!m_ole)
++              m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); 
++      
++      if (!m_ole)
++              m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); 
++      
++      if (m_ole)
++              {
++                      int numChildren = gsf_infile_num_children(m_ole);
++                      if (numChildren > 0)
++                              return numChildren;
++                      return 0;
++              }
++      
++      return 0;
+ }
+ 
+-WPXInputStream * AbiWordperfectInputStream::getDocumentOLEStream(const char * 
name)
++const char * AbiWordperfectInputStream::subStreamName(unsigned id)
+ {
+-      WPXInputStream *documentStream = NULL;
++      if (!m_ole)
++              m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); 
+       
+       if (!m_ole)
++              m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); 
++      
++      if (m_ole)
++              {
++                      if ((int)id >= gsf_infile_num_children(m_ole))
++                      {
++                              return 0;
++                      }
++                      std::map<unsigned, std::string>::iterator i = 
m_substreams.lower_bound(id);
++                      if (i == m_substreams.end() || 
m_substreams.key_comp()(id, i->first))
++                              {
++                                      std::string name = 
gsf_infile_name_by_index(m_ole, (int)id);
++                                      i = m_substreams.insert(i, 
std::map<unsigned, std::string>::value_type(id, name));
++                              }
++                      return i->second.c_str();
++              }
++      
++      return 0;
++}
++
++bool AbiWordperfectInputStream::existsSubStream(const char * name)
++{
++      if (!m_ole)
+               m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); 
+       
++      if (!m_ole)
++              m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); 
++      
+       if (m_ole)
+               {
+                       GsfInput *document = gsf_infile_child_by_name(m_ole, 
name);
+                       if (document) 
+                               {
++                                      g_object_unref(G_OBJECT (document));
++                                      return true;
++                              }
++              }
++      
++      return false;
++}
++
++librevenge::RVNGInputStream * 
AbiWordperfectInputStream::getSubStreamByName(const char * name)
++{
++      librevenge::RVNGInputStream *documentStream = NULL;
++      
++      if (!m_ole)
++              m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); 
++      
++      if (!m_ole)
++              m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); 
++      
++      if (m_ole)
++              {
++                      GsfInput *document = gsf_infile_child_by_name(m_ole, 
name);
++                      if (document) 
++                              {
+                                       documentStream = new 
AbiWordperfectInputStream(document);
+                                       g_object_unref(G_OBJECT (document)); // 
the only reference should be encapsulated within the new stream
+                               }
+@@ -172,12 +249,35 @@
+       return documentStream;
+ }
+ 
++librevenge::RVNGInputStream * 
AbiWordperfectInputStream::getSubStreamById(unsigned id)
++{
++      librevenge::RVNGInputStream *documentStream = NULL;
++      
++      if (!m_ole)
++              m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); 
++      
++      if (!m_ole)
++              m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); 
++      
++      if (m_ole)
++              {
++                      GsfInput *document = gsf_infile_child_by_index(m_ole, 
(int)id);
++                      if (document) 
++                              {
++                                      documentStream = new 
AbiWordperfectInputStream(document);
++                                      g_object_unref(G_OBJECT (document)); // 
the only reference should be encapsulated within the new stream
++                              }
++              }
++      
++      return documentStream;
++}
++
+ long AbiWordperfectInputStream::tell()
+ {
+       return gsf_input_tell(m_input);
+ }
+ 
+-bool AbiWordperfectInputStream::atEOS()
++bool AbiWordperfectInputStream::isEnd()
+ {
+       return gsf_input_eof(m_input);
+ }
+@@ -247,13 +347,13 @@
+ {
+       AbiWordperfectInputStream gsfInput(input);
+ 
+-      WPDConfidence confidence = WPDocument::isFileFormatSupported(&gsfInput);
+-
++      libwpd::WPDConfidence confidence = 
libwpd::WPDocument::isFileFormatSupported(&gsfInput);
++      
+       switch (confidence)
+       {
+-              case WPD_CONFIDENCE_NONE:
++              case libwpd::WPD_CONFIDENCE_NONE:
+                       return UT_CONFIDENCE_ZILCH;
+-              case WPD_CONFIDENCE_EXCELLENT:
++              case libwpd::WPD_CONFIDENCE_EXCELLENT:
+                       return UT_CONFIDENCE_PERFECT;
+               default:
+                       return UT_CONFIDENCE_ZILCH;
+@@ -312,9 +412,9 @@
+ UT_Error IE_Imp_WordPerfect::_loadFile(GsfInput * input)
+ {
+       AbiWordperfectInputStream gsfInput(input);
+-      WPDResult error = WPDocument::parse(&gsfInput, 
static_cast<WPXDocumentInterface *>(this), NULL);
++      libwpd::WPDResult error = libwpd::WPDocument::parse(&gsfInput, 
static_cast<librevenge::RVNGTextInterface *>(this), NULL);
+ 
+-      if (error != WPD_OK)
++      if (error != libwpd::WPD_OK)
+       {
+               UT_DEBUGMSG(("AbiWordPerfect: ERROR: %i!\n", (int)error));
+               return UT_IE_IMPORTERROR;
+@@ -329,7 +429,7 @@
+       // nada
+ }
+ 
+-void IE_Imp_WordPerfect::setDocumentMetaData(const WPXPropertyList &propList)
++void IE_Imp_WordPerfect::setDocumentMetaData(const 
librevenge::RVNGPropertyList &propList)
+ {
+       if (propList["dc:author"])
+               getDoc()->setMetaDataProp(PD_META_KEY_CREATOR, 
propList["dc:author"]->getStr().cstr());
+@@ -339,15 +439,15 @@
+               getDoc()->setMetaDataProp(PD_META_KEY_PUBLISHER, 
propList["dc:publisher"]->getStr().cstr());
+       if (propList["dc:type"])
+               getDoc()->setMetaDataProp(PD_META_KEY_TYPE, 
propList["dc:category"]->getStr().cstr());
+-      if (propList["libwpd:keywords"])
+-              getDoc()->setMetaDataProp(PD_META_KEY_KEYWORDS, 
propList["libwpd:keywords"]->getStr().cstr());
++      if (propList["librevenge:keywords"])
++              getDoc()->setMetaDataProp(PD_META_KEY_KEYWORDS, 
propList["librevenge:keywords"]->getStr().cstr());
+       if (propList["dc:language"])
+               getDoc()->setMetaDataProp(PD_META_KEY_LANGUAGE, 
propList["dc:language"]->getStr().cstr());
+-      if (propList["libwpd:abstract"])
+-              getDoc()->setMetaDataProp(PD_META_KEY_DESCRIPTION, 
propList["libwpd:abstract"]->getStr().cstr());
++      if (propList["librevenge:abstract"])
++              getDoc()->setMetaDataProp(PD_META_KEY_DESCRIPTION, 
propList["librevenge:abstract"]->getStr().cstr());
+ }
+ 
+-void IE_Imp_WordPerfect::startDocument()
++void IE_Imp_WordPerfect::startDocument(const librevenge::RVNGPropertyList & 
/* propList */)
+ {
+       UT_DEBUGMSG(("AbiWordPerfect: startDocument\n"));
+ }
+@@ -357,7 +457,7 @@
+       UT_DEBUGMSG(("AbiWordPerfect: endDocument\n"));
+ }
+ 
+-void IE_Imp_WordPerfect::openPageSpan(const WPXPropertyList &propList)
++void IE_Imp_WordPerfect::openPageSpan(const librevenge::RVNGPropertyList 
&propList)
+ {
+       if (m_bHdrFtrOpenCount) return; // HACK
+       UT_DEBUGMSG(("AbiWordPerfect: openPageSpan\n"));
+@@ -378,7 +478,7 @@
+               
+ }
+ 
+-void IE_Imp_WordPerfect::openHeader(const WPXPropertyList & /*propList*/)
++void IE_Imp_WordPerfect::openHeader(const librevenge::RVNGPropertyList & 
/*propList*/)
+ {
+       m_bHdrFtrOpenCount++;
+       
+@@ -420,7 +520,7 @@
+       */
+ }
+ 
+-void IE_Imp_WordPerfect::openFooter(const WPXPropertyList & /*propList*/)
++void IE_Imp_WordPerfect::openFooter(const librevenge::RVNGPropertyList & 
/*propList*/)
+ {
+       m_bHdrFtrOpenCount++;
+       // see above comments re: openHeader
+@@ -432,7 +532,7 @@
+       // see above comments re: closeHeader
+ }
+ 
+-void IE_Imp_WordPerfect::openParagraph(const WPXPropertyList &propList, const 
WPXPropertyListVector &tabStops)
++void IE_Imp_WordPerfect::openParagraph(const librevenge::RVNGPropertyList 
&propList)
+ {
+       if (m_bHdrFtrOpenCount) return; // HACK
+       UT_DEBUGMSG(("AbiWordPerfect: openParagraph()\n"));
+@@ -478,13 +578,15 @@
+               (int)(m_topMargin*72), (int)(m_bottomMargin*72), 
m_leftMarginOffset, m_rightMarginOffset, m_textIndent, lineSpacing);
+       propBuffer += tmpBuffer;
+       
+-      if (tabStops.count() > 0) // Append the tabstop information
++      const librevenge::RVNGPropertyListVector *tabStops = 
propList.child("style:tab-stops");
++      
++      if (tabStops && tabStops->count()) // Append the tabstop information
+       {
+               propBuffer += "; tabstops:";
+               tmpBuffer = "";
+-                WPXPropertyListVector::Iter i(tabStops);
+-                for (i.rewind(); i.next();)
+-                {
++              librevenge::RVNGPropertyListVector::Iter i(*tabStops);
++              for (i.rewind(); i.next();)
++              {
+                       propBuffer += tmpBuffer;
+                       if (i()["style:position"])
+                       {
+@@ -515,8 +617,8 @@
+                               propBuffer += "0";
+ 
+                       tmpBuffer = ",";
+-                }
+-        }
++              }
++      }
+ 
+       
+ 
+@@ -543,7 +645,7 @@
+       }
+ }
+ 
+-void IE_Imp_WordPerfect::openSpan(const WPXPropertyList &propList)
++void IE_Imp_WordPerfect::openSpan(const librevenge::RVNGPropertyList 
&propList)
+ {
+       if (m_bHdrFtrOpenCount) return; // HACK
+       UT_DEBUGMSG(("AbiWordPerfect: Appending current text properties\n"));
+@@ -614,13 +716,14 @@
+       X_CheckDocumentError(appendFmt(propsArray));
+ }
+ 
+-void IE_Imp_WordPerfect::openSection(const WPXPropertyList &propList, const 
WPXPropertyListVector &columns)
++void IE_Imp_WordPerfect::openSection(const librevenge::RVNGPropertyList 
&propList)
+ {
+       if (m_bHdrFtrOpenCount) return; // HACK
+       UT_DEBUGMSG(("AbiWordPerfect: openSection\n"));
+ 
+       float marginLeft = 0.0f, marginRight = 0.0f;
+-      int columnsCount = ((columns.count() == 0) ? 1 : columns.count());
++      const librevenge::RVNGPropertyListVector *columns = 
propList.child("style:columns");
++      int columnsCount = ((!columns || !columns->count()) ? 1 : 
columns->count());
+ 
+       // TODO: support spaceAfter
+       if (propList["fo:start-indent"])
+@@ -647,7 +750,7 @@
+       X_CheckDocumentError(appendSpan(&ucs,1));       
+ }
+ 
+-void IE_Imp_WordPerfect::insertText(const WPXString &text)
++void IE_Imp_WordPerfect::insertText(const librevenge::RVNGString &text)
+ {
+       if (m_bHdrFtrOpenCount) return; // HACK
+       if (text.len())
+@@ -658,6 +761,15 @@
+       }
+ }
+ 
++void IE_Imp_WordPerfect::insertSpace()
++{
++      if (m_bHdrFtrOpenCount) return; // HACK
++      UT_DEBUGMSG(("AbiWordPerfect: insertSpace\n"));
++
++      UT_UCS4Char ucs = UCS_SPACE;
++      X_CheckDocumentError(appendSpan(&ucs,1));       
++}
++
+ void IE_Imp_WordPerfect::insertLineBreak()
+ {
+       if (m_bHdrFtrOpenCount) return; // HACK
+@@ -668,12 +780,11 @@
+ }
+ 
+ 
+-
+-void IE_Imp_WordPerfect::defineOrderedListLevel(const WPXPropertyList 
&propList)
++void IE_Imp_WordPerfect::openOrderedListLevel(const 
librevenge::RVNGPropertyList &propList)
+ {
+       if (m_bHdrFtrOpenCount) return; // HACK
+-      UT_DEBUGMSG(("AbiWordPerfect: defineOrderedListLevel\n"));
+-
++      UT_DEBUGMSG(("AbiWordPerfect: openOrderedListLevel\n"));
++      
+       int listID = 0, startingNumber = 0, level = 1;
+       char listType = '1';
+       UT_UTF8String textBeforeNumber, textAfterNumber;
+@@ -680,12 +791,12 @@
+       float listLeftOffset = 0.0f;
+       float listMinLabelWidth = 0.0f;
+       
+-      if (propList["libwpd:id"])
+-              listID = propList["libwpd:id"]->getInt();
++      if (propList["librevenge:id"])
++              listID = propList["librevenge:id"]->getInt();
+       if (propList["text:start-value"])
+               startingNumber = propList["text:start-value"]->getInt();
+-      if (propList["libwpd:level"])
+-              level = propList["libwpd:level"]->getInt();
++      if (propList["librevenge:level"])
++              level = propList["librevenge:level"]->getInt();
+       if (propList["style:num-prefix"])
+               textBeforeNumber += 
propList["style:num-prefix"]->getStr().cstr();
+       if (propList["style:num-suffix"])
+@@ -716,22 +827,38 @@
+               m_pCurrentListDefinition->setListMinLabelWidth(level, 
listMinLabelWidth);
+               _updateDocumentOrderedListDefinition(m_pCurrentListDefinition, 
level, listType, textBeforeNumber, textAfterNumber, startingNumber);
+       }
++
++      m_iCurrentListLevel++;
+ }
+ 
+-void IE_Imp_WordPerfect::defineUnorderedListLevel(const WPXPropertyList 
&propList)
++void IE_Imp_WordPerfect::closeOrderedListLevel()
+ {
+       if (m_bHdrFtrOpenCount) return; // HACK
+-      UT_DEBUGMSG(("AbiWordPerfect: defineUnorderedListLevel\n"));
++      UT_DEBUGMSG(("AbiWordPerfect: closeOrderedListLevel (level: %i)\n", 
m_iCurrentListLevel));
++      UT_ASSERT(m_iCurrentListLevel > 0); 
++      
++      // every time we close a list level, the level above it is normally 
renumbered to start at "1"
++      // again. this code takes care of that.
++      if (m_iCurrentListLevel < (WP6_NUM_LIST_LEVELS-1))
++              m_pCurrentListDefinition->setLevelNumber(m_iCurrentListLevel + 
1, 0);
++      
++      m_iCurrentListLevel--;
++}
+ 
++void IE_Imp_WordPerfect::openUnorderedListLevel(const 
librevenge::RVNGPropertyList &propList)
++{
++      if (m_bHdrFtrOpenCount) return; // HACK
++      UT_DEBUGMSG(("AbiWordPerfect: openUNorderedListLevel\n"));
++      
+       int listID = 0, level = 1;
+-      WPXString textBeforeNumber, textAfterNumber;
++      librevenge::RVNGString textBeforeNumber, textAfterNumber;
+       float listLeftOffset = 0.0f;
+       float listMinLabelWidth = 0.0f;
+       
+-      if (propList["libwpd:id"])
+-              listID = propList["libwpd:id"]->getInt();
+-      if (propList["libwpd:level"])
+-              level = propList["libwpd:level"]->getInt();
++      if (propList["librevenge:id"])
++              listID = propList["librevenge:id"]->getInt();
++      if (propList["librevenge:level"])
++              level = propList["librevenge:level"]->getInt();
+       if (propList["text:space-before"])
+               listLeftOffset = propList["text:space-before"]->getDouble();
+       if (propList["text:min-label-width"])
+@@ -752,39 +879,10 @@
+               m_pCurrentListDefinition->setListMinLabelWidth(level, 
listMinLabelWidth);
+               
_updateDocumentUnorderedListDefinition(m_pCurrentListDefinition, level);
+       }
+-}
+ 
+-//void IE_Imp_WordPerfect::openOrderedListLevel(const int listID)
+-void IE_Imp_WordPerfect::openOrderedListLevel(const WPXPropertyList & 
/*propList*/)
+-{
+-      if (m_bHdrFtrOpenCount) return; // HACK
+-      UT_DEBUGMSG(("AbiWordPerfect: openOrderedListLevel\n"));
+-      
+       m_iCurrentListLevel++;
+ }
+ 
+-void IE_Imp_WordPerfect::closeOrderedListLevel()
+-{
+-      if (m_bHdrFtrOpenCount) return; // HACK
+-      UT_DEBUGMSG(("AbiWordPerfect: closeOrderedListLevel (level: %i)\n", 
m_iCurrentListLevel));
+-      UT_ASSERT(m_iCurrentListLevel > 0); 
+-      
+-      // every time we close a list level, the level above it is normally 
renumbered to start at "1"
+-      // again. this code takes care of that.
+-      if (m_iCurrentListLevel < (WP6_NUM_LIST_LEVELS-1))
+-              m_pCurrentListDefinition->setLevelNumber(m_iCurrentListLevel + 
1, 0);
+-      
+-      m_iCurrentListLevel--;
+-}
+-
+-void IE_Imp_WordPerfect::openUnorderedListLevel(const WPXPropertyList & 
/*propList*/)
+-{
+-      if (m_bHdrFtrOpenCount) return; // HACK
+-      UT_DEBUGMSG(("AbiWordPerfect: openUNorderedListLevel\n"));
+-      
+-      m_iCurrentListLevel++;
+-}
+-
+ void IE_Imp_WordPerfect::closeUnorderedListLevel()
+ {
+       if (m_bHdrFtrOpenCount) return; // HACK
+@@ -796,7 +894,7 @@
+ 
+ // ASSUMPTION: We assume that unordered lists will always pass a number of 
"0". unpredictable behaviour
+ // may result otherwise
+-void IE_Imp_WordPerfect::openListElement(const WPXPropertyList &propList, 
const WPXPropertyListVector & /*tabStops*/)
++void IE_Imp_WordPerfect::openListElement(const librevenge::RVNGPropertyList 
&propList)
+ {
+       if (m_bHdrFtrOpenCount) return; // HACK
+       UT_DEBUGMSG(("AbiWordPerfect: openListElement\n"));
+@@ -885,7 +983,7 @@
+       X_CheckDocumentError(appendSpan(&ucs,1));
+ }
+ 
+-void IE_Imp_WordPerfect::openFootnote(const WPXPropertyList & /*propList*/)
++void IE_Imp_WordPerfect::openFootnote(const librevenge::RVNGPropertyList & 
/*propList*/)
+ {
+       if (m_bHdrFtrOpenCount) return; // HACK
+ 
+@@ -934,7 +1032,7 @@
+       X_CheckDocumentError(appendStrux(PTX_EndFootnote,NULL));
+ }
+ 
+-void IE_Imp_WordPerfect::openEndnote(const WPXPropertyList & /*propList*/)
++void IE_Imp_WordPerfect::openEndnote(const librevenge::RVNGPropertyList & 
/*propList*/)
+ {
+       if (m_bHdrFtrOpenCount) return; // HACK
+       const gchar** propsArray = NULL;
+@@ -975,7 +1073,7 @@
+       X_CheckDocumentError(appendStrux(PTX_EndEndnote,NULL));
+ }
+ 
+-void IE_Imp_WordPerfect::openTable(const WPXPropertyList &propList, const 
WPXPropertyListVector &columns)
++void IE_Imp_WordPerfect::openTable(const librevenge::RVNGPropertyList 
&propList)
+ {
+       if (m_bHdrFtrOpenCount) return; // HACK
+       // TODO: handle 'marginLeftOffset' and 'marginRightOffset'
+@@ -1000,14 +1098,18 @@
+               }
+       }
+       
+-      propBuffer += "table-column-props:";
+-      WPXPropertyListVector::Iter i(columns);
+-      for (i.rewind(); i.next();)
++      const librevenge::RVNGPropertyListVector *columns = 
propList.child("librevenge:table-columns");
++      if (columns)
+       {
+-              UT_String tmpBuffer;
+-              if (i()["style:column-width"])
+-                      UT_String_sprintf(tmpBuffer, "%s/", 
i()["style:column-width"]->getStr().cstr());
+-              propBuffer += tmpBuffer;
++              propBuffer += "table-column-props:";
++              librevenge::RVNGPropertyListVector::Iter i(*columns);
++              for (i.rewind(); i.next();)
++              {
++                      UT_String tmpBuffer;
++                      if (i()["style:column-width"])
++                              UT_String_sprintf(tmpBuffer, "%s/", 
i()["style:column-width"]->getStr().cstr());
++                      propBuffer += tmpBuffer;
++              }
+       }
+ 
+       const gchar* propsArray[3];
+@@ -1018,7 +1120,7 @@
+       X_CheckDocumentError(appendStrux(PTX_SectionTable, propsArray));
+ }
+ 
+-void IE_Imp_WordPerfect::openTableRow(const WPXPropertyList & /*propList*/)
++void IE_Imp_WordPerfect::openTableRow(const librevenge::RVNGPropertyList & 
/*propList*/)
+ {
+       if (m_bHdrFtrOpenCount) return; // HACK
+       UT_DEBUGMSG(("AbiWordPerfect: openRow\n"));
+@@ -1030,14 +1132,14 @@
+       m_bInCell = false;
+ }
+ 
+-void IE_Imp_WordPerfect::openTableCell(const WPXPropertyList &propList)
++void IE_Imp_WordPerfect::openTableCell(const librevenge::RVNGPropertyList 
&propList)
+ {
+       if (m_bHdrFtrOpenCount) return; // HACK
+       int col =0,  row = 0, colSpan = 0, rowSpan = 0;
+-      if (propList["libwpd:column"])
+-              col = propList["libwpd:column"]->getInt();
+-      if (propList["libwpd:row"])
+-              row = propList["libwpd:row"]->getInt();
++      if (propList["librevenge:column"])
++              col = propList["librevenge:column"]->getInt();
++      if (propList["librevenge:row"])
++              row = propList["librevenge:row"]->getInt();
+       if (propList["table:number-columns-spanned"])
+               colSpan = propList["table:number-columns-spanned"]->getInt();
+       if (propList["table:number-rows-spanned"])
+@@ -1247,9 +1349,9 @@
+     virtual UT_Error _loadFile(GsfInput * input)
+       {
+               AbiWordperfectInputStream gsfInput(input);
+-              WPSResult error = WPSDocument::parse(&gsfInput, 
static_cast<WPXDocumentInterface *>(this));
++              libwps::WPSResult error = libwps::WPSDocument::parse(&gsfInput, 
static_cast<librevenge::RVNGTextInterface *>(this));
+ 
+-              if (error != WPS_OK)
++              if (error != libwps::WPS_OK)
+                       {
+                               UT_DEBUGMSG(("AbiMSWorks: ERROR: %i!\n", 
(int)error));
+                               return UT_IE_IMPORTERROR;
+@@ -1286,13 +1388,17 @@
+ {
+       AbiWordperfectInputStream gsfInput(input);
+ 
+-      WPSConfidence confidence = 
WPSDocument::isFileFormatSupported(&gsfInput);
++      libwps::WPSKind kind;
++      libwps::WPSConfidence confidence = 
libwps::WPSDocument::isFileFormatSupported(&gsfInput, kind);
++      
++      if (kind != libwps::WPS_TEXT)
++              confidence = libwps::WPS_CONFIDENCE_NONE;
+ 
+       switch (confidence)
+       {
+-              case WPS_CONFIDENCE_NONE:
++              case libwps::WPS_CONFIDENCE_NONE:
+                       return UT_CONFIDENCE_ZILCH;
+-              case WPS_CONFIDENCE_EXCELLENT:
++              case libwps::WPS_CONFIDENCE_EXCELLENT:
+                       return UT_CONFIDENCE_PERFECT;
+               default:
+                       return UT_CONFIDENCE_ZILCH;
+Index: plugins/wordperfect/xp/Makefile.am
+===================================================================
+--- a/plugins/wordperfect/xp/Makefile.am       (revision 34460)
++++ b/plugins/wordperfect/xp/Makefile.am       (working copy)
+@@ -6,8 +6,6 @@
+       -DABI_BUILD_VERSION=\"$(VERSION)\"
+ 
+ libxp_la_SOURCES = \
+-      ie_exp_WordPerfect.cpp \
+-      ie_exp_WordPerfect.h \
+       ie_impexp_WordPerfect.cpp \
+       ie_impexp_WordPerfect.h \
+       ie_imp_WordPerfect.cpp \
+Index: plugins/wordperfect/xp/ie_impexp_WordPerfect.h
+===================================================================
+--- a/plugins/wordperfect/xp/ie_impexp_WordPerfect.h   (revision 34460)
++++ b/plugins/wordperfect/xp/ie_impexp_WordPerfect.h   (working copy)
+@@ -24,7 +24,6 @@
+  */
+ 
+ #include "ie_imp_WordPerfect.h"
+-#include "ie_exp_WordPerfect.h"
+ #include "xap_Module.h"
+ 
+ #define IE_MIMETYPE_WP_51                     "application/wordperfect5.1"
+Index: plugins/wordperfect/plugin.m4
+===================================================================
+--- a/plugins/wordperfect/plugin.m4    (revision 34460)
++++ b/plugins/wordperfect/plugin.m4    (working copy)
+@@ -1,6 +1,6 @@
+ 
+-wordperfect_pkgs="libwpg-0.2 >= 0.2.0 libwpd-0.9 >= 0.9.0 libwpd-stream-0.9 
>= 0.9.0 $gsf_req"
+-wordperfect_wps_pkgs='libwps-0.2 >= 0.1.0'
++wordperfect_pkgs="libwpd-0.10 $gsf_req"
++wordperfect_wps_pkgs='libwps-0.3'
+ wordperfect_deps="no"
+ 
+ WORDPERFECT_CFLAGS=
+@@ -29,7 +29,7 @@
+ 
+ PKG_CHECK_EXISTS([ $wordperfect_wps_pkgs ],
+ [
+-      wp_deps_pkgs="$wp_deps_pkgs $wordperfect_wps_pkgs"
++      wp_deps_pkgs="$wordperfect_wps_pkgs $wp_deps_pkgs"
+       WPS_DEFINE=" -DHAVE_LIBWPS"
+ ])
+ 
+--- abiword-3.0.0.orig/plugin-configure.m4
++++ abiword-3.0.0/plugin-configure.m4
+@@ -1355,7 +1355,7 @@ AC_SUBST([BMP_CFLAGS])
+ AC_SUBST([BMP_LIBS])
+ 
+ 
+-wpg_pkgs="$gsf_req libwpg-0.2 >= 0.2.0 libwpd-0.9 >= 0.9.0 libwpd-stream-0.9 
>= 0.9.0"
++wpg_pkgs="libwpg-0.3 $gsf_req"
+ wpg_deps="no"
+ 
+ if test "$enable_wpg" != ""; then
+@@ -1473,8 +1473,8 @@ AC_SUBST([AIKSAURUS_CFLAGS])
+ AC_SUBST([AIKSAURUS_LIBS])
+ 
+ 
+-wordperfect_pkgs="libwpg-0.2 >= 0.2.0 libwpd-0.9 >= 0.9.0 libwpd-stream-0.9 
>= 0.9.0 $gsf_req"
+-wordperfect_wps_pkgs='libwps-0.2 >= 0.1.0'
++wordperfect_pkgs="libwpd-0.10 $gsf_req"
++wordperfect_wps_pkgs='libwps-0.3'
+ wordperfect_deps="no"
+ 
+ WORDPERFECT_CFLAGS=
+@@ -1503,7 +1503,7 @@ wp_deps_pkgs="$wordperfect_pkgs"
+ 
+ PKG_CHECK_EXISTS([ $wordperfect_wps_pkgs ],
+ [
+-      wp_deps_pkgs="$wp_deps_pkgs $wordperfect_wps_pkgs"
++      wp_deps_pkgs="$wordperfect_wps_pkgs $wp_deps_pkgs"
+       WPS_DEFINE=" -DHAVE_LIBWPS"
+ ])
+ 
diff -Nru abiword-3.0.0/debian/patches/series 
abiword-3.0.0/debian/patches/series
--- abiword-3.0.0/debian/patches/series 2014-02-05 18:23:56.000000000 +0100
+++ abiword-3.0.0/debian/patches/series 2014-05-31 16:45:17.000000000 +0200
@@ -7,3 +7,4 @@
 ctrl-comma-subscript.diff -p1
 mime-types-desktop.diff -p1
 mime-types.diff -p1
+abiword-3.0.0-librevenge.patch -p1

--- End Message ---
--- Begin Message ---
Version: 3.0.0-6

----- Forwarded message from Dmitry Smirnov <only...@debian.org> -----

Date: Sat, 09 Aug 2014 03:34:16 +0000
From: Dmitry Smirnov <only...@debian.org>
To: debian-devel-chan...@lists.debian.org
Subject: Accepted abiword 3.0.0-6 (source all amd64) into unstable

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Format: 1.8
Date: Sat, 09 Aug 2014 11:14:12 +1000
Source: abiword
Binary: abiword-common abiword abiword-plugin-grammar abiword-plugin-mathview 
libabiword-3.0 libabiword-3.0-dev abiword-dbg
Architecture: source all amd64
Version: 3.0.0-6
Distribution: unstable
Urgency: medium
Maintainer: Dmitry Smirnov <only...@debian.org>
Changed-By: Dmitry Smirnov <only...@debian.org>
Description:
 abiword    - efficient, featureful word processor with collaboration
 abiword-common - efficient, featureful word processor with collaboration -- 
common
 abiword-dbg - debugging symbols for abiword word processor
 abiword-plugin-grammar - grammar checking plugin for AbiWord
 abiword-plugin-mathview - equation editor plugin for AbiWord
 libabiword-3.0 - efficient, featureful word processor with collaboration -- 
shared
 libabiword-3.0-dev - efficient, featureful word processor with collaboration 
-- develo
Changes:
 abiword (3.0.0-6) unstable; urgency=medium
 .
   [ Rene Engelhard ]
   * Add "librevenge.patch" (from Fedora 20) to fix build with new
     librevenge/libwp{,g} 0.3 and adapt Build-Depends;
     Add exta dh_autoreconf calls for plugins/wpg and plugins/wordperfect
     dirs so they get generated (and dh_autoreconf_clean).
 .
   [ Dmitry Smirnov ]
   * Added "debian/gbp.conf".
   * Standards-Version to 3.9.5.
Checksums-Sha1:
 487914e474a28fbdc67ba8fe06f9df2a176c5441 2944 abiword_3.0.0-6.dsc
 b8f1f4c72447367f1645ae8a3211759d1bf3b341 50576 abiword_3.0.0-6.debian.tar.xz
 a48a9b4bee6b6f76fcf4a63d7735f577c1deec6b 1657226 abiword-common_3.0.0-6_all.deb
 b2a9d702a331c7292d2e5547bfa9b6a130c50ab1 1214456 abiword_3.0.0-6_amd64.deb
 dd1c40f50fff4286d9da4edc99c1044ccc4dd81e 46626 
abiword-plugin-grammar_3.0.0-6_amd64.deb
 68daadf0d0f0f715359b371ddfa7b2e1facecf42 123170 
abiword-plugin-mathview_3.0.0-6_amd64.deb
 cef9697636cbedc70ecd7b2609f2792b0f3bdf50 2068082 
libabiword-3.0_3.0.0-6_amd64.deb
 dc47d0c939d414ac5ee3f5551089b54c8fda1252 42920 
libabiword-3.0-dev_3.0.0-6_amd64.deb
 c980c58231dc872c96882822eec06ae8b923fcc2 25446784 abiword-dbg_3.0.0-6_amd64.deb
Checksums-Sha256:
 1ca5c3a7225b169cfb58cbfb1b3ac9f324726f5a2789546d0e71cc894664a43c 2944 
abiword_3.0.0-6.dsc
 15cf9abe4267fa8ccf809acc15134d023c54f4a53670d435956bd85ead2c6d1c 50576 
abiword_3.0.0-6.debian.tar.xz
 e12f15fe14a6cb65ab52a04495123faf152d79c765c46e0d1de0feafbf7c19e0 1657226 
abiword-common_3.0.0-6_all.deb
 0ac637e98377ce22cb1c0c10b8a533d90fe3f063d154d2a55f730d0b273099a1 1214456 
abiword_3.0.0-6_amd64.deb
 8d02f44253aa934b66c371e61cd4292bde2c0d5077594c8950656e70c8f113bf 46626 
abiword-plugin-grammar_3.0.0-6_amd64.deb
 2498437ec965b9d1db70d9aba3bfae6184913bf2c4312633eabeadb376d1855d 123170 
abiword-plugin-mathview_3.0.0-6_amd64.deb
 4e071a84c74f48d3ff63dbee283db8b84c8e98db9d8e7ec02001725da4907d00 2068082 
libabiword-3.0_3.0.0-6_amd64.deb
 6321af0faf9f13fdead1d53502f3df8faa6554816fe25f66ac236f0f376a6e93 42920 
libabiword-3.0-dev_3.0.0-6_amd64.deb
 d12a064566c768b069183f44bc1cf565ebf454966a0702890392e872f24f8f2d 25446784 
abiword-dbg_3.0.0-6_amd64.deb
Files:
 df4fb5041a443d630c0aa3785a985fd2 1657226 editors optional 
abiword-common_3.0.0-6_all.deb
 f7ce2e4af52a60bb80cd3918710d28d4 1214456 editors optional 
abiword_3.0.0-6_amd64.deb
 dcc60f53cc90a507ee11374d0137be62 46626 editors optional 
abiword-plugin-grammar_3.0.0-6_amd64.deb
 49f893d0145724380033e8f6233a88f2 123170 editors optional 
abiword-plugin-mathview_3.0.0-6_amd64.deb
 91b7062bb5419738785ff3c08537d16e 2068082 libs optional 
libabiword-3.0_3.0.0-6_amd64.deb
 a77635f8a87ff97a10df4bd6f4693b90 42920 libdevel optional 
libabiword-3.0-dev_3.0.0-6_amd64.deb
 c8e4b2bad5fe9ba4accc1b5956607632 25446784 debug extra 
abiword-dbg_3.0.0-6_amd64.deb
 334f2805c0be48e566ba402f3d4dedd1 2944 gnome optional abiword_3.0.0-6.dsc
 0065f351803eaad9a5e479a91605e01a 50576 gnome optional 
abiword_3.0.0-6.debian.tar.xz

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iQIcBAEBCAAGBQJT5XyzAAoJEFK2u9lTlo0b7YgQAL4EPF0le9k7QfsTyoDb4B/n
ZiHtYgW4UKH+XLOxiTcarlv7yBBO2R0EJNnlY8+0wG8d1NJQyXWjLDA5PHRRRya9
Hm4RXoFI4A/LvVc/zRzzciOvWkapJg7w6B29dFa/e9HeyyplDxhtAhYVFZK/HvIM
5pEZpW3OOxJyH1/edU9hgjNai69h7r75pHzMhFFm3QMHaE0rOxYbsuo+e/hvbtDV
7dNpm7g/Ive4rrIzuQwQ7XyeH/TPmM4tBhN2bkj+O4+E1l14Vg7aLE59CztRM+u3
htsCkbWGwsRzD4rNvmotq2jbCK1VBXFb5I14nhfp0S7TiK4y5XQG6mdiyftN0dTs
v/FlMNtsduVrLqojIsBrGjXN6AtccQcaUFrSBraB38XCzpJFb8zzRg5m+Lsh5tUe
G8ccv0BYgzgUsKcH2p1g3prxKQgDVezUakY3mWniX0PD0xItpGzN6ul3eM6P+qm7
0TR5UmtUi3VRWLTKoCLChQ2VCRmZyS9XFWWHcGFteObnd9vxSmiD8O8ZXulLlKu+
HlSky1YvIqsFO5MT9qxPbraGXmAvN3uhYPMKWuev6FKIB2A1sggv9yN4Qd5rCFRv
nfY0di4YtwFiSehXUg+K2eh4MS00ZWutCks2y7q05pBJzlXoH3ddZcDNL4ww442a
qhJPvHSM7Rq/wPOMj0JZ
=KP/b
-----END PGP SIGNATURE-----


-- 
To UNSUBSCRIBE, email to debian-devel-changes-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/e1xfxq8-00046x...@franck.debian.org


----- End forwarded message -----

--- End Message ---

Reply via email to