You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1364 lines
56 KiB
1364 lines
56 KiB
# --- 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 <jaham@gmx.net> |
|
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<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.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 <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.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 <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.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 <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.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 <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.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 <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.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 <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(); |
|
- |
|
-#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 <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; |
|
-#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 <GraphicsElement *> mBodyElements; |
|
- std::vector <GraphicsElement *> mAutomaticStylesElements; |
|
- std::vector <GraphicsElement *> mStrokeDashElements; |
|
- std::vector <GraphicsElement *> 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 <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> |
|
#else |
|
#include <libwpd-stream/libwpd-stream.h> |
|
+#include <libwpd/libwpd.h> |
|
#endif |
|
|
|
-#include "FileOutputHandler.hxx" |
|
-#include "OdgExporter.hxx" |
|
- |
|
#include <iostream> |
|
|
|
K_PLUGIN_FACTORY(WPGImportFactory, registerPlugin<WPGImport>();) |
|
@@ -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; |
|
}
|
|
|