# --- SDE-COPYRIGHT-NOTE-BEGIN --- # This copyright note is auto-generated by ./scripts/Create-CopyPatch. # # Filename: package/.../koffice/0001-koffice-2.3.1-fix-wpg-import.patch # Copyright (C) 2011 The OpenSDE Project # # More information can be found in the files COPYING and README. # # This patch file is dual-licensed. It is available under the license the # patched project is licensed under, as long as it is an OpenSource license # as defined at http://www.opensource.org/ (e.g. BSD, X11) or 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. # --- SDE-COPYRIGHT-NOTE-END --- From: Jan Hambrecht Date: Thu, 30 Dec 2010 14:28:26 +0000 Subject: make wpg import compile again, simplified code by using high level libwpg function to convert to svg, X-Git-Tag: v2.3.70~681^2 X-Git-Url: http://quickgit.kde.org/?p=calligra.git&a=commitdiff&h=9cda7aed2ea103750172e61f5c800a474913fa59 --- make wpg import compile again, simplified code by using high level libwpg function to convert to svg, this makes us less dependent on libwpg API changes, code works with old an new libwpg versions --- Note: This patch is a backport done by people from Fedora! http://pkgs.fedoraproject.org/gitweb/?p=koffice.git;a=blob;f=koffice-2.3.1-libwpg02.patch;h=1e7761bc17dcf67dcb4cb99454a9f90cb1829f4b;hb=HEAD diff -Nur koffice-2.3.1/filters/karbon/wpg/import/CMakeLists.txt koffice-2.3.1-libwpg02/filters/karbon/wpg/import/CMakeLists.txt --- koffice-2.3.1/filters/karbon/wpg/import/CMakeLists.txt 2011-01-15 21:05:35.000000000 +0100 +++ koffice-2.3.1-libwpg02/filters/karbon/wpg/import/CMakeLists.txt 2011-01-18 07:40:25.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.1/filters/karbon/wpg/import/FileOutputHandler.cxx koffice-2.3.1-libwpg02/filters/karbon/wpg/import/FileOutputHandler.cxx --- koffice-2.3.1/filters/karbon/wpg/import/FileOutputHandler.cxx 2011-01-15 21:05:35.000000000 +0100 +++ koffice-2.3.1-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@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 > &xPropList) -{ - if (mbIsTagOpened) - { - mContentStream << ">"; - mbIsTagOpened = false; - } - mContentStream << "<" << psName; - - for (std::vector >::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 << ""; - mbIsTagOpened = false; - } - } - else - { - mContentStream << ""; - 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.1/filters/karbon/wpg/import/FileOutputHandler.hxx koffice-2.3.1-libwpg02/filters/karbon/wpg/import/FileOutputHandler.hxx --- koffice-2.3.1/filters/karbon/wpg/import/FileOutputHandler.hxx 2011-01-15 21:05:35.000000000 +0100 +++ koffice-2.3.1-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@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 -#include -#include -#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 > &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.1/filters/karbon/wpg/import/GraphicsElement.cxx koffice-2.3.1-libwpg02/filters/karbon/wpg/import/GraphicsElement.cxx --- koffice-2.3.1/filters/karbon/wpg/import/GraphicsElement.cxx 2011-01-15 21:05:35.000000000 +0100 +++ koffice-2.3.1-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@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 - -#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 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.1/filters/karbon/wpg/import/GraphicsElement.hxx koffice-2.3.1-libwpg02/filters/karbon/wpg/import/GraphicsElement.hxx --- koffice-2.3.1/filters/karbon/wpg/import/GraphicsElement.hxx 2011-01-15 21:05:35.000000000 +0100 +++ koffice-2.3.1-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@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 -#include -#include - -#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 > 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.1/filters/karbon/wpg/import/GraphicsHandler.hxx koffice-2.3.1-libwpg02/filters/karbon/wpg/import/GraphicsHandler.hxx --- koffice-2.3.1/filters/karbon/wpg/import/GraphicsHandler.hxx 2011-01-15 21:05:35.000000000 +0100 +++ koffice-2.3.1-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@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@sun.com) - * - */ - -/* "This product is not manufactured, approved, or supported by - * Corel Corporation or Corel Corporation Limited." - */ -#ifndef _GRAPHICSHANDLER_H -#define _GRAPHICSHANDLER_H -#include -#include -#include - -class GraphicsHandler -{ -public: - virtual ~GraphicsHandler() {} - virtual void startDocument() = 0; - virtual void endDocument() = 0; - virtual void startElement(const char *psName, const std::vector< std::pair > &xPropList) = 0; - virtual void endElement(const char *psName) = 0; - virtual void characters(const std::string &sCharacters) = 0; -}; -#endif diff -Nur koffice-2.3.1/filters/karbon/wpg/import/karbon_wpg_import.desktop koffice-2.3.1-libwpg02/filters/karbon/wpg/import/karbon_wpg_import.desktop --- koffice-2.3.1/filters/karbon/wpg/import/karbon_wpg_import.desktop 2011-01-15 21:05:35.000000000 +0100 +++ koffice-2.3.1-libwpg02/filters/karbon/wpg/import/karbon_wpg_import.desktop 2011-01-18 07:41:33.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.1/filters/karbon/wpg/import/OdgExporter.cxx koffice-2.3.1-libwpg02/filters/karbon/wpg/import/OdgExporter.cxx --- koffice-2.3.1/filters/karbon/wpg/import/OdgExporter.cxx 2011-01-15 21:05:35.000000000 +0100 +++ koffice-2.3.1-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@kde.org) - * Copyright (C) 2006 Fridrich Strba (fridrich.strba@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 - -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 ::iterator iterStroke = mStrokeDashElements.begin(); - iterStroke != mStrokeDashElements.end(); iterStroke++) - delete (*iterStroke); - - for (std::vector ::iterator iterGradient = mGradientElements.begin(); - iterGradient != mGradientElements.end(); iterGradient++) - delete (*iterGradient); - - for (std::vector ::iterator iterAutomaticStyles = mAutomaticStylesElements.begin(); - iterAutomaticStyles != mAutomaticStylesElements.end(); iterAutomaticStyles++) - delete (*iterAutomaticStyles); - - for (std::vector::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 ::const_iterator iterStroke = mStrokeDashElements.begin(); - iterStroke != mStrokeDashElements.end(); iterStroke++) - (*iterStroke)->write(mpHandler); - - for (std::vector ::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 ::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::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(pDrawRectElement)); - mBodyElements.push_back(static_cast(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(pDrawEllipseElement)); - mBodyElements.push_back(static_cast(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(pDrawLineElement)); - mBodyElements.push_back(static_cast(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(pDrawPathElement)); - mBodyElements.push_back(static_cast(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(pDrawFrameElement)); - - mBodyElements.push_back(static_cast(new OpenTagGraphicsElement("draw:image"))); - - mBodyElements.push_back(static_cast(new OpenTagGraphicsElement("office:binary-data"))); - - libwpg::WPGString base64Binary; - bitmap.generateBase64DIB(base64Binary); - mBodyElements.push_back(static_cast(new CharDataGraphicsElement(base64Binary.cstr()))); - - mBodyElements.push_back(static_cast(new CloseTagGraphicsElement("office:binary-data"))); - - mBodyElements.push_back(static_cast(new CloseTagGraphicsElement("draw:image"))); - - mBodyElements.push_back(static_cast(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(pDrawFrameElement)); - - mBodyElements.push_back(static_cast(new OpenTagGraphicsElement("draw:image"))); - - mBodyElements.push_back(static_cast(new OpenTagGraphicsElement("office:binary-data"))); - - libwpg::WPGString base64Binary = binaryData.getBase64Data(); - mBodyElements.push_back(static_cast(new CharDataGraphicsElement(base64Binary.cstr()))); - - mBodyElements.push_back(static_cast(new CloseTagGraphicsElement("office:binary-data"))); - - mBodyElements.push_back(static_cast(new CloseTagGraphicsElement("draw:image"))); - - mBodyElements.push_back(static_cast(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(tmpDrawStrokeDashElement)); - mStrokeDashElements.push_back(static_cast(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(tmpDrawGradientElement)); - mGradientElements.push_back(static_cast(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(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(tmpStyleGraphicPropertiesElement)); - mAutomaticStylesElements.push_back(static_cast(new CloseTagGraphicsElement("style:graphic-properties"))); - - mAutomaticStylesElements.push_back(static_cast(new CloseTagGraphicsElement("style:style"))); - m_styleIndex++; -} diff -Nur koffice-2.3.1/filters/karbon/wpg/import/OdgExporter.hxx koffice-2.3.1-libwpg02/filters/karbon/wpg/import/OdgExporter.hxx --- koffice-2.3.1/filters/karbon/wpg/import/OdgExporter.hxx 2011-01-15 21:05:35.000000000 +0100 +++ koffice-2.3.1-libwpg02/filters/karbon/wpg/import/OdgExporter.hxx 1970-01-01 01:00:00.000000000 +0100 @@ -1,116 +0,0 @@ -/* libwpg - * Copyright (C) 2006 Ariya Hidayat (ariya@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 -#include -#include - -#include -#include "GraphicsElement.hxx" - -class OdgExporter : public libwpg::WPGPaintInterface { -public: - explicit OdgExporter(GraphicsHandler *pHandler, - const bool isFlatXML = false); - ~OdgExporter(); - -#if LIBWPG_VERSION_MINOR<2 - 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 mBodyElements; - std::vector mAutomaticStylesElements; - std::vector mStrokeDashElements; - std::vector 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; -#else - virtual void startGraphics(const ::WPXPropertyList &propList); - virtual void endGraphics(); - virtual void setStyle(const ::WPXPropertyList &propList, const ::WPXPropertyListVector &gradient); - virtual void startLayer(const ::WPXPropertyList &propList); - virtual void endLayer(); - virtual void drawRectangle(const ::WPXPropertyList& propList); - virtual void drawEllipse(const ::WPXPropertyList& propList); - virtual void drawPolygon(const ::WPXPropertyListVector &vertices); - virtual void drawPath(const ::WPXPropertyListVector &path); - virtual void drawGraphicObject(const ::WPXPropertyList &propList, const ::WPXBinaryData &binaryData); - virtual void startEmbeddedGraphics(const ::WPXPropertyList &propList); - virtual void endEmbeddedGraphics(); - virtual void drawPolyline(const ::WPXPropertyListVector &vertices); - virtual void startTextObject(const ::WPXPropertyList &propList, const ::WPXPropertyListVector &path); - virtual void endTextObject(); - virtual void startTextLine(const ::WPXPropertyList &propList); - virtual void endTextLine(); - virtual void startTextSpan(const ::WPXPropertyList &propList); - virtual void endTextSpan(); - virtual void insertText(const ::WPXString &str); - - -private: - std::vector mBodyElements; - std::vector mAutomaticStylesElements; - std::vector mStrokeDashElements; - std::vector mGradientElements; - GraphicsHandler *mpHandler; - - 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 -}; - -#endif // __ODGEXPORTER_H__ diff -Nur koffice-2.3.1/filters/karbon/wpg/import/WPGImport.cpp koffice-2.3.1-libwpg02/filters/karbon/wpg/import/WPGImport.cpp --- koffice-2.3.1/filters/karbon/wpg/import/WPGImport.cpp 2011-01-15 21:05:35.000000000 +0100 +++ koffice-2.3.1-libwpg02/filters/karbon/wpg/import/WPGImport.cpp 2011-01-02 17:46:15.000000000 +0100 @@ -20,28 +20,26 @@ #include #include -#include -#include -#include - -#include #include #include #include +#include + #include +#include -#include + +#include +#include #include #if LIBWPG_VERSION_MINOR<2 #include #else #include +#include #endif -#include "FileOutputHandler.hxx" -#include "OdgExporter.hxx" - #include K_PLUGIN_FACTORY(WPGImportFactory, registerPlugin();) @@ -56,35 +54,13 @@ { } -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 @@ -96,6 +72,7 @@ input = olestream; } } + libwpg::WPGString output; #else WPXInputStream* input = new WPXFileStream(m_chain->inputFile().toLocal8Bit()); if (input->isOLEStream()) { @@ -105,59 +82,31 @@ 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; }