ooo-build r11705 - in trunk: . patches/src680



Author: strba
Date: Tue Feb 26 11:17:45 2008
New Revision: 11705
URL: http://svn.gnome.org/viewvc/ooo-build?rev=11705&view=rev

Log:
2008-02-26  Fridrich Strba <fridrich strba bluewin ch>

	* patches/src680/svg-import-filter.diff: import circles and ellipses
	(still contingent on a bug in ODG importer), import line, embedded bitmaps,
	fix scaling problems with svg:d and svg:points. Some little bugfixing of the
	transform attribute parsing
	
	* patches/src680/apply: add SVGImport to the Common section, since it should
	not be crashing anything and it should be cross-platform (let's see, Tor :)).
	Move SDK related bits to SdkFixes section, since not everybody has the tarball
	unpacked.



Modified:
   trunk/ChangeLog
   trunk/patches/src680/apply
   trunk/patches/src680/svg-import-filter.diff

Modified: trunk/patches/src680/apply
==============================================================================
--- trunk/patches/src680/apply	(original)
+++ trunk/patches/src680/apply	Tue Feb 26 11:17:45 2008
@@ -14,7 +14,7 @@
 	 Icons, Branding, CalcFixes, WriterFixes, EasterEgg, \
 	 GStreamer, CWSBackports, WPG, Cleanups, WMF, \
 	 Layout, VBABits, VBAObjects, CalcErrors, Store, CJK, GCJ, Lwp, \
-	 OOXML
+	 OOXML, SVGImport
 
 LinuxCommon : Common, EMFPlus, LayoutDialogs, Defaults, TangoIcons, FontConfigTemporaryHacks, \
 	      FedoraFixes, LinuxOnly, NotMacOSX, SystemBits, \
@@ -28,13 +28,13 @@
               VBAUntested, ArkOnlyExperimental, SharedWorksheets, \
 	      UnUsedButNotYetRemovedFromSVN, \
 	      PostgreSQL, SELinux, VOSremoval, Glib2, \
-	      UnitExperimental, SVGImport
+	      UnitExperimental
 # Binfilter patches: a special distro; applied only when building with binfilter
 Binfilter : BFBuildBits, BFFixes
 # System patches: a special distro; applied only when building with the system tarball unpacked
 System : SystemBuildBits
 # Sdk patches: a special distro; applied only when building with the sdk tarball unpacked
-Sdk :
+Sdk : SdkFixes
 #Localize
 Localize : 
 # Novell
@@ -293,9 +293,6 @@
 [ CWSBackports == ooh680-m7 ]
 cws-mav28.diff
 
-[ CWSBackports >= ooh680-m4 < ooh680-m8]
-cws-sdk24fix.diff
-
 [ CWSBackports ]
 #dialog refactor
 cws-npower9.diff
@@ -1185,6 +1182,9 @@
 binfilter-stl.diff, i#63770, hmth
 cws-gcc430two-binfilter.diff, i#83276, pmladek
 
+[ SdkFixes >= ooh680-m4 < ooh680-m8]
+cws-sdk24fix.diff
+
 [ SystemBuildBits ]
 SectionOwner => fridrich
 

Modified: trunk/patches/src680/svg-import-filter.diff
==============================================================================
--- trunk/patches/src680/svg-import-filter.diff	(original)
+++ trunk/patches/src680/svg-import-filter.diff	Tue Feb 26 11:17:45 2008
@@ -1,5 +1,5 @@
---- filter/source/config/fragments/fcfg_drawgraphics.mk	2008-02-23 12:33:09.000000000 +0100
-+++ filter/source/config/fragments/fcfg_drawgraphics.mk	2008-02-23 08:55:34.000000000 +0100
+--- filter/source/config/fragments/fcfg_drawgraphics.mk	2008-02-26 11:23:18.000000000 +0100
++++ filter/source/config/fragments/fcfg_drawgraphics.mk	2008-02-23 12:59:42.000000000 +0100
 @@ -54,6 +54,7 @@
      SGF___StarOffice_Writer_SGF \
      SGV___StarDraw_2_0 \
@@ -9,7 +9,7 @@
      TIF___Tag_Image_File \
      WMF___MS_Windows_Metafile \
 --- filter/source/config/fragments/filters/SVG___Scalable_Vector_Graphics.xcu	1970-01-01 01:00:00.000000000 +0100
-+++ filter/source/config/fragments/filters/SVG___Scalable_Vector_Graphics.xcu	2008-02-23 08:55:34.000000000 +0100
++++ filter/source/config/fragments/filters/SVG___Scalable_Vector_Graphics.xcu	2008-02-23 12:59:42.000000000 +0100
 @@ -0,0 +1,13 @@
 +	<node oor:name="SVG - Scalable Vector Graphics" oor:op="replace">
 +		<prop oor:name="Flags"><value>IMPORT ALIEN USESOPTIONS 3RDPARTYFILTER PREFERRED</value></prop>
@@ -24,8 +24,8 @@
 +		<prop oor:name="TemplateName"/>
 +		<prop oor:name="DocumentService"><value>com.sun.star.drawing.DrawingDocument</value></prop>
 +	</node>
---- filter/source/config/fragments/types/svg_Scalable_Vector_Graphics.xcu	2008-02-23 12:33:09.000000000 +0100
-+++ filter/source/config/fragments/types/svg_Scalable_Vector_Graphics.xcu	2008-02-23 08:55:34.000000000 +0100
+--- filter/source/config/fragments/types/svg_Scalable_Vector_Graphics.xcu	2008-02-26 11:23:18.000000000 +0100
++++ filter/source/config/fragments/types/svg_Scalable_Vector_Graphics.xcu	2008-02-23 12:59:42.000000000 +0100
 @@ -1,12 +1,12 @@
  	<node oor:name="svg_Scalable_Vector_Graphics" oor:op="replace" >
 -		<prop oor:name="DetectService"/>
@@ -43,8 +43,230 @@
 -		<prop oor:name="ClipboardFormat"/>
 +		<prop oor:name="ClipboardFormat"><value>doctype:xmlns="http://www.w3.org/2000/svg";</value></prop>
  	</node>
---- filter/source/svg/exports.map	2008-02-23 12:33:09.000000000 +0100
-+++ filter/source/svg/exports.map	2008-02-23 08:55:34.000000000 +0100
+--- filter/source/svg/b2dellipse.cxx	1970-01-01 01:00:00.000000000 +0100
++++ filter/source/svg/b2dellipse.cxx	2008-02-23 21:35:38.000000000 +0100
+@@ -0,0 +1,139 @@
++/*************************************************************************
++ *
++ *    OpenOffice.org - a multi-platform office productivity suite
++ *
++ *    Author:
++ *      Fridrich Strba  <fridrich strba bluewin ch>
++ *      Thorsten Behrens <tbehrens novell com>	   	
++ *
++ *      Copyright (C) 2008, Novell Inc.
++ *
++ *   The Contents of this file are made available subject to
++ *   the terms of GNU Lesser General Public License Version 2.1.
++ *
++ ************************************************************************/
++
++#include "b2dellipse.hxx"
++
++#include <osl/diagnose.h>
++
++#include <basegfx/point/b2dpoint.hxx>
++
++#include <basegfx/matrix/b2dhommatrix.hxx>
++
++#include <rtl/instance.hxx>
++
++#include <boost/scoped_ptr.hpp>
++#include <vector>
++#include <algorithm>
++
++class ImplB2DEllipse
++{
++	 basegfx::B2DPoint maCenter;
++	 basegfx::B2DTuple maRadius;
++
++public:
++	ImplB2DEllipse()
++	:	maCenter(0.0f, 0.0f),
++		maRadius(0.0f, 0.0f)
++	{}
++
++	ImplB2DEllipse(const ImplB2DEllipse& rToBeCopied)
++	:	maCenter(rToBeCopied.maCenter),
++		maRadius(rToBeCopied.maRadius)
++	{}
++	
++    ImplB2DEllipse& operator=( const ImplB2DEllipse& rToBeCopied )
++    {
++		maCenter = rToBeCopied.maCenter;
++		maRadius = rToBeCopied.maRadius;
++
++        return *this;
++    }
++
++	bool isEqual(const ImplB2DEllipse& rCandidate) const
++	{
++		return (maCenter == rCandidate.maCenter)
++			&& (maRadius == rCandidate.maRadius);
++	}
++
++	basegfx::B2DPoint getCenter() const
++	{
++		return maCenter;
++	}
++	
++	void setCenter(const basegfx::B2DPoint& rCenter)
++	{
++		maCenter = rCenter;
++	}
++		
++	basegfx::B2DTuple getRadius() const
++	{
++		return maRadius;
++	}
++	
++	void setRadius(const basegfx::B2DTuple& rRadius)
++	{
++		maRadius = rRadius;
++	}
++		
++
++	void transform(const basegfx::B2DHomMatrix& /* rMatrix */)
++	{
++	}
++};
++
++//////////////////////////////////////////////////////////////////////////////
++
++namespace basegfx
++{
++
++	B2DEllipse::B2DEllipse() 
++	{}
++
++	B2DEllipse::B2DEllipse(const basegfx::B2DPoint& rCenter, const basegfx::B2DTuple& rRadius)
++	:	maCenter(rCenter), maRadius(rRadius)
++	{
++	}
++
++	B2DEllipse::~B2DEllipse()
++	{
++	}
++
++	bool B2DEllipse::operator==(const B2DEllipse& rEllipse) const
++	{
++		return (maCenter == rEllipse.maCenter) && (maRadius == rEllipse.maRadius);
++	}
++
++	bool B2DEllipse::operator!=(const B2DEllipse& rEllipse) const
++	{
++        return !(*this == rEllipse);
++	}
++
++	basegfx::B2DPoint B2DEllipse::getB2DEllipseCenter() const
++	{
++		return maCenter;
++	}
++
++	void B2DEllipse::setB2DEllipseCenter(const basegfx::B2DPoint& rCenter)
++	{
++		maCenter = rCenter;
++	}
++
++	basegfx::B2DTuple B2DEllipse::getB2DEllipseRadius() const
++	{
++		return maRadius;
++	}
++
++	void B2DEllipse::setB2DEllipseRadius(const basegfx::B2DTuple& rRadius)
++	{
++		maRadius = rRadius;
++	}
++
++	void B2DEllipse::transform(const basegfx::B2DHomMatrix& /* rMatrix */)
++	{
++	}
++} // end of namespace basegfx
++
++//////////////////////////////////////////////////////////////////////////////
++// eof
+--- filter/source/svg/b2dellipse.hxx	1970-01-01 01:00:00.000000000 +0100
++++ filter/source/svg/b2dellipse.hxx	2008-02-23 21:35:52.000000000 +0100
+@@ -0,0 +1,77 @@
++/*************************************************************************
++ *
++ *    OpenOffice.org - a multi-platform office productivity suite
++ *
++ *    Author:
++ *      Fridrich Strba  <fridrich strba bluewin ch>
++ *      Thorsten Behrens <tbehrens novell com>	   	
++ *
++ *      Copyright (C) 2008, Novell Inc.
++ *
++ *   The Contents of this file are made available subject to
++ *   the terms of GNU Lesser General Public License Version 2.1.
++ *
++ ************************************************************************/
++
++#ifndef _BASEGFX_B2DELLIPSE_HXX
++#define _BASEGFX_B2DELLIPSE_HXX
++
++#include <sal/types.h>
++
++#include <o3tl/cow_wrapper.hxx>
++
++#include <basegfx/point/b2dpoint.hxx>
++
++#include <basegfx/tuple/b2dtuple.hxx>
++
++#include <basegfx/vector/b2enums.hxx>
++
++//////////////////////////////////////////////////////////////////////////////
++// predeclarations
++class ImplB2DEllipse;
++
++namespace basegfx
++{
++	class B2DPoint;
++	class B2DVector;
++	class B2DHomMatrix;
++} // end of namespace basegfx
++
++//////////////////////////////////////////////////////////////////////////////
++
++namespace basegfx
++{
++	class B2DEllipse
++	{
++	private:
++	 basegfx::B2DPoint maCenter;
++	 basegfx::B2DTuple maRadius;
++
++	public:
++		B2DEllipse();
++		B2DEllipse(const B2DEllipse& rEllipse);
++		B2DEllipse(const basegfx::B2DPoint& rCenter, const basegfx::B2DTuple& rRadius);
++		~B2DEllipse();
++
++		// assignment operator
++		B2DEllipse& operator=(const B2DEllipse& rEllipse);
++
++		// compare operators
++		bool operator==(const B2DEllipse& rEllipse) const;
++		bool operator!=(const B2DEllipse& rEllipse) const;
++
++		// Coordinate interface
++		basegfx::B2DPoint getB2DEllipseCenter() const;
++		void setB2DEllipseCenter(const basegfx::B2DPoint& rCenter);
++		
++		basegfx::B2DTuple getB2DEllipseRadius() const;
++		void setB2DEllipseRadius(const basegfx::B2DTuple& rRadius);
++		
++		// apply transformation given in matrix form to the Ellipse
++		void transform(const basegfx::B2DHomMatrix& rMatrix);
++	};
++} // end of namespace basegfx
++
++//////////////////////////////////////////////////////////////////////////////
++
++#endif /* _BASEGFX_B2DELLIPSE_HXX */
+--- filter/source/svg/exports.map	2008-02-26 11:23:18.000000000 +0100
++++ filter/source/svg/exports.map	2008-02-23 12:59:42.000000000 +0100
 @@ -1,4 +1,4 @@
 -PDFFILTER_1_0 {
 +SVGFILTER_1_0 {
@@ -59,7 +281,7 @@
 \ No newline at end of file
 +}; 
 --- filter/source/svg/gentoken.pl	1970-01-01 01:00:00.000000000 +0100
-+++ filter/source/svg/gentoken.pl	2008-02-23 08:55:34.000000000 +0100
++++ filter/source/svg/gentoken.pl	2008-02-23 12:59:42.000000000 +0100
 @@ -0,0 +1,58 @@
 +# from oox/source/token - should really put this into solenv
 +
@@ -120,7 +342,7 @@
 +close ( HXX );
 +close ( GPERF );
 --- filter/source/svg/gfxtypes.hxx	1970-01-01 01:00:00.000000000 +0100
-+++ filter/source/svg/gfxtypes.hxx	2008-02-23 08:55:34.000000000 +0100
++++ filter/source/svg/gfxtypes.hxx	2008-02-23 12:59:42.000000000 +0100
 @@ -0,0 +1,309 @@
 +/*************************************************************************
 + *
@@ -431,9 +653,9 @@
 +} // namespace svgi
 +
 +#endif
---- filter/source/svg/makefile.mk	2008-02-23 12:33:09.000000000 +0100
-+++ filter/source/svg/makefile.mk	2008-02-23 08:55:34.000000000 +0100
-@@ -34,47 +34,46 @@
+--- filter/source/svg/makefile.mk	2008-02-26 11:23:18.000000000 +0100
++++ filter/source/svg/makefile.mk	2008-02-23 15:23:12.000000000 +0100
+@@ -34,47 +34,48 @@
  #*************************************************************************
  
  PRJ=..$/..
@@ -453,7 +675,9 @@
  
 -SLOFILES=	$(SLO)$/svguno.obj			\
 -			$(SLO)$/svgfilter.obj		\
-+SLOFILES=	$(SLO)$/parserfragments.obj	\
++SLOFILES= \
++			$(SLO)$/b2dellipse.obj	\
++			$(SLO)$/parserfragments.obj	\
  			$(SLO)$/svgexport.obj		\
 +			$(SLO)$/svgfilter.obj		\
  			$(SLO)$/svgfontexport.obj	\
@@ -464,8 +688,8 @@
 +			$(SLO)$/svgimport.obj		\
 +			$(SLO)$/svgreader.obj		\
 +			$(SLO)$/svguno.obj			\
-+			$(SLO)$/tokenmap.obj        \
 +			$(SLO)$/svgwriter.obj		\
++			$(SLO)$/tokenmap.obj        \
 +			$(SLO)$/units.obj
  
  # --- Library -----------------------------------
@@ -496,7 +720,7 @@
  
  SHL1DEPN=
  SHL1IMPLIB=	i$(SHL1TARGET)
-@@ -87,3 +86,15 @@
+@@ -87,3 +88,15 @@
  # --- Targets ----------------------------------
  
  .INCLUDE : target.mk
@@ -513,8 +737,8 @@
 +$(SLO)$/svgreader.obj : $(INCCOM)$/tokens.cxx $(INCCOM)$/tokens.hxx
 +
 --- filter/source/svg/parserfragments.cxx	1970-01-01 01:00:00.000000000 +0100
-+++ filter/source/svg/parserfragments.cxx	2008-02-23 08:55:34.000000000 +0100
-@@ -0,0 +1,347 @@
++++ filter/source/svg/parserfragments.cxx	2008-02-26 11:49:33.000000000 +0100
+@@ -0,0 +1,384 @@
 +/*************************************************************************
 + *
 + *    OpenOffice.org - a multi-platform office productivity suite
@@ -541,9 +765,12 @@
 +
 +#include <boost/bind.hpp>
 +#include <boost/spirit.hpp>
++#include <boost/spirit/dynamic/while.hpp>
 +#include <numeric>
 +#include <algorithm>
 +
++#include "units.hxx"
++
 +using namespace ::com::sun::star;
 +
 +namespace svgi
@@ -584,6 +811,7 @@
 +    aCurr.rotate(fRotationAngle*M_PI/180);
 +    aCurr.translate(rCurrTransform.m02,rCurrTransform.m12);
 +
++	fprintf(stderr, "calcRotation - fRotationAngle - %f\n", fRotationAngle);
 +    rTransforms.push_back(
 +        basegfx::unotools::affineMatrixFromHomMatrix(
 +            rCurrTransform,
@@ -762,10 +990,7 @@
 +                 // rotate(phi,[cx, cy])
 +                 (str_p("rotate") 
 +                  >> '('
-+                  >> real_p[assign_a(fRotationAngle)] >> ','
-+                  >> real_p[assign_a(aCurrTransform.m00)] >> ','
-+                  >> real_p[assign_a(aCurrTransform.m11)]
-+                  >>             ')')[boost::bind(&calcRotation,
++                  >> real_p[assign_a(fRotationAngle)] >> ')')[boost::bind(&calcRotation,
 +                                                  boost::ref(aTransforms),
 +                                                  boost::ref(aCurrTransform),
 +                                                  boost::cref(fRotationAngle))]
@@ -860,11 +1085,47 @@
 +        //  End grammar
 +        space_p).full;
 +}
-+    
++
++//////////////////////////////////////////////////////////////
++
++namespace
++{
++void appendChar( std::string& str, char character)
++{
++	str.append(1,character);
++}
++}
++
++bool parseXlinkHref( const char* sXlinkHref, std::string& data )
++{
++	using namespace ::boost::spirit;
++	
++	data.erase(data.begin(),data.end());
++
++    return parse(sXlinkHref,
++        //  Begin grammar
++        (
++            // the data uri
++            (str_p("data:") >> while_p(~eps_p(','))[anychar_p] >>
++			 ',' >> repeat_p(1, more)[anychar_p[boost::bind(&appendChar,
++                                      boost::ref(data),
++                                      _1)]]) 
++#if 0
++          |
++            // the "normal" uri
++            (repeat_p(1, more)[anychar_p[boost::bind(&appendChar,
++                                      boost::ref(data),
++                                      _1)]]) 
++#endif
++        ),
++        //  End grammar
++        space_p).full;
++}
++
 +} // namespace svgi
 --- filter/source/svg/parserfragments.hxx	1970-01-01 01:00:00.000000000 +0100
-+++ filter/source/svg/parserfragments.hxx	2008-02-23 08:55:34.000000000 +0100
-@@ -0,0 +1,45 @@
++++ filter/source/svg/parserfragments.hxx	2008-02-26 11:45:57.000000000 +0100
+@@ -0,0 +1,49 @@
 +/*************************************************************************
 + *
 + *    OpenOffice.org - a multi-platform office productivity suite
@@ -885,6 +1146,7 @@
 +
 +#include <sal/config.h>
 +#include <vector>
++#include <string>
 +
 +namespace basegfx
 +{ 
@@ -906,12 +1168,15 @@
 +
 +    /// Parse given string for a list of double values, comma-delimited
 +    bool parseDashArray( const char* sDashArray, std::vector<double>& rOutputVector );
++	
++	/// Parse given string for the xlink attribute
++	bool parseXlinkHref( const char* xlink, std::string& data );
 +
 +} // namespace svgi
 +
 +#endif
---- filter/source/svg/svgfilter.cxx	2008-02-23 12:33:09.000000000 +0100
-+++ filter/source/svg/svgfilter.cxx	2008-02-23 08:55:34.000000000 +0100
+--- filter/source/svg/svgfilter.cxx	2008-02-26 11:23:18.000000000 +0100
++++ filter/source/svg/svgfilter.cxx	2008-02-23 12:59:42.000000000 +0100
 @@ -96,11 +96,9 @@
      if( pFocusWindow )
      	pFocusWindow->EnterWait();
@@ -975,8 +1240,8 @@
  
  // -----------------------------------------------------------------------------
  
---- filter/source/svg/svgfilter.hxx	2008-02-23 12:33:09.000000000 +0100
-+++ filter/source/svg/svgfilter.hxx	2008-02-23 08:55:34.000000000 +0100
+--- filter/source/svg/svgfilter.hxx	2008-02-26 11:23:18.000000000 +0100
++++ filter/source/svg/svgfilter.hxx	2008-02-23 12:59:42.000000000 +0100
 @@ -231,18 +231,11 @@
  class SVGActionWriter;
  class EditFieldInfo;
@@ -1023,8 +1288,8 @@
  
  	// XExporter
      virtual void SAL_CALL setSourceDocument( const Reference< XComponent >& xDoc ) throw(IllegalArgumentException, RuntimeException);
---- filter/source/svg/svgimport.cxx	2008-02-23 12:33:09.000000000 +0100
-+++ filter/source/svg/svgimport.cxx	2008-02-23 08:55:34.000000000 +0100
+--- filter/source/svg/svgimport.cxx	2008-02-26 11:23:18.000000000 +0100
++++ filter/source/svg/svgimport.cxx	2008-02-23 12:59:42.000000000 +0100
 @@ -37,160 +37,59 @@
  #include "precompiled_filter.hxx"
  
@@ -1235,8 +1500,8 @@
  }
      
 --- filter/source/svg/svgreader.cxx	1970-01-01 01:00:00.000000000 +0100
-+++ filter/source/svg/svgreader.cxx	2008-02-23 11:38:26.000000000 +0100
-@@ -0,0 +1,1122 @@
++++ filter/source/svg/svgreader.cxx	2008-02-26 11:48:21.000000000 +0100
+@@ -0,0 +1,1309 @@
 +/*************************************************************************
 + *
 + *    OpenOffice.org - a multi-platform office productivity suite
@@ -1261,6 +1526,7 @@
 +#include "units.hxx"
 +#include "parserfragments.hxx"
 +#include "tokenmap.hxx"
++#include "b2dellipse.hxx"
 +
 +#include <rtl/math.hxx>
 +#include <rtl/ref.hxx>
@@ -1284,9 +1550,6 @@
 +
 +#define USTR(x) rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( x ) )
 +#define OASIS_STR "urn:oasis:names:tc:opendocument:xmlns:"
-+#define USER_UNIT (25.4) // FIXME? magic value ;-)
-+
-+#define VERBOSE 1
 +
 +using namespace ::com::sun::star;
 +
@@ -1338,11 +1601,7 @@
 +        mrStateMap(rStateMap),
 +        mxDocumentHandler(xDocumentHandler)
 +    {
-+        // fake initial parent - needs to setup a somewhat upscaling
-+        // transformation, to avoid those dreaded integer roundoff
-+        // errors in the drawing layer
 +        State aState;
-+        aState.maTransform.scale(USER_UNIT,USER_UNIT);
 +        aState.maCTM = aState.maTransform;
 +        maParentStates.push_back(aState);
 +    }
@@ -1488,11 +1747,10 @@
 +
 +        if( maCurrState.mnStrokeWidth != 0.0 )
 +        {
-+#if 0
++#if 1
 +            ::basegfx::B2DVector aVec(maCurrState.mnStrokeWidth,0);
 +            aVec *= maCurrState.maCTM;
 +            xAttrs->AddAttribute( USTR("svg:stroke-width"), rtl::OUString::valueOf( aVec.getLength()/1000.0 )+USTR("mm"));
-+			printf("Fridrich %f, %f\n", maCurrState.mnStrokeWidth, aVec.getLength());
 +#else
 +			xAttrs->AddAttribute( USTR("svg:stroke-width"), rtl::OUString::valueOf(maCurrState.mnStrokeWidth/100.0)+USTR("mm"));
 +#endif
@@ -1694,6 +1952,9 @@
 +            {
 +                basegfx::B2DHomMatrix aTransform;
 +                parseTransform(aValueUtf8.getStr(),aTransform);
++				// Ugly and temprorary hack
++				aTransform.set(0,2,convLength(aTransform.get(0,2),SVG_LENGTH_UNIT_PT));
++				aTransform.set(1,2,convLength(aTransform.get(1,2),SVG_LENGTH_UNIT_PT));
 +                maCurrState.maTransform = maCurrState.maTransform*aTransform;
 +                break;
 +            }
@@ -1822,18 +2083,64 @@
 +        const sal_Int32 nTokenId(getTokenId(xElem->getNodeName()));
 +        switch(nTokenId)
 +        {
-+		    case XML_G:
-+				
-+			    break;
++		    case XML_LINE:
++			{
++                // collect attributes
++                const sal_Int32 nNumElems( xAttributes->getLength() );
++                rtl::OUString sAttributeValue;
++                double x1=0.0,y1=0.0,x2=0.0,y2=0.0;
++                for( sal_Int32 i=0; i<nNumElems; ++i )
++                {
++                    sAttributeValue = xAttributes->item(i)->getNodeValue();
++                    const sal_Int32 nAttribId( 
++                        getTokenId(xAttributes->item(i)->getNodeName()));
++                    switch(nAttribId)
++                    {
++                        case XML_X1:
++                            x1= convLength(sAttributeValue);
++                            break;
++                        case XML_X2:
++                            x2 = convLength(sAttributeValue);
++                            break;
++                        case XML_Y1:
++                            y1 = convLength(sAttributeValue);
++                            break;
++                        case XML_Y2:
++                            y2 = convLength(sAttributeValue);
++                            break;
++                        default:
++                            // skip
++                            break;
++                    }
++                }
++
++				rtl::OUString sLinePath = USTR("M")+rtl::OUString::valueOf(x1)+USTR(",")
++					+rtl::OUString::valueOf(y1)+USTR("L")+rtl::OUString::valueOf(x2)+USTR(",")
++					+rtl::OUString::valueOf(y2);
++                basegfx::B2DPolyPolygon aPoly;
++                basegfx::tools::importFromSvgD(aPoly, sLinePath);
++
++                writePathShape(xAttrs,
++                               xUnoAttrs,
++                               xElem,
++                               sStyleId,
++                               basegfx::B2DPolyPolygon(aPoly));                
++                break;
++			}
 +            case XML_POLYGON:
 +            case XML_POLYLINE:
 +            {
-+                rtl::OUString sPoints = xElem->getAttribute(USTR("points"));
++                rtl::OUString sPoints = xElem->hasAttribute(USTR("points")) ? xElem->getAttribute(USTR("points")) : USTR("");
 +                basegfx::B2DPolygon aPoly;
 +                basegfx::tools::importFromSvgPoints(aPoly, sPoints);
 +                // if( nTokenId == XML_POLYGON )
 +                    aPoly.setClosed(true);
 +
++				// assuming the coordinates are in pts since they are interpreted as such by different renderers
++				basegfx::B2DHomMatrix aScale;
++				aScale.scale(2540.0f/72.0f,2540.0f/72.0f);
++				aPoly.transform(aScale);
++
 +                writePathShape(xAttrs,
 +                               xUnoAttrs,
 +                               xElem,
@@ -1903,6 +2210,11 @@
 +                rtl::OUString sPath = xElem->hasAttribute(USTR("d")) ? xElem->getAttribute(USTR("d")) : USTR("");
 +                basegfx::B2DPolyPolygon aPoly;
 +                basegfx::tools::importFromSvgD(aPoly, sPath);
++
++				// assuming the coordinates are in pts since they are interpreted as such by different renderers
++				basegfx::B2DHomMatrix aScale;
++				aScale.scale(2540.0f/72.0f,2540.0f/72.0f);
++				aPoly.transform(aScale);
 +				
 +                writePathShape(xAttrs,
 +                               xUnoAttrs,
@@ -1913,12 +2225,115 @@
 +            }
 +			case XML_CIRCLE:
 +			{
++                // collect attributes
++                const sal_Int32 nNumElems( xAttributes->getLength() );
++                rtl::OUString sAttributeValue;
++                double cx=0.0,cy=0.0,r=0.0;
++                for( sal_Int32 i=0; i<nNumElems; ++i )
++                {
++                    sAttributeValue = xAttributes->item(i)->getNodeValue();
++                    const sal_Int32 nAttribId( 
++                        getTokenId(xAttributes->item(i)->getNodeName()));
++                    switch(nAttribId)
++                    {
++                        case XML_CX:
++                            cx = convLength(sAttributeValue);
++                            break;
++                        case XML_CY:
++                            cy = convLength(sAttributeValue);
++                            break;
++                        case XML_R:
++                            r = convLength(sAttributeValue);
++                        default:
++                            // skip
++                            break;
++                    }
++                }
++
++                writeEllipseShape(xAttrs,
++                               xUnoAttrs,
++                               xElem,
++                               sStyleId,
++                               basegfx::B2DEllipse(basegfx::B2DPoint(cx, cy), basegfx::B2DTuple(r,r)));                
 +				break;
 +			}
 +			case XML_ELLIPSE:
 +			{
++                // collect attributes
++                const sal_Int32 nNumElems( xAttributes->getLength() );
++                rtl::OUString sAttributeValue;
++                double cx=0.0,cy=0.0,rx=0.0, ry=0.0;
++                for( sal_Int32 i=0; i<nNumElems; ++i )
++                {
++                    sAttributeValue = xAttributes->item(i)->getNodeValue();
++                    const sal_Int32 nAttribId( 
++                        getTokenId(xAttributes->item(i)->getNodeName()));
++                    switch(nAttribId)
++                    {
++                        case XML_CX:
++                            cx = convLength(sAttributeValue);
++                            break;
++                        case XML_CY:
++                            cy = convLength(sAttributeValue);
++                            break;
++                        case XML_RX:
++                            rx = convLength(sAttributeValue);
++							break;
++						case XML_RY:
++							ry = convLength(sAttributeValue);
++                        default:
++                            // skip
++                            break;
++                    }
++                }
++
++                writeEllipseShape(xAttrs,
++                               xUnoAttrs,
++                               xElem,
++                               sStyleId,
++                               basegfx::B2DEllipse(basegfx::B2DPoint(cx, cy), basegfx::B2DTuple(rx,ry)));                
 +				break;
 +			}
++            case XML_IMAGE:
++            {
++                // collect attributes
++                const sal_Int32 nNumElems( xAttributes->getLength() );
++                rtl::OUString sAttributeValue;
++                double x=0.0,y=0.0,width=0.0,height=0.0;
++                for( sal_Int32 i=0; i<nNumElems; ++i )
++                {
++                    sAttributeValue = xAttributes->item(i)->getNodeValue();
++                    const sal_Int32 nAttribId( 
++                        getTokenId(xAttributes->item(i)->getNodeName()));
++                    switch(nAttribId)
++                    {
++                        case XML_X:
++                            x = convLength(sAttributeValue);
++                            break;
++                        case XML_Y:
++                            y = convLength(sAttributeValue);
++                            break;
++                        case XML_WIDTH:
++                            width = convLength(sAttributeValue);
++                            break;
++                        case XML_HEIGHT:
++                            height = convLength(sAttributeValue);
++                            break;
++                        default:
++                            // skip
++                            break;
++                    }
++                }
++
++                rtl::OUString sValue = xElem->hasAttribute(USTR("href")) ? xElem->getAttribute(USTR("href")) : USTR("");
++        		rtl::OString aValueUtf8( sValue.getStr(), sValue.getLength(), RTL_TEXTENCODING_UTF8 );
++				std::string sLinkValue;
++				parseXlinkHref(aValueUtf8.getStr(), sLinkValue);
++
++				if (!sLinkValue.empty())
++					writeBinaryData(xAttrs, xUnoAttrs, xElem, basegfx::B2DRange(x,y,x+width,y+height), sLinkValue);
++                break;
++            }
 +        }
 +    }
 +
@@ -1932,6 +2347,35 @@
 +        maParentStates.pop_back();
 +    }
 +	
++	void writeBinaryData( rtl::Reference<SvXMLAttributeList>&           xAttrs,
++						const uno::Reference<xml::sax::XAttributeList>& xUnoAttrs,
++						const uno::Reference<xml::dom::XElement>&       /* xElem */,
++						const basegfx::B2DRange&                        rShapeBounds,
++						const std::string&                              data)
++	{
++		xAttrs->Clear();
++        xAttrs->AddAttribute( USTR( "svg:x" ), rtl::OUString::valueOf(rShapeBounds.getMinX()/100.0)+USTR("mm"));
++        xAttrs->AddAttribute( USTR( "svg:y" ), rtl::OUString::valueOf(rShapeBounds.getMinY()/100.0)+USTR("mm"));
++        xAttrs->AddAttribute( USTR( "svg:width" ), rtl::OUString::valueOf(rShapeBounds.getWidth()/100.0)+USTR("mm"));
++        xAttrs->AddAttribute( USTR( "svg:height" ), rtl::OUString::valueOf(rShapeBounds.getHeight()/100.0)+USTR("mm"));
++
++		mxDocumentHandler->startElement(USTR("draw:frame"),xUnoAttrs);
++
++		xAttrs->Clear();
++		mxDocumentHandler->startElement(USTR("draw:image"),xUnoAttrs);
++
++		mxDocumentHandler->startElement(USTR("office:binary-data"),xUnoAttrs);
++
++		mxDocumentHandler->characters(rtl::OUString::createFromAscii(data.c_str()));
++
++        mxDocumentHandler->endElement(USTR("office:binary-data"));
++
++        mxDocumentHandler->endElement(USTR("draw:image"));
++
++        mxDocumentHandler->endElement(USTR("draw:frame"));
++	}
++						  
++
 +	void writeTransformAttribute(const basegfx::B2DHomMatrix rMatrix, rtl::Reference<SvXMLAttributeList>& xAttrs)
 +	{
 +		basegfx::B2DTuple rScale, rTranslate;
@@ -1939,17 +2383,12 @@
 +		::rtl::OUString sTransformValue;
 +		if (!rMatrix.decompose(rScale, rTranslate, rRotate, rShearX))
 +			return;
-+		fprintf(stderr, "Here we go!!!\n");
-+		fprintf(stderr, "rScale.getX()=%f; rScale.getY()=%f\n", rScale.getX(), rScale.getY());
-+		if (rScale.getX() != USER_UNIT || rScale.getY() != USER_UNIT)
-+			sTransformValue += USTR("scale(")+::rtl::OUString::valueOf(rScale.getX()/USER_UNIT)+USTR(" ")
-+			     +::rtl::OUString::valueOf(rScale.getY()/USER_UNIT)+USTR(") ");
-+	    fprintf(stderr, "rTranslate.getX()=%f, rTranslate.getY()=%f\n", rTranslate.getX(), rTranslate.getY());
++		if (rScale.getX() != 1.0 || rScale.getY() != 1.0)
++			sTransformValue += USTR("scale(")+::rtl::OUString::valueOf(rScale.getX())+USTR(" ")
++			     +::rtl::OUString::valueOf(rScale.getY())+USTR(") ");
 +		if (rTranslate.getX() != 0.0f || rTranslate.getY() != 0.0f)
-+			// write translate
-+			sTransformValue += USTR("translate(")+::rtl::OUString::valueOf(rTranslate.getX()*USER_UNIT/100.0f)+USTR("mm ")
-+			     +::rtl::OUString::valueOf(rTranslate.getY()*USER_UNIT/100.0f)+USTR("mm) ");
-+	    fprintf(stderr, "rRotate=%f\n", rRotate);
++			sTransformValue += USTR("translate(")+::rtl::OUString::valueOf(rTranslate.getX()/100.0f)+USTR("mm ")
++			     +::rtl::OUString::valueOf(rTranslate.getY()/100.0f)+USTR("mm) ");
 +		if (rRotate != 0.0f)
 +			sTransformValue += USTR("rotate(")+::rtl::OUString::valueOf(rRotate)+USTR(") ");
 +
@@ -1957,11 +2396,34 @@
 +			sTransformValue += USTR("skewX(")+::rtl::OUString::valueOf(rShearX)+USTR(") ");
 +		if (!sTransformValue.getLength())
 +			return;
-+		fprintf(stderr, "Here we go again!!!\n");
 +		xAttrs->AddAttribute( USTR("draw:transform"), sTransformValue);
-+		fprintf(stderr, "The transform string: %s\n", ::rtl::OUStringToOString(sTransformValue, RTL_TEXTENCODING_UTF8).getStr());
 +	}
 +
++    void writeEllipseShape( rtl::Reference<SvXMLAttributeList>&          xAttrs,
++                         const uno::Reference<xml::sax::XAttributeList>& xUnoAttrs,
++                         const uno::Reference<xml::dom::XElement>&       xElem,
++                         const rtl::OUString&                            rStyleId,
++                         const basegfx::B2DEllipse&                      rEllipse)
++    {
++        State aState = maCurrState;
++        rtl::OUString aStyleId(rStyleId);
++		
++		xAttrs->Clear();
++
++        fprintf(stderr,"the CTM is now #2: %f %f %f %f %f %f\n", 
++                maCurrState.maCTM.get(0,0),
++                maCurrState.maCTM.get(0,1),
++                maCurrState.maCTM.get(0,2),
++                maCurrState.maCTM.get(1,0),
++                maCurrState.maCTM.get(1,1),
++                maCurrState.maCTM.get(1,2));
++        
++		basegfx::B2DPolygon aPoly = basegfx::tools::createPolygonFromEllipse(rEllipse.getB2DEllipseCenter(),
++			rEllipse.getB2DEllipseRadius().getX(), rEllipse.getB2DEllipseRadius().getY());
++		writePathShape(xAttrs, xUnoAttrs, xElem, rStyleId, basegfx::B2DPolyPolygon(aPoly));
++		
++    }
++
 +    void writePathShape( rtl::Reference<SvXMLAttributeList>&             xAttrs,
 +                         const uno::Reference<xml::sax::XAttributeList>& xUnoAttrs,
 +                         const uno::Reference<xml::dom::XElement>&       xElem,
@@ -1984,8 +2446,6 @@
 +                maCurrState.maCTM.get(1,1),
 +                maCurrState.maCTM.get(1,2));
 +        
-+        writeTransformAttribute(maCurrState.maCTM, xAttrs);
-+		
 +		if( aState.maDashArray.size() )
 +        {
 +            // ODF dashing is severly borked - generate filled polygon instead
@@ -2011,7 +2471,7 @@
 +
 +        // TODO(F2): separate out shear, rotate etc.
 +        // apply transformation to polygon, to keep draw
-+        // import in 100th mm   
++        // import in 100th mm
 +        std::for_each(aPolys.begin(),aPolys.end(),
 +                      boost::bind(&basegfx::B2DPolyPolygon::transform,
 +                                  _1,boost::cref(aState.maCTM)));
@@ -2057,6 +2517,7 @@
 +
 +        // TODO(F1): decompose transformation in calling code, and use
 +        // transform attribute here
++		// writeTranslate(maCurrState.maCTM, xAttrs);
 +        xAttrs->AddAttribute( USTR( "svg:x" ), rtl::OUString::valueOf(rShapeBounds.getMinX()/100.0)+USTR("mm"));
 +        xAttrs->AddAttribute( USTR( "svg:y" ), rtl::OUString::valueOf(rShapeBounds.getMinY()/100.0)+USTR("mm"));
 +    }
@@ -2259,21 +2720,12 @@
 +
 +    // make page viewport-width times viewport-height mm large - add
 +    // 5% border at every side
-+#if 0
-+    xAttrs->AddAttribute( USTR( "fo:margin-top" ), rtl::OUString::valueOf(fViewPortHeight/2000.0)+USTR("mm"));
-+    xAttrs->AddAttribute( USTR( "fo:margin-bottom" ), rtl::OUString::valueOf(fViewPortHeight/2000.0)+USTR("mm"));
-+    xAttrs->AddAttribute( USTR( "fo:margin-left" ), rtl::OUString::valueOf(fViewPortWidth/2000.0)+USTR("mm"));
-+    xAttrs->AddAttribute( USTR( "fo:margin-right" ), rtl::OUString::valueOf(fViewPortWidth/2000.0)+USTR("mm"));
-+    xAttrs->AddAttribute( USTR( "fo:page-width" ), rtl::OUString::valueOf(11.0*fViewPortWidth/1000.0)+USTR("mm"));
-+    xAttrs->AddAttribute( USTR( "fo:page-height" ), rtl::OUString::valueOf(11.0*fViewPortHeight/1000.0)+USTR("mm"));
-+#else
 +    xAttrs->AddAttribute( USTR( "fo:margin-top" ), USTR("0mm"));
 +    xAttrs->AddAttribute( USTR( "fo:margin-bottom" ), USTR("0mm"));
 +    xAttrs->AddAttribute( USTR( "fo:margin-left" ), USTR("0mm"));
 +    xAttrs->AddAttribute( USTR( "fo:margin-right" ), USTR("0mm"));
 +    xAttrs->AddAttribute( USTR( "fo:page-width" ), rtl::OUString::valueOf(fViewPortWidth/100.0)+USTR("mm"));
 +    xAttrs->AddAttribute( USTR( "fo:page-height" ), rtl::OUString::valueOf(fViewPortHeight/100.0)+USTR("mm"));
-+#endif
 +    xAttrs->AddAttribute( USTR( "style:print-orientation" ), 
 +        fViewPortWidth > fViewPortHeight ? 
 +        USTR("landscape") :
@@ -2360,7 +2812,7 @@
 +
 +} // namespace svgi
 --- filter/source/svg/svgreader.hxx	1970-01-01 01:00:00.000000000 +0100
-+++ filter/source/svg/svgreader.hxx	2008-02-23 08:55:34.000000000 +0100
++++ filter/source/svg/svgreader.hxx	2008-02-23 12:59:42.000000000 +0100
 @@ -0,0 +1,43 @@
 +/*************************************************************************
 + *
@@ -2406,7 +2858,7 @@
 +
 +#endif
 --- filter/source/svg/tokenmap.cxx	1970-01-01 01:00:00.000000000 +0100
-+++ filter/source/svg/tokenmap.cxx	2008-02-23 08:55:34.000000000 +0100
++++ filter/source/svg/tokenmap.cxx	2008-02-23 12:59:42.000000000 +0100
 @@ -0,0 +1,62 @@
 +/*************************************************************************
 + *
@@ -2471,7 +2923,7 @@
 +
 +} // namespace svgi
 --- filter/source/svg/tokenmap.hxx	1970-01-01 01:00:00.000000000 +0100
-+++ filter/source/svg/tokenmap.hxx	2008-02-23 08:55:34.000000000 +0100
++++ filter/source/svg/tokenmap.hxx	2008-02-23 12:59:42.000000000 +0100
 @@ -0,0 +1,32 @@
 +/*************************************************************************
 + *
@@ -2506,7 +2958,7 @@
 +
 +#endif
 --- filter/source/svg/tokens.txt	1970-01-01 01:00:00.000000000 +0100
-+++ filter/source/svg/tokens.txt	2008-02-23 08:55:34.000000000 +0100
++++ filter/source/svg/tokens.txt	2008-02-23 12:59:42.000000000 +0100
 @@ -0,0 +1,246 @@
 +#######################################
 +#
@@ -2756,8 +3208,8 @@
 +zoomAndPan
 \ No newline at end of file
 --- filter/source/svg/units.cxx	1970-01-01 01:00:00.000000000 +0100
-+++ filter/source/svg/units.cxx	2008-02-23 08:55:34.000000000 +0100
-@@ -0,0 +1,83 @@
++++ filter/source/svg/units.cxx	2008-02-26 10:52:58.000000000 +0100
+@@ -0,0 +1,146 @@
 +/*************************************************************************
 + *
 + *    OpenOffice.org - a multi-platform office productivity suite
@@ -2778,12 +3230,37 @@
 +#include "precompiled_filter.hxx"
 +
 +#include "units.hxx"
++
++#include <string.h>
 +#include <rtl/ustring.hxx>
++
++#include <boost/bind.hpp>
 +#include <boost/spirit.hpp>
++#include <boost/spirit/dynamic/select.hpp>
 +
 +namespace svgi
 +{
 +
++namespace
++{
++
++void appendChar( rtl::OUString& str, char character)
++{
++	str += rtl::OUString((sal_Char *)&character, 1, RTL_TEXTENCODING_UTF8);
++}
++
++void appendString( rtl::OUString& str, const char *characters)
++{
++	str += rtl::OUString((sal_Char *)characters, strlen(characters), RTL_TEXTENCODING_UTF8);
++}
++
++void appendDouble( rtl::OUString& str, double value, SvgUnit unit )
++{
++	str += rtl::OUString::valueOf(convLength(value, unit));
++}
++
++} //namespace
++
 +double convLength( double value, SvgUnit unit )
 +{
 +    // convert svg unit to internal coordinates ("pixel"). Since the
@@ -2800,6 +3277,7 @@
 +        case SVG_LENGTH_UNIT_PCT: fprintf( stderr, "TODO: legth type PCT not implemented.\n" ); return 1000.0;
 +        case SVG_LENGTH_UNIT_PT: return value * 2540.0/72.0;
 +        case SVG_LENGTH_UNIT_PX: return value;
++		case SVG_LENGTH_UNIT_USER: return value * 2540.0/72.0;  //FIXME, not true according to the documentation
 +        default: fprintf( stderr, "Unknown length type\n" );
 +    }
 +
@@ -2828,7 +3306,7 @@
 +                | str_p("pct")[assign_a(eUnit,SVG_LENGTH_UNIT_PCT)]
 +                | str_p("pt") [assign_a(eUnit,SVG_LENGTH_UNIT_PT)]
 +                | str_p("px") [assign_a(eUnit,SVG_LENGTH_UNIT_PX)]
-+                | str_p("") [assign_a(eUnit,SVG_LENGTH_UNIT_PT)]
++                | str_p("") [assign_a(eUnit,SVG_LENGTH_UNIT_USER)]
 +                | end_p)
 +        ),
 +        //  End grammar
@@ -2840,10 +3318,47 @@
 +    return convLength(nVal,eUnit);
 +}
 +
++#if 0
++void transformPathPointsString( rtl::OUString& sData )
++{
++    using namespace ::boost::spirit;
++
++	rtl::OUString sBackupString;
++    rtl::OString aUTF8 = rtl::OUStringToOString( sData, 
++                                                 RTL_TEXTENCODING_UTF8 );  
++    double  nVal=0.0;
++	const bool bRes = parse(aUTF8.getStr(),
++        //  Begin grammar
++        (
++            lexeme_d[
++				repeat_p(1, more)[
++					(real_p[assign_a(nVal)] >> str_p("cm")[boost::bind(&appendDouble,boost::ref(sBackupString),nVal,SVG_LENGTH_UNIT_CM)])
++    	    		| (real_p[assign_a(nVal)] >> str_p("em")[boost::bind(&appendDouble,boost::ref(sBackupString),nVal,SVG_LENGTH_UNIT_EM)])
++        	    	| (real_p[assign_a(nVal)] >> str_p("ex")[boost::bind(&appendDouble,boost::ref(sBackupString),nVal,SVG_LENGTH_UNIT_EX)])
++            	    | (real_p[assign_a(nVal)] >> str_p("in")[boost::bind(&appendDouble,boost::ref(sBackupString),nVal,SVG_LENGTH_UNIT_IN)])
++	            	| (real_p[assign_a(nVal)] >> str_p("mm")[boost::bind(&appendDouble,boost::ref(sBackupString),nVal,SVG_LENGTH_UNIT_MM)])
++					| (real_p[assign_a(nVal)] >> str_p("pc")[boost::bind(&appendDouble,boost::ref(sBackupString),nVal,SVG_LENGTH_UNIT_PC)])
++					| (real_p[assign_a(nVal)] >> str_p("pct")[boost::bind(&appendDouble,boost::ref(sBackupString),nVal,SVG_LENGTH_UNIT_PCT)])
++					| (real_p[assign_a(nVal)] >> str_p("pt")[boost::bind(&appendDouble,boost::ref(sBackupString),nVal,SVG_LENGTH_UNIT_PT)])
++					| (real_p[assign_a(nVal)] >> str_p("px")[boost::bind(&appendDouble,boost::ref(sBackupString),nVal,SVG_LENGTH_UNIT_PX)])
++					| (real_p[boost::bind(&appendDouble,boost::ref(sBackupString),_1,SVG_LENGTH_UNIT_USER)])
++					| anychar_p[boost::bind(&appendChar, boost::ref(sBackupString),_1)]
++				]
++			]
++		),
++        //  End grammar
++        space_p).full;
++
++	if ( bRes )
++			sData = sBackupString;
++}									
++#endif
++
++
 +} // namespace svgi
 --- filter/source/svg/units.hxx	1970-01-01 01:00:00.000000000 +0100
-+++ filter/source/svg/units.hxx	2008-02-23 08:55:34.000000000 +0100
-@@ -0,0 +1,43 @@
++++ filter/source/svg/units.hxx	2008-02-26 10:51:31.000000000 +0100
+@@ -0,0 +1,47 @@
 +/*************************************************************************
 + *
 + *    OpenOffice.org - a multi-platform office productivity suite
@@ -2878,12 +3393,16 @@
 +        SVG_LENGTH_UNIT_PC,
 +        SVG_LENGTH_UNIT_PCT,
 +        SVG_LENGTH_UNIT_PT,
-+        SVG_LENGTH_UNIT_PX
++        SVG_LENGTH_UNIT_PX,
++		SVG_LENGTH_UNIT_USER
 +    };
 +
 +    /// return svg_length_t in 100th's of mm
 +    double convLength( double fVal, SvgUnit unit );
 +    double convLength( const rtl::OUString& sValue );
++#if 0
++	void transformPathPointsString( rtl::OUString& sData );
++#endif
 +} // namespace svgi
 +
 +#endif



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