[koffice] * Sun Jan 02 2011 Kevin Kofler <Kevin at tigcc.ticalc.org> - 3:2.3.0-2 - backport support for libwpd 0.

Kevin Kofler kkofler at fedoraproject.org
Sun Jan 2 17:57:05 UTC 2011


commit 48f89fde3e00fe85631c6db096c65cc7c9c3bbb4
Author: Kevin Kofler <Kevin at tigcc.ticalc.org>
Date:   Sun Jan 2 18:56:42 2011 +0100

    * Sun Jan 02 2011 Kevin Kofler <Kevin at tigcc.ticalc.org> - 3:2.3.0-2
    - backport support for libwpd 0.9 and libwpg 0.2 from Calligra master

 koffice-2.3.0-libwpd09-libwpg02.patch | 1541 +++++++++++++++++++++++++++++++++
 koffice.spec                          |   27 +-
 2 files changed, 1556 insertions(+), 12 deletions(-)
---
diff --git a/koffice-2.3.0-libwpd09-libwpg02.patch b/koffice-2.3.0-libwpd09-libwpg02.patch
new file mode 100644
index 0000000..a3a1e12
--- /dev/null
+++ b/koffice-2.3.0-libwpd09-libwpg02.patch
@@ -0,0 +1,1541 @@
+diff -Nur koffice-2.3.0/cmake/modules/FindWPD.cmake koffice-2.3.0-libwpd09-libwpg02/cmake/modules/FindWPD.cmake
+--- koffice-2.3.0/cmake/modules/FindWPD.cmake	2010-12-29 11:34:57.000000000 +0100
++++ koffice-2.3.0-libwpd09-libwpg02/cmake/modules/FindWPD.cmake	2011-01-02 17:28:56.000000000 +0100
+@@ -20,11 +20,13 @@
+ if(NOT WIN32)
+   INCLUDE(FindPkgConfig)
+   pkg_check_modules(WPD libwpd-0.8)
++  pkg_check_modules(WPD libwpd-0.9)
+ endif(NOT WIN32)
+ 
+   FIND_PATH(WPD_INCLUDE_DIR libwpd/libwpd.h
+     ${WPD_INCLUDE_DIR}
+     /usr/include/libwpd-0.8
++    /usr/include/libwpd-0.9
+   )
+ 
+ 
+diff -Nur koffice-2.3.0/cmake/modules/FindWPG.cmake koffice-2.3.0-libwpd09-libwpg02/cmake/modules/FindWPG.cmake
+--- koffice-2.3.0/cmake/modules/FindWPG.cmake	2010-12-29 11:34:57.000000000 +0100
++++ koffice-2.3.0-libwpd09-libwpg02/cmake/modules/FindWPG.cmake	2011-01-02 17:28:56.000000000 +0100
+@@ -19,9 +19,10 @@
+   IF (NOT WIN32)
+     INCLUDE(FindPkgConfig)
+     pkg_check_modules(LIBWPG libwpg-0.1)
++    pkg_check_modules(LIBWPG libwpg-0.2)
+   ENDIF (NOT WIN32)
+ 
+-  FIND_LIBRARY(LIBWPG_STREAM_LIBRARIES NAMES wpg-stream-0.1 libwpg-stream-0.1
++  FIND_LIBRARY(LIBWPG_STREAM_LIBRARIES NAMES libwpg-stream-0.1 wpg-stream-0.1 libwpd-stream-0.9 wpd-stream-0.9
+     PATHS
+     ${LIBWPG_LIBRARIES}
+     )
+diff -Nur koffice-2.3.0/filters/karbon/wpg/import/CMakeLists.txt koffice-2.3.0-libwpd09-libwpg02/filters/karbon/wpg/import/CMakeLists.txt
+--- koffice-2.3.0/filters/karbon/wpg/import/CMakeLists.txt	2010-12-29 11:36:55.000000000 +0100
++++ koffice-2.3.0-libwpd09-libwpg02/filters/karbon/wpg/import/CMakeLists.txt	2011-01-02 17:39:56.000000000 +0100
+@@ -1,16 +1,11 @@
+ 
+-
+ include_directories(${CMAKE_BINARY_DIR}/filters/ ${WPD_INCLUDE_DIR} ${LIBWPG_INCLUDE_DIR}/)
+ 
+-set(wpgimport_PART_SRCS 
+-WPGImport.cpp 
+-OdgExporter.cxx
+-FileOutputHandler.cxx
+-GraphicsElement.cxx)
++set(wpgimport_PART_SRCS WPGImport.cpp)
+ 
+ kde4_add_plugin(wpgimport ${wpgimport_PART_SRCS})
+ 
+-target_link_libraries(wpgimport komain ${LIBWPG_LIBRARIES} ${LIBWPG_STREAM_LIBRARIES})
++target_link_libraries(wpgimport komain ${LIBWPG_LIBRARIES} ${LIBWPG_STREAM_LIBRARIES} ${WPD_LIBRARIES})
+ 
+ install(TARGETS wpgimport DESTINATION ${PLUGIN_INSTALL_DIR})
+ install(FILES karbon_wpg_import.desktop DESTINATION ${SERVICES_INSTALL_DIR})
+diff -Nur koffice-2.3.0/filters/karbon/wpg/import/FileOutputHandler.cxx koffice-2.3.0-libwpd09-libwpg02/filters/karbon/wpg/import/FileOutputHandler.cxx
+--- koffice-2.3.0/filters/karbon/wpg/import/FileOutputHandler.cxx	2010-12-29 11:36:55.000000000 +0100
++++ koffice-2.3.0-libwpd09-libwpg02/filters/karbon/wpg/import/FileOutputHandler.cxx	1970-01-01 01:00:00.000000000 +0100
+@@ -1,95 +0,0 @@
+-/* libwpg
+- * Copyright (C) 2006 Fridrich Strba (fridrich.strba at bluewin.ch)
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Library General Public
+- * License as published by the Free Software Foundation; either
+- * version 2 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Library General Public License for more details.
+- *
+- * You should have received a copy of the GNU Library General Public
+- * License along with this library; if not, write to the 
+- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+- * Boston, MA  02111-1301 USA
+- *
+- * For further information visit http://libwpg.sourceforge.net
+- */
+-
+-/* "This product is not manufactured, approved, or supported by
+- * Corel Corporation or Corel Corporation Limited."
+- */
+-
+-#include "FileOutputHandler.hxx"
+-
+-FileOutputHandler::FileOutputHandler(std::ostringstream &contentStream) :
+-	mbIsTagOpened(false),
+-	mContentStream(contentStream)
+-{
+-}
+-
+-void FileOutputHandler::startDocument()
+-{
+-}
+-
+-void FileOutputHandler::startElement(const char *psName, const std::vector<std::pair<std::string, std::string> > &xPropList)
+-{
+-	if (mbIsTagOpened)
+-	{
+-		mContentStream << ">";
+-		mbIsTagOpened = false;
+-	}
+-	mContentStream << "<" << psName;
+-
+-	for (std::vector<std::pair<std::string, std::string> >::const_iterator i = xPropList.begin(); i != xPropList.end(); i++)
+-	{
+-		mContentStream << " " <<  (*i).first.c_str() << "=\"" << (*i).second.c_str() << "\"";
+-	}
+-	mbIsTagOpened = true;
+-	msOpenedTagName = psName;
+-}
+-
+-void FileOutputHandler::endElement(const char *psName)
+-{
+-	if (mbIsTagOpened)
+-	{
+-		if( msOpenedTagName == psName )
+-		{
+-			mContentStream << "/>";
+-			mbIsTagOpened = false;
+-		}
+-		else // should not happen, but handle it
+-		{
+-			mContentStream << ">";
+-			mContentStream << "</" << psName << ">";
+-			mbIsTagOpened = false;
+-		}
+-	}
+-	else
+-	{
+-		mContentStream << "</" << psName << ">";
+-		mbIsTagOpened = false;
+-	}
+-}
+-
+-void FileOutputHandler::characters(const std::string &sCharacters)
+-{
+-	if (mbIsTagOpened)
+-	{
+-		mContentStream << ">";
+-		mbIsTagOpened = false;
+-	}
+-	mContentStream << sCharacters.c_str();
+-}
+-
+-void FileOutputHandler::endDocument()
+-{
+-	if (mbIsTagOpened)
+-	{
+-		mContentStream << ">";
+-		mbIsTagOpened = false;
+-	}
+-}
+diff -Nur koffice-2.3.0/filters/karbon/wpg/import/FileOutputHandler.hxx koffice-2.3.0-libwpd09-libwpg02/filters/karbon/wpg/import/FileOutputHandler.hxx
+--- koffice-2.3.0/filters/karbon/wpg/import/FileOutputHandler.hxx	2010-12-29 11:36:55.000000000 +0100
++++ koffice-2.3.0-libwpd09-libwpg02/filters/karbon/wpg/import/FileOutputHandler.hxx	1970-01-01 01:00:00.000000000 +0100
+@@ -1,49 +0,0 @@
+-/* libwpg
+- * Copyright (C) 2006 Fridrich Strba (fridrich.strba at bluewin.ch)
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Library General Public
+- * License as published by the Free Software Foundation; either
+- * version 2 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Library General Public License for more details.
+- *
+- * You should have received a copy of the GNU Library General Public
+- * License along with this library; if not, write to the 
+- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+- * Boston, MA  02111-1301 USA
+- *
+- * For further information visit http://libwpg.sourceforge.net
+- */
+-
+-/* "This product is not manufactured, approved, or supported by
+- * Corel Corporation or Corel Corporation Limited."
+- */
+-
+-#ifndef FILEOUTPUTHANDLER_H
+-#define FILEOUTPUTHANDLER_H
+-
+-#include <iostream>
+-#include <sstream>
+-#include <string>
+-#include "GraphicsHandler.hxx"
+-
+-class FileOutputHandler : public GraphicsHandler
+-{
+-  public:
+-        explicit FileOutputHandler(std::ostringstream &contentStream);
+-        virtual void startDocument();
+-        virtual void endDocument();
+-        virtual void startElement(const char *psName, const std::vector<std::pair<std::string, std::string> > &xPropList);
+-        virtual void endElement(const char *psName);
+-        virtual void characters(const std::string &sCharacters);
+-
+-  private:
+-	bool mbIsTagOpened;
+-	std::string msOpenedTagName;
+-	std::ostringstream &mContentStream;
+-};
+-#endif
+diff -Nur koffice-2.3.0/filters/karbon/wpg/import/GraphicsElement.cxx koffice-2.3.0-libwpd09-libwpg02/filters/karbon/wpg/import/GraphicsElement.cxx
+--- koffice-2.3.0/filters/karbon/wpg/import/GraphicsElement.cxx	2010-12-29 11:36:55.000000000 +0100
++++ koffice-2.3.0-libwpd09-libwpg02/filters/karbon/wpg/import/GraphicsElement.cxx	1970-01-01 01:00:00.000000000 +0100
+@@ -1,66 +0,0 @@
+-/* GraphicsElement: The items we are collecting to be put into the Writer
+- * document: paragraph and spans of text, as well as section breaks.
+- *
+- * Copyright (C) 2002-2003 William Lachance (william.lachance at sympatico.ca)
+- * 
+- * This program is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2 of the License, or (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Library General Public License for more details.
+- *
+- * You should have received a copy of the GNU Library General Public
+- * License along with this library; if not, write to the 
+- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+- * Boston, MA  02111-1301 USA
+- *
+- * For further information visit http://libwpg.sourceforge.net
+- *
+- */
+-
+-/* "This product is not manufactured, approved, or supported by 
+- * Corel Corporation or Corel Corporation Limited."
+- */
+-
+-#include "GraphicsElement.hxx"
+-#include "GraphicsHandler.hxx"
+-#include <string.h>
+-
+-#define ASCII_SPACE 0x0020
+-
+-void TagGraphicsElement::print() const
+-{
+-}
+-
+-void OpenTagGraphicsElement::write(GraphicsHandler *pHandler) const
+-{
+-	pHandler->startElement(getTagName().c_str(), maAttrList);
+-}
+-
+-void OpenTagGraphicsElement::print() const
+-{ 
+-	TagGraphicsElement::print(); 	
+-}
+-
+-void OpenTagGraphicsElement::addAttribute(const std::string &szAttributeName, const std::string &sAttributeValue)
+-{
+-	std::pair<std::string, std::string> tmpAttribute;
+-	tmpAttribute.first = szAttributeName;
+-	tmpAttribute.second = sAttributeValue;
+-        maAttrList.push_back(tmpAttribute);
+-}
+-
+-void CloseTagGraphicsElement::write(GraphicsHandler *pHandler) const
+-{
+-
+-	pHandler->endElement(getTagName().c_str());
+-}
+-
+-void CharDataGraphicsElement::write(GraphicsHandler *pHandler) const
+-{
+-	pHandler->characters(msData);
+-}
+diff -Nur koffice-2.3.0/filters/karbon/wpg/import/GraphicsElement.hxx koffice-2.3.0-libwpd09-libwpg02/filters/karbon/wpg/import/GraphicsElement.hxx
+--- koffice-2.3.0/filters/karbon/wpg/import/GraphicsElement.hxx	2010-12-29 11:36:55.000000000 +0100
++++ koffice-2.3.0-libwpd09-libwpg02/filters/karbon/wpg/import/GraphicsElement.hxx	1970-01-01 01:00:00.000000000 +0100
+@@ -1,84 +0,0 @@
+-/* GraphicsElement: The items we are collecting to be put into the Writer
+- * document: paragraph and spans of text, as well as section breaks.
+- *
+- * Copyright (C) 2002-2003 William Lachance (william.lachance at sympatico.ca)
+- * 
+- * This program is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2 of the License, or (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Library General Public License for more details.
+- *
+- * You should have received a copy of the GNU Library General Public
+- * License along with this library; if not, write to the 
+- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+- * Boston, MA  02111-1301 USA
+- *
+- * For further information visit http://libwpd.sourceforge.net
+- *
+- */
+-
+-/* "This product is not manufactured, approved, or supported by 
+- * Corel Corporation or Corel Corporation Limited."
+- */
+-
+-#ifndef _GRAPHICSELEMENT_H
+-#define _GRAPHICSELEMENT_H
+-#include <string>
+-#include <map>
+-#include <vector>
+-
+-#include "GraphicsHandler.hxx"
+-
+-class GraphicsElement
+-{
+-public:	
+-	virtual ~GraphicsElement() {}
+-	virtual void write(GraphicsHandler *pHandler) const = 0;
+-	virtual void print() const {}
+-};
+-
+-class TagGraphicsElement : public GraphicsElement
+-{
+-public:
+-	explicit TagGraphicsElement(const char *szTagName) : msTagName(szTagName) {}
+-	const std::string &getTagName() const { return msTagName; }
+-	virtual void print() const;
+-private:
+-	const std::string msTagName;
+-};
+-
+-class OpenTagGraphicsElement : public TagGraphicsElement
+-{
+-public:
+-	explicit OpenTagGraphicsElement(const char *szTagName) : TagGraphicsElement(szTagName) {}
+-	~OpenTagGraphicsElement() {}
+-	void addAttribute(const std::string &szAttributeName, const std::string &sAttributeValue);
+-	virtual void write(GraphicsHandler *pHandler) const;
+-	virtual void print () const;
+-private:
+-	std::vector<std::pair<std::string, std::string> > maAttrList;
+-};
+-
+-class CloseTagGraphicsElement : public TagGraphicsElement
+-{
+-public:
+-	explicit CloseTagGraphicsElement(const char *szTagName) : TagGraphicsElement(szTagName) {}
+-	virtual void write(GraphicsHandler *pHandler) const;
+-};
+-
+-class CharDataGraphicsElement : public GraphicsElement
+-{
+-public:
+-	CharDataGraphicsElement(const char *sData) : GraphicsElement(), msData(sData) {}
+-	virtual void write(GraphicsHandler *pHandler) const;
+-private:
+-	std::string msData;
+-};
+-
+-
+-#endif
+diff -Nur koffice-2.3.0/filters/karbon/wpg/import/GraphicsHandler.hxx koffice-2.3.0-libwpd09-libwpg02/filters/karbon/wpg/import/GraphicsHandler.hxx
+--- koffice-2.3.0/filters/karbon/wpg/import/GraphicsHandler.hxx	2010-12-29 11:36:55.000000000 +0100
++++ koffice-2.3.0-libwpd09-libwpg02/filters/karbon/wpg/import/GraphicsHandler.hxx	1970-01-01 01:00:00.000000000 +0100
+@@ -1,43 +0,0 @@
+-/*
+- * Copyright (C) 2004 William Lachance (wlach at interlog.com)
+- * Copyright (C) 2004 Net Integration Technologies (http://www.net-itech.com)
+- *
+- * This program is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU General Public License
+- * as published by the Free Software Foundation; either version 2
+- * of the License, or (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU Library General Public
+- * License along with this library; if not, write to the 
+- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+- * Boston, MA  02111-1301 USA
+- *
+- *  Contributor(s): Martin Gallwey (gallwey at sun.com)
+- *
+- */
+-
+-/* "This product is not manufactured, approved, or supported by
+- * Corel Corporation or Corel Corporation Limited."
+- */
+-#ifndef _GRAPHICSHANDLER_H
+-#define _GRAPHICSHANDLER_H
+-#include <string>
+-#include <map>
+-#include <vector>
+-
+-class GraphicsHandler
+-{
+-public:
+-	virtual ~GraphicsHandler() {}
+-        virtual void startDocument() = 0;
+-        virtual void endDocument() = 0;
+-        virtual void startElement(const char *psName, const std::vector< std::pair <std::string, std::string> > &xPropList) = 0;
+-        virtual void endElement(const char *psName) = 0;
+-        virtual void characters(const std::string &sCharacters) = 0;
+-};
+-#endif
+diff -Nur koffice-2.3.0/filters/karbon/wpg/import/karbon_wpg_import.desktop koffice-2.3.0-libwpd09-libwpg02/filters/karbon/wpg/import/karbon_wpg_import.desktop
+--- koffice-2.3.0/filters/karbon/wpg/import/karbon_wpg_import.desktop	2010-12-29 11:36:55.000000000 +0100
++++ koffice-2.3.0-libwpd09-libwpg02/filters/karbon/wpg/import/karbon_wpg_import.desktop	2011-01-02 17:51:40.000000000 +0100
+@@ -42,7 +42,7 @@
+ Name[x-test]=xxKarbon WPG Import Filterxx
+ Name[zh_CN]=Karbon WPG 导入过滤器
+ Name[zh_TW]=Karbon WPG 匯入過濾程式
+-X-KDE-Export=application/vnd.oasis.opendocument.graphics
++X-KDE-Export=image/svg+xml
+ X-KDE-Import=application/x-wpg
+ X-KDE-Weight=1
+ X-KDE-Library=wpgimport
+diff -Nur koffice-2.3.0/filters/karbon/wpg/import/OdgExporter.cxx koffice-2.3.0-libwpd09-libwpg02/filters/karbon/wpg/import/OdgExporter.cxx
+--- koffice-2.3.0/filters/karbon/wpg/import/OdgExporter.cxx	2010-12-29 11:36:55.000000000 +0100
++++ koffice-2.3.0-libwpd09-libwpg02/filters/karbon/wpg/import/OdgExporter.cxx	1970-01-01 01:00:00.000000000 +0100
+@@ -1,662 +0,0 @@
+-/* libwpg
+- * Copyright (C) 2006 Ariya Hidayat (ariya at kde.org)
+- * Copyright (C) 2006 Fridrich Strba (fridrich.strba at bluewin.ch)
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Library General Public
+- * License as published by the Free Software Foundation; either
+- * version 2 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Library General Public License for more details.
+- *
+- * You should have received a copy of the GNU Library General Public
+- * License along with this library; if not, write to the
+- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+- * Boston, MA  02111-1301 USA
+- *
+- * For further information visit http://libwpg.sourceforge.net
+- */
+-
+-/* "This product is not manufactured, approved, or supported by
+- * Corel Corporation or Corel Corporation Limited."
+- */
+-
+-#include "OdgExporter.hxx"
+-#include "GraphicsElement.hxx"
+-#include "GraphicsHandler.hxx"
+-#include <locale.h>
+-
+-static std::string doubleToString(const double value)
+-{
+-  std::ostringstream tempStream;
+-  tempStream << value;
+-  std::string decimalPoint(localeconv()->decimal_point);
+-  if ((decimalPoint.size() == 0) || (decimalPoint == "."))
+-    return tempStream.str();
+-  std::string stringValue(tempStream.str());
+-  if (!stringValue.empty())
+-  {
+-    std::string::size_type pos;
+-    while ((pos = stringValue.find(decimalPoint)) != std::string::npos)
+-          stringValue.replace(pos,decimalPoint.size(),".");
+-  }
+-  return stringValue;
+-}
+-
+-
+-OdgExporter::OdgExporter(GraphicsHandler *pHandler, const bool isFlatXML):
+-        mpHandler(pHandler),
+-        m_fillRule(AlternatingFill),
+-        m_gradientIndex(1),
+-        m_dashIndex(1),
+-        m_styleIndex(1),
+-        m_width(0.0f),
+-        m_height(0.0f),
+-        m_isFlatXML(isFlatXML)
+-{
+-}
+-
+-OdgExporter::~OdgExporter()
+-{
+-        for (std::vector <GraphicsElement *>::iterator iterStroke = mStrokeDashElements.begin();
+-                iterStroke != mStrokeDashElements.end(); iterStroke++)
+-                delete (*iterStroke);
+-
+-        for (std::vector <GraphicsElement *>::iterator iterGradient = mGradientElements.begin();
+-                iterGradient != mGradientElements.end(); iterGradient++)
+-                delete (*iterGradient);
+-
+-        for (std::vector <GraphicsElement *>::iterator iterAutomaticStyles = mAutomaticStylesElements.begin();
+-                iterAutomaticStyles != mAutomaticStylesElements.end(); iterAutomaticStyles++)
+-                delete (*iterAutomaticStyles);
+-
+-        for (std::vector<GraphicsElement *>::iterator bodyIter = mBodyElements.begin();
+-                bodyIter != mBodyElements.end(); bodyIter++)
+-                delete (*bodyIter);
+-}
+-
+-void OdgExporter::startGraphics(double width, double height)
+-{
+-        m_gradientIndex = 1;
+-        m_dashIndex = 1;
+-        m_styleIndex = 1;
+-        m_width = width;
+-        m_height = height;
+-
+-
+-        mpHandler->startDocument();
+-        OpenTagGraphicsElement tmpOfficeDocumentContent("office:document");
+-        tmpOfficeDocumentContent.addAttribute("xmlns:office", "urn:oasis:names:tc:opendocument:xmlns:office:1.0");
+-        tmpOfficeDocumentContent.addAttribute("xmlns:style", "urn:oasis:names:tc:opendocument:xmlns:style:1.0");
+-        tmpOfficeDocumentContent.addAttribute("xmlns:text", "urn:oasis:names:tc:opendocument:xmlns:text:1.0");
+-        tmpOfficeDocumentContent.addAttribute("xmlns:draw", "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0");
+-        tmpOfficeDocumentContent.addAttribute("xmlns:dc", "http://purl.org/dc/elements/1.1/");
+-        tmpOfficeDocumentContent.addAttribute("xmlns:svg", "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0");
+-        tmpOfficeDocumentContent.addAttribute("xmlns:fo", "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0");
+-        tmpOfficeDocumentContent.addAttribute("xmlns:config", "urn:oasis:names:tc:opendocument:xmlns:config:1.0");
+-        tmpOfficeDocumentContent.addAttribute("xmlns:ooo", "http://openoffice.org/2004/office");
+-        tmpOfficeDocumentContent.addAttribute("office:version", "1.0");
+-        if (m_isFlatXML)
+-                        tmpOfficeDocumentContent.addAttribute("office:mimetype", "application/x-vnd.oasis.openoffice.drawing");
+-        tmpOfficeDocumentContent.write(mpHandler);
+-
+-        OpenTagGraphicsElement("office:settings").write(mpHandler);
+-
+-        OpenTagGraphicsElement configItemSetOpenElement("config:config-item-set");
+-        configItemSetOpenElement.addAttribute("config:name", "ooo:view-settings");
+-        configItemSetOpenElement.write(mpHandler);
+-
+-        OpenTagGraphicsElement configItemOpenElement1("config:config-item");
+-        configItemOpenElement1.addAttribute("config:name", "VisibleAreaTop");
+-        configItemOpenElement1.addAttribute("config:type", "int");
+-        configItemOpenElement1.write(mpHandler);
+-        mpHandler->characters("0");
+-        mpHandler->endElement("config:config-item");
+-
+-        OpenTagGraphicsElement configItemOpenElement2("config:config-item");
+-        configItemOpenElement2.addAttribute("config:name", "VisibleAreaLeft");
+-        configItemOpenElement2.addAttribute("config:type", "int");
+-        configItemOpenElement2.write(mpHandler);
+-        mpHandler->characters("0");
+-        mpHandler->endElement("config:config-item");
+-
+-        OpenTagGraphicsElement configItemOpenElement3("config:config-item");
+-        configItemOpenElement3.addAttribute("config:name", "VisibleAreaWidth");
+-        configItemOpenElement3.addAttribute("config:type", "int");
+-        configItemOpenElement3.write(mpHandler);
+-        m_value.str("");
+-        m_value << (unsigned)(2540 * width);
+-        mpHandler->characters(m_value.str());
+-        mpHandler->endElement("config:config-item");
+-
+-        OpenTagGraphicsElement configItemOpenElement4("config:config-item");
+-        configItemOpenElement4.addAttribute("config:name", "VisibleAreaHeight");
+-        configItemOpenElement4.addAttribute("config:type", "int");
+-        configItemOpenElement4.write(mpHandler);
+-        m_value.str("");
+-        m_value << (unsigned)(2540 * height);
+-        mpHandler->characters(m_value.str());
+-        mpHandler->endElement("config:config-item");
+-
+-        mpHandler->endElement("config:config-item-set");
+-
+-        mpHandler->endElement("office:settings");
+-
+-}
+-
+-void OdgExporter::endGraphics()
+-{
+-        OpenTagGraphicsElement("office:styles").write(mpHandler);
+-
+-        for (std::vector <GraphicsElement *>::const_iterator iterStroke = mStrokeDashElements.begin();
+-                iterStroke != mStrokeDashElements.end(); iterStroke++)
+-                (*iterStroke)->write(mpHandler);
+-
+-        for (std::vector <GraphicsElement *>::const_iterator iterGradient = mGradientElements.begin();
+-                iterGradient != mGradientElements.end(); iterGradient++)
+-                (*iterGradient)->write(mpHandler);
+-
+-        mpHandler->endElement("office:styles");
+-
+-        OpenTagGraphicsElement("office:automatic-styles").write(mpHandler);
+-
+-        for (std::vector <GraphicsElement *>::const_iterator iterAutomaticStyles = mAutomaticStylesElements.begin();
+-                iterAutomaticStyles != mAutomaticStylesElements.end(); iterAutomaticStyles++)
+-                (*iterAutomaticStyles)->write(mpHandler);
+-
+-        OpenTagGraphicsElement tmpStylePageLayoutOpenElement("style:page-layout");
+-        tmpStylePageLayoutOpenElement.addAttribute("style:name", "PM0");
+-        tmpStylePageLayoutOpenElement.write(mpHandler);
+-
+-        OpenTagGraphicsElement tmpStylePageLayoutPropertiesOpenElement("style:page-layout-properties");
+-        tmpStylePageLayoutPropertiesOpenElement.addAttribute("fo:margin-top", "0in");
+-        tmpStylePageLayoutPropertiesOpenElement.addAttribute("fo:margin-bottom", "0in");
+-        tmpStylePageLayoutPropertiesOpenElement.addAttribute("fo:margin-left", "0in");
+-        tmpStylePageLayoutPropertiesOpenElement.addAttribute("fo:margin-right", "0in");
+-        m_value.str("");
+-        m_value <<  doubleToString(m_width) << "in";
+-        tmpStylePageLayoutPropertiesOpenElement.addAttribute("fo:page-width", m_value.str());
+-        m_value.str("");
+-        m_value << doubleToString(m_height)  << "in";
+-        tmpStylePageLayoutPropertiesOpenElement.addAttribute("fo:page-height", m_value.str());
+-        m_value.str("");
+-        tmpStylePageLayoutPropertiesOpenElement.addAttribute("style:print-orientation", "portrait");
+-        tmpStylePageLayoutPropertiesOpenElement.write(mpHandler);
+-
+-        mpHandler->endElement("style:page-layout-properties");
+-
+-        mpHandler->endElement("style:page-layout");
+-
+-        OpenTagGraphicsElement tmpStyleStyleOpenElement("style:style");
+-        tmpStyleStyleOpenElement.addAttribute("style:name", "dp1");
+-        tmpStyleStyleOpenElement.addAttribute("style:family", "drawing-page");
+-        tmpStyleStyleOpenElement.write(mpHandler);
+-
+-        OpenTagGraphicsElement tmpStyleDrawingPagePropertiesOpenElement("style:drawing-page-properties");
+-        // tmpStyleDrawingPagePropertiesOpenElement.addAttribute("draw:background-size", "border");
+-        tmpStyleDrawingPagePropertiesOpenElement.addAttribute("draw:fill", "none");
+-        tmpStyleDrawingPagePropertiesOpenElement.write(mpHandler);
+-
+-        mpHandler->endElement("style:drawing-page-properties");
+-
+-        mpHandler->endElement("style:style");
+-
+-        mpHandler->endElement("office:automatic-styles");
+-
+-        OpenTagGraphicsElement("office:master-styles").write(mpHandler);
+-
+-        OpenTagGraphicsElement tmpStyleMasterPageOpenElement("style:master-page");
+-        tmpStyleMasterPageOpenElement.addAttribute("style:name", "Default");
+-        tmpStyleMasterPageOpenElement.addAttribute("style:page-layout-name", "PM0");
+-        tmpStyleMasterPageOpenElement.addAttribute("draw:style-name", "dp1");
+-        tmpStyleMasterPageOpenElement.write(mpHandler);
+-
+-        mpHandler->endElement("style:master-page");
+-
+-        mpHandler->endElement("office:master-styles");
+-
+-        OpenTagGraphicsElement("office:body").write(mpHandler);
+-
+-        OpenTagGraphicsElement("office:drawing").write(mpHandler);
+-
+-        OpenTagGraphicsElement tmpDrawPageOpenElement("draw:page");
+-        tmpDrawPageOpenElement.addAttribute("draw:name", "page1");
+-        tmpDrawPageOpenElement.addAttribute("draw:style-name", "dp1");
+-        tmpDrawPageOpenElement.addAttribute("draw:master-page-name", "Default");
+-        tmpDrawPageOpenElement.write(mpHandler);
+-
+-        for (std::vector<GraphicsElement *>::const_iterator bodyIter = mBodyElements.begin();
+-                bodyIter != mBodyElements.end(); bodyIter++)
+-        {
+-                (*bodyIter)->write(mpHandler);
+-        }
+-
+-        mpHandler->endElement("draw:page");
+-        mpHandler->endElement("office:drawing");
+-        mpHandler->endElement("office:body");
+-        mpHandler->endElement("office:document");
+-
+-        mpHandler->endDocument();
+-}
+-
+-void OdgExporter::setPen(const libwpg::WPGPen& pen)
+-{
+-        m_pen = pen;
+-}
+-
+-void OdgExporter::setBrush(const libwpg::WPGBrush& brush)
+-{
+-        m_brush = brush;
+-}
+-
+-void OdgExporter::setFillRule(FillRule rule)
+-{
+-        m_fillRule = rule;
+-}
+-
+-void OdgExporter::startLayer(unsigned int)
+-{
+-}
+-
+-void OdgExporter::endLayer(unsigned int)
+-{
+-}
+-
+-void OdgExporter::drawRectangle(const libwpg::WPGRect& rect, double rx, double )
+-{
+-        writeStyle();
+-        OpenTagGraphicsElement *pDrawRectElement = new OpenTagGraphicsElement("draw:rect");
+-        m_value.str("");
+-        m_value << "gr" << m_styleIndex-1;
+-        pDrawRectElement->addAttribute("draw:style-name", m_value.str());
+-        m_value.str("");
+-        m_value << doubleToString(rect.x1) << "in";
+-        pDrawRectElement->addAttribute("svg:x", m_value.str());
+-        m_value.str("");
+-        m_value << doubleToString(rect.y1) << "in";
+-        pDrawRectElement->addAttribute("svg:y", m_value.str());
+-        m_value.str("");
+-        m_value << doubleToString(rect.x2-rect.x1) << "in";
+-        pDrawRectElement->addAttribute("svg:width", m_value.str());
+-        m_value.str("");
+-        m_value << doubleToString(rect.y2-rect.y1) << "in";
+-        pDrawRectElement->addAttribute("svg:height", m_value.str());
+-        m_value.str("");
+-        m_value << doubleToString(rx) << "in";
+-        // FIXME: what to do when rx != ry ?
+-        pDrawRectElement->addAttribute("draw:corner-radius", m_value.str());
+-        m_value.str("");
+-        mBodyElements.push_back(static_cast<GraphicsElement *>(pDrawRectElement));
+-        mBodyElements.push_back(static_cast<GraphicsElement *>(new CloseTagGraphicsElement("draw:rect")));
+-}
+-
+-void OdgExporter::drawEllipse(const libwpg::WPGPoint& center, double rx, double ry)
+-{
+-        writeStyle();
+-        OpenTagGraphicsElement *pDrawEllipseElement = new OpenTagGraphicsElement("draw:ellipse");
+-        m_value.str("");
+-        m_value << "gr" << m_styleIndex-1;
+-        pDrawEllipseElement->addAttribute("draw:style-name", m_value.str());
+-        m_value.str("");
+-        m_value << doubleToString(center.x - rx) << "in";
+-        pDrawEllipseElement->addAttribute("svg:x", m_value.str());
+-        m_value.str("");
+-        m_value << doubleToString(center.y - ry) << "in";
+-        pDrawEllipseElement->addAttribute("svg:y", m_value.str());
+-        m_value.str("");
+-        m_value << doubleToString(2 * rx) << "in";
+-        pDrawEllipseElement->addAttribute("svg:width", m_value.str());
+-        m_value.str("");
+-        m_value << doubleToString(2 * ry) << "in";
+-        pDrawEllipseElement->addAttribute("svg:height", m_value.str());
+-        m_value.str("");
+-        mBodyElements.push_back(static_cast<GraphicsElement *>(pDrawEllipseElement));
+-        mBodyElements.push_back(static_cast<GraphicsElement *>(new CloseTagGraphicsElement("draw:ellipse")));
+-}
+-
+-void OdgExporter::drawPolygon(const libwpg::WPGPointArray& vertices)
+-{
+-        if(vertices.count() < 2)
+-                return;
+-
+-        if(vertices.count() == 2)
+-        {
+-                const libwpg::WPGPoint& p1 = vertices[0];
+-                const libwpg::WPGPoint& p2 = vertices[1];
+-
+-                writeStyle();
+-                OpenTagGraphicsElement *pDrawLineElement = new OpenTagGraphicsElement("draw:line");
+-                m_value.str("");
+-                m_value << "gr" << m_styleIndex-1;
+-                pDrawLineElement->addAttribute("draw:style-name", m_value.str());
+-                m_value.str("");
+-                pDrawLineElement->addAttribute("draw:text-style-name", "P1");
+-                pDrawLineElement->addAttribute("draw:layer", "layout");
+-                m_value << doubleToString(p1.x)  << "in";
+-                pDrawLineElement->addAttribute("svg:x1", m_value.str());
+-                m_value.str("");
+-                m_value << doubleToString(p1.y)  << "in";
+-                pDrawLineElement->addAttribute("svg:y1", m_value.str());
+-                m_value.str("");
+-                m_value  << doubleToString(p2.x)  << "in";
+-                pDrawLineElement->addAttribute("svg:x2", m_value.str());
+-                m_value.str("");
+-                m_value << doubleToString(p2.y)  << "in";
+-                pDrawLineElement->addAttribute("svg:y2", m_value.str());
+-                m_value.str("");
+-                mBodyElements.push_back(static_cast<GraphicsElement *>(pDrawLineElement));
+-                mBodyElements.push_back(static_cast<GraphicsElement *>(new CloseTagGraphicsElement("draw:line")));
+-        }
+-        else
+-        {
+-                // draw as path
+-                libwpg::WPGPath path;
+-                path.moveTo(vertices[0]);
+-                for(unsigned long ii = 1; ii < vertices.count(); ii++)
+-                        path.lineTo(vertices[ii]);
+-                path.closed = true;
+-                drawPath(path);
+-        }
+-}
+-
+-void OdgExporter::drawPath(const libwpg::WPGPath& path)
+-{
+-        if(path.count() == 0)
+-                return;
+-
+-        // try to find the bounding box
+-        // this is simple convex hull technique, the bounding box might not be
+-        // accurate but that should be enough for this purpose
+-        libwpg::WPGPoint p = path.element(0).point;
+-        libwpg::WPGPoint q = path.element(0).point;
+-        for(unsigned k = 0; k < path.count(); k++)
+-        {
+-                libwpg::WPGPathElement element = path.element(k);
+-                p.x = (p.x > element.point.x) ? element.point.x : p.x;
+-                p.y = (p.y > element.point.y) ? element.point.y : p.y;
+-                q.x = (q.x < element.point.x) ? element.point.x : q.x;
+-                q.y = (q.y < element.point.y) ? element.point.y : q.y;
+-                if(element.type == libwpg::WPGPathElement::CurveToElement)
+-                {
+-                        p.x = (p.x > element.extra1.x) ? element.extra1.x : p.x;
+-                        p.y = (p.y > element.extra1.y) ? element.extra1.y : p.y;
+-                        q.x = (q.x < element.extra1.x) ? element.extra1.x : q.x;
+-                        q.y = (q.y < element.extra1.y) ? element.extra1.y : q.y;
+-                        p.x = (p.x > element.extra2.x) ? element.extra2.x : p.x;
+-                        p.y = (p.y > element.extra2.y) ? element.extra2.y : p.y;
+-                        q.x = (q.x < element.extra2.x) ? element.extra2.x : q.x;
+-                        q.y = (q.y < element.extra2.y) ? element.extra2.y : q.y;
+-                }
+-        }
+-        double vw = q.x - p.x;
+-        double vh = q.y - p.y;
+-
+-        writeStyle();
+-
+-        OpenTagGraphicsElement *pDrawPathElement = new OpenTagGraphicsElement("draw:path");
+-        m_value.str("");
+-        m_value << "gr" << m_styleIndex-1;
+-        pDrawPathElement->addAttribute("draw:style-name", m_value.str());
+-        m_value.str("");
+-        pDrawPathElement->addAttribute("draw:text-style-name", "P1");
+-        pDrawPathElement->addAttribute("draw:layer", "layout");
+-        m_value << doubleToString(p.x)  << "in";
+-        pDrawPathElement->addAttribute("svg:x", m_value.str());
+-        m_value.str("");
+-        m_value << doubleToString(p.y)  << "in";
+-        pDrawPathElement->addAttribute("svg:y", m_value.str());
+-        m_value.str("");
+-        m_value << doubleToString(vw) << "in";
+-        pDrawPathElement->addAttribute("svg:width", m_value.str());
+-        m_value.str("");
+-        m_value << doubleToString(vh) << "in";
+-        pDrawPathElement->addAttribute("svg:height", m_value.str());
+-        m_value.str("");
+-        m_value << "0 0 " << (int)(vw*2540) << " " << (int)(vh*2540);
+-        pDrawPathElement->addAttribute("svg:viewBox", m_value.str());
+-        m_value.str("");
+-
+-        for(unsigned i = 0; i < path.count(); i++)
+-        {
+-                libwpg::WPGPathElement element = path.element(i);
+-                libwpg::WPGPoint point = element.point;
+-                switch(element.type)
+-                {
+-                        // 2540 is 2.54*1000, 2.54 in = 1 in
+-                        case libwpg::WPGPathElement::MoveToElement:
+-                                m_value << "M" << (int)((point.x-p.x)*2540) << " ";
+-                                m_value << (int)((point.y-p.y)*2540);
+-                                break;
+-
+-                        case libwpg::WPGPathElement::LineToElement:
+-                                m_value << "L" << (int)((point.x-p.x)*2540) << " ";
+-                                m_value << (int)((point.y-p.y)*2540);
+-                                break;
+-
+-                        case libwpg::WPGPathElement::CurveToElement:
+-                                m_value << "C" << (int)((element.extra1.x-p.x)*2540) << " ";
+-                                m_value << (int)((element.extra1.y-p.y)*2540) << " ";
+-                                m_value << (int)((element.extra2.x-p.x)*2540) << " ";
+-                                m_value << (int)((element.extra2.y-p.y)*2540) << " ";
+-                                m_value << (int)((point.x-p.x)*2540) << " ";
+-                                m_value << (int)((point.y-p.y)*2540);
+-                                break;
+-
+-                        default:
+-                                break;
+-                }
+-        }
+-        if(path.closed)
+-                m_value << " Z";
+-        pDrawPathElement->addAttribute("svg:d", m_value.str());
+-        m_value.str("");
+-        mBodyElements.push_back(static_cast<GraphicsElement *>(pDrawPathElement));
+-        mBodyElements.push_back(static_cast<GraphicsElement *>(new CloseTagGraphicsElement("draw:path")));
+-}
+-
+-
+-void OdgExporter::drawBitmap(const libwpg::WPGBitmap& bitmap)
+-{
+-        OpenTagGraphicsElement *pDrawFrameElement = new OpenTagGraphicsElement("draw:frame");
+-        m_value.str("");
+-        m_value << doubleToString(bitmap.rect.x1) << "in";
+-        pDrawFrameElement->addAttribute("svg:x", m_value.str());
+-        m_value.str("");
+-        m_value << doubleToString(bitmap.rect.y1) << "in";
+-        pDrawFrameElement->addAttribute("svg:y", m_value.str());
+-        m_value.str("");
+-        m_value << doubleToString(bitmap.rect.height()) << "in";
+-        pDrawFrameElement->addAttribute("svg:height", m_value.str());
+-        m_value.str("");
+-        m_value << doubleToString(bitmap.rect.width()) << "in";
+-        pDrawFrameElement->addAttribute("svg:width", m_value.str());
+-        mBodyElements.push_back(static_cast<GraphicsElement *>(pDrawFrameElement));
+-
+-        mBodyElements.push_back(static_cast<GraphicsElement *>(new OpenTagGraphicsElement("draw:image")));
+-
+-        mBodyElements.push_back(static_cast<GraphicsElement *>(new OpenTagGraphicsElement("office:binary-data")));
+-
+-        libwpg::WPGString base64Binary;
+-        bitmap.generateBase64DIB(base64Binary);
+-        mBodyElements.push_back(static_cast<GraphicsElement *>(new CharDataGraphicsElement(base64Binary.cstr())));
+-
+-        mBodyElements.push_back(static_cast<GraphicsElement *>(new CloseTagGraphicsElement("office:binary-data")));
+-
+-        mBodyElements.push_back(static_cast<GraphicsElement *>(new CloseTagGraphicsElement("draw:image")));
+-
+-        mBodyElements.push_back(static_cast<GraphicsElement *>(new CloseTagGraphicsElement("draw:frame")));
+-}
+-
+-void OdgExporter::drawImageObject(const libwpg::WPGBinaryData& binaryData)
+-{
+-        if (binaryData.mimeType.length() <= 0)
+-                return;
+-        OpenTagGraphicsElement *pDrawFrameElement = new OpenTagGraphicsElement("draw:frame");
+-        m_value.str("");
+-        m_value << doubleToString(binaryData.rect.x1) << "in";
+-        pDrawFrameElement->addAttribute("svg:x", m_value.str());
+-        m_value.str("");
+-        m_value << doubleToString(binaryData.rect.y1) << "in";
+-        pDrawFrameElement->addAttribute("svg:y", m_value.str());
+-        m_value.str("");
+-        m_value << doubleToString(binaryData.rect.height()) << "in";
+-        pDrawFrameElement->addAttribute("svg:height", m_value.str());
+-        m_value.str("");
+-        m_value << doubleToString(binaryData.rect.width()) << "in";
+-        pDrawFrameElement->addAttribute("svg:width", m_value.str());
+-        mBodyElements.push_back(static_cast<GraphicsElement *>(pDrawFrameElement));
+-
+-        mBodyElements.push_back(static_cast<GraphicsElement *>(new OpenTagGraphicsElement("draw:image")));
+-
+-        mBodyElements.push_back(static_cast<GraphicsElement *>(new OpenTagGraphicsElement("office:binary-data")));
+-
+-        libwpg::WPGString base64Binary = binaryData.getBase64Data();
+-        mBodyElements.push_back(static_cast<GraphicsElement *>(new CharDataGraphicsElement(base64Binary.cstr())));
+-
+-        mBodyElements.push_back(static_cast<GraphicsElement *>(new CloseTagGraphicsElement("office:binary-data")));
+-
+-        mBodyElements.push_back(static_cast<GraphicsElement *>(new CloseTagGraphicsElement("draw:image")));
+-
+-        mBodyElements.push_back(static_cast<GraphicsElement *>(new CloseTagGraphicsElement("draw:frame")));
+-}
+-
+-
+-static std::string colorToHex(const libwpg::WPGColor& color)
+-{
+-        char hexdigits[] = "0123456789abcdef";
+-        char buffer[] = "123456";
+-        buffer[0] = hexdigits[(color.red >> 4) & 15];
+-        buffer[1] = hexdigits[color.red & 15];
+-        buffer[2] = hexdigits[(color.green >> 4) & 15];
+-        buffer[3] = hexdigits[color.green & 15];
+-        buffer[4] = hexdigits[(color.blue >> 4) & 15];
+-        buffer[5] = hexdigits[color.blue & 15];
+-        return std::string(buffer);
+-}
+-
+-void OdgExporter::writeStyle()
+-{
+-        m_value.str("");
+-        m_name.str("");
+-
+-        if(!m_pen.solid && (m_pen.dashArray.count() >=2 ) )
+-        {
+-                // ODG only supports dashes with the same length of spaces inbetween
+-                // here we take the first space and assume everything else the same
+-                // note that dash length is written in percentage
+-                double distance = m_pen.dashArray.at(1);
+-                OpenTagGraphicsElement *tmpDrawStrokeDashElement = new OpenTagGraphicsElement("draw:stroke-dash");
+-                tmpDrawStrokeDashElement->addAttribute("draw:style", "rect");
+-                m_value << "Dash_" << m_dashIndex++;
+-                tmpDrawStrokeDashElement->addAttribute("draw:name", m_value.str());
+-                m_value.str("");
+-                m_value << doubleToString(distance*100) << "%";
+-                tmpDrawStrokeDashElement->addAttribute("draw:distance", m_value.str());
+-                m_value.str("");
+-                for(unsigned i = 0; i < m_pen.dashArray.count()/2; i++)
+-                {
+-                        m_name << "draw:dots" << i+1;
+-                        tmpDrawStrokeDashElement->addAttribute(m_name.str(), "1");
+-                        m_name.str("");
+-                        m_name << "draw:dots" << i+1 << "-length";
+-                        m_value << doubleToString(100*m_pen.dashArray.at(i*2)) << "%";
+-                        tmpDrawStrokeDashElement->addAttribute(m_name.str(), m_value.str());
+-                        m_name.str("");
+-                        m_value.str("");
+-                }
+-                mStrokeDashElements.push_back(static_cast<GraphicsElement *>(tmpDrawStrokeDashElement));
+-                mStrokeDashElements.push_back(static_cast<GraphicsElement *>(new CloseTagGraphicsElement("draw:stroke-dash")));
+-        }
+-
+-        if(m_brush.style == libwpg::WPGBrush::Gradient)
+-        {
+-                OpenTagGraphicsElement *tmpDrawGradientElement = new OpenTagGraphicsElement("draw:gradient");
+-                tmpDrawGradientElement->addAttribute("draw:style", "linear");
+-                m_value << "Gradient_" << m_gradientIndex++;
+-                tmpDrawGradientElement->addAttribute("draw:name", m_value.str());
+-                m_value.str("");
+-
+-                // ODG angle unit is 0.1 degree
+-                double angle = -m_brush.gradient.angle();
+-                while(angle < 0)
+-                        angle += 360;
+-                while(angle > 360)
+-                        angle -= 360;
+-
+-                m_value << (unsigned)(angle*10);
+-                tmpDrawGradientElement->addAttribute("draw:angle", m_value.str());
+-                m_value.str("");
+-
+-                libwpg::WPGColor startColor = m_brush.gradient.stopColor(0);
+-                libwpg::WPGColor stopColor = m_brush.gradient.stopColor(1);
+-                m_value << "#" << colorToHex(startColor);
+-                tmpDrawGradientElement->addAttribute("draw:start-color", m_value.str());
+-                m_value.str("");
+-                m_value << "#" << colorToHex(stopColor);
+-                tmpDrawGradientElement->addAttribute("draw:end-color", m_value.str());
+-                m_value.str("");
+-                tmpDrawGradientElement->addAttribute("draw:start-intensity", "100%");
+-                tmpDrawGradientElement->addAttribute("draw:end-intensity", "100%");
+-                tmpDrawGradientElement->addAttribute("draw:border", "0%");
+-                mGradientElements.push_back(static_cast<GraphicsElement *>(tmpDrawGradientElement));
+-                mGradientElements.push_back(static_cast<GraphicsElement *>(new CloseTagGraphicsElement("draw:gradient")));
+-        }
+-
+-        OpenTagGraphicsElement *tmpStyleStyleElement = new OpenTagGraphicsElement("style:style");
+-        m_value << "gr" << m_styleIndex;
+-        tmpStyleStyleElement->addAttribute("style:name", m_value.str());
+-        m_value.str("");
+-        tmpStyleStyleElement->addAttribute("style:family", "graphic");
+-        tmpStyleStyleElement->addAttribute("style:parent-style-name", "standard");
+-        mAutomaticStylesElements.push_back(static_cast<GraphicsElement *>(tmpStyleStyleElement));
+-
+-        OpenTagGraphicsElement *tmpStyleGraphicPropertiesElement = new OpenTagGraphicsElement("style:graphic-properties");
+-
+-        if(m_pen.width > 0.0)
+-        {
+-                m_value << doubleToString(m_pen.width) << "in";
+-                tmpStyleGraphicPropertiesElement->addAttribute("svg:stroke-width", m_value.str());
+-                m_value.str("");
+-                m_value << "#" << colorToHex(m_pen.foreColor);
+-                tmpStyleGraphicPropertiesElement->addAttribute("svg:stroke-color", m_value.str());
+-                m_value.str("");
+-
+-                if(!m_pen.solid)
+-                {
+-                        tmpStyleGraphicPropertiesElement->addAttribute("draw:stroke", "dash");
+-                        m_value << "Dash_" << m_dashIndex-1;
+-                        tmpStyleGraphicPropertiesElement->addAttribute("draw:stroke-dash", m_value.str());
+-                        m_value.str("");
+-                }
+-        }
+-        else
+-                tmpStyleGraphicPropertiesElement->addAttribute("draw:stroke", "none");
+-
+-        if(m_brush.style == libwpg::WPGBrush::NoBrush)
+-                tmpStyleGraphicPropertiesElement->addAttribute("draw:fill", "none");
+-
+-        if(m_brush.style == libwpg::WPGBrush::Solid)
+-        {
+-                tmpStyleGraphicPropertiesElement->addAttribute("draw:fill", "solid");
+-                m_value << "#" << colorToHex(m_brush.foreColor);
+-                tmpStyleGraphicPropertiesElement->addAttribute("draw:fill-color", m_value.str());
+-                m_value.str("");
+-        }
+-
+-        if(m_brush.style == libwpg::WPGBrush::Gradient)
+-        {
+-                tmpStyleGraphicPropertiesElement->addAttribute("draw:fill", "gradient");
+-                m_value << "Gradient_" << m_gradientIndex-1;
+-                tmpStyleGraphicPropertiesElement->addAttribute("draw:fill-gradient-name", m_value.str());
+-                m_value.str("");
+-        }
+-
+-        mAutomaticStylesElements.push_back(static_cast<GraphicsElement *>(tmpStyleGraphicPropertiesElement));
+-        mAutomaticStylesElements.push_back(static_cast<GraphicsElement *>(new CloseTagGraphicsElement("style:graphic-properties")));
+-
+-        mAutomaticStylesElements.push_back(static_cast<GraphicsElement *>(new CloseTagGraphicsElement("style:style")));
+-        m_styleIndex++;
+-}
+diff -Nur koffice-2.3.0/filters/karbon/wpg/import/OdgExporter.hxx koffice-2.3.0-libwpd09-libwpg02/filters/karbon/wpg/import/OdgExporter.hxx
+--- koffice-2.3.0/filters/karbon/wpg/import/OdgExporter.hxx	2010-12-29 11:36:55.000000000 +0100
++++ koffice-2.3.0-libwpd09-libwpg02/filters/karbon/wpg/import/OdgExporter.hxx	1970-01-01 01:00:00.000000000 +0100
+@@ -1,77 +0,0 @@
+-/* libwpg
+- * Copyright (C) 2006 Ariya Hidayat (ariya at kde.org)
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Library General Public
+- * License as published by the Free Software Foundation; either
+- * version 2 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Library General Public License for more details.
+- *
+- * You should have received a copy of the GNU Library General Public
+- * License along with this library; if not, write to the 
+- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+- * Boston, MA  02111-1301 USA
+- *
+- * For further information visit http://libwpg.sourceforge.net
+- */
+-
+-/* "This product is not manufactured, approved, or supported by
+- * Corel Corporation or Corel Corporation Limited."
+- */
+-
+-#ifndef __ODGEXPORTER_H__
+-#define __ODGEXPORTER_H__
+-
+-#include <iostream>
+-#include <sstream>
+-#include <string>
+-
+-#include <libwpg/libwpg.h>
+-#include "GraphicsElement.hxx"
+-
+-class OdgExporter : public libwpg::WPGPaintInterface {
+-public:
+-	explicit OdgExporter(GraphicsHandler *pHandler,
+-			     const bool isFlatXML = false);
+-	~OdgExporter();
+-
+-	void startGraphics(double imageWidth, double imageHeight);
+-	void endGraphics();
+-	void startLayer(unsigned int id);
+-	void endLayer(unsigned int id);
+-
+-	void setPen(const libwpg::WPGPen& pen);
+-	void setBrush(const libwpg::WPGBrush& brush);
+-	void setFillRule(FillRule rule);
+-
+-	void drawRectangle(const libwpg::WPGRect& rect, double rx, double ry);
+-	void drawEllipse(const libwpg::WPGPoint& center, double rx, double ry);
+-	void drawPolygon(const libwpg::WPGPointArray& vertices);
+-	void drawPath(const libwpg::WPGPath& path);
+-	void drawBitmap(const libwpg::WPGBitmap& bitmap);
+-	void drawImageObject(const libwpg::WPGBinaryData& binaryData);
+-
+-private:
+-	std::vector <GraphicsElement *> mBodyElements;
+-	std::vector <GraphicsElement *> mAutomaticStylesElements;
+-	std::vector <GraphicsElement *> mStrokeDashElements;
+-	std::vector <GraphicsElement *> mGradientElements;
+-	GraphicsHandler *mpHandler;
+-
+-	libwpg::WPGPen m_pen;
+-	libwpg::WPGBrush m_brush;
+-	FillRule m_fillRule;
+-	int m_gradientIndex;
+-	int m_dashIndex;
+-	int m_styleIndex;
+-	void writeStyle();
+-	std::ostringstream m_value, m_name;
+-	double m_width, m_height;
+-	const bool m_isFlatXML;
+-};
+-
+-#endif // __ODGEXPORTER_H__
+diff -Nur koffice-2.3.0/filters/karbon/wpg/import/WPGImport.cpp koffice-2.3.0-libwpd09-libwpg02/filters/karbon/wpg/import/WPGImport.cpp
+--- koffice-2.3.0/filters/karbon/wpg/import/WPGImport.cpp	2010-12-29 11:36:55.000000000 +0100
++++ koffice-2.3.0-libwpd09-libwpg02/filters/karbon/wpg/import/WPGImport.cpp	2011-01-02 17:46:15.000000000 +0100
+@@ -20,23 +20,25 @@
+ #include <WPGImport.h>
+ #include <WPGImport.moc>
+ 
+-#include <QBuffer>
+-#include <QByteArray>
+-#include <QString>
+-
+-#include <kdebug.h>
+ #include <KoFilterChain.h>
+ #include <KoGlobal.h>
+ #include <KoUnit.h>
++#include <KoXmlWriter.h>
++
+ #include <kpluginfactory.h>
++#include <KDebug>
+ 
+-#include <KoXmlWriter.h>
++
++#include <QtCore/QString>
++#include <QtCore/QFile>
+ 
+ #include <libwpg/libwpg.h>
++#if LIBWPG_VERSION_MINOR<2
+ #include <libwpg/WPGStreamImplementation.h>
+-
+-#include "FileOutputHandler.hxx"
+-#include "OdgExporter.hxx"
++#else
++#include <libwpd-stream/libwpd-stream.h>
++#include <libwpd/libwpd.h>
++#endif
+ 
+ #include <iostream>
+ 
+@@ -52,38 +54,16 @@
+ {
+ }
+ 
+-static QByteArray createManifest()
+-{
+-    KoXmlWriter* manifestWriter;
+-    QByteArray manifestData;
+-    QBuffer manifestBuffer(&manifestData);
+-
+-    manifestBuffer.open(QIODevice::WriteOnly);
+-    manifestWriter = new KoXmlWriter(&manifestBuffer);
+-
+-    manifestWriter->startDocument("manifest:manifest");
+-    manifestWriter->startElement("manifest:manifest");
+-    manifestWriter->addAttribute("xmlns:manifest", "urn:oasis:names:tc:openoffice:xmlns:manifest:1.0");
+-    manifestWriter->addManifestEntry("/", "application/vnd.oasis.opendocument.graphics");
+-    //manifestWriter->addManifestEntry( "styles.xml", "text/xml" );
+-    manifestWriter->addManifestEntry("content.xml", "text/xml");
+-    manifestWriter->endElement();
+-    manifestWriter->endDocument();
+-    delete manifestWriter;
+-
+-    return manifestData;
+-}
+-
+ 
+ KoFilter::ConversionStatus WPGImport::convert(const QByteArray& from, const QByteArray& to)
+ {
+     if (from != "application/x-wpg")
+         return KoFilter::NotImplemented;
+ 
+-    if (to != "application/vnd.oasis.opendocument.graphics")
++    if (to != "image/svg+xml")
+         return KoFilter::NotImplemented;
+ 
+-
++#if LIBWPG_VERSION_MINOR<2
+     WPXInputStream* input = new libwpg::WPGFileStream(m_chain->inputFile().toLocal8Bit());
+     if (input->isOLEStream()) {
+         WPXInputStream* olestream = input->getDocumentOLEStream();
+@@ -92,58 +72,41 @@
+             input = olestream;
+         }
+     }
++    libwpg::WPGString output;
++#else
++    WPXInputStream* input = new WPXFileStream(m_chain->inputFile().toLocal8Bit());
++    if (input->isOLEStream()) {
++        WPXInputStream* olestream = input->getDocumentOLEStream("Anything");
++        if (olestream) {
++            delete input;
++            input = olestream;
++        }
++     }
++     ::WPXString output;
++#endif
+ 
+     if (!libwpg::WPGraphics::isSupported(input)) {
+-        std::cerr << "ERROR: Unsupported file format (unsupported version) or file is encrypted!" << std::endl;
++        kWarning() << "ERROR: Unsupported file format (unsupported version) or file is encrypted!";
+         delete input;
+         return KoFilter::NotImplemented;
+     }
+ 
+-    // do the conversion
+-    std::ostringstream tmpStringStream;
+-    FileOutputHandler tmpHandler(tmpStringStream);
+-    OdgExporter exporter(&tmpHandler);
+-    libwpg::WPGraphics::parse(input, &exporter);
+-    delete input;
+-
+-
+-    // create output store
+-    KoStore* storeout;
+-    storeout = KoStore::createStore(m_chain->outputFile(), KoStore::Write,
+-                                    "application/vnd.oasis.opendocument.graphics", KoStore::Zip);
+-
+-    if (!storeout) {
+-        kWarning() << "Couldn't open the requested file.";
+-        return KoFilter::FileNotFound;
+-    }
+-
+-#if 0
+-    if (!storeout->open("styles.xml")) {
+-        kWarning() << "Couldn't open the file 'styles.xml'.";
+-        return KoFilter::CreationError;
++    if (!libwpg::WPGraphics::generateSVG(input, output)) {
++        kWarning() << "ERROR: SVG Generation failed!";
++        delete input;
++        return KoFilter::ParsingError;
+     }
+-    //storeout->write( createStyles() );
+-    storeout->close();
+-#endif
+ 
+-    if (!storeout->open("content.xml")) {
+-        kWarning() << "Couldn't open the file 'content.xml'.";
+-        return KoFilter::CreationError;
+-    }
+-    storeout->write(tmpStringStream.str().c_str());
+-    storeout->close();
++    delete input;
+ 
+-    // store document manifest
+-    storeout->enterDirectory("META-INF");
+-    if (!storeout->open("manifest.xml")) {
+-        kWarning() << "Couldn't open the file 'META-INF/manifest.xml'.";
+-        return KoFilter::CreationError;
++    QFile outputFile(m_chain->outputFile());
++    if(!outputFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
++        kWarning() << "ERROR: Could not open output file" << m_chain->outputFile();
++        return KoFilter::InternalError;
+     }
+-    storeout->write(createManifest());
+-    storeout->close();
+ 
+-    // we are done!
+-    delete storeout;
++    outputFile.write(output.cstr());
++    outputFile.close();
+ 
+     return KoFilter::OK;
+ }
+diff -Nur koffice-2.3.0/filters/kword/wordperfect/import/wpimport.cc koffice-2.3.0-libwpd09-libwpg02/filters/kword/wordperfect/import/wpimport.cc
+--- koffice-2.3.0/filters/kword/wordperfect/import/wpimport.cc	2010-12-29 11:36:54.000000000 +0100
++++ koffice-2.3.0-libwpd09-libwpg02/filters/kword/wordperfect/import/wpimport.cc	2011-01-02 18:46:28.000000000 +0100
+@@ -29,10 +29,113 @@
+ K_EXPORT_PLUGIN(WPImportFactory("kofficefilters"))
+ 
+ #include <libwpd/libwpd.h>
++#ifndef LIBWPD_VERSION_MINOR
++#define LIBWPD_VERSION_MINOR 8
++#endif
++#if LIBWPD_VERSION_MINOR>8
++#include <libwpd-stream/libwpd-stream.h>
++#else
+ #include <libwpd/WPXStream.h>
+ #include <libwpd/WPXHLListenerImpl.h>
++#endif
+ 
+ 
++#if LIBWPD_VERSION_MINOR>8
++class WPXMemoryInputStream : public WPXInputStream
++{
++public:
++    WPXMemoryInputStream(unsigned char *data, unsigned long size);
++    virtual ~WPXMemoryInputStream();
++
++    virtual bool isOLEStream() {
++        return false;
++    }
++    virtual WPXInputStream * getDocumentOLEStream(const char *name) {
++        return NULL;
++    }
++
++    const virtual unsigned char *read(unsigned long numBytes, unsigned long &numBytesRead);
++    virtual int seek(long offset, WPX_SEEK_TYPE seekType);
++    virtual long tell();
++    virtual bool atEOS();
++
++private:
++    long m_offset;
++    size_t m_size;
++    unsigned char *m_data;
++};
++
++WPXMemoryInputStream::WPXMemoryInputStream(unsigned char *data, unsigned long size) :
++	WPXInputStream(),
++	m_offset(0),
++	m_size(size),
++	m_data(data)
++{
++}
++
++WPXMemoryInputStream::~WPXMemoryInputStream()
++{
++}
++
++const unsigned char * WPXMemoryInputStream::read(unsigned long numBytes, unsigned long &numBytesRead)
++{
++	numBytesRead = 0;
++
++	if (numBytes == 0)
++		return 0;
++	
++	int numBytesToRead;
++
++	if ((m_offset+numBytes) < m_size)
++		numBytesToRead = numBytes;
++	else
++		numBytesToRead = m_size - m_offset;
++	
++	numBytesRead = numBytesToRead; // about as paranoid as we can be..
++
++	if (numBytesToRead == 0)
++		return 0;
++
++	long oldOffset = m_offset;
++	m_offset += numBytesToRead;
++	
++	return &m_data[oldOffset];
++}
++
++int WPXMemoryInputStream::seek(long offset, WPX_SEEK_TYPE seekType)
++{
++	if (seekType == WPX_SEEK_CUR)
++		m_offset += offset;
++	else if (seekType == WPX_SEEK_SET)
++		m_offset = offset;
++
++	if (m_offset < 0)
++	{
++		m_offset = 0;
++		return 1;
++	}
++	if ((long)m_offset > (long)m_size)
++	{
++		m_offset = m_size;
++		return 1;
++	}
++
++	return 0;
++}
++
++long WPXMemoryInputStream::tell()
++{
++	return m_offset;
++}
++
++bool WPXMemoryInputStream::atEOS()
++{
++	if ((long)m_offset == (long)m_size) 
++		return true; 
++
++	return false;
++}
++#else
+ class WPXMemoryInputStream : public WPXInputStream
+ {
+ public:
+@@ -125,13 +228,70 @@
+ 
+     return false;
+ }
++#endif
+ 
+-
++#if LIBWPD_VERSION_MINOR>8
++class KWordListener : public WPXDocumentInterface
++#else
+ class KWordListener : public WPXHLListenerImpl
++#endif
+ {
+ public:
+     KWordListener();
+     virtual ~KWordListener();
++#if LIBWPD_VERSION_MINOR>8
++	virtual void setDocumentMetaData(const WPXPropertyList &propList) {};
++	virtual void startDocument();
++	virtual void endDocument();
++	virtual void definePageStyle(const WPXPropertyList &propList) {};
++	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 defineParagraphStyle(const WPXPropertyList &propList, const WPXPropertyListVector &tabStops) {};
++	virtual void openParagraph(const WPXPropertyList &propList, const WPXPropertyListVector &tabStops);
++	virtual void closeParagraph();
++	virtual void defineCharacterStyle(const WPXPropertyList &propList) {};
++	virtual void openSpan(const WPXPropertyList &propList);
++	virtual void closeSpan();
++	virtual void defineSectionStyle(const WPXPropertyList &propList, const WPXPropertyListVector &columns) {};
++	virtual void openSection(const WPXPropertyList &propList, const WPXPropertyListVector &columns) {};
++	virtual void closeSection() {};
++	virtual void insertTab();
++	virtual void insertSpace() {};
++	virtual void insertText(const WPXString &text);
++ 	virtual void insertLineBreak();
++	virtual void insertField(const WPXString &type, const WPXPropertyList &propList) {};
++	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 openFootnote(const WPXPropertyList &propList) {};
++	virtual void closeFootnote() {};
++	virtual void openEndnote(const WPXPropertyList &propList) {};
++	virtual void closeEndnote() {};
++	virtual void openComment(const WPXPropertyList &propList) {};
++	virtual void closeComment() {};
++	virtual void openTextBox(const WPXPropertyList &propList) {};
++	virtual void closeTextBox() {};
++ 	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 openFrame(const WPXPropertyList &propList) {};
++	virtual void closeFrame() {};
++	virtual void insertBinaryObject(const WPXPropertyList &propList, const WPXBinaryData &data) {};
++	virtual void insertEquation(const WPXPropertyList &propList, const WPXString &data) {};
++#else
+ 
+     virtual void setDocumentMetaData(const WPXPropertyList &propList) {}
+ 
+@@ -177,6 +337,7 @@
+     virtual void closeTableCell() {}
+     virtual void insertCoveredTableCell(const WPXPropertyList &propList) {}
+     virtual void closeTable() {}
++#endif
+ 
+     QString root;
+ 
+@@ -288,7 +449,11 @@
+ 
+     // open and parse the file
+     KWordListener listener;
++#if LIBWPD_VERSION_MINOR>8
++    WPDResult error = WPDocument::parse(instream, static_cast<WPXDocumentInterface *>(&listener), NULL);
++#else
+     WPDResult error = WPDocument::parse(instream, static_cast<WPXHLListenerImpl *>(&listener));
++#endif
+     delete instream;
+ 
+     if (error != WPD_OK)
diff --git a/koffice.spec b/koffice.spec
index aace581..6ed71c1 100644
--- a/koffice.spec
+++ b/koffice.spec
@@ -21,7 +21,7 @@
 Name:           koffice
 Epoch:          3 
 Version:        2.3.0
-Release:        1%{?dist}
+Release:        2%{?dist}
 Summary:        An integrated office suite
 
 Group:          Applications/Productivity
@@ -34,6 +34,14 @@ BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 ## upstreamable patches
 ## upstream patches
 
+# backport support for libwpd 0.9 and libwpg 0.2 from Calligra master:
+# http://gitweb.kde.org/calligra.git/commit/80df4d7ec727d6cc462aaca97688704b2bcd713e
+# http://gitweb.kde.org/calligra.git/commit/2e50c22959fffa3fd18f0162b0688623206cf965
+# http://gitweb.kde.org/calligra.git/commit/2772444699655792e22a004c60acbdea139b51cf
+# http://gitweb.kde.org/calligra.git/commit/9cda7aed2ea103750172e61f5c800a474913fa59
+# http://git.reviewboard.kde.org/r/100287/ (warning fix, pending approval)
+Patch100:       koffice-2.3.0-libwpd09-libwpg02.patch
+
 #-- The following OPTIONAL packages could NOT be located on your system.
 #-- Consider installing them to enable more features from this software.
 #-----------------------------------------------------------------------------
@@ -82,13 +90,8 @@ BuildRequires: libjpeg-devel
 BuildRequires: libkdcraw-devel >= 0.2.0
 BuildRequires: libpng-devel
 BuildRequires: libtiff-devel
-## FIXME: support for newer versions on f15+ is busted
-%if 0%{?fedora} < 15
-%define wpd 1
-%define wpg 1
-%endif
-%{?wpd:BuildRequires: libwpd-devel}
-%{?wpg:BuildRequires: libwpg-devel}
+BuildRequires: libwpd-devel
+BuildRequires: libwpg-devel
 BuildRequires: libxslt-devel
 %if 0%{?kexi}
 BuildRequires: freetds-devel
@@ -495,6 +498,7 @@ Requires:       libxml2-devel
 
 %prep
 %setup -q
+%patch100 -p1 -b .libwpd09-libwpg02
 
 ## kdchart munging begin
 pushd plugins/chartshape/kdchart
@@ -1116,13 +1120,9 @@ fi
 %{_kde4_libdir}/kde4/rtfimport.*
 %{_kde4_libdir}/kde4/wmlexport.*
 %{_kde4_libdir}/kde4/wmlimport.*
-%if 0%{?wpd}
 %{_kde4_libdir}/kde4/wpexport.*
 %{_kde4_libdir}/kde4/wpimport.*
-%endif
-%if 0%{?wpg}
 %{_kde4_libdir}/kde4/wpgimport.*
-%endif
 %{_kde4_libdir}/kde4/mswordodf_import.*
 %{_kde4_libdir}/kde4/xlsximport.*
 %{_kde4_libdir}/kde4/xsltimport.*
@@ -1204,6 +1204,9 @@ fi
 
 
 %changelog
+* Sun Jan 02 2011 Kevin Kofler <Kevin at tigcc.ticalc.org> - 3:2.3.0-2
+- backport support for libwpd 0.9 and libwpg 0.2 from Calligra master
+
 * Sat Jan 01 2011 Rex Dieter <rdieter at fedoraproject.org> - 3:2.3.0-1
 - koffice-2.3.0
 


More information about the scm-commits mailing list