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 <[email protected]> | |
| 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 ([email protected]) | |
| - * | |
| - * 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 ([email protected]) | |
| - * | |
| - * 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 ([email protected]) | |
| - *  | |
| - * 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 ([email protected]) | |
| - *  | |
| - * 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 ([email protected]) | |
| - * 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 ([email protected]) | |
| - * | |
| - */ | |
| - | |
| -/* "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 ([email protected]) | |
| - * Copyright (C) 2006 Fridrich Strba ([email protected]) | |
| - * | |
| - * 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 ([email protected]) | |
| - * | |
| - * 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; | |
|  }
 | |
| 
 |