ooo-build r11557 - in trunk: . patches/svgimport



Author: thorstenb
Date: Wed Feb 13 00:44:02 2008
New Revision: 11557
URL: http://svn.gnome.org/viewvc/ooo-build?rev=11557&view=rev

Log:
* patches/svgimport/svg-filter.diff,
  patches/svgimport/svg-basegfx.diff:
  SVG import component, first steps (basically the plumbing done,
  and importing exemplary polylines) 



Added:
   trunk/patches/svgimport/
   trunk/patches/svgimport/svg-filter.diff
   trunk/patches/svgimport/svg-import-basegfx.diff
Modified:
   trunk/ChangeLog

Added: trunk/patches/svgimport/svg-filter.diff
==============================================================================
--- (empty file)
+++ trunk/patches/svgimport/svg-filter.diff	Wed Feb 13 00:44:02 2008
@@ -0,0 +1,1862 @@
+diff --git a/filter/prj/build.lst b/filter/prj/build.lst
+index 7df13b1..8392777 100644
+--- filter/prj/build.lst
++++ filter/prj/build.lst
+@@ -1,4 +1,4 @@
+-fl	filter	:	svtools unotools goodies xmloff svx javaunohelper jvmaccess XALAN:xalan LIBXSLT:libxslt NULL
++fl	filter	:	svtools unotools goodies xmloff svx javaunohelper sax jvmaccess XALAN:xalan LIBXSLT:libxslt NULL
+ fl	filter									usr1	-	all	fl_mkout			NULL
+ fl	filter\prj								get		-	all	fl_prj				NULL
+ fl	filter\inc								nmake	-	all	fl_inc				NULL
+diff --git a/filter/source/svgimport/README b/filter/source/svgimport/README
+new file mode 100644
+index 0000000..ebdb1f9
+--- /dev/null
++++ filter/source/svgimport/README
+@@ -0,0 +1,4 @@
++Required patches:
++
++buildfix-xmloff-exportxforms.diff 
++fix-linkoo.diff
+diff --git a/filter/source/svgimport/config/description.xml b/filter/source/svgimport/config/description.xml
+new file mode 100644
+index 0000000..a2a7363
+--- /dev/null
++++ filter/source/svgimport/config/description.xml
+@@ -0,0 +1,15 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<description xmlns="http://openoffice.org/extensions/description/2006";
++    xmlns:xlink="http://www.w3.org/1999/xlink";
++	xmlns:d="http://openoffice.org/extensions/description/2006";>
++	<version    value="0.3" />
++	<identifier value="com.sun.star.comp.documents.SVGImport"/>
++	<dependencies>
++		<OpenOffice.org-minimal-version value="2.4" d:name="OpenOffice.org 2.4"/>
++	</dependencies>
++	<registration>
++        <simple-license accept-by="admin" default-license-id="lic-en-US">
++            <license-text xlink:href="licensefile" lang="isocode" license-id="lic-isocode"/>
++        </simple-license>
++    </registration>
++</description>
+diff --git a/filter/source/svgimport/config/manifest.xml b/filter/source/svgimport/config/manifest.xml
+new file mode 100644
+index 0000000..a845d15
+--- /dev/null
++++ filter/source/svgimport/config/manifest.xml
+@@ -0,0 +1,10 @@
++<?xml version="1.0" encoding="UTF-8"?> 
++<!DOCTYPE manifest:manifest PUBLIC "-//OpenOffice.org//DTD Manifest 1.0//EN" "Manifest.dtd"> 
++<manifest:manifest xmlns:manifest="http://openoffice.org/2001/manifest";> 
++  <manifest:file-entry manifest:media-type="application/vnd.sun.star.uno-component;type=native"
++                       manifest:full-path="svgimport.unoSHARED_EXTENSION"/>
++  <manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data" 
++					   manifest:full-path="svg_import_filter.xcu"/> 
++  <manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data" 
++					   manifest:full-path="svg_types.xcu"/> 
++</manifest:manifest>
+diff --git a/filter/source/svgimport/config/svg_import_filter.xcu b/filter/source/svgimport/config/svg_import_filter.xcu
+new file mode 100644
+index 0000000..7b96fba
+--- /dev/null
++++ filter/source/svgimport/config/svg_import_filter.xcu
+@@ -0,0 +1,32 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<oor:component-data xmlns:oor="http://openoffice.org/2001/registry"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; oor:name="Filter" oor:package="org.openoffice.TypeDetection">
++ <node oor:name="Filters">
++  <node oor:name="draw_svg_import" oor:type="xs:string" oor:op="replace">
++   <prop oor:name="DocumentService">
++    <value>com.sun.star.drawing.DrawingDocument</value>
++   </prop>
++   <prop oor:name="FileFormatVersion" oor:type="xs:int">
++    <value>0</value>
++   </prop>
++   <prop oor:name="FilterService" oor:type="xs:string">
++    <!-- stacks filters for XML import. see UserData below. 
++		 the _Writer_ in the impl name is a misnomer -->
++    <value>com.sun.star.comp.Writer.XmlFilterAdaptor</value>
++   </prop>
++   <prop oor:name="Flags" oor:type="oor:string-list">
++    <value>3RDPARTYFILTER ALIEN IMPORT PREFERRED</value>
++   </prop>
++   <prop oor:name="Type" oor:type="xs:string">
++    <value>svg_Scalable_Vector_Graphics</value>
++   </prop>
++   <prop oor:name="UIName">
++    <value xml:lang="x-default">SVG - Scalable Vector Graphics</value>
++   </prop>
++   <prop oor:name="TemplateName"/>
++   <prop oor:name="UIComponent"/>
++   <prop oor:name="UserData" oor:type="oor:string-list">
++    <!-- converter service, ,import service,export service, , ,bool for pretty printing on or off -->
++    <value oor:separator=",">com.sun.star.comp.documents.SVGImport,,com.sun.star.comp.Draw.XMLOasisImporter,,,,true</value>
++   </prop>
++  </node>
++</oor:component-data>
+diff --git a/filter/source/svgimport/config/svg_types.xcu b/filter/source/svgimport/config/svg_types.xcu
+new file mode 100644
+index 0000000..17724fd
+--- /dev/null
++++ filter/source/svgimport/config/svg_types.xcu
+@@ -0,0 +1,18 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<!DOCTYPE oor:component-data SYSTEM "../../../../component-update.dtd">
++<oor:component-data xmlns:oor="http://openoffice.org/2001/registry"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; oor:package="org.openoffice.TypeDetection" oor:name="Types">
++	<node oor:name="Types">
++	<node oor:name="svg_Scalable_Vector_Graphics" oor:op="replace" >
++		<prop oor:name="DetectService"><value>com.sun.star.comp.filters.XMLFilterDetect</value></prop>
++		<prop oor:name="URLPattern"/>
++		<prop oor:name="Extensions"><value>svg</value></prop>
++		<prop oor:name="MediaType"><value>image/svg+xml</value></prop>
++		<prop oor:name="Preferred"><value>true</value></prop>
++		<prop oor:name="PreferredFilter"><value>draw_svg_import</value></prop>
++		<prop oor:name="UIName">
++			<value>SVG - Scalable Vector Graphics</value>
++		</prop>
++		<prop oor:name="ClipboardFormat"><value>doctype:xmlns="http://www.w3.org/2000/svg";</value></prop>
++	</node>
++	</node>
++</oor:component-data>
+diff --git filter/source/svgimport/delzip b/filter/source/svgimport/delzip
+new file mode 100644
+index 0000000..e69de29
+diff --git filter/source/svgimport/exports.map b/filter/source/svgimport/exports.map
+new file mode 100644
+index 0000000..acb4748
+--- /dev/null
++++ b/filter/source/svgimport/exports.map
+@@ -0,0 +1,9 @@
++SVGFILTER_1_0 {
++        global:
++                component_getImplementationEnvironment;
++                component_getFactory;
++                component_writeInfo;
++
++        local:
++                *;
++}; 
+diff --git filter/source/svgimport/makefile.mk b/filter/source/svgimport/makefile.mk
+new file mode 100644
+index 0000000..8e04be2
+--- /dev/null
++++ b/filter/source/svgimport/makefile.mk
+@@ -0,0 +1,138 @@
++#*************************************************************************
++#
++#   OpenOffice.org - a multi-platform office productivity suite
++#
++#   $RCSfile$
++#
++#   $Revision$
++#
++#   last change: $Author$ $Date$
++#
++#   The Contents of this file are made available subject to
++#   the terms of GNU Lesser General Public License Version 2.1.
++#
++#
++#     GNU Lesser General Public License Version 2.1
++#     =============================================
++#     Copyright 2005 by Sun Microsystems, Inc.
++#     901 San Antonio Road, Palo Alto, CA 94303, USA
++#
++#     This library is free software; you can redistribute it and/or
++#     modify it under the terms of the GNU Lesser General Public
++#     License version 2.1, as published by the Free Software Foundation.
++#
++#     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
++#     Lesser General Public License for more details.
++#
++#     You should have received a copy of the GNU Lesser General Public
++#     License along with this library; if not, write to the Free Software
++#     Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++#     MA  02111-1307  USA
++#
++#*************************************************************************
++
++PRJ=..$/..
++
++PRJNAME=filter
++TARGET=svgfilter
++ENABLE_EXCEPTIONS=TRUE
++
++# --- Settings ----------------------------------
++
++.INCLUDE :  settings.mk
++.INCLUDE :	libs.mk
++.INCLUDE :  svgisettings.pmk
++DLLPRE=
++
++# --- Types -------------------------------------
++
++SLOFILES=	$(SLO)$/odfserializer.obj   \
++			$(SLO)$/saxattrlist.obj		\
++			$(SLO)$/services.obj		\
++			$(SLO)$/svgimporter.obj		\
++			$(SLO)$/svgreader.obj
++
++# --- Library -----------------------------------
++
++SHL1TARGET=$(TARGET).uno
++
++SHL1STDLIBS=\
++	$(BASEGFXLIB)		\
++	$(UNOTOOLSLIB)		\
++	$(COMPHELPERLIB)	\
++	$(CPPUHELPERLIB)	\
++	$(CPPULIB)			\
++	$(SALLIB)
++
++SHL1DEPN=
++SHL1IMPLIB=	i$(SHL1TARGET)
++SHL1LIBS=	$(SLB)$/$(TARGET).lib
++SHL1VERSIONMAP=exports.map
++SHL1DEF=	$(MISC)$/$(SHL1TARGET).def
++
++DEF1NAME=$(SHL1TARGET)
++
++# --- Extension packaging ------------------------------------------
++
++common_build_zip=
++
++DESCRIPTION:=$(MISC)$/svgimport$/description.xml
++
++.IF "$(GUI)" == "WIN" || "$(GUI)" == "WNT"
++PACKLICS:=$(foreach,i,$(alllangiso) $(MISC)$/svgimport$/registration$/license_$i.txt)
++.ELSE
++PACKLICS:=$(foreach,i,$(alllangiso) $(MISC)$/svgimport$/registration$/LICENSE_$i)
++.ENDIF
++
++COMPONENT_FILES= \
++    $(MISC)$/svgimport$/svg_import_filter.xcu \
++    $(MISC)$/svgimport$/svg_types.xcu
++
++COMPONENT_MANIFEST= \
++	$(MISC)$/svgimport$/META-INF$/manifest.xml
++
++COMPONENT_LIBRARY= \
++    $(MISC)$/svgimport$/$(DLLPRE)$(SHL1TARGET)$(DLLPOST)
++
++ZIP1DEPS=		$(PACKLICS) $(DESCRIPTION) $(COMPONENT_MANIFEST) $(COMPONENT_FILES) $(COMPONENT_LIBRARY) makefile.mk
++ZIP1TARGET=		svgimport
++ZIP1DIR=		$(MISC)$/svgimport
++ZIP1EXT=		.oxt
++ZIP1FLAGS=-r
++ZIP1LIST=		*
++
++# --- Targets ----------------------------------
++
++.INCLUDE : target.mk
++
++$(COMPONENT_MANIFEST) : config$/$$(@:f)
++	@@-$(MKDIRHIER) $(@:d)
++    $(TYPE) $< | $(SED) "s/SHARED_EXTENSION/$(DLLPOST)/" | $(SED) "s/EXEC_EXTENSION/$(EXECPOST)/" > $@
++
++# TODO(Q3): strip the binary?
++$(COMPONENT_LIBRARY) : $(DLLDEST)$/$$(@:f)
++	@@-$(MKDIRHIER) $(@:d)
++    $(COPY) $< $@
++
++$(PACKLICS) : $(SOLARBINDIR)$/osl$/LICENSE$$(@:b:s/_/./:e:s/./_/)$$(@:e)
++	@@-$(MKDIRHIER) $(@:d)
++	$(GNUCOPY) $< $@
++
++$(MISC)$/svgimport$/%.xcu : config$/%.xcu
++	@@-$(MKDIRHIER) $(@:d)
++	$(GNUCOPY) $< $@
++.INCLUDE .IGNORE : $(MISC)$/$(TARGET)_lang_track.mk
++.IF "$(LAST_WITH_LANG)"!="$(WITH_LANG)"
++PHONYDESC=.PHONY
++.ENDIF			# "$(LAST_WITH_LANG)"!="$(WITH_LANG)"
++$(DESCRIPTION) $(PHONYDESC) : config$/$$(@:f)
++	@@-$(MKDIRHIER) $(@:d)
++.IF "$(GUI)" == "WIN" || "$(GUI)" == "WNT"
++	$(PERL) $(SOLARENV)$/bin$/licinserter.pl $< registration/license_xxx.txt $(MISC)/description.tmp
++.ELSE	
++	$(PERL) $(SOLARENV)$/bin$/licinserter.pl $< registration/LICENSE_xxx $(MISC)/description.tmp
++.ENDIF	
++	$(SED) -e " s/IDENT_PLACEHOLDER/$(SVGI_IMPLEMENTATION_IDENTIFIER)/" $(MISC)/description.tmp > $@ 
++	@echo LAST_WITH_LANG=$(WITH_LANG) > $(MISC)$/$(TARGET)_lang_track.mk
+diff --git a/filter/source/svgimport/odfserializer.cxx b/filter/source/svgimport/odfserializer.cxx
+new file mode 100644
+index 0000000..a719307
+--- /dev/null
++++ filter/source/svgimport/odfserializer.cxx
+@@ -0,0 +1,158 @@
++/*************************************************************************
++ *
++ *  OpenOffice.org - a multi-platform office productivity suite
++ *
++ *  $RCSfile: $
++ *
++ *  $Revision: $
++ *
++ *  last change: $Author: $ $Date: $
++ *
++ *  The Contents of this file are made available subject to
++ *  the terms of GNU Lesser General Public License Version 2.1.
++ *
++ *
++ *    GNU Lesser General Public License Version 2.1
++ *    =============================================
++ *    Copyright 2005 by Sun Microsystems, Inc.
++ *    901 San Antonio Road, Palo Alto, CA 94303, USA
++ *
++ *    This library is free software; you can redistribute it and/or
++ *    modify it under the terms of the GNU Lesser General Public
++ *    License version 2.1, as published by the Free Software Foundation.
++ *
++ *    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
++ *    Lesser General Public License for more details.
++ *
++ *    You should have received a copy of the GNU Lesser General Public
++ *    License along with this library; if not, write to the Free Software
++ *    Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ *    MA  02111-1307  USA
++ *
++ ************************************************************************/
++
++// MARKER(update_precomp.py): autogen include statement, do not remove
++#include "precompiled_filter.hxx"
++
++#include "odfserializer.hxx"
++#include <osl/diagnose.h>
++#include <rtl/ustrbuf.hxx>
++#include <cppuhelper/compbase1.hxx>
++#include <cppuhelper/basemutex.hxx>
++#include <com/sun/star/uno/Sequence.hxx>
++#include <boost/noncopyable.hpp>
++
++using namespace ::com::sun::star;
++
++namespace svgi
++{
++
++typedef ::cppu::WeakComponentImplHelper1< 
++    com::sun::star::xml::sax::XDocumentHandler> ODFSerializerBase;
++
++class ODFSerializer : private cppu::BaseMutex,
++                public ODFSerializerBase,
++                boost::noncopyable
++{
++public:
++    explicit ODFSerializer(const uno::Reference<io::XOutputStream>& xOut) :
++        ODFSerializerBase(m_aMutex),
++        m_xOutStream(xOut),
++        m_aLineFeed(1),
++        m_aBuf()
++    {}
++
++    virtual void SAL_CALL startDocument(  ) throw (xml::sax::SAXException, uno::RuntimeException);
++    virtual void SAL_CALL endDocument(  ) throw (xml::sax::SAXException, uno::RuntimeException);
++    virtual void SAL_CALL startElement( const ::rtl::OUString& aName, const uno::Reference< xml::sax::XAttributeList >& xAttribs ) throw (xml::sax::SAXException, uno::RuntimeException);
++    virtual void SAL_CALL endElement( const ::rtl::OUString& aName ) throw (xml::sax::SAXException, uno::RuntimeException);
++    virtual void SAL_CALL characters( const ::rtl::OUString& aChars ) throw (xml::sax::SAXException, uno::RuntimeException);
++    virtual void SAL_CALL ignorableWhitespace( const ::rtl::OUString& aWhitespaces ) throw (xml::sax::SAXException, uno::RuntimeException);
++    virtual void SAL_CALL processingInstruction( const ::rtl::OUString& aTarget, const ::rtl::OUString& aData ) throw (xml::sax::SAXException, uno::RuntimeException);
++    virtual void SAL_CALL setDocumentLocator( const uno::Reference< xml::sax::XLocator >& xLocator ) throw (xml::sax::SAXException, uno::RuntimeException);
++
++private:
++    uno::Reference<io::XOutputStream> m_xOutStream;
++    uno::Sequence<sal_Int8>           m_aLineFeed;
++    uno::Sequence<sal_Int8>           m_aBuf;
++};
++
++void SAL_CALL ODFSerializer::startDocument(  ) throw (xml::sax::SAXException, uno::RuntimeException)
++{
++    OSL_PRECOND(m_xOutStream.is(), "ODFSerializer(): invalid output stream");
++    m_aLineFeed[0] = '\n';
++
++    rtl::OUStringBuffer aElement;
++    aElement.appendAscii("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
++    characters(aElement.makeStringAndClear());
++}
++
++void SAL_CALL ODFSerializer::endDocument() throw (xml::sax::SAXException, uno::RuntimeException)
++{}
++
++void SAL_CALL ODFSerializer::startElement( const ::rtl::OUString& aName, 
++                                           const uno::Reference< xml::sax::XAttributeList >& xAttribs ) throw (xml::sax::SAXException, uno::RuntimeException)
++{
++    rtl::OUStringBuffer aElement;
++    aElement.appendAscii("<");
++    aElement.append(aName);
++    aElement.appendAscii(" ");
++
++    const sal_Int16 nLen=xAttribs->getLength();
++    for( sal_Int16 i=0; i<nLen; ++i )
++    {
++        rtl::OUStringBuffer aAttribute;
++        aElement.append(xAttribs->getNameByIndex(i));
++        aElement.appendAscii("=\"");
++        aElement.append(xAttribs->getValueByIndex(i));
++        aElement.appendAscii("\" ");
++    }
++
++    aElement.appendAscii(">");
++    characters(aElement.makeStringAndClear());
++}
++
++void SAL_CALL ODFSerializer::endElement( const ::rtl::OUString& aName ) throw (xml::sax::SAXException, uno::RuntimeException)
++{
++    rtl::OUStringBuffer aElement;
++    aElement.appendAscii("</");
++    aElement.append(aName);
++    aElement.appendAscii(">");
++    characters(aElement.makeStringAndClear());
++}
++
++void SAL_CALL ODFSerializer::characters( const ::rtl::OUString& aChars ) throw (xml::sax::SAXException, uno::RuntimeException)
++{
++    const rtl::OString aStr = rtl::OUStringToOString(aChars,
++                                                     RTL_TEXTENCODING_UTF8);
++    const sal_Int32 nLen( aStr.getLength() );
++    m_aBuf.realloc( nLen );
++    const sal_Char* pStr = aStr.getStr();
++    std::copy(pStr,pStr+nLen,m_aBuf.getArray());
++
++    m_xOutStream->writeBytes(m_aBuf);
++    // TODO(F1): Make pretty printing configurable
++    m_xOutStream->writeBytes(m_aLineFeed);
++}
++
++void SAL_CALL ODFSerializer::ignorableWhitespace( const ::rtl::OUString& aWhitespaces ) throw (xml::sax::SAXException, uno::RuntimeException)
++{
++    // TODO(F1): Make pretty printing configurable
++    characters(aWhitespaces);
++}
++
++void SAL_CALL ODFSerializer::processingInstruction( const ::rtl::OUString&, 
++                                                    const ::rtl::OUString& ) throw (xml::sax::SAXException, uno::RuntimeException)
++{}
++
++void SAL_CALL ODFSerializer::setDocumentLocator( const uno::Reference< xml::sax::XLocator >& ) throw (xml::sax::SAXException, uno::RuntimeException)
++{}
++
++uno::Reference< xml::sax::XDocumentHandler> createSerializer(const uno::Reference<io::XOutputStream>& xOut )
++{
++    return uno::Reference<xml::sax::XDocumentHandler>(new ODFSerializer(xOut));
++}
++
++}
+diff --git a/filter/source/svgimport/odfserializer.hxx b/filter/source/svgimport/odfserializer.hxx
+new file mode 100644
+index 0000000..412e9d0
+--- /dev/null
++++ filter/source/svgimport/odfserializer.hxx
+@@ -0,0 +1,50 @@
++/*************************************************************************
++ *
++ *  OpenOffice.org - a multi-platform office productivity suite
++ *
++ *  $RCSfile: filterdet.hxx,v $
++ *
++ *  $Revision: 1.1.2.1 $
++ *
++ *  last change: $Author: thb $ $Date: 2007/10/03 20:33:39 $
++ *
++ *  The Contents of this file are made available subject to
++ *  the terms of GNU Lesser General Public License Version 2.1.
++ *
++ *
++ *    GNU Lesser General Public License Version 2.1
++ *    =============================================
++ *    Copyright 2005 by Sun Microsystems, Inc.
++ *    901 San Antonio Road, Palo Alto, CA 94303, USA
++ *
++ *    This library is free software; you can redistribute it and/or
++ *    modify it under the terms of the GNU Lesser General Public
++ *    License version 2.1, as published by the Free Software Foundation.
++ *
++ *    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
++ *    Lesser General Public License for more details.
++ *
++ *    You should have received a copy of the GNU Lesser General Public
++ *    License along with this library; if not, write to the Free Software
++ *    Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ *    MA  02111-1307  USA
++ *
++ ************************************************************************/
++
++#ifndef INCLUDED_SVG_ODFSERIALIZER_HXX
++#define INCLUDED_SVG_ODFSERIALIZER_HXX
++
++#include <com/sun/star/uno/Reference.hxx>
++#include <com/sun/star/xml/sax/XDocumentHandler.hpp>
++#include <com/sun/star/io/XOutputStream.hpp>
++
++namespace svgi
++{
++    /// Creates a XDocumentHandler that serializes directly to an XOutputStream
++    ::com::sun::star::uno::Reference< com::sun::star::xml::sax::XDocumentHandler>
++        createSerializer(const ::com::sun::star::uno::Reference<com::sun::star::io::XOutputStream>& );
++}
++
++#endif // _COM_SUN_STAR_XML_SAX_XDOCUMENTHANDLER_HDL_
+diff --git filter/source/svgimport/saxattrlist.cxx filter/source/svgimport/saxattrlist.cxx
+new file mode 100644
+index 0000000..4d63b36
+--- /dev/null
++++ filter/source/svgimport/saxattrlist.cxx
+@@ -0,0 +1,120 @@
++/*************************************************************************
++ *
++ *  OpenOffice.org - a multi-platform office productivity suite
++ *
++ *  $RCSfile: saxattrlist.cxx,v $
++ *
++ *  $Revision: 1.1.2.2 $
++ *
++ *  last change: $Author: thb $ $Date: 2007/10/08 13:15:23 $
++ *
++ *  The Contents of this file are made available subject to
++ *  the terms of GNU Lesser General Public License Version 2.1.
++ *
++ *
++ *    GNU Lesser General Public License Version 2.1
++ *    =============================================
++ *    Copyright 2005 by Sun Microsystems, Inc.
++ *    901 San Antonio Road, Palo Alto, CA 94303, USA
++ *
++ *    This library is free software; you can redistribute it and/or
++ *    modify it under the terms of the GNU Lesser General Public
++ *    License version 2.1, as published by the Free Software Foundation.
++ *
++ *    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
++ *    Lesser General Public License for more details.
++ *
++ *    You should have received a copy of the GNU Lesser General Public
++ *    License along with this library; if not, write to the Free Software
++ *    Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ *    MA  02111-1307  USA
++ *
++ ************************************************************************/
++
++// MARKER(update_precomp.py): autogen include statement, do not remove
++#include "precompiled_filter.hxx"
++
++#include "saxattrlist.hxx"
++
++namespace svgi
++{
++
++AttributeList::AttributeList( const PropertyMap& rMap ) :
++    m_aAttributes(),
++    m_aIndexMap()
++{
++    *this = rMap;
++}
++
++AttributeList& AttributeList::operator=( const PropertyMap& rMap )
++{
++    clear();
++    m_aAttributes.reserve(rMap.size());
++    for( PropertyMap::const_iterator it = rMap.begin();
++         it != rMap.end(); ++it )
++    {
++        m_aIndexMap[ it->first ] = m_aAttributes.size();
++        m_aAttributes.push_back( AttrEntry( it->first, it->second ) );
++    }
++
++    return *this;
++}
++
++void AttributeList::clear()
++{
++    m_aIndexMap.clear();
++    m_aAttributes.clear();
++}
++
++AttributeList::AttributeList( const AttributeList& rClone ) :
++    cppu::WeakImplHelper2<com::sun::star::xml::sax::XAttributeList, com::sun::star::util::XCloneable>(rClone),
++    m_aAttributes( rClone.m_aAttributes ),
++    m_aIndexMap( rClone.m_aIndexMap )
++{
++}
++
++static const rtl::OUString& getCDATAString()
++{
++    static rtl::OUString aStr( RTL_CONSTASCII_USTRINGPARAM( "CDATA" ) );
++    return aStr;
++}
++    
++sal_Int16 SAL_CALL AttributeList::getLength() throw()
++{
++    return sal_Int16(m_aAttributes.size());
++}
++rtl::OUString SAL_CALL AttributeList::getNameByIndex( sal_Int16 i_nIndex ) throw()
++{
++    return (i_nIndex < sal_Int16(m_aAttributes.size())) ? m_aAttributes[i_nIndex].m_aName : rtl::OUString();
++}
++
++rtl::OUString SAL_CALL AttributeList::getTypeByIndex( sal_Int16 i_nIndex) throw()
++{
++    return (i_nIndex < sal_Int16(m_aAttributes.size())) ? getCDATAString() : rtl::OUString();
++}
++
++rtl::OUString SAL_CALL AttributeList::getTypeByName( const ::rtl::OUString& i_rName ) throw()
++{
++    return (m_aIndexMap.find( i_rName ) != m_aIndexMap.end()) ? getCDATAString() : rtl::OUString();
++}
++
++rtl::OUString SAL_CALL AttributeList::getValueByIndex( sal_Int16 i_nIndex ) throw()
++{
++    return (i_nIndex < sal_Int16(m_aAttributes.size())) ? m_aAttributes[i_nIndex].m_aValue : rtl::OUString();
++}
++
++rtl::OUString SAL_CALL AttributeList::getValueByName(const ::rtl::OUString& i_rName) throw()
++{
++    std::hash_map< rtl::OUString, size_t, rtl::OUStringHash >::const_iterator it = m_aIndexMap.find( i_rName );
++    return (it != m_aIndexMap.end()) ? m_aAttributes[it->second].m_aValue : rtl::OUString();
++}
++    
++com::sun::star::uno::Reference< ::com::sun::star::util::XCloneable > SAL_CALL AttributeList::createClone() throw()
++{
++    return new AttributeList( *this );
++}
++
++}
++
+diff --git a/filter/source/svgimport/saxattrlist.hxx b/filter/source/svgimport/saxattrlist.hxx
+new file mode 100644
+index 0000000..52aebc4
+--- /dev/null
++++ filter/source/svgimport/saxattrlist.hxx
+@@ -0,0 +1,88 @@
++/*************************************************************************
++ *
++ *  OpenOffice.org - a multi-platform office productivity suite
++ *
++ *  $RCSfile: saxattrlist.hxx,v $
++ *
++ *  $Revision: 1.1.2.1 $
++ *
++ *  last change: $Author: thb $ $Date: 2007/10/03 20:31:22 $
++ *
++ *  The Contents of this file are made available subject to
++ *  the terms of GNU Lesser General Public License Version 2.1.
++ *
++ *
++ *    GNU Lesser General Public License Version 2.1
++ *    =============================================
++ *    Copyright 2005 by Sun Microsystems, Inc.
++ *    901 San Antonio Road, Palo Alto, CA 94303, USA
++ *
++ *    This library is free software; you can redistribute it and/or
++ *    modify it under the terms of the GNU Lesser General Public
++ *    License version 2.1, as published by the Free Software Foundation.
++ *
++ *    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
++ *    Lesser General Public License for more details.
++ *
++ *    You should have received a copy of the GNU Lesser General Public
++ *    License along with this library; if not, write to the Free Software
++ *    Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ *    MA  02111-1307  USA
++ *
++ ************************************************************************/
++
++#ifndef INCLUDED_SVGI_ATTRIBUTELIST_HXX
++#define INCLUDED_SVGI_ATTRIBUTELIST_HXX
++
++#include <rtl/ustring.hxx>
++#include <vector>
++#include <hash_map>
++#include <cppuhelper/implbase2.hxx>
++
++#include <com/sun/star/util/XCloneable.hpp>
++#include <com/sun/star/xml/sax/XAttributeList.hpp>
++
++namespace svgi
++{
++    typedef std::hash_map< rtl::OUString, rtl::OUString, rtl::OUStringHash > PropertyMap;
++
++    // TODO(Q3): Move this to comphelper
++    class AttributeList : public ::cppu::WeakImplHelper2<
++		    com::sun::star::xml::sax::XAttributeList,
++            com::sun::star::util::XCloneable
++            >
++    {
++        struct AttrEntry
++        {
++            rtl::OUString m_aName;
++            rtl::OUString m_aValue;
++            
++            AttrEntry( const rtl::OUString& i_rName, const rtl::OUString& i_rValue )
++            : m_aName( i_rName ), m_aValue( i_rValue ) {}
++        };
++        std::vector< AttrEntry >                                          m_aAttributes;
++        PropertyMap::hash_map< rtl::OUString, size_t, rtl::OUStringHash > m_aIndexMap;
++    
++    public:
++        AttributeList( const PropertyMap& );
++        AttributeList( const AttributeList& );
++
++        AttributeList& operator=( const PropertyMap& );
++        void clear();
++    
++        // ::com::sun::star::xml::sax::XAttributeList
++        virtual sal_Int16 SAL_CALL getLength() throw();
++        virtual rtl::OUString SAL_CALL getNameByIndex(sal_Int16 i) throw();
++        virtual rtl::OUString SAL_CALL getTypeByIndex(sal_Int16 i) throw();
++        virtual rtl::OUString SAL_CALL getTypeByName(const ::rtl::OUString& aName) throw();
++        virtual rtl::OUString SAL_CALL getValueByIndex(sal_Int16 i) throw();
++        virtual rtl::OUString SAL_CALL getValueByName(const ::rtl::OUString& aName) throw();
++    
++        // ::com::sun::star::util::XCloneable
++        virtual ::com::sun::star::uno::Reference< ::com::sun::star::util::XCloneable > SAL_CALL createClone() throw();
++    };
++}
++
++#endif
+diff --git a/filter/source/svgimport/services.cxx b/filter/source/svgimport/services.cxx
+new file mode 100644
+index 0000000..67b66cc
+--- /dev/null
++++ filter/source/svgimport/services.cxx
+@@ -0,0 +1,55 @@
++/*************************************************************************
++ *
++ *  OpenOffice.org - a multi-platform office productivity suite
++ *
++ *  $RCSfile: services.cxx,v $
++ *
++ *  $Revision: 1.1.2.6 $
++ *
++ *  last change: $Author: thb $ $Date: 2007/12/17 05:11:01 $
++ *
++ *  The Contents of this file are made available subject to
++ *  the terms of GNU Lesser General Public License Version 2.1.
++ *
++ *
++ *    GNU Lesser General Public License Version 2.1
++ *    =============================================
++ *    Copyright 2005 by Sun Microsystems, Inc.
++ *    901 San Antonio Road, Palo Alto, CA 94303, USA
++ *
++ *    This library is free software; you can redistribute it and/or
++ *    modify it under the terms of the GNU Lesser General Public
++ *    License version 2.1, as published by the Free Software Foundation.
++ *
++ *    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
++ *    Lesser General Public License for more details.
++ *
++ *    You should have received a copy of the GNU Lesser General Public
++ *    License along with this library; if not, write to the Free Software
++ *    Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ *    MA  02111-1307  USA
++ *
++ ************************************************************************/
++
++// MARKER(update_precomp.py): autogen include statement, do not remove
++#include "precompiled_filter.hxx"
++
++#include "svgimporter.hxx"
++
++#include <cppuhelper/factory.hxx>
++#include <cppuhelper/implementationentry.hxx>
++#include <comphelper/servicedecl.hxx>
++
++using namespace ::com::sun::star;
++
++namespace sdecl = comphelper::service_decl;
++ sdecl::class_<svgi::SVGImporter> serviceImpl;
++ const sdecl::ServiceDecl svgImportDecl(
++     serviceImpl,
++     "com.sun.star.comp.documents.SVGImport",
++     "com.sun.star.document.ImportFilter" );
++
++// The C shared lib entry points
++COMPHELPER_SERVICEDECL_EXPORTS1(svgImportDecl)
+diff --git a/filter/source/svgimport/svgimporter.cxx b/filter/source/svgimport/svgimporter.cxx
+new file mode 100644
+index 0000000..c486d59
+--- /dev/null
++++ filter/source/svgimport/svgimporter.cxx
+@@ -0,0 +1,109 @@
++ /*************************************************************************
++ *
++ *  OpenOffice.org - a multi-platform office productivity suite
++ *
++ *  $RCSfile$
++ *
++ *  $Revision$
++ *
++ *  last change: $Author$ $Date$
++ *
++ *  The Contents of this file are made available subject to
++ *  the terms of GNU Lesser General Public License Version 2.1.
++ *
++ *
++ *    GNU Lesser General Public License Version 2.1
++ *    =============================================
++ *    Copyright 2005 by Sun Microsystems, Inc.
++ *    901 San Antonio Road, Palo Alto, CA 94303, USA
++ *
++ *    This library is free software; you can redistribute it and/or
++ *    modify it under the terms of the GNU Lesser General Public
++ *    License version 2.1, as published by the Free Software Foundation.
++ *
++ *    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
++ *    Lesser General Public License for more details.
++ *
++ *    You should have received a copy of the GNU Lesser General Public
++ *    License along with this library; if not, write to the Free Software
++ *    Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ *    MA  02111-1307  USA
++ *
++ ************************************************************************/
++
++// MARKER(update_precomp.py): autogen include statement, do not remove
++#include "precompiled_filter.hxx"
++
++#include "svgimporter.hxx" 
++#include "svgreader.hxx" 
++
++#include <rtl/ref.hxx>
++#include <com/sun/star/lang/XComponent.hpp>
++#include <com/sun/star/uno/Any.hxx>
++#include <com/sun/star/uno/Type.hxx>
++#include <com/sun/star/uno/XComponentContext.hpp>
++#include <com/sun/star/beans/PropertyValue.hpp>
++#include <com/sun/star/xml/sax/XParser.hpp>
++#include <com/sun/star/xml/sax/InputSource.hpp>
++#include <com/sun/star/xml/XImportFilter.hpp>
++#include <com/sun/star/io/XActiveDataSource.hpp>
++#include <com/sun/star/task/XStatusIndicator.hpp>
++#include <comphelper/oslfile2streamwrap.hxx>
++
++using namespace ::com::sun::star;
++
++namespace svgi
++{
++
++SVGImporter::SVGImporter( const uno::Reference< uno::XComponentContext > &rxMSF ) :
++    m_xFactory(rxMSF),
++    m_xModel()
++{}
++
++sal_Bool SAL_CALL SVGImporter::importer( const uno::Sequence< beans::PropertyValue >&        rSourceData,
++                                         const uno::Reference< xml::sax::XDocumentHandler >& rHdl,
++                                         const uno::Sequence< rtl::OUString >&               /*rUserData*/ ) throw( uno::RuntimeException )
++{
++    rtl::OUString aURL;
++    uno::Reference< io::XInputStream > xInputStream;
++    uno::Reference< task::XStatusIndicator > xStatus;
++    const sal_Int32 nLength = rSourceData.getLength();
++    const beans::PropertyValue* pAttribs = rSourceData.getConstArray();
++    for ( sal_Int32 i=0 ; i<nLength; ++i, ++pAttribs )
++	{
++        if( pAttribs->Name.equalsAscii( "InputStream" ) )
++        {
++            pAttribs->Value >>= xInputStream;
++        }
++        else if( pAttribs->Name.equalsAscii( "URL" ) )
++        {
++            if( (pAttribs->Value >>= aURL) )
++            {
++                osl::File aInputFile(aURL);
++                aInputFile.open(OpenFlag_Read);
++                xInputStream.set(new comphelper::OSLInputStreamWrapper(aInputFile));
++            }
++        }
++        else if( pAttribs->Name.equalsAscii( "StatusIndicator" ) )
++            pAttribs->Value >>= xStatus;
++	}
++
++    OSL_ASSERT(xInputStream.is());
++    if(!xInputStream.is()) 
++        return sal_False;
++
++	SVGReader xReader(m_xFactory, xInputStream, rHdl);
++	return xReader.parseAndConvert();
++}
++
++//XImporter
++void SAL_CALL SVGImporter::setTargetDocument( const uno::Reference< lang::XComponent >& xDocument ) throw( lang::IllegalArgumentException )
++{
++    m_xModel = uno::Reference< frame::XModel >( xDocument, uno::UNO_QUERY );
++    if( xDocument.is() && ! m_xModel.is() )
++        throw lang::IllegalArgumentException();
++}
++
++}
+diff --git a/filter/source/svgimport/svgimporter.hxx b/filter/source/svgimport/svgimporter.hxx
+new file mode 100644
+index 0000000..6bcc6dc
+--- /dev/null
++++ filter/source/svgimport/svgimporter.hxx
+@@ -0,0 +1,73 @@
++/*************************************************************************
++ *
++ *  OpenOffice.org - a multi-platform office productivity suite
++ *
++ *  $RCSfile$
++ *
++ *  $Revision$
++ *
++ *  last change: $Author$ $Date$
++ *
++ *  The Contents of this file are made available subject to
++ *  the terms of GNU Lesser General Public License Version 2.1.
++ *
++ *
++ *    GNU Lesser General Public License Version 2.1
++ *    =============================================
++ *    Copyright 2005 by Sun Microsystems, Inc.
++ *    901 San Antonio Road, Palo Alto, CA 94303, USA
++ *
++ *    This library is free software; you can redistribute it and/or
++ *    modify it under the terms of the GNU Lesser General Public
++ *    License version 2.1, as published by the Free Software Foundation.
++ *
++ *    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
++ *    Lesser General Public License for more details.
++ *
++ *    You should have received a copy of the GNU Lesser General Public
++ *    License along with this library; if not, write to the Free Software
++ *    Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ *    MA  02111-1307  USA
++ *
++ ************************************************************************/
++
++#ifndef INCLUDED_SVGIMPORTER_HXX
++#define INCLUDED_SVGIMPORTER_HXX
++
++#include <com/sun/star/frame/XModel.hpp>
++#include <com/sun/star/uno/Reference.hxx>
++#include <com/sun/star/xml/XImportFilter.hpp>
++#include <com/sun/star/document/XImporter.hpp>
++#include <com/sun/star/uno/XComponentContext.hpp>
++#include <cppuhelper/implbase2.hxx>
++
++namespace svgi
++{
++
++class SVGImporter : public cppu::WeakImplHelper2<
++    com::sun::star::xml::XImportFilter,
++    com::sun::star::document::XImporter>
++{
++private:
++	com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext> m_xFactory;
++    com::sun::star::uno::Reference<com::sun::star::frame::XModel>          m_xModel;
++
++    // XImportFilter    
++    virtual sal_Bool SAL_CALL importer( const com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue >& rSourceData,
++                                        const com::sun::star::uno::Reference< com::sun::star::xml::sax::XDocumentHandler >& rHdl,
++                                        const com::sun::star::uno::Sequence< rtl::OUString >& rUserData ) throw( com::sun::star::uno::RuntimeException );
++
++    // XImporter
++    virtual void SAL_CALL setTargetDocument( const com::sun::star::uno::Reference< com::sun::star::lang::XComponent >& xDocument )
++        throw( com::sun::star::lang::IllegalArgumentException );
++    
++public:
++	
++    explicit SVGImporter( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > &rxMSF );
++};
++
++}
++
++#endif
+diff --git a/filter/source/svgimport/svgisettings.pmk b/filter/source/svgimport/svgisettings.pmk
+new file mode 100644
+index 0000000..6babb3a
+--- /dev/null
++++ filter/source/svgimport/svgisettings.pmk
+@@ -0,0 +1,36 @@
++#*************************************************************************
++#
++#   OpenOffice.org - a multi-platform office productivity suite
++#
++#   $RCSfile: pdfisettings.pmk,v $
++#
++#   $Revision: 1.1.2.1 $
++#
++#   last change: $Author: thb $ $Date: 2007/11/15 12:36:00 $
++#
++#   The Contents of this file are made available subject to
++#   the terms of GNU Lesser General Public License Version 2.1.
++#
++#
++#     GNU Lesser General Public License Version 2.1
++#     =============================================
++#     Copyright 2005 by Sun Microsystems, Inc.
++#     901 San Antonio Road, Palo Alto, CA 94303, USA
++#
++#     This library is free software; you can redistribute it and/or
++#     modify it under the terms of the GNU Lesser General Public
++#     License version 2.1, as published by the Free Software Foundation.
++#
++#     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
++#     Lesser General Public License for more details.
++#
++#     You should have received a copy of the GNU Lesser General Public
++#     License along with this library; if not, write to the Free Software
++#     Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++#     MA  02111-1307  USA
++#
++#*************************************************************************
++
++PDFI_IMPLEMENTATION_IDENTIFIER="com.sun.star.comp.documents.PDFImport"
+diff --git a/filter/source/svgimport/svgreader.cxx b/filter/source/svgimport/svgreader.cxx
+new file mode 100644
+index 0000000..24b71e3
+--- /dev/null
++++ filter/source/svgimport/svgreader.cxx
+@@ -0,0 +1,326 @@
++ /*************************************************************************
++ *
++ *  OpenOffice.org - a multi-platform office productivity suite
++ *
++ *  $RCSfile$
++ *
++ *  $Revision$
++ *
++ *  last change: $Author$ $Date$
++ *
++ *  The Contents of this file are made available subject to
++ *  the terms of GNU Lesser General Public License Version 2.1.
++ *
++ *
++ *    GNU Lesser General Public License Version 2.1
++ *    =============================================
++ *    Copyright 2005 by Sun Microsystems, Inc.
++ *    901 San Antonio Road, Palo Alto, CA 94303, USA
++ *
++ *    This library is free software; you can redistribute it and/or
++ *    modify it under the terms of the GNU Lesser General Public
++ *    License version 2.1, as published by the Free Software Foundation.
++ *
++ *    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
++ *    Lesser General Public License for more details.
++ *
++ *    You should have received a copy of the GNU Lesser General Public
++ *    License along with this library; if not, write to the Free Software
++ *    Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ *    MA  02111-1307  USA
++ *
++ ************************************************************************/
++
++#include "svgreader.hxx"
++#include "saxattrlist.hxx"
++
++#include <rtl/math.hxx>
++#include <rtl/ref.hxx>
++#include <basegfx/polygon/b2dpolypolygon.hxx>
++#include <basegfx/polygon/b2dpolypolygontools.hxx>
++#include <com/sun/star/io/XSeekable.hpp>
++#include <com/sun/star/xml/sax/XParser.hpp>
++
++#include <hash_map>
++
++#define USTR(x) rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( x ) )
++#define OASIS_STR "urn:oasis:names:tc:opendocument:xmlns:"
++
++using namespace ::com::sun::star;
++
++namespace svgi
++{
++
++SVGReader::SVGReader(const uno::Reference<uno::XComponentContext>&     xServiceFactory,
++                     const uno::Reference<io::XInputStream>&           xInputStream, 
++                     const uno::Reference<xml::sax::XDocumentHandler>& xDocumentHandler) :
++	m_xServiceFactory( xServiceFactory ),
++	m_xInputStream( xInputStream ),
++	m_xDocumentHandler( xDocumentHandler )
++{
++	fprintf(stderr, "SVGReader::ctor\n");
++}
++
++void SAL_CALL SVGReader::startDocument() throw (xml::sax::SAXException,uno::RuntimeException)
++{
++    OSL_ASSERT(m_xDocumentHandler.is());
++	fprintf(stderr, "startDocument()\n");
++    m_xDocumentHandler->startDocument();
++}
++
++void SAL_CALL SVGReader::endDocument() throw (xml::sax::SAXException,uno::RuntimeException)
++{
++    OSL_ASSERT(m_xDocumentHandler.is());
++	fprintf(stderr, "endDocument()\n");
++    m_xDocumentHandler->endDocument();
++}
++
++void SAL_CALL SVGReader::startElement(const rtl::OUString& str, const uno::Reference<xml::sax::XAttributeList>& attriblist) 
++    throw (xml::sax::SAXException, uno::RuntimeException)
++{
++    OSL_ASSERT(m_xDocumentHandler.is());
++	fprintf(stderr, "startElement(");
++	fprintf(stderr, OUStringToOString( str ,RTL_TEXTENCODING_ASCII_US ).getStr() );
++	for (int i=0; i < attriblist->getLength(); i++)
++	{
++		fprintf(stderr, " ");
++		fprintf(stderr, OUStringToOString( attriblist->getNameByIndex(i), RTL_TEXTENCODING_ASCII_US ).getStr() );
++		fprintf(stderr, "=\"");
++		fprintf(stderr, OUStringToOString( attriblist->getValueByIndex(i), RTL_TEXTENCODING_ASCII_US ).getStr() );
++		fprintf(stderr, "\"");
++	}
++	fprintf(stderr, ")\n");
++
++    // TODO(P3): gperf
++	if (!str.compareToAscii("svg"))
++		handleBeginSVG(attriblist);
++	if (!str.compareToAscii("polyline"))
++		handleBeginPath(attriblist);
++}
++
++void SAL_CALL SVGReader::endElement(const rtl::OUString& str) 
++    throw (xml::sax::SAXException, uno::RuntimeException) 
++{
++    OSL_ASSERT(m_xDocumentHandler.is());
++	fprintf(stderr, "endElement(");
++	fprintf(stderr, OUStringToOString( str ,RTL_TEXTENCODING_ASCII_US ).getStr() );
++	fprintf(stderr, ")\n");
++
++	if (!str.compareToAscii("svg"))
++		handleEndSVG();
++	if (!str.compareToAscii("path"))
++		handleEndPath();
++}
++
++void SAL_CALL SVGReader::characters(const rtl::OUString& str) 
++    throw (xml::sax::SAXException, uno::RuntimeException) 
++{
++    OSL_ASSERT(m_xDocumentHandler.is());
++}
++
++void SAL_CALL SVGReader::ignorableWhitespace(const rtl::OUString&) 
++    throw (xml::sax::SAXException, uno::RuntimeException)
++{}
++  
++void  SAL_CALL SVGReader::processingInstruction(const rtl::OUString& str, const rtl::OUString& str2) 
++    throw (xml::sax::SAXException, uno::RuntimeException) 
++{
++    OSL_ASSERT(m_xDocumentHandler.is());
++    m_xDocumentHandler->processingInstruction(str, str2);
++}
++
++void SAL_CALL SVGReader::setDocumentLocator(const uno::Reference<xml::sax::XLocator>& doclocator) 
++    throw (xml::sax::SAXException, uno::RuntimeException) 
++{
++    OSL_ASSERT(m_xDocumentHandler.is());
++    m_xDocumentHandler->setDocumentLocator(doclocator);
++}
++
++sal_Bool SVGReader::parseAndConvert()
++{
++	fprintf(stderr, "parseAndConvert\n");
++    uno::Reference< io::XSeekable > xSeek(m_xInputStream, uno::UNO_QUERY);
++    if (xSeek.is())
++        xSeek->seek(0);
++
++	uno::Reference< xml::sax::XParser > xSaxParser( m_xServiceFactory->getServiceManager()->createInstanceWithContext( 
++                                                        rtl::OUString::createFromAscii("com.sun.star.xml.sax.Parser"),
++                                                        m_xServiceFactory), uno::UNO_QUERY );
++    OSL_ASSERT(xSaxParser.is());
++	if(!xSaxParser.is())
++        return sal_False;
++
++    try
++	{	     
++        xml::sax::InputSource aInput;
++	    aInput.aInputStream = m_xInputStream;
++
++	    xSaxParser->setDocumentHandler(this);
++	    xSaxParser->parseStream(aInput);
++	}
++	catch( uno::Exception &exc)
++	{
++        OSL_ENSURE(0, rtl::OUStringToOString(exc.Message,
++                                             RTL_TEXTENCODING_UTF8 ).getStr() );
++        return sal_False;
++	}
++
++    return sal_True;
++}
++
++void SVGReader::handleBeginSVG(const uno::Reference< xml::sax::XAttributeList >& attriblist)
++{
++	rtl::OUString sHeight = attriblist->getValueByName(rtl::OUString::createFromAscii("width"));
++	rtl::OUString sWidth = attriblist->getValueByName(rtl::OUString::createFromAscii("height"));
++	//double fHeight = 0.0;	
++
++    PropertyMap aProps;
++
++    // document prolog
++    aProps[ USTR( "xmlns:office" ) ]      = USTR( OASIS_STR "office:1.0" );
++    aProps[ USTR( "xmlns:style" ) ]       = USTR( OASIS_STR "style:1.0" );
++    aProps[ USTR( "xmlns:text" ) ]        = USTR( OASIS_STR "text:1.0" );
++    aProps[ USTR( "xmlns:svg" ) ]         = USTR( OASIS_STR "svg-compatible:1.0" );
++    aProps[ USTR( "xmlns:table" ) ]       = USTR( OASIS_STR "table:1.0" );
++    aProps[ USTR( "xmlns:draw" ) ]        = USTR( OASIS_STR "drawing:1.0" );
++    aProps[ USTR( "xmlns:fo" ) ]          = USTR( OASIS_STR "xsl-fo-compatible:1.0" );
++    aProps[ USTR( "xmlns:xlink" )]        = USTR( "http://www.w3.org/1999/xlink"; );
++    aProps[ USTR( "xmlns:dc" )]           = USTR( "http://purl.org/dc/elements/1.1/"; );
++    aProps[ USTR( "xmlns:number" )]       = USTR( OASIS_STR "datastyle:1.0" );
++    aProps[ USTR( "xmlns:presentation" )] = USTR( OASIS_STR "presentation:1.0" );
++    aProps[ USTR( "xmlns:math" )]         = USTR( "http://www.w3.org/1998/Math/MathML"; );
++    aProps[ USTR( "xmlns:form" )]         = USTR( OASIS_STR "form:1.0" );
++    aProps[ USTR( "xmlns:script" )]       = USTR( OASIS_STR "script:1.0" );
++    aProps[ USTR( "xmlns:dom" )]          = USTR( "http://www.w3.org/2001/xml-events"; );
++    aProps[ USTR( "xmlns:xforms" )]       = USTR( "http://www.w3.org/2002/xforms"; );
++    aProps[ USTR( "xmlns:xsd" )]          = USTR( "http://www.w3.org/2001/XMLSchema"; );
++    aProps[ USTR( "xmlns:xsi" )]          = USTR( "http://www.w3.org/2001/XMLSchema-instance"; );
++    aProps[ USTR( "office:version" ) ]    = USTR( "1.0" );
++
++    rtl::Reference<AttributeList> xAttrs( new AttributeList(aProps) );
++    uno::Reference<xml::sax::XAttributeList> xUnoAttrs( xAttrs.get() );
++    m_xDocumentHandler->startElement( USTR("office:document"), xUnoAttrs );
++
++    xAttrs->clear();
++    m_xDocumentHandler->startElement( USTR("office:automatic-styles"), 
++                                      xUnoAttrs );
++
++    aProps.clear();
++    aProps[ USTR( "style:name" ) ] = USTR("pagelayout1");
++    *xAttrs = aProps;
++    m_xDocumentHandler->startElement( USTR("style:page-layout"), 
++                                      xUnoAttrs );
++    // TODO(Q3): this is super-ugly. In-place container come to mind.
++    aProps.clear();
++    aProps[ USTR( "fo:margin-top" ) ] = USTR("10mm");
++    aProps[ USTR( "fo:margin-bottom" ) ] = USTR("10mm");
++    aProps[ USTR( "fo:margin-left" ) ] = USTR("10mm");
++    aProps[ USTR( "fo:margin-right" ) ] = USTR("10mm");
++    aProps[ USTR( "fo:page-width" ) ] = USTR("100mm");
++    aProps[ USTR( "fo:page-height" ) ] = USTR("100mm");
++    aProps[ USTR( "fo:print-orientation" ) ] = USTR("landscape");
++    *xAttrs = aProps;
++    m_xDocumentHandler->startElement( USTR("style:page-layout-properties"), 
++                                      xUnoAttrs );
++    m_xDocumentHandler->endElement( USTR("style:page-layout-properties") );
++    m_xDocumentHandler->endElement( USTR("style:page-layout") );
++
++    aProps.clear();
++    aProps[ USTR( "style:name" ) ] = USTR("pagestyle1");
++    aProps[ USTR( "style:family" ) ] = USTR("drawing-page");
++    *xAttrs = aProps;
++    m_xDocumentHandler->startElement( USTR("style:style"), 
++                                      xUnoAttrs );
++
++    aProps.clear();
++    aProps[ USTR( "draw:background-size" ) ] = USTR("border");
++    aProps[ USTR( "draw:fill" ) ] = USTR("none");
++    *xAttrs = aProps;
++    m_xDocumentHandler->startElement( USTR("style:drawing-page-properties"), 
++                                      xUnoAttrs );
++    m_xDocumentHandler->endElement( USTR("style:drawing-page-properties") );
++    m_xDocumentHandler->endElement( USTR("style:style") );
++
++    // TEMP
++    aProps.clear();
++    aProps[ USTR( "style:name" ) ] = USTR("graphicstyle1");
++    aProps[ USTR( "style:family" ) ] = USTR("graphic");
++    *xAttrs = aProps;
++    m_xDocumentHandler->startElement( USTR("style:style"), 
++                                      xUnoAttrs );
++    aProps.clear();
++    aProps[ USTR( "draw:stroke" ) ] = USTR("none");
++    aProps[ USTR( "draw:fill" ) ] = USTR("solid");
++    aProps[ USTR( "draw:fill-color" ) ] = USTR("#ffffff");
++    *xAttrs = aProps;
++    m_xDocumentHandler->startElement( USTR("style:graphic-properties"), 
++                                      xUnoAttrs );
++    m_xDocumentHandler->endElement( USTR("style:graphic-properties") );
++    m_xDocumentHandler->endElement( USTR("style:style") );
++
++    m_xDocumentHandler->endElement( USTR("office:automatic-styles") );
++
++    ////////////////////////////////////////////////////////////////////
++
++    xAttrs->clear();
++    m_xDocumentHandler->startElement( USTR("office:styles"), 
++                                      xUnoAttrs);
++    m_xDocumentHandler->endElement( USTR("office:styles") );
++    m_xDocumentHandler->startElement( USTR("office:master-styles"), 
++                                      xUnoAttrs );
++
++    ////////////////////////////////////////////////////////////////////
++
++    aProps.clear();
++    aProps[ USTR( "style:name" ) ] = USTR("Default");
++    aProps[ USTR( "style:page-layout-name" ) ] = USTR("pagelayout1");
++    aProps[ USTR( "draw:style-name" ) ] = USTR("pagestyle1");
++    *xAttrs = aProps;
++    m_xDocumentHandler->startElement( USTR("style:master-page"), 
++                                      xUnoAttrs );
++    m_xDocumentHandler->endElement( USTR("style:master-page") );
++
++    m_xDocumentHandler->endElement( USTR("office:master-styles") );
++
++    aProps.clear();
++    aProps[ USTR( "draw:master-page-name" ) ] = USTR("Default");
++    *xAttrs = aProps;    
++    m_xDocumentHandler->startElement(USTR("draw:page"), 
++                                     xUnoAttrs);
++}
++
++void SVGReader::handleEndSVG()
++{
++    m_xDocumentHandler->endElement( USTR("draw:page") );
++    m_xDocumentHandler->endElement( USTR("office:document") );
++}
++
++void SVGReader::handleBeginPath(const uno::Reference< xml::sax::XAttributeList >& attriblist)
++{
++	rtl::OUString sPoints = attriblist->getValueByName(USTR("points"));
++    basegfx::B2DPolygon aPoly;
++    basegfx::tools::importFromSvgPoints(aPoly, sPoints);
++
++    PropertyMap aProps;
++    aProps[ USTR( "draw:style-name" ) ] = USTR("graphicstyle1");
++    aProps[ USTR( "svg:width" ) ] = USTR("20mm");
++    aProps[ USTR( "svg:height" ) ] = USTR("20mm");
++    aProps[ USTR( "svg:x" ) ] = USTR("20mm");
++    aProps[ USTR( "svg:y" ) ] = USTR("20mm");
++    aProps[ USTR( "svg:d" ) ] = basegfx::tools::exportToSvgD(
++        basegfx::B2DPolyPolygon(aPoly));
++
++    uno::Reference<xml::sax::XAttributeList> xUnoAttrs( 
++        new AttributeList(aProps) );
++    m_xDocumentHandler->startElement(USTR("draw:path"), 
++                                     xUnoAttrs);
++    m_xDocumentHandler->endElement(USTR("draw:path"));
++}
++
++void SVGReader::handleEndPath()
++{
++}
++
++} // namespace svgi
+diff --git a/filter/source/svgimport/svgreader.hxx b/filter/source/svgimport/svgreader.hxx
+new file mode 100644
+index 0000000..d8c1cf5
+--- /dev/null
++++ filter/source/svgimport/svgreader.hxx
+@@ -0,0 +1,101 @@
++ /*************************************************************************
++ *
++ *  OpenOffice.org - a multi-platform office productivity suite
++ *
++ *  $RCSfile$
++ *
++ *  $Revision$
++ *
++ *  last change: $Author$ $Date$
++ *
++ *  The Contents of this file are made available subject to
++ *  the terms of GNU Lesser General Public License Version 2.1.
++ *
++ *
++ *    GNU Lesser General Public License Version 2.1
++ *    =============================================
++ *    Copyright 2005 by Sun Microsystems, Inc.
++ *    901 San Antonio Road, Palo Alto, CA 94303, USA
++ *
++ *    This library is free software; you can redistribute it and/or
++ *    modify it under the terms of the GNU Lesser General Public
++ *    License version 2.1, as published by the Free Software Foundation.
++ *
++ *    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
++ *    Lesser General Public License for more details.
++ *
++ *    You should have received a copy of the GNU Lesser General Public
++ *    License along with this library; if not, write to the Free Software
++ *    Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ *    MA  02111-1307  USA
++ *
++ ************************************************************************/
++
++#ifndef INCLUDED_SVGREADER_HXX
++#define INCLUDED_SVGREADER_HXX
++
++#include <cppuhelper/implbase1.hxx>
++
++#include <com/sun/star/beans/XPropertySet.hpp>
++#include <com/sun/star/uno/XComponentContext.hpp>
++#include <com/sun/star/uno/XInterface.hpp>
++#include <com/sun/star/util/Color.hpp>
++#include <com/sun/star/xml/sax/XDocumentHandler.hpp>
++#include <com/sun/star/xml/sax/XExtendedDocumentHandler.hpp>
++#include <com/sun/star/xml/sax/SAXException.hpp>
++#include <com/sun/star/io/XInputStream.hpp>
++
++#include <basegfx/matrix/b2dhommatrix.hxx>
++
++namespace svgi
++{
++
++class SVGReader : public cppu::WeakImplHelper1 < ::com::sun::star::xml::sax::XDocumentHandler>
++{
++    const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >      m_xServiceFactory;    
++    const ::com::sun::star::uno::Reference< com::sun::star::io::XInputStream >              m_xInputStream;
++	const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler >  m_xDocumentHandler;
++
++    // XDocumentHandler
++    virtual void SAL_CALL startDocument() 
++        throw (com::sun::star::xml::sax::SAXException, com::sun::star::uno::RuntimeException);
++
++    virtual void SAL_CALL endDocument() 
++        throw (com::sun::star::xml::sax::SAXException, com::sun::star::uno::RuntimeException);
++
++    virtual void SAL_CALL startElement(const rtl::OUString& str, const ::com::sun::star::uno:: Reference< com::sun::star::xml::sax::XAttributeList >& attriblist) 
++        throw (com::sun::star::xml::sax::SAXException, com::sun::star::uno::RuntimeException);
++
++    virtual void SAL_CALL endElement(const rtl::OUString& str)  
++        throw (com::sun::star::xml::sax::SAXException, com::sun::star::uno::RuntimeException);
++
++    virtual void SAL_CALL characters(const rtl::OUString& str)  
++        throw (com::sun::star::xml::sax::SAXException, com::sun::star::uno::RuntimeException);
++
++    virtual void SAL_CALL ignorableWhitespace(const rtl::OUString& str) 
++        throw (com::sun::star::xml::sax::SAXException, com::sun::star::uno::RuntimeException);
++
++    virtual void SAL_CALL processingInstruction(const rtl::OUString& str, const rtl::OUString& str2) 
++        throw (com::sun::star::xml::sax::SAXException, com::sun::star::uno::RuntimeException);
++
++    virtual void SAL_CALL setDocumentLocator(const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XLocator >& doclocator) 
++        throw (com::sun::star::xml::sax::SAXException, com::sun::star::uno::RuntimeException);
++
++	void handleBeginSVG(const ::com::sun::star::uno:: Reference< com::sun::star::xml::sax::XAttributeList >& attriblist);
++	void handleEndSVG();
++	void handleBeginPath(const ::com::sun::star::uno:: Reference< com::sun::star::xml::sax::XAttributeList >& attriblist);
++	void handleEndPath();
++		
++public:
++    SVGReader( const com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext>&           xServiceFactory,
++               const com::sun::star::uno::Reference< com::sun::star::io::XInputStream >&               xInputStream,
++               const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler >& xDocumentHandler );
++
++	sal_Bool parseAndConvert();
++};
++
++} // namespace svgi
++
++#endif
+diff --git a/filter/source/svgimport/test/daisies.svg b/filter/source/svgimport/test/daisies.svg
+new file mode 100644
+index 0000000..711db83
+--- /dev/null
++++ filter/source/svgimport/test/daisies.svg
+@@ -0,0 +1,155 @@
++<?xml version="1.0" encoding="UTF-8" standalone="no"?>
++<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";>
++<!-- Created with wpg2svg/libwpg 0.1.2 -->
++<svg xmlns="http://www.w3.org/2000/svg"; xmlns:xlink="http://www.w3.org/1999/xlink"; version="1.1" width="349.98" height="485.16">
++  <ellipse cx="156" cy="339.54" rx="72.78" ry="14.22" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(170,0,0); "/>
++  <polyline points="216.6 366.96, 201.42 439.74, 199.56 443.58, 194.82 448.32, 187.26 452.04, 178.8 454.92, 163.62 456.78, 141 456.78, 127.74 454.92, 119.16 451.08, 114.48 447.3, 111.66 443.58, 94.62 371.7, 173.1 368.82, 201.42 366.06" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,85); "/>
++  <polyline points="217.5 368.82, 210.9 393.42, 206.16 396.3, 200.52 398.16, 191.04 400.98, 174.06 401.94, 173.1 384.9, 176.88 374.52, 203.4 370.74, 216.6 366.96" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,255,85); "/>
++  <polyline points="82.5 339.66, 85.8 343.26, 90.48 345.42, 103.08 349.74, 116.7 351.9, 135.78 353.7, 156.96 354.06, 179.22 353.34, 195.42 351.54, 210.78 348.66, 219.48 346.56, 224.82 344.34, 227.04 342.24, 228.78 339, 221.64 371.34, 215.88 374.94, 201.84 380.28, 182.1 384.6, 163.38 385.62, 146.16 385.62, 132.84 384.6, 117.06 382.02, 106.68 379.92, 96.54 376.02, 93 373.86, 91.2 372.72, 90.48 371.34" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,85); "/>
++  <polyline points="88.32 344.34, 90.84 342.24, 98.76 339, 115.62 335.34, 132.18 333.24, 153.3 331.74, 177.42 332.52, 195.72 334.26, 210.12 337.2, 217.68 339, 221.64 340.74, 223.44 341.88, 224.46 342.96, 224.1 344.34, 223.8 344.7, 218.04 347.28, 206.52 349.74, 189.66 352.62, 165.18 354.42, 151.14 354.42, 138.66 354.06, 125.7 352.98, 114.18 351.54, 105.54 350.1, 95.46 347.58, 90.12 345.42, 87.96 344.7" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(170,85,0); "/>
++  <polyline points="130.56 405.72, 130.56 424.62, 134.34 438.84, 139.98 455.82, 147.6 467.16, 151.38 470.94, 151.38 461.52, 155.1 452.04, 161.76 456.78, 175.92 461.52, 163.62 453, 153.24 438.84, 146.64 422.76, 139.98 401.94" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,255,85); "/>
++  <polyline points="139.02 403.86, 133.38 417.12, 129.6 432.18, 128.64 440.7, 128.64 451.08, 131.52 458.7, 120.18 446.4, 114.48 438.84, 107.82 444.48, 101.22 450.18, 90.84 455.82, 98.4 442.56, 111.66 423.72, 123.9 404.76, 132.42 397.26" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,255,85); "/>
++  <polyline points="131.52 384.9, 117.3 378.3, 103.14 369.78, 98.4 366.96, 93.66 366.06, 90.84 366.06, 87.96 366.96, 86.1 369.78, 85.2 373.56, 85.2 379.26, 88.98 385.92, 92.7 390.6, 94.62 395.28, 95.58 401.94, 96.54 407.64, 98.4 413.28, 101.22 417.12, 105.06 419.88, 108.78 419.88, 114.48 419.88, 119.16 418.02, 123 415.2, 126.78 410.46, 129.6 404.76, 134.34 398.16" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,255,85); "/>
++  <polyline points="136.26 385.92, 153.24 378.3, 166.44 371.7, 173.1 369.78, 176.88 368.82, 182.58 370.74, 184.44 374.52, 186.3 379.26, 186.3 384, 183.48 388.68, 181.56 395.28, 180.66 400.98, 182.58 406.68, 183.48 411.36, 183.48 417.12, 180.66 422.76, 176.88 425.58, 174.06 426.48, 170.22 426.48, 165.54 424.62, 161.76 419.88, 154.2 414.24, 151.38 409.5, 141.9 399.12" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,255,85); "/>
++  <polyline points="139.98 393.42, 159.84 386.82, 172.2 383.04, 174.96 384.9, 172.2 386.82, 168.36 389.64, 163.62 390.6, 159.84 392.52, 158.94 394.38, 165.54 399.12, 172.2 403.86, 174.96 406.68, 171.18 407.64, 163.62 406.68, 159.84 404.76, 155.1 402.9, 149.46 401.94, 141 400.02" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,85,0); "/>
++  <polyline points="134.34 390.6, 124.86 390.6, 111.66 387.78, 104.04 385.92, 103.14 387.78, 107.82 391.56, 114.48 393.42, 118.26 396.3, 114.48 400.02, 110.7 403.86, 108.78 406.68, 108.78 409.5, 116.4 405.72, 122.04 402.9, 131.52 399.12, 135.24 397.26" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,85,0); "/>
++  <polyline points="106.92 376.44, 101.22 373.56, 96.54 371.7, 92.7 370.74, 90.84 373.56, 89.88 377.34, 91.8 381.18, 91.8 382.08, 91.8 377.34, 93.66 375.48, 97.44 375.48" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(255,255,255); "/>
++  <polyline points="152.28 383.04, 169.32 374.52, 174.96 372.66, 179.7 373.56, 181.56 375.48, 180.66 377.34, 177.84 377.34, 174.06 376.44, 159.84 381.18" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(255,255,255); "/>
++  <polyline points="146.64 382.08, 143.76 381.18, 138.12 379.26, 131.52 381.18, 128.64 382.08, 125.82 383.04, 123.9 384.9, 121.08 388.68, 121.08 392.52, 123 401.94, 124.86 405.72, 130.56 408.54, 135.24 408.54, 141.9 407.64, 145.68 406.68, 148.5 404.76, 149.46 402.9, 148.5 400.98, 147.6 399.12, 145.68 396.3, 143.76 394.38, 142.86 389.64, 142.86 386.82, 143.76 384" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,255,85); "/>
++  <polyline points="133.38 384, 131.52 384.9, 129.6 385.92, 127.74 385.92, 124.86 386.82, 123.9 389.64, 123.9 391.56, 125.82 399.12, 126.78 401.94, 125.82 394.38, 125.82 391.56, 129.6 387.78" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(255,255,255); "/>
++  <polyline points="133.38 266.76, 126.78 233.64, 118.26 201.48, 110.7 175.98, 101.22 162.78, 86.1 147.66, 69.12 133.44, 60.6 124.92, 56.76 123.06, 62.46 122.1, 73.86 124.92, 88.98 134.4, 97.44 141, 104.04 148.56, 95.58 124.92, 88.98 109.8, 82.32 98.46, 87.06 99.36, 93.66 114.48, 99.36 126.84, 106.92 148.56, 115.44 179.76, 128.64 227.04, 136.26 269.58" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(85,255,85); "/>
++  <polyline points="143.76 346.14, 138.12 319.68, 133.38 283.74, 128.64 267.72, 123 259.2, 115.44 252.54, 100.32 244.02, 78.6 235.56, 58.68 233.64, 44.52 233.64, 60.6 228, 79.5 225.18, 98.4 228, 111.66 233.64, 122.04 241.26, 129.6 250.68, 135.24 258.24, 137.16 262.98, 138.12 249.72, 141 234.6, 146.64 218.52, 149.46 219.48, 143.76 234.6, 139.02 266.76, 139.02 283.74, 141.9 311.16, 145.68 339.54, 147.6 342.36, 148.5 344.28, 148.5 345.24, 148.5 346.14, 149.46 346.14, 148.5 347.1, 146.64 347.1, 142.86 348.96" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(85,255,85); "/>
++  <polyline points="144.72 175.02, 136.26 167.52, 131.52 160.86, 128.64 153.3, 126.78 142.92, 125.82 124.92, 128.64 103.2, 131.52 90.9, 118.26 116.46, 114.48 136.32, 113.52 152.34, 116.4 162.78, 122.04 173.16, 132.42 181.62, 144.72 186.36" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(85,255,85); "/>
++  <polyline points="153.24 346.14, 152.28 344.28, 154.2 329.16, 161.76 287.58, 162.72 287.58, 166.44 292.32, 163.62 300.78, 157.02 337.62, 157.02 342.36, 157.98 343.32, 157.98 346.14, 156.06 346.14" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(85,255,85); "/>
++  <polyline points="165.54 346.14, 164.58 344.28, 162.72 287.58, 168.36 289.44, 166.44 302.7, 167.46 329.16, 169.32 341.46, 169.32 344.28, 169.32 346.14, 167.46 346.14" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(85,255,85); "/>
++  <polyline points="187.26 155.16, 192.96 133.44, 193.92 109.8, 192.96 97.5, 191.04 92.76, 189.18 89.94, 187.26 88.02, 179.7 89.94, 185.4 86.16, 191.04 86.16, 197.64 88.02, 200.52 94.68, 201.42 112.62, 197.64 134.4, 188.22 158.04" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(85,255,85); "/>
++  <polyline points="188.22 155.16, 197.64 138.18, 209.04 126.84, 218.46 121.14, 225.12 121.14, 216.6 125.88, 204.3 142.92, 196.74 160.86, 189.18 167.52" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(85,255,85); "/>
++  <polyline points="217.5 97.5, 200.52 128.7, 186.3 169.38, 204.3 127.74, 221.34 95.64" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(85,255,85); "/>
++  <polyline points="195.78 185.46, 208.08 168.42, 216.6 155.16, 221.34 144.78, 224.16 127.74, 226.02 133.44, 226.02 146.7, 230.76 141.96, 247.8 138.18, 244.98 141.96, 237.36 143.82, 227.94 148.56, 221.34 154.26, 210 173.16, 203.4 182.58" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(85,255,85); "/>
++  <polyline points="45.42 47.4, 35.04 41.7, 31.26 41.7, 27.48 41.7, 26.58 42.72, 26.58 45.48, 28.44 48.36, 33.18 53.1, 36.96 56.82, 42.66 58.74, 49.26 62.52" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="70.02 60.66, 63.42 43.62, 61.5 33.24, 60.6 25.62, 64.38 19.98, 67.2 18.12, 70.02 18.12, 72.84 20.88, 74.76 23.76, 76.62 29.46, 77.58 37.98, 79.5 53.1, 78.6 67.26" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="76.62 65.34, 80.46 38.88, 82.32 23.76, 83.28 19.98, 85.2 17.16, 88.98 14.28, 89.88 14.28, 91.8 15.24, 93.66 18.12, 93.66 35.1, 89.88 59.7, 84.24 65.34" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="72.84 64.44, 68.16 51.18, 61.5 40.8, 53.04 31.32, 45.42 27.54, 39.78 26.58, 37.92 27.54, 37.92 29.46, 37.92 32.28, 40.74 42.72, 44.52 53.1, 52.08 63.48, 64.38 71.04, 68.16 72" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="85.2 65.34, 90.84 51.18, 103.14 28.5, 108.78 20.88, 115.44 16.2, 117.3 16.2, 119.16 17.16, 119.16 19.98, 113.52 36.96, 105.96 51.18, 100.32 59.7, 94.62 64.44, 87.06 68.16" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="89.88 69.18, 99.36 58.74, 107.82 46.44, 115.44 39.84, 121.08 34.14, 123.9 31.32, 127.74 31.32, 128.64 34.14, 127.74 41.7, 121.08 51.18, 117.3 57.78, 114.48 61.56, 108.78 66.3, 95.58 71.04" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="89.88 72.9, 102.18 67.26, 115.44 58.74, 127.74 52.08, 132.42 51.18, 135.24 51.18, 138.12 51.18, 139.02 53.1, 139.02 54.96, 137.16 58.74, 134.34 61.56, 128.64 66.3, 122.04 71.04, 116.4 73.92, 111.66 75.78, 107.82 76.68, 99.36 79.56" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="91.8 75.78, 94.62 82.38, 98.4 90.9, 98.4 99.36, 95.58 105.12, 93.66 107.88, 90.84 109.8, 87.96 109.8, 85.2 109.8, 83.28 107.88, 79.5 106.98, 78.6 103.2, 76.62 90.9, 76.62 80.52" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="88.98 73.92, 96.54 73.92, 106.92 74.82, 111.66 76.68, 113.52 79.56, 115.44 83.28, 114.48 88.98, 112.56 90.9, 108.78 92.76, 105.06 92.76, 101.22 91.86, 98.4 89.94, 93.66 85.26, 89.88 80.52" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="59.64 82.38, 41.64 88.98, 30.3 93.72, 23.7 96.54, 18.96 101.28, 18.06 103.2, 18.06 106.02, 20.88 106.98, 24.66 107.88, 37.92 104.1, 44.52 101.28, 54.9 92.76" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="72.84 77.64, 66.24 89.94, 60.6 101.28, 58.68 107.88, 58.68 113.58, 60.6 115.5, 65.34 116.46, 69.12 115.5, 72.84 113.58, 76.62 108.84, 79.5 105.12, 82.32 99.36, 83.28 92.76, 84.24 87.12, 84.24 81.42, 83.28 72.9" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="67.2 79.56, 56.76 86.16, 48.3 93.72, 43.56 98.46, 38.82 104.1, 36.96 107.88, 35.04 112.62, 35.04 115.5, 36.96 117.36, 39.78 117.36, 45.42 115.5, 52.08 111.72, 58.68 106.02, 64.38 96.54, 68.16 89.94, 70.98 82.38" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="69.12 72.9, 58.68 65.34, 51.12 61.56, 44.52 57.78, 38.82 54.96, 33.18 54.06, 28.44 54.06, 21.84 54.96, 17.1 56.82, 14.22 58.74, 14.22 61.56, 14.22 65.34, 18.06 68.16, 20.88 71.04, 25.56 73.92, 31.26 75.78, 40.74 78.6, 65.34 78.6" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="69.12 76.68, 55.86 75.78, 35.04 75.78, 22.8 77.64, 18.96 79.56, 17.1 81.42, 16.2 84.3, 18.06 87.12, 20.88 88.98, 25.56 89.94, 36.96 89.94, 52.08 85.26, 67.2 81.42, 74.76 76.68" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="69.12 64.44, 65.34 57.78, 59.64 46.44, 54 38.88, 49.26 34.14, 45.42 31.32, 53.04 39.84, 56.76 48.36, 59.64 54.06, 62.46 61.56, 60.6 61.56, 58.68 60.66, 59.64 63.48, 62.46 65.34, 64.38 67.26, 65.34 67.26" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="62.46 71.04, 58.68 68.16, 48.3 65.34, 43.56 62.52, 40.74 62.52, 36 62.52, 41.64 65.34, 45.42 68.16, 42.66 71.04, 46.38 71.04, 52.08 72, 58.68 73.92, 65.34 73.92" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="40.74 50.22, 40.74 49.32, 36 46.44, 33.18 44.58, 31.26 44.58, 34.14 47.4, 38.82 49.32, 41.64 53.1, 42.66 54.96" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="54 78.6, 46.38 79.56, 39.78 82.38, 37.92 83.28, 46.38 83.28, 54.9 81.42, 61.5 79.56" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="63.42 85.26, 60.6 87.12, 57.78 89.94, 54 96.54, 49.26 103.2, 45.42 108.84, 54 104.1, 58.68 95.64, 59.64 95.64, 61.5 92.76, 63.42 89.94, 65.34 88.02" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="78.6 79.56, 79.5 80.52, 79.5 84.3, 79.5 86.16, 73.86 86.16, 71.94 88.98, 71.94 86.16, 72.84 82.38" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="78.6 84.3, 79.5 87.12, 80.46 91.86, 78.6 98.46, 76.62 99.36, 77.58 92.76, 78.6 82.38" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="87.06 81.42, 89.88 84.3, 91.8 85.26, 91.8 89.94, 89.88 89.94, 87.06 86.16, 86.1 82.38" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="94.62 77.64, 93.66 75.78, 94.62 81.42, 96.54 82.38, 99.36 82.38, 101.22 80.52, 105.06 80.52, 106.92 80.52, 104.04 78.6, 98.4 76.68" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="101.22 72, 106.92 69.18, 114.48 65.34, 117.3 63.48, 121.08 63.48, 114.48 69.18, 110.7 70.08, 102.18 71.04" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="95.58 67.26, 103.14 58.74, 106.92 54.96, 110.7 51.18, 115.44 48.36, 115.44 51.18, 115.44 53.1, 111.66 56.82, 106.92 60.66, 104.04 63.48" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="89.88 61.56, 94.62 51.18, 99.36 44.58, 101.22 41.7, 105.06 39.84, 104.04 44.58, 101.22 48.36, 101.22 52.08, 96.54 58.74, 92.7 62.52, 90.84 63.48" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="83.28 62.52, 86.1 54.96, 87.96 49.32, 88.98 43.62, 88.98 36.96, 89.88 31.32, 89.88 27.54, 88.98 24.72, 87.96 29.46, 87.96 35.1, 86.1 42.72, 84.24 48.36, 83.28 48.36, 82.32 50.22, 82.32 55.92, 81.36 61.56, 81.36 63.48" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="73.86 59.7, 74.76 49.32, 75.72 43.62, 73.86 36.96, 72.84 31.32, 71.94 25.62, 71.94 32.28, 72.84 40.8, 72.84 44.58, 70.98 47.4, 70.02 47.4, 70.02 50.22, 73.86 53.1, 73.86 57.78, 73.86 60.66" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="78.6 57.78, 75.72 58.74, 72.84 59.7, 69.12 61.56, 64.38 65.34, 59.64 72, 57.78 75.78, 57.78 79.56, 58.68 82.38, 60.6 83.28, 64.38 85.26, 70.98 84.3, 78.6 83.28, 86.1 80.52, 90.84 75.78, 96.54 69.18, 96.54 65.34, 95.58 59.7, 92.7 57.78, 87.96 55.92, 80.46 56.82" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,255,85); "/>
++  <polyline points="86.1 64.44, 81.36 63.48, 75.72 65.34, 72.84 67.26, 69.12 69.18, 65.34 72, 64.38 75.78, 64.38 76.68, 66.24 77.64, 68.16 77.64, 67.2 76.68, 66.24 75.78, 68.16 72.9, 70.98 71.04, 72.84 69.18, 75.72 67.26, 79.5 65.34, 82.32 65.34, 83.28 65.34" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,85,0); "/>
++  <polyline points="93.66 63.48, 93.66 68.16, 88.98 73.92, 83.28 78.6, 78.6 80.52, 72.84 82.38, 64.38 82.38, 61.5 81.42, 69.12 81.42, 79.5 77.64, 86.1 73.92, 90.84 70.08, 91.8 66.3, 92.7 63.48" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,85,0); "/>
++  <polyline points="200.52 59.7, 194.82 54.06, 190.14 50.22, 186.3 48.36, 183.48 47.4, 180.66 48.36, 180.66 51.18, 183.48 58.74, 193.92 71.04, 202.38 75.78, 207.12 69.18" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="216.6 83.28, 207.12 75.78, 197.64 70.08, 188.22 64.44, 183.48 59.7, 176.88 56.82, 171.18 55.92, 170.22 57.78, 170.22 60.66, 174.06 68.16, 184.44 74.82, 200.52 82.38, 221.34 88.02" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="218.46 86.16, 198.66 79.56, 183.48 72, 176.88 69.18, 172.2 69.18, 171.18 72, 174.06 76.68, 180.66 80.52, 189.18 85.26, 195.78 88.02, 208.08 89.94, 217.5 89.94, 225.12 89.94" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="219.42 87.12, 206.16 87.12, 193.92 87.12, 192 89.94, 192 93.72, 193.92 96.54, 196.74 99.36, 202.38 100.38, 205.26 101.28, 208.08 100.38, 211.86 98.46, 216.6 95.64, 221.34 92.76" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="210 78.6, 202.38 66.3, 200.52 58.74, 198.66 51.18, 196.74 40.8, 197.64 36.96, 200.52 34.14, 203.4 36.06, 209.04 44.58, 216.6 61.56, 218.46 76.68, 220.38 82.38, 218.46 83.28" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="218.46 82.38, 214.68 59.7, 219.42 36.96, 221.34 28.5, 224.16 26.58, 225.12 26.58, 226.98 27.54, 228.84 40.8, 228.84 62.52, 226.02 79.56, 225.12 82.38" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="225.12 82.38, 229.86 59.7, 233.58 45.48, 235.5 39.84, 239.28 35.1, 242.1 35.1, 243.96 36.06, 242.1 58.74, 239.28 72, 235.5 80.52, 233.58 82.38" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="235.5 80.52, 243.06 65.34, 248.7 56.82, 255.36 51.18, 260.04 49.32, 262.92 51.18, 262.92 54.06, 261.96 60.66, 259.14 66.3, 253.44 73.92, 250.62 80.52, 245.88 86.16" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="244.98 86.16, 252.54 78.6, 265.8 72, 276.18 69.18, 280.86 69.18, 285.6 71.04, 286.56 72.9, 285.6 76.68, 282.78 79.56, 280.86 81.42, 276.18 84.3, 272.4 86.16, 267.66 88.02, 262.92 89.94, 257.22 92.76, 253.44 92.76, 247.8 93.72" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="266.7 136.32, 253.44 134.4, 250.62 132.48, 247.8 131.58, 244.98 128.7, 243.06 126.84, 242.1 123.06, 242.1 119.22, 247.8 117.36, 253.44 118.32, 257.22 121.14, 262.92 125.88, 267.66 128.7, 271.44 132.48, 271.44 133.44" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="269.52 133.44, 262.92 124.92, 259.14 123.06, 257.22 121.14, 256.32 117.36, 256.32 113.58, 257.22 107.88, 261.06 106.98, 265.8 109.8, 269.52 114.48, 272.4 122.1, 274.26 129.66, 275.16 133.44" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="273.3 131.58, 270.48 123.96, 270.48 117.36, 269.52 111.72, 269.52 106.02, 270.48 101.28, 273.3 99.36, 277.08 100.38, 279 104.1, 280.86 114.48, 280.86 122.1, 279.9 129.66" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="279 129.66, 280.86 106.02, 283.74 95.64, 286.56 95.64, 288.42 98.46, 288.42 109.8, 285.6 124.92, 283.74 127.74" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="282.78 126.84, 287.52 107.88, 289.38 98.46, 289.38 92.76, 292.26 90.9, 295.02 90.9, 298.86 94.68, 299.76 100.38, 299.76 106.98, 297 115.5, 292.26 121.14, 290.34 125.88" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="289.38 126.84, 297.9 106.02, 304.5 94.68, 310.2 87.12, 313.02 85.26, 315.84 85.26, 317.76 88.02, 317.76 92.76, 314.94 100.38, 312.06 107.88, 309.24 113.58, 304.5 121.14, 299.76 125.88, 294.12 129.66, 290.34 131.58" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="291.24 127.74, 302.64 119.22, 315.84 112.62, 324.36 108.84, 330.96 106.98, 334.8 106.98, 335.7 110.76, 335.7 113.58, 329.1 119.22, 319.62 126.84, 314.94 128.7, 305.46 132.48, 300.72 134.4, 295.02 134.4, 291.24 134.4" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="291.24 131.58, 305.46 131.58, 313.98 129.66, 322.44 128.7, 329.1 127.74, 332.88 128.7, 335.7 131.58, 335.7 134.4, 332.88 138.18, 328.2 141, 324.36 142.92, 318.72 144.78, 315.84 144.78, 308.28 144.78, 298.86 144.78, 294.12 142.92" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="291.24 140.04, 302.64 141.96, 311.1 141.96, 315.84 143.82, 321.54 146.7, 324.36 149.52, 325.32 152.34, 326.22 156.12, 326.22 158.04, 324.36 160.86, 321.54 160.86, 316.8 160.86, 312.06 158.94, 307.38 157.08, 303.6 154.26, 300.72 152.34, 297 150.42, 294.12 145.68" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="292.26 143.82, 297.9 149.52, 304.5 153.3, 310.2 157.08, 312.06 159.9, 313.98 163.68, 314.94 167.52, 314.94 172.2, 314.94 175.98, 313.02 179.76, 310.2 179.76, 307.38 178.86, 304.5 175.98, 301.68 173.16, 298.86 170.28, 297.9 166.5, 295.98 161.76, 294.12 158.04, 291.24 152.34" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="290.34 143.82, 295.02 152.34, 297.9 161.76, 298.86 165.6, 298.86 174.12, 297 181.62, 295.02 184.5, 293.16 185.46, 290.34 183.54, 287.52 181.62, 284.64 175.02, 283.74 167.52, 282.78 153.3" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="285.6 149.52, 286.56 158.04, 286.56 165.6, 284.64 176.88, 282.78 185.46, 280.86 191.1, 278.04 193.98, 276.18 193.98, 274.26 193.98, 271.44 186.36, 270.48 182.58, 269.52 175.02, 270.48 161.76, 271.44 153.3, 275.16 147.66" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="279.9 144.78, 276.18 157.08, 273.3 166.5, 272.4 173.16, 270.48 177.9, 268.56 181.62, 266.7 184.5, 264.78 188.28, 262.92 190.14, 260.04 192.96, 257.22 193.98, 252.54 194.88, 246.84 193.98, 245.88 189.24, 247.8 182.58, 251.58 171.24, 256.32 163.68, 259.14 158.04, 264.78 152.34, 269.52 148.56" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="270.48 148.56, 266.7 152.34, 262.92 158.04, 258.18 165.6, 256.32 169.38, 253.44 173.16, 249.66 175.98, 246.84 178.86, 243.06 178.86, 242.1 175.98, 242.1 170.28, 245.88 162.78, 249.66 158.04, 256.32 149.52, 262.92 145.68, 267.66 143.82, 275.16 141" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="268.56 144.78, 262.92 147.66, 256.32 152.34, 250.62 158.04, 245.88 161.76, 241.2 163.68, 238.32 163.68, 236.46 160.86, 238.32 156.12, 243.96 152.34, 248.7 148.56, 258.18 143.82, 266.7 141, 275.16 140.04" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="264.78 143.82, 252.54 145.68, 245.88 149.52, 240.24 152.34, 229.86 153.3, 226.98 153.3, 226.02 149.52, 228.84 145.68, 238.32 141, 244.98 139.08, 253.44 139.08, 261.06 139.08, 270.48 139.08" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="271.44 139.08, 258.18 140.04, 246.84 141, 239.28 141, 235.5 141, 230.76 139.08, 228.84 138.18, 228.84 134.4, 235.5 131.58, 242.1 131.58, 249.66 131.58, 260.04 133.44, 268.56 135.3, 279.9 138.18" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="221.34 92.76, 217.5 94.68, 210 99.36, 208.08 102.24, 208.08 105.12, 208.08 109.8, 210.9 110.76, 213.78 110.76, 218.46 106.98, 221.34 103.2, 224.16 98.46, 226.98 92.76" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="222.24 94.68, 220.38 100.38, 217.5 107.88, 217.5 116.46, 218.46 118.32, 221.34 122.1, 226.02 122.1, 228.84 121.14, 232.62 115.5, 232.62 106.02, 232.62 100.38, 231.72 92.76, 230.76 89.94" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="229.86 90.9, 229.86 100.38, 229.86 111.72, 232.62 117.36, 235.5 122.1, 237.36 125.88, 241.2 127.74, 243.96 127.74, 247.8 127.74, 249.66 123.96, 249.66 120.18, 248.7 115.5, 246.84 109.8, 244.98 103.2, 242.1 98.46, 239.28 93.72" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="239.28 93.72, 243.06 103.2, 245.88 111.72, 249.66 119.22, 251.58 121.14, 256.32 124.92, 260.04 125.88, 262.92 126.84, 266.7 126.84, 269.52 123.96, 268.56 120.18, 265.8 114.48, 262.92 109.8, 257.22 104.1, 254.4 102.24, 249.66 99.36, 244.98 97.5" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="239.28 94.68, 245.88 99.36, 252.54 103.2, 256.32 106.98, 261.06 109.8, 269.52 110.76, 274.26 111.72, 278.04 112.62, 281.82 112.62, 283.74 110.76, 283.74 107.88, 280.86 105.12, 275.16 101.28, 270.48 98.46, 254.4 94.68, 247.8 94.68, 242.1 94.68" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="239.28 90.9, 244.98 88.98, 252.54 87.12, 258.18 86.16, 262.92 86.16, 269.52 86.16, 275.16 86.16, 279.9 88.02, 282.78 89.94, 284.64 91.86, 288.42 95.64, 290.34 98.46, 288.42 100.38, 284.64 101.28, 280.86 100.38, 273.3 99.36, 270.48 98.46, 266.7 96.54, 259.14 95.64, 252.54 95.64, 247.8 95.64, 242.1 94.68" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="223.2 80.52, 226.02 63.48, 226.02 43.62, 225.12 42.72, 223.2 61.56, 221.34 65.34, 221.34 66.3, 221.34 75.78, 219.42 79.56, 220.38 81.42" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="216.6 79.56, 213.78 75.78, 211.86 65.34, 210 58.74, 209.04 67.26, 211.86 75.78, 212.76 79.56" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="200.52 68.16, 198.66 65.34, 195.78 62.52, 191.04 58.74, 192.96 65.34, 203.4 70.08" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="208.08 80.52, 197.64 73.92, 190.14 71.04, 187.26 70.08, 192 72, 200.52 74.82, 203.4 77.64" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="200.52 85.26, 195.78 83.28, 185.4 81.42, 183.48 78.6, 185.4 77.64, 203.4 83.28, 208.08 84.3" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="218.46 88.98, 208.08 91.86, 201.42 92.76, 208.08 93.72, 211.86 93.72, 220.38 90.9, 222.24 89.94, 218.46 94.68, 223.2 95.64, 226.02 92.76, 226.98 97.5, 226.98 99.36, 228.84 100.38, 228.84 93.72" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="231.72 93.72, 231.72 97.5, 235.5 100.38, 237.36 107.88, 239.28 112.62, 239.28 104.1, 241.2 100.38, 239.28 96.54" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="246.84 100.38, 246.84 103.2, 249.66 108.84, 251.58 112.62, 255.36 115.5, 261.06 118.32, 259.14 114.48, 255.36 109.8, 250.62 106.02, 249.66 103.2" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="249.66 97.5, 253.44 97.5, 256.32 101.28, 264.78 104.1, 272.4 106.98, 268.56 103.2, 264.78 101.28, 261.06 100.38, 258.18 98.46" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="244.98 92.76, 245.88 91.86, 251.58 91.86, 257.22 89.94, 261.06 89.94, 270.48 90.9, 275.16 94.68, 268.56 92.76, 264.78 92.76, 257.22 91.86, 249.66 92.76" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="250.62 85.26, 255.36 83.28, 261.96 80.52, 271.44 77.64, 272.4 78.6, 265.8 80.52, 266.7 82.38, 261.96 82.38, 256.32 85.26" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="241.2 79.56, 243.96 74.82, 247.8 72, 250.62 68.16, 247.8 75.78, 244.98 79.56, 245.88 83.28, 248.7 84.3, 251.58 84.3, 248.7 86.16, 246.84 87.12, 244.98 82.38, 241.2 82.38" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="234.6 78.6, 235.5 74.82, 238.32 66.3, 238.32 60.66, 237.36 61.56, 234.6 66.3, 234.6 69.18, 232.62 71.04, 230.76 72.9, 228.84 76.68, 228.84 79.56" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="266.7 135.3, 262.92 135.3, 260.04 135.3, 253.44 135.3, 250.62 136.32, 249.66 137.22, 260.04 137.22, 261.96 137.22, 266.7 137.22" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="261.06 141.96, 256.32 141.96, 245.88 141.96, 243.96 145.68, 250.62 145.68, 260.04 143.82, 262.92 141.96" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="261.06 144.78, 267.66 142.92, 271.44 141.96, 268.56 143.82, 267.66 146.7, 272.4 147.66, 270.48 150.42, 271.44 150.42, 266.7 157.08, 261.06 163.68, 260.04 168.42, 261.96 170.28, 266.7 162.78, 271.44 159.9, 272.4 159.9, 274.26 154.26, 275.16 152.34" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="265.8 147.66, 260.04 150.42, 257.22 154.26, 257.22 156.12, 262.92 149.52" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="279.9 152.34, 279 156.12, 277.08 165.6, 277.08 169.38, 277.08 174.12, 277.08 178.86, 277.08 179.76, 278.04 169.38, 279.9 163.68, 280.86 161.76, 282.78 161.76, 284.64 158.94, 283.74 153.3, 282.78 151.38" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="287.52 152.34, 287.52 155.16, 290.34 159.9, 290.34 163.68, 291.24 158.94, 292.26 160.86, 294.12 164.64, 294.12 163.68, 294.12 155.16, 293.16 151.38, 291.24 150.42" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="297.9 153.3, 303.6 157.08, 308.28 161.76, 310.2 165.6, 309.24 166.5, 306.36 165.6, 303.6 159.9, 301.68 158.04, 300.72 161.76, 299.76 158.94" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="297.9 143.82, 301.68 144.78, 310.2 144.78, 312.06 147.66, 314.94 150.42, 311.1 151.38, 306.36 148.56, 308.28 150.42, 304.5 150.42, 300.72 148.56" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="295.02 135.3, 302.64 135.3, 308.28 135.3, 313.98 133.44, 321.54 133.44, 313.02 134.4, 313.02 138.18, 310.2 138.18, 304.5 141, 298.86 140.04, 295.98 139.08" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="295.98 128.7, 300.72 127.74, 305.46 123.96, 310.2 121.14, 315.84 120.18, 309.24 124.92, 308.28 126.84, 303.6 129.66, 297.9 131.58" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="291.24 125.88, 295.02 121.14, 297.9 115.5, 299.76 110.76, 301.68 108.84, 301.68 113.58, 302.64 113.58, 298.86 120.18, 295.98 123.06, 291.24 125.88" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="287.52 122.1, 288.42 115.5, 291.24 111.72, 293.16 109.8, 290.34 120.18, 285.6 125.88, 284.64 127.74, 284.64 125.88" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="280.86 130.56, 283.74 126.84, 283.74 120.18, 279 123.96, 279 125.88, 277.08 125.88, 277.08 123.06, 275.16 127.74, 272.4 128.7, 270.48 128.7, 269.52 128.7, 266.7 131.58, 261.96 128.7, 259.14 131.58, 267.66 132.48" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="235.5 75.78, 226.98 73.92, 219.42 74.82, 214.68 77.64, 211.86 80.52, 211.86 83.28, 214.68 88.02, 218.46 92.76, 223.2 96.54, 228.84 100.38, 232.62 101.28, 239.28 103.2, 247.8 102.24, 251.58 100.38, 254.4 96.54, 254.4 89.94, 249.66 83.28, 244.98 79.56, 239.28 75.78" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,255,85); "/>
++  <polyline points="291.24 123.06, 284.64 122.1, 278.04 123.96, 271.44 128.7, 267.66 134.4, 267.66 138.18, 267.66 144.78, 270.48 151.38, 274.26 155.16, 279.9 155.16, 288.42 153.3, 294.12 150.42, 297.9 144.78, 299.76 139.08, 297.9 131.58, 294.12 125.88" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,255,85); "/>
++  <polyline points="244.98 86.16, 241.2 82.38, 235.5 79.56, 226.98 78.6, 221.34 79.56, 218.46 82.38, 218.46 86.16, 221.34 87.12, 220.38 85.26, 224.16 81.42, 232.62 81.42, 241.2 83.28, 243.96 86.16" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,85,0); "/>
++  <polyline points="250.62 90.9, 250.62 95.64, 247.8 97.5, 239.28 99.36, 232.62 98.46, 226.98 95.64, 222.24 91.86, 234.6 96.54, 241.2 96.54, 246.84 94.68, 249.66 92.76, 250.62 89.94" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,85,0); "/>
++  <polyline points="292.26 136.32, 291.24 131.58, 287.52 127.74, 282.78 127.74, 278.04 131.58, 274.26 134.4, 273.3 138.18, 273.3 142.92, 274.26 145.68, 274.26 140.04, 277.08 134.4, 280.86 131.58, 283.74 130.56, 287.52 131.58, 291.24 134.4" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,85,0); "/>
++  <polyline points="295.98 136.32, 295.02 141, 293.16 146.7, 289.38 150.42, 283.74 152.34, 277.08 153.3, 274.26 150.42, 280.86 151.38, 288.42 147.66, 293.16 143.82, 295.02 138.18" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,85,0); "/>
++  <polyline points="154.2 180.72, 147.6 174.12, 141.9 169.38, 138.12 165.6, 134.34 162.78, 131.52 160.86, 124.86 159.9, 117.3 159.9, 116.4 161.76, 116.4 166.5, 117.3 169.38, 122.04 174.12, 131.52 179.76, 144.72 183.54" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="161.76 192.96, 153.24 187.32, 148.5 183.54, 142.86 179.76, 138.12 178.86, 131.52 177.9, 123.9 175.98, 121.08 175.98, 117.3 177.9, 117.3 179.76, 119.16 184.5, 124.86 186.36, 131.52 190.14, 139.02 192.06, 150.36 196.8, 156.06 197.7, 166.44 198.72" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="158.94 196.8, 155.1 193.98, 150.36 192.06, 147.6 191.1, 141 189.24, 132.42 189.24, 123.9 189.24, 122.04 191.1, 120.18 192.96, 120.18 194.88, 124.86 199.62, 130.56 200.58, 135.24 200.58, 141.9 200.58, 153.24 201.48, 157.98 201.48" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="154.2 199.62, 147.6 199.62, 141 199.62, 134.34 202.44, 130.56 204.36, 127.74 206.22, 126.78 208.08, 126.78 210.96, 131.52 212.82, 133.38 213.78, 136.26 213.78, 146.64 210.96, 152.28 207.18, 158.94 206.22" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="162.72 204.36, 156.06 204.36, 151.38 207.18, 147.6 209.1, 141.9 210.96, 139.98 214.74, 139.02 218.52, 139.02 221.34, 139.02 224.16, 141 225.18, 144.72 225.18, 150.36 223.26, 156.06 221.34, 158.94 217.56, 162.72 213.78, 165.54 210.96, 167.46 208.08" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="162.72 196.8, 145.68 180.72, 138.12 171.24, 133.38 163.68, 131.52 158.94, 130.56 152.34, 132.42 148.56, 137.16 146.7, 144.72 148.56, 147.6 151.38, 152.28 155.16, 156.06 160.86, 158.94 166.5, 159.84 175.98, 163.62 184.5, 165.54 190.14, 165.54 195.84" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="165.54 193.98, 154.2 165.6, 152.28 155.16, 150.36 149.52, 151.38 145.68, 153.24 143.82, 155.1 142.92, 159.84 143.82, 163.62 147.66, 165.54 152.34, 166.44 159.9, 168.36 165.6, 169.32 174.12, 169.32 187.32, 169.32 196.8, 169.32 197.7" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="168.36 197.7, 168.36 182.58, 169.32 167.52, 170.22 159.9, 171.18 155.16, 173.1 151.38, 174.06 147.66, 176.88 144.78, 178.8 141.96, 181.56 141.96, 184.44 143.82, 186.3 146.7, 187.26 150.42, 187.26 155.16, 187.26 161.76, 187.26 169.38, 182.58 185.46, 175.92 197.7, 173.1 201.48" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="170.22 203.4, 183.48 173.16, 186.3 167.52, 187.26 163.68, 190.14 158.94, 192 156.12, 195.78 152.34, 200.52 150.42, 203.4 150.42, 205.26 153.3, 206.16 156.12, 206.16 161.76, 203.4 169.38, 199.56 175.02, 193.92 183.54, 187.26 192.06, 179.7 200.58, 176.88 204.36" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="177.84 202.44, 197.64 178.86, 201.42 172.2, 208.08 165.6, 210.9 163.68, 214.68 162.78, 219.42 162.78, 220.38 164.64, 220.38 168.42, 219.42 172.2, 218.46 175.02, 214.68 178.86, 211.86 182.58, 208.08 186.36, 203.4 191.1, 199.56 194.88, 191.04 199.62, 184.44 204.36" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="183.48 204.36, 192.96 195.84, 195.78 192.06, 201.42 188.28, 204.3 185.46, 209.04 182.58, 213.78 179.76, 217.5 176.88, 220.38 175.98, 224.16 175.98, 226.98 175.98, 228.84 178.86, 228.84 182.58, 225.12 186.36, 221.34 189.24, 218.46 191.1, 214.68 193.98, 210.9 196.8, 203.4 200.58, 198.66 203.4, 193.92 205.32, 189.18 206.22" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="181.56 208.08, 188.22 204.36, 197.64 199.62, 202.38 196.8, 210 195.84, 214.68 194.88, 219.42 194.88, 222.24 194.88, 223.2 196.8, 223.2 199.62, 221.34 203.4, 217.5 206.22, 212.76 209.1, 205.26 210.96, 194.82 212.82, 191.04 213.78, 183.48 213.78, 177.84 213.78" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,85,255); "/>
++  <polyline points="156.06 180.72, 151.38 169.38, 149.46 164.64, 146.64 158.04, 142.86 155.16, 141.9 158.94, 143.76 162.78, 144.72 165.6, 141.9 166.5, 141.9 168.42, 143.76 172.2, 150.36 180.72, 155.1 186.36, 161.76 191.1, 162.72 190.14, 157.02 181.62" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="155.1 190.14, 152.28 189.24, 147.6 186.36, 141.9 180.72, 137.16 181.62, 143.76 185.46, 149.46 189.24, 153.24 192.96, 158.94 194.88" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="136.26 174.12, 134.34 170.28, 133.38 167.52, 129.6 165.6, 126.78 165.6, 124.86 165.6, 126.78 169.38, 132.42 173.16, 139.02 175.98" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="155.1 196.8, 151.38 196.8, 145.68 193.98, 141 193.98, 137.16 193.98, 141.9 194.88, 145.68 196.8, 153.24 199.62, 156.06 199.62" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="152.28 201.48, 147.6 202.44, 142.86 204.36, 141.9 207.18, 146.64 208.08, 151.38 205.32, 155.1 205.32" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="161.76 205.32, 156.06 206.22, 151.38 210.96, 148.5 213.78, 153.24 215.7, 156.06 210.96, 157.98 212.82, 161.76 212.82, 162.72 210.96" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="183.48 211.92, 190.14 209.1, 197.64 205.32, 204.3 204.36, 210.9 202.44, 206.16 207.18, 201.42 209.1, 197.64 210.06" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="194.82 196.8, 203.4 191.1, 209.04 186.36, 216.6 181.62, 212.76 187.32, 208.08 191.1, 200.52 194.88, 195.78 198.72" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="183.48 199.62, 191.04 190.14, 196.74 186.36, 202.38 179.76, 206.16 175.02, 210.9 172.2, 205.26 178.86, 203.4 183.54, 199.56 188.28, 194.82 193.98, 187.26 200.58" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="176.88 198.72, 182.58 186.36, 185.4 181.62, 190.14 176.88, 192 173.16, 193.92 169.38, 197.64 166.5, 200.52 161.76, 197.64 170.28, 191.04 180.72, 188.22 184.5, 183.48 193.98, 178.8 200.58" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="171.18 191.1, 174.06 178.86, 179.7 173.16, 180.66 165.6, 180.66 158.94, 181.56 164.64, 180.66 177.9, 175.92 185.46, 173.1 192.96" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="164.58 181.62, 163.62 173.16, 164.58 161.76, 161.76 155.16, 159.84 160.86, 161.76 172.2, 162.72 179.76, 162.72 187.32" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,0,170); "/>
++  <polyline points="184.44 211.92, 189.18 210.06, 190.14 208.08, 192 206.22, 192 204.36, 192 202.44, 190.14 200.58, 189.18 198.72, 187.26 196.8, 183.48 194.88, 181.56 192.96, 177.84 192.06, 174.06 191.1, 171.18 190.14, 167.46 190.14, 163.62 190.14, 159.84 190.14, 156.06 191.1, 155.1 192.96, 152.28 193.98, 151.38 195.84, 149.46 197.7, 149.46 199.62, 149.46 201.48, 150.36 204.36, 153.24 207.18, 156.06 208.08, 157.02 210.96, 159.84 211.92, 162.72 213.78, 166.44 213.78, 172.2 214.74, 176.88 214.74, 179.7 214.74" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,255,85); "/>
++  <polyline points="180.66 198.72, 175.92 195.84, 168.36 193.98, 160.8 194.88, 157.02 196.8, 155.1 199.62, 155.1 202.44, 156.06 203.4, 156.06 201.48, 158.94 198.72, 165.54 196.8, 170.22 196.8, 176.88 198.72" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,85,0); "/>
++  <polyline points="187.26 201.48, 187.26 203.4, 185.4 206.22, 183.48 208.08, 181.56 209.1, 179.7 210.06, 176.88 210.96, 174.06 210.96, 173.1 210.96, 176.88 210.96, 183.48 209.1, 185.4 207.18, 188.22 205.32, 188.22 203.4" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; stroke-dasharray: ; fill-rule: evenodd; fill: rgb(170,85,0); "/>
++  <polyline points="196.74 296.04, 207.12 296.04, 207.12 347.1, 196.74 347.1" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,255,85); "/>
++  <polyline points="146.64 210.06, 262.92 210.06, 262.92 300.78, 146.64 300.78" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(255,255,255); "/>
++  <polyline points="148.5 211.92, 260.04 211.92, 260.04 298.92, 148.5 298.92" style="stroke-width: 0.06; stroke: rgb(255,85,85); stroke-opacity: 0.996094; fill: none; fill-rule: evenodd; "/>
++  <polyline points="167.46 330.12, 171.18 320.64, 177.84 311.16, 183.48 302.7, 187.26 297.96, 192 294.18, 196.74 290.4, 203.4 288.48, 207.12 288.48, 210.9 290.4, 214.68 293.22, 217.5 297, 214.68 297, 208.08 295.08, 203.4 297, 200.52 299.82, 194.82 304.56, 187.26 313.08, 179.7 323.52, 175.92 330.12, 173.1 335.76, 172.2 339.54, 171.18 342.36, 169.32 345.24, 166.44 346.14, 164.58 345.24, 163.62 342.36, 165.54 335.76" style="stroke-width: 0.06; stroke: rgb(0,0,0); stroke-opacity: 0.996094; fill-rule: evenodd; fill: rgb(85,255,85); "/>
++</svg>
+diff --git a/filter/source/svgimport/test/makefile.mk b/filter/source/svgimport/test/makefile.mk
+new file mode 100644
+index 0000000..da9adca
+--- /dev/null
++++ filter/source/svgimport/test/makefile.mk
+@@ -0,0 +1,96 @@
++#*************************************************************************
++#
++#   OpenOffice.org - a multi-platform office productivity suite
++#
++#   $RCSfile: makefile.mk,v $
++#
++#   $Revision: 1.1.2.15 $
++#
++#   last change: $Author: thb $ $Date: 2007/12/10 00:04:04 $
++#
++#   The Contents of this file are made available subject to
++#   the terms of GNU Lesser General Public License Version 2.1.
++#
++#
++#     GNU Lesser General Public License Version 2.1
++#     =============================================
++#     Copyright 2005 by Sun Microsystems, Inc.
++#     901 San Antonio Road, Palo Alto, CA 94303, USA
++#
++#     This library is free software; you can redistribute it and/or
++#     modify it under the terms of the GNU Lesser General Public
++#     License version 2.1, as published by the Free Software Foundation.
++#
++#     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
++#     Lesser General Public License for more details.
++#
++#     You should have received a copy of the GNU Lesser General Public
++#     License along with this library; if not, write to the Free Software
++#     Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++#     MA  02111-1307  USA
++#
++#*************************************************************************
++
++PRJ=..$/..$/..
++PRJNAME=filter
++TARGET=tests
++TARGETTYPE=CUI
++ENABLE_EXCEPTIONS=TRUE
++
++# --- Settings -----------------------------------------------------
++
++.INCLUDE: settings.mk
++
++# --- svg2xml binary ------------------------------------------------------
++
++TARGET2=svg2odf
++
++APP1TARGET=$(TARGET2)
++APP1LIBSALCPPRT=
++APP1OBJS=$(SLO)$/svg2odf.obj
++
++APP1LIBS=\
++	$(SLB)$/svgfilter.lib
++
++APP1STDLIBS=\
++	$(BASEGFXLIB)		\
++	$(UNOTOOLSLIB)		\
++	$(COMPHELPERLIB)	\
++	$(CPPUHELPERLIB)	\
++	$(CPPULIB)			\
++	$(SALLIB)
++
++# --- Targets ------------------------------------------------------
++
++.INCLUDE : target.mk
++
++# --- Special ------------------------------------------------------
++
++TESTFILES=\
++	daisies.svg
++
++$(MISC)$/%_svgi_unittest_succeeded : $(BIN)$/svg2odf
++    rm -f $(MISC)$/$(@:s/_succeeded/.xml/:f)
++	$(BIN)$/svg2odf $(@:s/_svgi_unittest_succeeded/.svg/:f) $(MISC)$/$(@:s/_succeeded/.xml/:f) $(BIN)$/svgi_unittest_test.ini
++	$(TOUCH) $@
++
++.IF "$(GUI)" == "WNT"
++SAXPARSERLIB=$(SOLARBINDIR)$/sax.uno$(DLLPOST)
++.ELSE
++SAXPARSERLIB=$(SOLARLIBDIR)$/sax.uno$(DLLPOST)
++.ENDIF
++
++$(BIN)$/unittestservices.rdb : makefile.mk $(SAXPARSERLIB)
++    rm -f $@
++	$(REGCOMP) -register -r $@ -c $(SAXPARSERLIB)
++
++$(BIN)$/svgi_unittest_test.ini : makefile.mk
++	rm -f $@
++	@echo UNO_SERVICES=$(BIN)$/unittestservices.rdb > $@
++	@echo UNO_TYPES=$(UNOUCRRDB:s/\/\\/) >> $@
++
++ALLTAR : $(BIN)$/svgi_unittest_test.ini \
++		 $(BIN)$/unittestservices.rdb \
++         $(foreach,i,$(TESTFILES:s/.svg/_svgi_unittest_succeeded/:f) $(MISC)$/$i)
+diff --git a/filter/source/svgimport/test/svg2odf.cxx b/filter/source/svgimport/test/svg2odf.cxx
+new file mode 100644
+index 0000000..787f4d6
+--- /dev/null
++++ filter/source/svgimport/test/svg2odf.cxx
+@@ -0,0 +1,136 @@
++/*************************************************************************
++ *
++ *  OpenOffice.org - a multi-platform office productivity suite
++ *
++ *  $RCSfile: pdf2xml.cxx,v $
++ *
++ *  $Revision: 1.1.2.6 $
++ *
++ *  last change: $Author: thb $ $Date: 2007/12/10 13:20:42 $
++ *
++ *  The Contents of this file are made available subject to
++ *  the terms of GNU Lesser General Public License Version 2.1.
++ *
++ *
++ *    GNU Lesser General Public License Version 2.1
++ *    =============================================
++ *    Copyright 2005 by Sun Microsystems, Inc.
++ *    901 San Antonio Road, Palo Alto, CA 94303, USA
++ *
++ *    This library is free software; you can redistribute it and/or
++ *    modify it under the terms of the GNU Lesser General Public
++ *    License version 2.1, as published by the Free Software Foundation.
++ *
++ *    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
++ *    Lesser General Public License for more details.
++ *
++ *    You should have received a copy of the GNU Lesser General Public
++ *    License along with this library; if not, write to the Free Software
++ *    Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ *    MA  02111-1307  USA
++ *
++ ************************************************************************/
++
++// MARKER(update_precomp.py): autogen include statement, do not remove
++#include "precompiled_filter.hxx"
++
++#include "../svgreader.hxx" 
++#include "../odfserializer.hxx" 
++
++#include <sal/main.h>
++#include <osl/file.hxx>
++#include <osl/process.h>
++#include <rtl/bootstrap.hxx>
++
++#include <cppuhelper/implbase1.hxx>
++#include <cppuhelper/bootstrap.hxx>
++#include <cppuhelper/servicefactory.hxx>
++#include <comphelper/processfactory.hxx>
++#include <comphelper/oslfile2streamwrap.hxx>
++
++using namespace ::com::sun::star;
++
++namespace
++{
++    class OutputWrap : public cppu::WeakImplHelper1<
++        io::XOutputStream>
++    {
++        osl::File maFile;
++
++    public:
++
++        explicit OutputWrap( const rtl::OUString& rURL ) : maFile(rURL) 
++        {
++            maFile.open(osl_File_OpenFlag_Create|OpenFlag_Write);
++        }
++
++		virtual void SAL_CALL writeBytes( const com::sun::star::uno::Sequence< ::sal_Int8 >& aData ) throw (com::sun::star::io::NotConnectedException,com::sun::star::io::BufferSizeExceededException, com::sun::star::io::IOException, com::sun::star::uno::RuntimeException)
++
++        {
++            sal_uInt64 nBytesWritten(0);
++            maFile.write(aData.getConstArray(),aData.getLength(),nBytesWritten);
++        }
++
++        virtual void SAL_CALL flush() throw (com::sun::star::io::NotConnectedException, com::sun::star::io::BufferSizeExceededException, com::sun::star::io::IOException, com::sun::star::uno::RuntimeException)
++        {
++        }
++
++        virtual void SAL_CALL closeOutput() throw (com::sun::star::io::NotConnectedException, com::sun::star::io::BufferSizeExceededException, com::sun::star::io::IOException, com::sun::star::uno::RuntimeException)
++        {
++            maFile.close();
++        }
++    };
++}
++
++SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv)
++{
++	if( argc != 4 )
++		return 1;
++
++	::rtl::OUString aBaseURL, aTmpURL, aSrcURL, aDstURL, aIniUrl;
++    
++    osl_getProcessWorkingDir(&aBaseURL.pData);
++    osl_getFileURLFromSystemPath( rtl::OUString::createFromAscii(argv[1]).pData,
++                                  &aTmpURL.pData );
++    osl_getAbsoluteFileURL(aBaseURL.pData,aTmpURL.pData,&aSrcURL.pData);
++
++    osl_getFileURLFromSystemPath( rtl::OUString::createFromAscii(argv[2]).pData,
++                                  &aTmpURL.pData );
++    osl_getAbsoluteFileURL(aBaseURL.pData,aTmpURL.pData,&aDstURL.pData);
++
++	osl_getFileURLFromSystemPath( rtl::OUString::createFromAscii(argv[3]).pData, 
++								&aTmpURL.pData );
++    osl_getAbsoluteFileURL(aBaseURL.pData,aTmpURL.pData,&aIniUrl.pData);
++
++    // bootstrap UNO
++    uno::Reference< lang::XMultiServiceFactory > xFactory;
++    uno::Reference< uno::XComponentContext > xCtx;
++    try
++    {
++        xCtx = ::cppu::defaultBootstrap_InitialComponentContext(aIniUrl);
++        xFactory = uno::Reference< lang::XMultiServiceFactory >(xCtx->getServiceManager(), 
++                                                                uno::UNO_QUERY);
++        if( xFactory.is() )
++            ::comphelper::setProcessServiceFactory( xFactory );
++    }
++    catch( uno::Exception& )
++    {
++    }
++
++    if( !xFactory.is() )
++    {
++        OSL_TRACE( "Could not bootstrap UNO, installation must be in disorder. Exiting.\n" );
++        return 1;
++    }
++
++    osl::File aInputFile(aSrcURL);
++    aInputFile.open(OpenFlag_Read);
++
++    svgi::SVGReader aReader(xCtx, 
++                            uno::Reference<io::XInputStream>(
++                                new comphelper::OSLInputStreamWrapper(aInputFile)),
++                            svgi::createSerializer(new OutputWrap(aDstURL)));
++    return aReader.parseAndConvert() ? 0 : 1;
++}

Added: trunk/patches/svgimport/svg-import-basegfx.diff
==============================================================================
--- (empty file)
+++ trunk/patches/svgimport/svg-import-basegfx.diff	Wed Feb 13 00:44:02 2008
@@ -0,0 +1,84 @@
+diff --git a/basegfx/inc/basegfx/polygon/b2dpolypolygontools.hxx b/basegfx/inc/basegfx/polygon/b2dpolypolygontools.hxx
+index a84ad15..14ac14f 100644
+--- basegfx/inc/basegfx/polygon/b2dpolypolygontools.hxx
++++ basegfx/inc/basegfx/polygon/b2dpolypolygontools.hxx
+@@ -127,19 +127,37 @@ namespace basegfx
+         /** Read poly-polygon from SVG.
+ 
+         	This function imports a poly-polygon from an SVG-D
+-        	statement. Currently, elliptical arc elements are not yet
++        	attribute. Currently, elliptical arc elements are not yet
+         	supported (and ignored during parsing).
+ 
+             @param o_rPolyPoly
+             The output poly-polygon
+ 
+-            @param rSvgDStatement
+-            A valid SVG-D statement
++            @param rSvgDAttribute
++            A valid SVG-D attribute string
+ 
+             @return true, if the string was successfully parsed
+          */
+-        bool importFromSvgD( B2DPolyPolygon& o_rPolyPoly,
+-                             const ::rtl::OUString& 	rSvgDStatement );
++        bool importFromSvgD( B2DPolyPolygon&        o_rPolyPoly,
++                             const ::rtl::OUString& rSvgDAttribute );
++
++        /** Read poly-polygon from SVG.
++
++        	This function imports a poly-polygon from an SVG points
++        	attribute (a plain list of coordinate pairs).
++
++            @param o_rPoly
++            The output polygon. Note that svg:points can only define a
++            single polygon
++
++            @param rSvgPointsAttribute
++            A valid SVG points attribute string
++
++            @return true, if the string was successfully parsed
++         */
++        bool importFromSvgPoints( B2DPolygon&            o_rPoly,
++                                  const ::rtl::OUString& rSvgPointsAttribute );
++
+ 
+ 		// create 3d PolyPolygon from given 2d PolyPolygon. The given fZCoordinate is used to expand the
+ 		// third coordinate.
+diff --git a/basegfx/source/polygon/b2dsvgpolypolygon.cxx b/basegfx/source/polygon/b2dsvgpolypolygon.cxx
+index 8965007..170d453 100644
+--- basegfx/source/polygon/b2dsvgpolypolygon.cxx
++++ basegfx/source/polygon/b2dsvgpolypolygon.cxx
+@@ -665,6 +665,32 @@ namespace basegfx
+             return true;
+         }
+ 
++        bool importFromSvgPoints( B2DPolygon&            o_rPoly,
++                                  const ::rtl::OUString& rSvgPointsAttribute )
++        {
++            o_rPoly.clear();
++            const sal_Int32 nLen(rSvgPointsAttribute.getLength());
++            sal_Int32 nPos(0);
++            double nX, nY;
++
++            // skip initial whitespace
++            lcl_skipSpaces(nPos, rSvgPointsAttribute, nLen);
++
++            while(nPos < nLen)
++            {
++                if(!lcl_importDoubleAndSpaces(nX, nPos, rSvgPointsAttribute, nLen)) return false;
++                if(!lcl_importDoubleAndSpaces(nY, nPos, rSvgPointsAttribute, nLen)) return false;
++                
++                // add point        
++                o_rPoly.append(B2DPoint(nX, nY));
++
++                // skip to next number, or finish
++                lcl_skipSpaces(nPos, rSvgPointsAttribute, nLen);
++            }
++
++            return true;
++        }
++
+         ::rtl::OUString exportToSvgD(
+ 			const B2DPolyPolygon& rPolyPolygon,
+ 			bool bUseRelativeCoordinates, 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]