<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://www.wiki.synfig.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Boamaod</id>
		<title>Synfig Studio :: Documentation - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://www.wiki.synfig.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Boamaod"/>
		<link rel="alternate" type="text/html" href="https://www.wiki.synfig.org/Special:Contributions/Boamaod"/>
		<updated>2026-05-07T05:25:43Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.26.3</generator>

	<entry>
		<id>https://www.wiki.synfig.org/index.php?title=Doc:Svg2synfig&amp;diff=14267</id>
		<title>Doc:Svg2synfig</title>
		<link rel="alternate" type="text/html" href="https://www.wiki.synfig.org/index.php?title=Doc:Svg2synfig&amp;diff=14267"/>
				<updated>2011-07-17T22:29:54Z</updated>
		
		<summary type="html">&lt;p&gt;Boamaod: /* Standard way to import SVG */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Page info --&amp;gt;&lt;br /&gt;
{{Title|SVG Import}}&lt;br /&gt;
{{Navigation|Category:Manual|Doc:ListImporter}}&lt;br /&gt;
{{Category|Manual}}&lt;br /&gt;
&amp;lt;!-- Page info end --&amp;gt;&lt;br /&gt;
=Standard way to import SVG=&lt;br /&gt;
&lt;br /&gt;
From latest Synfig versions (at least in 0.62.02) there is an option to import SVG from ''File -&amp;gt; Import'' menu. This seems to work better than the options described below, however there may be problems importing some SVG elements correctly. See [http://synfig.org/forums/viewtopic.php?f=12&amp;amp;t=2728 this topic] in forums for some hints.&lt;br /&gt;
&lt;br /&gt;
* First import may fail, try to import same file for two times.&lt;br /&gt;
* 0.62.02 is reported to work better in Ubuntu than version 0.63.00.&lt;br /&gt;
&lt;br /&gt;
=Other options=&lt;br /&gt;
The following are outdated options or special options for experts.&lt;br /&gt;
== Option 1 ==&lt;br /&gt;
This uses an XSLT 2.0 stylesheet to transform SVG XML to Synfig XML.&lt;br /&gt;
=== Objective ===&lt;br /&gt;
Turn an SVG image into a Synfig file for import. First posted in the forums: http://synfig.org/forums/viewtopic.php?t=30&lt;br /&gt;
=== Prerequisites ===&lt;br /&gt;
# Make sure a Java runtime environment is installed.&lt;br /&gt;
# Get a recent version of the SAXON XSLT processor for Java from http://saxon.sourceforge.net/. Recommended version: Saxon-SA 9.0 (saxonsa9-0-0-2j.zip).&lt;br /&gt;
# Extract the SAXON package to a folder of your choice. As an example we're going to use d:\saxon in the following. The folder will contain several JAR files.&lt;br /&gt;
# Create the file d:\saxon\svg2synfig.xsl with the content provided at the bottom of this document ({{l|#svg2synfig.xsl}}).&lt;br /&gt;
==== Optional Prerequites for Windows ====&lt;br /&gt;
If you don't want to use the command line, create a batch file d:\saxon\svg2synfig.bat with this content:&lt;br /&gt;
 @java -jar %0\..\saxon9.jar -xsl:%0\..\svg2synfig.xsl %1 &amp;gt; %0\..\synfig.sif&lt;br /&gt;
 @pause&lt;br /&gt;
=== Transforming an SVG into a Synfig File ===&lt;br /&gt;
==== Windows Batch File ====&lt;br /&gt;
# Just drop the SVG file onto svg2synfig.bat.&lt;br /&gt;
==== Command line ====&lt;br /&gt;
# Change directory to d:\saxon.&lt;br /&gt;
# Enter the following command (replace your_input.svg by the path of the SVG file):&lt;br /&gt;
 java -jar saxon9.jar -xsl:svg2synfig.xsl your_input.svg &amp;gt; synfig.sif&lt;br /&gt;
=== Result ===&lt;br /&gt;
If the conversion has been successful, the result will be written to the file d:\saxon\synfig.sif.&lt;br /&gt;
You can open this file in Synfig.&lt;br /&gt;
=== Limitations ===&lt;br /&gt;
* Doesn't seem to work with SaxonB (FOSS version)&lt;br /&gt;
* Compressed SVG (svgz) must be uncompressed first.&lt;br /&gt;
* Only SVG path objects are supported. Try converting all objects to paths.&lt;br /&gt;
* Only a subset of path elements is supported. Try to modify all path nodes to have split tangents, and all path segments to be curves.&lt;br /&gt;
* Sophisticated coloring (e. g. gradients) is not supported.&lt;br /&gt;
* Only basic transformations are supported.&lt;br /&gt;
* Fill and outline on the same object is not supported.&lt;br /&gt;
=== svg2synfig.xsl ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;2.0&amp;quot; exclude-result-prefixes=&amp;quot;#all&amp;quot;&lt;br /&gt;
		xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
		xmlns:svg=&amp;quot;http://www.w3.org/2000/svg&amp;quot;&lt;br /&gt;
		xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
		xmlns:math=&amp;quot;http://exslt.org/math&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;svg:svg&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;width&amp;quot; select=&amp;quot;math:units_to_px(@width)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;height&amp;quot; select=&amp;quot;math:units_to_px(@height)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;has_view_box&amp;quot; select=&amp;quot;matches(@viewBox, '(\d+\s){3}\d+')&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;canvas version=&amp;quot;0.2&amp;quot; id=&amp;quot;{@id}&amp;quot;&lt;br /&gt;
				width=&amp;quot;{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$3') else $width}&amp;quot;&lt;br /&gt;
				height=&amp;quot;{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$4') else $height}&amp;quot;&lt;br /&gt;
				view-box=&amp;quot;{if ($has_view_box) then @viewBox else concat('0 0 ', $width, ' ', $height)}&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:apply-templates select=&amp;quot;svg:g|svg:svg|svg:path&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/canvas&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;svg:g&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;layer type=&amp;quot;PasteCanvas&amp;quot; active=&amp;quot;true&amp;quot; version=&amp;quot;0.1&amp;quot; desc=&amp;quot;{@id}&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;param name=&amp;quot;canvas&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;canvas&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
				&amp;lt;/canvas&amp;gt;&lt;br /&gt;
			&amp;lt;/param&amp;gt;&lt;br /&gt;
		&amp;lt;/layer&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;svg:path&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;style&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:for-each select=&amp;quot;ancestor-or-self::*&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:sort select=&amp;quot;position()&amp;quot; data-type=&amp;quot;number&amp;quot; order=&amp;quot;descending&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:value-of select=&amp;quot;concat(@style, ';fill:', @fill, ';stroke:', @stroke, ';stroke-width:', @stroke-width, ';')&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;self&amp;quot; select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;is_fill&amp;quot; select=&amp;quot;not(matches(replace($style, 'fill:[^n;][^o].*', ''), 'fill:none'))&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:analyze-string select=&amp;quot;@d&amp;quot; regex=&amp;quot;m[^z]+(z|$)&amp;quot; flags=&amp;quot;i&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:matching-substring&amp;gt;&lt;br /&gt;
				&amp;lt;layer type=&amp;quot;{if ($is_fill) then 'region' else 'outline'}&amp;quot; version=&amp;quot;0.1&amp;quot; desc=&amp;quot;{$self/@id}&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:call-template name=&amp;quot;style-to-color&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:with-param name=&amp;quot;style&amp;quot; select=&amp;quot;replace(replace($style, ':none.*', ''), if ($is_fill) then '.*fill:([^;]+).*' else '.*stroke:([^;]+).*', '$1')&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:if test=&amp;quot;not ($is_fill)&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:call-template name=&amp;quot;style-to-width&amp;quot;&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:with-param name=&amp;quot;style&amp;quot; select=&amp;quot;replace($style, '.*stroke-width:([^;]+).*', '$1')&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;
					&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
					&amp;lt;param name=&amp;quot;bline&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;bline type=&amp;quot;bline_point&amp;quot; loop=&amp;quot;{matches(., 'z', 'i')}&amp;quot;&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:call-template name=&amp;quot;path-to-bline&amp;quot;&amp;gt;&lt;br /&gt;
								&amp;lt;xsl:with-param name=&amp;quot;path&amp;quot; select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
								&amp;lt;xsl:with-param name=&amp;quot;node&amp;quot; select=&amp;quot;$self&amp;quot; tunnel=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
							&amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;
						&amp;lt;/bline&amp;gt;&lt;br /&gt;
					&amp;lt;/param&amp;gt;&lt;br /&gt;
				&amp;lt;/layer&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:matching-substring&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:analyze-string&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template name=&amp;quot;path-to-bline&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;path&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;stripped&amp;quot; select=&amp;quot;replace(replace(translate($path, ',', ' '), '(\d)-', '$1 -'), '\s*([a-z]+)\s*', '$1', 'i')&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;closed&amp;quot; select=&amp;quot;if (matches($stripped, 'z', 'i')) then $stripped else replace($stripped, 'm([-\d.]+\s[-\d.]+).*$', '$0l$1z', 'i')&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;tmp&amp;quot; select=&amp;quot;replace($closed, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;curve&amp;quot; select=&amp;quot;replace($tmp, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:analyze-string select=&amp;quot;$curve&amp;quot; regex=&amp;quot;\s([-\d.]+\s[-\d.]+)\s[-\d.]+\s[-\d.]+z&amp;quot; flags=&amp;quot;i&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:matching-substring&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:analyze-string select=&amp;quot;concat(regex-group(1), $curve)&amp;quot; regex=&amp;quot;([-\d.]+)\s([-\d.]+)[m\s]([-\d.]+)\s([-\d.]+)c([-\d.]+)\s([-\d.]+)&amp;quot; flags=&amp;quot;i&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:matching-substring&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:call-template name=&amp;quot;node-to-bline-point&amp;quot;&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:with-param name=&amp;quot;c1_x&amp;quot; select=&amp;quot;regex-group(1)&amp;quot;/&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:with-param name=&amp;quot;c1_y&amp;quot; select=&amp;quot;regex-group(2)&amp;quot;/&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:with-param name=&amp;quot;x&amp;quot; select=&amp;quot;regex-group(3)&amp;quot;/&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:with-param name=&amp;quot;y&amp;quot; select=&amp;quot;regex-group(4)&amp;quot;/&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:with-param name=&amp;quot;c2_x&amp;quot; select=&amp;quot;regex-group(5)&amp;quot;/&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:with-param name=&amp;quot;c2_y&amp;quot; select=&amp;quot;regex-group(6)&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;
					&amp;lt;/xsl:matching-substring&amp;gt;&lt;br /&gt;
				&amp;lt;/xsl:analyze-string&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:matching-substring&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:analyze-string&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template name=&amp;quot;node-to-bline-point&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;x&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;y&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;c1_x&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;c1_y&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;c2_x&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;c2_y&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;node&amp;quot; tunnel=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;transform&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:for-each select=&amp;quot;$node/ancestor-or-self::*/@transform&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;t&amp;quot; select=&amp;quot;math:resolve_transform($transform)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;transformed_x&amp;quot; select=&amp;quot;$t[5] + $t[1] * xs:float($x) + $t[3] * xs:float($y)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;transformed_y&amp;quot; select=&amp;quot;$t[6] + $t[2] * xs:float($x) + $t[4] * xs:float($y)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;transformed_c1_x&amp;quot; select=&amp;quot;$t[5] + $t[1] * xs:float($c1_x) + $t[3] * xs:float($c1_y)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;transformed_c1_y&amp;quot; select=&amp;quot;$t[6]+ $t[2] * xs:float($c1_x) + $t[4] * xs:float($c1_y)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;transformed_c2_x&amp;quot; select=&amp;quot;$t[5] + $t[1] * xs:float($c2_x) + $t[3] * xs:float($c2_y)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;transformed_c2_y&amp;quot; select=&amp;quot;$t[6]+ $t[2] * xs:float($c2_x) + $t[4] * xs:float($c2_y)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;entry&amp;gt;&lt;br /&gt;
			&amp;lt;composite type=&amp;quot;bline_point&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;point&amp;gt;&lt;br /&gt;
					&amp;lt;vector&amp;gt;&lt;br /&gt;
						&amp;lt;x&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;$transformed_x&amp;quot;/&amp;gt;&amp;lt;/x&amp;gt;&lt;br /&gt;
						&amp;lt;y&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;$transformed_y&amp;quot;/&amp;gt;&amp;lt;/y&amp;gt;&lt;br /&gt;
					&amp;lt;/vector&amp;gt;&lt;br /&gt;
				&amp;lt;/point&amp;gt;&lt;br /&gt;
				&amp;lt;width&amp;gt;&lt;br /&gt;
					&amp;lt;real value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/width&amp;gt;&lt;br /&gt;
				&amp;lt;origin&amp;gt;&lt;br /&gt;
					&amp;lt;real value=&amp;quot;0.5&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/origin&amp;gt;&lt;br /&gt;
				&amp;lt;split&amp;gt;&lt;br /&gt;
					&amp;lt;bool value=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/split&amp;gt;&lt;br /&gt;
				&amp;lt;t1&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:call-template name=&amp;quot;vector-pair-to-radial&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:with-param name=&amp;quot;origin-x&amp;quot; select=&amp;quot;$transformed_c1_x&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:with-param name=&amp;quot;origin-y&amp;quot; select=&amp;quot;$transformed_c1_y&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:with-param name=&amp;quot;x&amp;quot; select=&amp;quot;$transformed_x&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:with-param name=&amp;quot;y&amp;quot; select=&amp;quot;$transformed_y&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;
				&amp;lt;/t1&amp;gt;&lt;br /&gt;
				&amp;lt;t2&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:call-template name=&amp;quot;vector-pair-to-radial&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:with-param name=&amp;quot;origin-x&amp;quot; select=&amp;quot;$transformed_x&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:with-param name=&amp;quot;origin-y&amp;quot; select=&amp;quot;$transformed_y&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:with-param name=&amp;quot;x&amp;quot; select=&amp;quot;$transformed_c2_x&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:with-param name=&amp;quot;y&amp;quot; select=&amp;quot;$transformed_c2_y&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;
				&amp;lt;/t2&amp;gt;&lt;br /&gt;
			&amp;lt;/composite&amp;gt;&lt;br /&gt;
		&amp;lt;/entry&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template name=&amp;quot;vector-pair-to-radial&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;x&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;y&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;origin-x&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;origin-y&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;dx&amp;quot; select=&amp;quot;xs:float($x) - xs:float($origin-x)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;dy&amp;quot; select=&amp;quot;xs:float($y) - xs:float($origin-y)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;d&amp;quot; select=&amp;quot;math:sqrt($dx * $dx + $dy * $dy)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;angle&amp;quot; select=&amp;quot;math:atan2($dy, $dx)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;radial_composite type=&amp;quot;vector&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;radius&amp;gt;&lt;br /&gt;
				&amp;lt;real value=&amp;quot;{$d * 3}&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/radius&amp;gt;&lt;br /&gt;
			&amp;lt;theta&amp;gt;&lt;br /&gt;
				&amp;lt;angle value=&amp;quot;{$angle * 57.295779513082320876798154814105}&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/theta&amp;gt;&lt;br /&gt;
		&amp;lt;/radial_composite&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template name=&amp;quot;style-to-width&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;style&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:if test=&amp;quot;matches($style, '^\d')&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;param name=&amp;quot;width&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;real value=&amp;quot;{math:units_to_px($style)}&amp;quot;/&amp;gt;&lt;br /&gt;
			 &amp;lt;/param&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template name=&amp;quot;style-to-color&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;style&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:if test=&amp;quot;matches($style, '#')&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:analyze-string select=&amp;quot;concat($style, ';')&amp;quot; regex=&amp;quot;#([\da-f]{{2}})([\da-f]{{2}})([\da-f]{{2}});&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:matching-substring&amp;gt;&lt;br /&gt;
					&amp;lt;param name=&amp;quot;color&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;color&amp;gt;&lt;br /&gt;
							&amp;lt;r&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;math:hex_to_color(regex-group(1))&amp;quot;/&amp;gt;&amp;lt;/r&amp;gt;&lt;br /&gt;
							&amp;lt;g&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;math:hex_to_color(regex-group(2))&amp;quot;/&amp;gt;&amp;lt;/g&amp;gt;&lt;br /&gt;
							&amp;lt;b&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;math:hex_to_color(regex-group(3))&amp;quot;/&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
							&amp;lt;a&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;if (matches($style, 'fill-opacity:')) then math:power(xs:float(replace($style, '.*fill-opacity:([-\d.]+).*', '$1')), 1 div 2.2) else 1&amp;quot;/&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
						&amp;lt;/color&amp;gt;&lt;br /&gt;
					&amp;lt;/param&amp;gt;&lt;br /&gt;
				&amp;lt;/xsl:matching-substring&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:analyze-string&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:if test=&amp;quot;matches($style, 'rgb')&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:analyze-string select=&amp;quot;concat($style, ';')&amp;quot; regex=&amp;quot;rgb[(\s]+([-\d.]+)[,\s]+([-\d.]+)[,\s]+([-\d.]+)[\s)]+;&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:matching-substring&amp;gt;&lt;br /&gt;
					&amp;lt;param name=&amp;quot;color&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;color&amp;gt;&lt;br /&gt;
							&amp;lt;r&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;math:power(xs:float(regex-group(1)) div 255, 2.2)&amp;quot;/&amp;gt;&amp;lt;/r&amp;gt;&lt;br /&gt;
							&amp;lt;g&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;math:power(xs:float(regex-group(2)) div 255, 2.2)&amp;quot;/&amp;gt;&amp;lt;/g&amp;gt;&lt;br /&gt;
							&amp;lt;b&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;math:power(xs:float(regex-group(3)) div 255, 2.2)&amp;quot;/&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
							&amp;lt;a&amp;gt;1&amp;lt;/a&amp;gt;&lt;br /&gt;
						&amp;lt;/color&amp;gt;&lt;br /&gt;
					&amp;lt;/param&amp;gt;&lt;br /&gt;
				&amp;lt;/xsl:matching-substring&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:analyze-string&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:if test=&amp;quot;matches($style, 'url')&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;param name=&amp;quot;color&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;color&amp;gt;&amp;lt;r&amp;gt;0.5&amp;lt;/r&amp;gt;&amp;lt;g&amp;gt;0.5&amp;lt;/g&amp;gt;&amp;lt;b&amp;gt;0.5&amp;lt;/b&amp;gt;&amp;lt;a&amp;gt;0.5&amp;lt;/a&amp;gt;	&amp;lt;/color&amp;gt;&lt;br /&gt;
			&amp;lt;/param&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:function name=&amp;quot;math:resolve_transform&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;transform&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:variable name=&amp;quot;stripped&amp;quot; select=&amp;quot;replace(replace($transform, 'translate\(', 'X(1,0,0,1,'), 'matrix', 'X')&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:analyze-string select=&amp;quot;concat('X(1,0,0,1,0,0)', $stripped)&amp;quot; regex=&amp;quot;(.*)X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\)[^X]*X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\).*&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:non-matching-substring&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:sequence select=&amp;quot;(1,0,0,1,0,0)&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/xsl:non-matching-substring&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:matching-substring&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;a2&amp;quot; select=&amp;quot;xs:float(regex-group(8))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;b2&amp;quot; select=&amp;quot;xs:float(regex-group(9))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;c2&amp;quot; select=&amp;quot;xs:float(regex-group(10))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;d2&amp;quot; select=&amp;quot;xs:float(regex-group(11))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;e2&amp;quot; select=&amp;quot;xs:float(regex-group(12))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;f2&amp;quot; select=&amp;quot;xs:float(regex-group(13))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;a1&amp;quot; select=&amp;quot;xs:float(regex-group(2))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;b1&amp;quot; select=&amp;quot;xs:float(regex-group(3))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;c1&amp;quot; select=&amp;quot;xs:float(regex-group(4))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;d1&amp;quot; select=&amp;quot;xs:float(regex-group(5))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;e1&amp;quot; select=&amp;quot;xs:float(regex-group(6))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;f1&amp;quot; select=&amp;quot;xs:float(regex-group(7))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;p&amp;quot; select=&amp;quot;($a1*$a2+$c1*$b2,$b1*$a2+$d1*$b2,$a1*$c2+$c1*$d2,$b1*$c2+$d1*$d2,$a1*$e2+$c1*$f2+$e1,$b1*$e2+$d1*$f2+$f1)&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;remainder&amp;quot; select=&amp;quot;replace(regex-group(1), 'X\(1,0,0,1,0,0\)', '')&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:when test=&amp;quot;matches($remainder, 'X')&amp;quot;&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:variable name=&amp;quot;recursion&amp;quot; select=&amp;quot;concat($remainder, 'X(', $p[1], ',', $p[2], ',', $p[3], ',', $p[4], ',', $p[5], ',', $p[6], ')')&amp;quot;/&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:sequence select=&amp;quot;math:resolve_transform($recursion)&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:sequence select=&amp;quot;$p&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
					&amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
				&amp;lt;/xsl:matching-substring&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:analyze-string&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:function&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:function name=&amp;quot;math:hex_to_color&amp;quot; as=&amp;quot;xs:float&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;hex&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:value-of select=&amp;quot;math:power(xs:float(string-length(substring-before('0123456789abcdef', substring($hex,1,1))) * 16 + string-length(substring-before('0123456789abcdef', substring($hex,2,1)))) div 255, 2.2)&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:function&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:function name=&amp;quot;math:units_to_px&amp;quot; as=&amp;quot;xs:float&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;size&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:analyze-string select=&amp;quot;$size&amp;quot; regex=&amp;quot;^([-\d.]+)([a-z%]*)$&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:matching-substring&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:variable name=&amp;quot;factor&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:when test=&amp;quot;regex-group(2) = 'pt'&amp;quot;&amp;gt;1.25&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:when test=&amp;quot;regex-group(2) = 'em'&amp;quot;&amp;gt;16&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:when test=&amp;quot;regex-group(2) = 'mm'&amp;quot;&amp;gt;3.54&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:when test=&amp;quot;regex-group(2) = 'pc'&amp;quot;&amp;gt;15&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:when test=&amp;quot;regex-group(2) = 'cm'&amp;quot;&amp;gt;35.43&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:when test=&amp;quot;regex-group(2) = 'in'&amp;quot;&amp;gt;90&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:otherwise&amp;gt;1&amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
					&amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
				&amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:value-of select=&amp;quot;xs:float($factor) * xs:float(regex-group(1))&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:matching-substring&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:analyze-string&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:function&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Option 2 ==&lt;br /&gt;
&lt;br /&gt;
This is a C program by akagogo that uses libxml to convert SVG to Synfig format.&lt;br /&gt;
&lt;br /&gt;
http://none.carlos.googlepages.com/svgtosif.zip&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
Just make the usual '''./configure &amp;amp;&amp;amp; make &amp;amp;&amp;amp; sudo make install'''&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&lt;br /&gt;
The SVG files needs to be inside a folder called '''data'''. You have to run the command from the parent directory, but just using the name file as the command argument. So if:&lt;br /&gt;
&lt;br /&gt;
* You are in folder &amp;quot;/example&amp;quot; you have to create a folder called &amp;quot;/example/data&amp;quot; and put the file &amp;quot;file.svg&amp;quot; there.&lt;br /&gt;
* Now you execute '''svgtosif file.svg''' when you got &amp;quot;/example&amp;quot; as your current working directory.&lt;br /&gt;
&lt;br /&gt;
As you can see, this is really not to friendly. To quickly fix the problem, use the following bash script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 mkdir data&lt;br /&gt;
 cp &amp;quot;$1&amp;quot; data/&lt;br /&gt;
 /usr/local/bin/svgtosif &amp;quot;$1&amp;quot;&lt;br /&gt;
 NAME=`echo &amp;quot;$1&amp;quot; | cut -d &amp;quot;.&amp;quot; -f 1`&lt;br /&gt;
 cp &amp;quot;data/$NAME.sif&amp;quot; .&lt;br /&gt;
 rm data/*&lt;br /&gt;
 rmdir data&lt;br /&gt;
 echo &amp;quot;Conversion complete!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Put those lines in a file named &amp;quot;svg2sif&amp;quot; (name it as you want, but avoid using &amp;quot;svgtosif&amp;quot;) and put it in a PATH directory (suggest /usr/bin). Then:&lt;br /&gt;
 chmod +x /usr/bin/svg2sif &lt;br /&gt;
&lt;br /&gt;
Thats all. Now use:&lt;br /&gt;
 svg2sif &amp;lt;file.svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and you will get a .sif file in the same folder you are working in.&lt;/div&gt;</summary>
		<author><name>Boamaod</name></author>	</entry>

	<entry>
		<id>https://www.wiki.synfig.org/index.php?title=Doc_talk:Svg2synfig&amp;diff=14266</id>
		<title>Doc talk:Svg2synfig</title>
		<link rel="alternate" type="text/html" href="https://www.wiki.synfig.org/index.php?title=Doc_talk:Svg2synfig&amp;diff=14266"/>
				<updated>2011-07-17T22:24:52Z</updated>
		
		<summary type="html">&lt;p&gt;Boamaod: /* New Doc Thoughts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== New Doc Thoughts ==&lt;br /&gt;
&lt;br /&gt;
* I would remove the details of all those special solutions to an experts section and only keep a description of svg import via caret&amp;gt;file&amp;gt;import. --[[User:Ohoservices|Ohoservices]] 11:25, 23 May 2010 (UTC)&lt;br /&gt;
:: Updated in the direction of this proposal. Since I don't know about the guidelines for documentation, I just made a quick update. --[[User:Boamaod|Boamaod]] 22:24, 17 July 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Old messages ==&lt;br /&gt;
(will be removed if nobody contradicts)&lt;br /&gt;
&lt;br /&gt;
 fail to get the transform working. This is on a current debian-unstable system with Saxon 9.0.0.1J from Saxonica. The command ''saxonb-xslt -ext:on -xsl:svg2synfig.xsl Zeichnung.svg'' will output an empty sif. Input contains below code, which should contain only supported paths, doesnt it?&lt;br /&gt;
:: It converts successfully with the Saxon 9.0.0.2J on Windows --[[User:Dmd|Dmd]] 19:06, 14 March 2008 (EDT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;svg&lt;br /&gt;
   xmlns:svg=&amp;quot;http://www.w3.org/2000/svg&amp;quot;&lt;br /&gt;
   xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot;&lt;br /&gt;
   version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
   width=&amp;quot;100&amp;quot;&lt;br /&gt;
   height=&amp;quot;100&amp;quot;&lt;br /&gt;
   id=&amp;quot;svg&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;defs&lt;br /&gt;
     id=&amp;quot;defs&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;g&lt;br /&gt;
     id=&amp;quot;layer&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;path&lt;br /&gt;
       d=&amp;quot;M 50,75 C 0,100 0,0 50,25 C 100,0 100,100 50,75 z &amp;quot;&lt;br /&gt;
       style=&amp;quot;fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1&amp;quot;&lt;br /&gt;
       id=&amp;quot;path&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/g&amp;gt;&lt;br /&gt;
&amp;lt;/svg&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Boamaod</name></author>	</entry>

	<entry>
		<id>https://www.wiki.synfig.org/index.php?title=Doc:Svg2synfig&amp;diff=14265</id>
		<title>Doc:Svg2synfig</title>
		<link rel="alternate" type="text/html" href="https://www.wiki.synfig.org/index.php?title=Doc:Svg2synfig&amp;diff=14265"/>
				<updated>2011-07-17T22:22:48Z</updated>
		
		<summary type="html">&lt;p&gt;Boamaod: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Page info --&amp;gt;&lt;br /&gt;
{{Title|SVG Import}}&lt;br /&gt;
{{Navigation|Category:Manual|Doc:ListImporter}}&lt;br /&gt;
{{Category|Manual}}&lt;br /&gt;
&amp;lt;!-- Page info end --&amp;gt;&lt;br /&gt;
=Standard way to import SVG=&lt;br /&gt;
&lt;br /&gt;
From latest Synfig versions (at least in 0.62.02) there is an option to import SVG from ''File -&amp;gt; Import'' menu. This seems to work better than the options described below. however there may be problems importing some SVG elements correctly. See [http://synfig.org/forums/viewtopic.php?f=12&amp;amp;t=2728 this topic] in forums for some hints.&lt;br /&gt;
&lt;br /&gt;
* First import may fail, try to import same file for two times.&lt;br /&gt;
* 0.62.02 is reported to work better in Ubuntu than version 0.63.00.&lt;br /&gt;
&lt;br /&gt;
=Other options=&lt;br /&gt;
The following are outdated options or special options for experts.&lt;br /&gt;
== Option 1 ==&lt;br /&gt;
This uses an XSLT 2.0 stylesheet to transform SVG XML to Synfig XML.&lt;br /&gt;
=== Objective ===&lt;br /&gt;
Turn an SVG image into a Synfig file for import. First posted in the forums: http://synfig.org/forums/viewtopic.php?t=30&lt;br /&gt;
=== Prerequisites ===&lt;br /&gt;
# Make sure a Java runtime environment is installed.&lt;br /&gt;
# Get a recent version of the SAXON XSLT processor for Java from http://saxon.sourceforge.net/. Recommended version: Saxon-SA 9.0 (saxonsa9-0-0-2j.zip).&lt;br /&gt;
# Extract the SAXON package to a folder of your choice. As an example we're going to use d:\saxon in the following. The folder will contain several JAR files.&lt;br /&gt;
# Create the file d:\saxon\svg2synfig.xsl with the content provided at the bottom of this document ({{l|#svg2synfig.xsl}}).&lt;br /&gt;
==== Optional Prerequites for Windows ====&lt;br /&gt;
If you don't want to use the command line, create a batch file d:\saxon\svg2synfig.bat with this content:&lt;br /&gt;
 @java -jar %0\..\saxon9.jar -xsl:%0\..\svg2synfig.xsl %1 &amp;gt; %0\..\synfig.sif&lt;br /&gt;
 @pause&lt;br /&gt;
=== Transforming an SVG into a Synfig File ===&lt;br /&gt;
==== Windows Batch File ====&lt;br /&gt;
# Just drop the SVG file onto svg2synfig.bat.&lt;br /&gt;
==== Command line ====&lt;br /&gt;
# Change directory to d:\saxon.&lt;br /&gt;
# Enter the following command (replace your_input.svg by the path of the SVG file):&lt;br /&gt;
 java -jar saxon9.jar -xsl:svg2synfig.xsl your_input.svg &amp;gt; synfig.sif&lt;br /&gt;
=== Result ===&lt;br /&gt;
If the conversion has been successful, the result will be written to the file d:\saxon\synfig.sif.&lt;br /&gt;
You can open this file in Synfig.&lt;br /&gt;
=== Limitations ===&lt;br /&gt;
* Doesn't seem to work with SaxonB (FOSS version)&lt;br /&gt;
* Compressed SVG (svgz) must be uncompressed first.&lt;br /&gt;
* Only SVG path objects are supported. Try converting all objects to paths.&lt;br /&gt;
* Only a subset of path elements is supported. Try to modify all path nodes to have split tangents, and all path segments to be curves.&lt;br /&gt;
* Sophisticated coloring (e. g. gradients) is not supported.&lt;br /&gt;
* Only basic transformations are supported.&lt;br /&gt;
* Fill and outline on the same object is not supported.&lt;br /&gt;
=== svg2synfig.xsl ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;2.0&amp;quot; exclude-result-prefixes=&amp;quot;#all&amp;quot;&lt;br /&gt;
		xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
		xmlns:svg=&amp;quot;http://www.w3.org/2000/svg&amp;quot;&lt;br /&gt;
		xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
		xmlns:math=&amp;quot;http://exslt.org/math&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;svg:svg&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;width&amp;quot; select=&amp;quot;math:units_to_px(@width)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;height&amp;quot; select=&amp;quot;math:units_to_px(@height)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;has_view_box&amp;quot; select=&amp;quot;matches(@viewBox, '(\d+\s){3}\d+')&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;canvas version=&amp;quot;0.2&amp;quot; id=&amp;quot;{@id}&amp;quot;&lt;br /&gt;
				width=&amp;quot;{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$3') else $width}&amp;quot;&lt;br /&gt;
				height=&amp;quot;{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$4') else $height}&amp;quot;&lt;br /&gt;
				view-box=&amp;quot;{if ($has_view_box) then @viewBox else concat('0 0 ', $width, ' ', $height)}&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:apply-templates select=&amp;quot;svg:g|svg:svg|svg:path&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/canvas&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;svg:g&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;layer type=&amp;quot;PasteCanvas&amp;quot; active=&amp;quot;true&amp;quot; version=&amp;quot;0.1&amp;quot; desc=&amp;quot;{@id}&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;param name=&amp;quot;canvas&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;canvas&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
				&amp;lt;/canvas&amp;gt;&lt;br /&gt;
			&amp;lt;/param&amp;gt;&lt;br /&gt;
		&amp;lt;/layer&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;svg:path&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;style&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:for-each select=&amp;quot;ancestor-or-self::*&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:sort select=&amp;quot;position()&amp;quot; data-type=&amp;quot;number&amp;quot; order=&amp;quot;descending&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:value-of select=&amp;quot;concat(@style, ';fill:', @fill, ';stroke:', @stroke, ';stroke-width:', @stroke-width, ';')&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;self&amp;quot; select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;is_fill&amp;quot; select=&amp;quot;not(matches(replace($style, 'fill:[^n;][^o].*', ''), 'fill:none'))&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:analyze-string select=&amp;quot;@d&amp;quot; regex=&amp;quot;m[^z]+(z|$)&amp;quot; flags=&amp;quot;i&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:matching-substring&amp;gt;&lt;br /&gt;
				&amp;lt;layer type=&amp;quot;{if ($is_fill) then 'region' else 'outline'}&amp;quot; version=&amp;quot;0.1&amp;quot; desc=&amp;quot;{$self/@id}&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:call-template name=&amp;quot;style-to-color&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:with-param name=&amp;quot;style&amp;quot; select=&amp;quot;replace(replace($style, ':none.*', ''), if ($is_fill) then '.*fill:([^;]+).*' else '.*stroke:([^;]+).*', '$1')&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:if test=&amp;quot;not ($is_fill)&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:call-template name=&amp;quot;style-to-width&amp;quot;&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:with-param name=&amp;quot;style&amp;quot; select=&amp;quot;replace($style, '.*stroke-width:([^;]+).*', '$1')&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;
					&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
					&amp;lt;param name=&amp;quot;bline&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;bline type=&amp;quot;bline_point&amp;quot; loop=&amp;quot;{matches(., 'z', 'i')}&amp;quot;&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:call-template name=&amp;quot;path-to-bline&amp;quot;&amp;gt;&lt;br /&gt;
								&amp;lt;xsl:with-param name=&amp;quot;path&amp;quot; select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
								&amp;lt;xsl:with-param name=&amp;quot;node&amp;quot; select=&amp;quot;$self&amp;quot; tunnel=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
							&amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;
						&amp;lt;/bline&amp;gt;&lt;br /&gt;
					&amp;lt;/param&amp;gt;&lt;br /&gt;
				&amp;lt;/layer&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:matching-substring&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:analyze-string&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template name=&amp;quot;path-to-bline&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;path&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;stripped&amp;quot; select=&amp;quot;replace(replace(translate($path, ',', ' '), '(\d)-', '$1 -'), '\s*([a-z]+)\s*', '$1', 'i')&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;closed&amp;quot; select=&amp;quot;if (matches($stripped, 'z', 'i')) then $stripped else replace($stripped, 'm([-\d.]+\s[-\d.]+).*$', '$0l$1z', 'i')&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;tmp&amp;quot; select=&amp;quot;replace($closed, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;curve&amp;quot; select=&amp;quot;replace($tmp, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:analyze-string select=&amp;quot;$curve&amp;quot; regex=&amp;quot;\s([-\d.]+\s[-\d.]+)\s[-\d.]+\s[-\d.]+z&amp;quot; flags=&amp;quot;i&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:matching-substring&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:analyze-string select=&amp;quot;concat(regex-group(1), $curve)&amp;quot; regex=&amp;quot;([-\d.]+)\s([-\d.]+)[m\s]([-\d.]+)\s([-\d.]+)c([-\d.]+)\s([-\d.]+)&amp;quot; flags=&amp;quot;i&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:matching-substring&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:call-template name=&amp;quot;node-to-bline-point&amp;quot;&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:with-param name=&amp;quot;c1_x&amp;quot; select=&amp;quot;regex-group(1)&amp;quot;/&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:with-param name=&amp;quot;c1_y&amp;quot; select=&amp;quot;regex-group(2)&amp;quot;/&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:with-param name=&amp;quot;x&amp;quot; select=&amp;quot;regex-group(3)&amp;quot;/&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:with-param name=&amp;quot;y&amp;quot; select=&amp;quot;regex-group(4)&amp;quot;/&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:with-param name=&amp;quot;c2_x&amp;quot; select=&amp;quot;regex-group(5)&amp;quot;/&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:with-param name=&amp;quot;c2_y&amp;quot; select=&amp;quot;regex-group(6)&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;
					&amp;lt;/xsl:matching-substring&amp;gt;&lt;br /&gt;
				&amp;lt;/xsl:analyze-string&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:matching-substring&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:analyze-string&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template name=&amp;quot;node-to-bline-point&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;x&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;y&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;c1_x&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;c1_y&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;c2_x&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;c2_y&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;node&amp;quot; tunnel=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;transform&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:for-each select=&amp;quot;$node/ancestor-or-self::*/@transform&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;t&amp;quot; select=&amp;quot;math:resolve_transform($transform)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;transformed_x&amp;quot; select=&amp;quot;$t[5] + $t[1] * xs:float($x) + $t[3] * xs:float($y)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;transformed_y&amp;quot; select=&amp;quot;$t[6] + $t[2] * xs:float($x) + $t[4] * xs:float($y)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;transformed_c1_x&amp;quot; select=&amp;quot;$t[5] + $t[1] * xs:float($c1_x) + $t[3] * xs:float($c1_y)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;transformed_c1_y&amp;quot; select=&amp;quot;$t[6]+ $t[2] * xs:float($c1_x) + $t[4] * xs:float($c1_y)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;transformed_c2_x&amp;quot; select=&amp;quot;$t[5] + $t[1] * xs:float($c2_x) + $t[3] * xs:float($c2_y)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;transformed_c2_y&amp;quot; select=&amp;quot;$t[6]+ $t[2] * xs:float($c2_x) + $t[4] * xs:float($c2_y)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;entry&amp;gt;&lt;br /&gt;
			&amp;lt;composite type=&amp;quot;bline_point&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;point&amp;gt;&lt;br /&gt;
					&amp;lt;vector&amp;gt;&lt;br /&gt;
						&amp;lt;x&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;$transformed_x&amp;quot;/&amp;gt;&amp;lt;/x&amp;gt;&lt;br /&gt;
						&amp;lt;y&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;$transformed_y&amp;quot;/&amp;gt;&amp;lt;/y&amp;gt;&lt;br /&gt;
					&amp;lt;/vector&amp;gt;&lt;br /&gt;
				&amp;lt;/point&amp;gt;&lt;br /&gt;
				&amp;lt;width&amp;gt;&lt;br /&gt;
					&amp;lt;real value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/width&amp;gt;&lt;br /&gt;
				&amp;lt;origin&amp;gt;&lt;br /&gt;
					&amp;lt;real value=&amp;quot;0.5&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/origin&amp;gt;&lt;br /&gt;
				&amp;lt;split&amp;gt;&lt;br /&gt;
					&amp;lt;bool value=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/split&amp;gt;&lt;br /&gt;
				&amp;lt;t1&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:call-template name=&amp;quot;vector-pair-to-radial&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:with-param name=&amp;quot;origin-x&amp;quot; select=&amp;quot;$transformed_c1_x&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:with-param name=&amp;quot;origin-y&amp;quot; select=&amp;quot;$transformed_c1_y&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:with-param name=&amp;quot;x&amp;quot; select=&amp;quot;$transformed_x&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:with-param name=&amp;quot;y&amp;quot; select=&amp;quot;$transformed_y&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;
				&amp;lt;/t1&amp;gt;&lt;br /&gt;
				&amp;lt;t2&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:call-template name=&amp;quot;vector-pair-to-radial&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:with-param name=&amp;quot;origin-x&amp;quot; select=&amp;quot;$transformed_x&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:with-param name=&amp;quot;origin-y&amp;quot; select=&amp;quot;$transformed_y&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:with-param name=&amp;quot;x&amp;quot; select=&amp;quot;$transformed_c2_x&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:with-param name=&amp;quot;y&amp;quot; select=&amp;quot;$transformed_c2_y&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;
				&amp;lt;/t2&amp;gt;&lt;br /&gt;
			&amp;lt;/composite&amp;gt;&lt;br /&gt;
		&amp;lt;/entry&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template name=&amp;quot;vector-pair-to-radial&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;x&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;y&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;origin-x&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;origin-y&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;dx&amp;quot; select=&amp;quot;xs:float($x) - xs:float($origin-x)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;dy&amp;quot; select=&amp;quot;xs:float($y) - xs:float($origin-y)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;d&amp;quot; select=&amp;quot;math:sqrt($dx * $dx + $dy * $dy)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;angle&amp;quot; select=&amp;quot;math:atan2($dy, $dx)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;radial_composite type=&amp;quot;vector&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;radius&amp;gt;&lt;br /&gt;
				&amp;lt;real value=&amp;quot;{$d * 3}&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/radius&amp;gt;&lt;br /&gt;
			&amp;lt;theta&amp;gt;&lt;br /&gt;
				&amp;lt;angle value=&amp;quot;{$angle * 57.295779513082320876798154814105}&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/theta&amp;gt;&lt;br /&gt;
		&amp;lt;/radial_composite&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template name=&amp;quot;style-to-width&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;style&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:if test=&amp;quot;matches($style, '^\d')&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;param name=&amp;quot;width&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;real value=&amp;quot;{math:units_to_px($style)}&amp;quot;/&amp;gt;&lt;br /&gt;
			 &amp;lt;/param&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template name=&amp;quot;style-to-color&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;style&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:if test=&amp;quot;matches($style, '#')&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:analyze-string select=&amp;quot;concat($style, ';')&amp;quot; regex=&amp;quot;#([\da-f]{{2}})([\da-f]{{2}})([\da-f]{{2}});&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:matching-substring&amp;gt;&lt;br /&gt;
					&amp;lt;param name=&amp;quot;color&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;color&amp;gt;&lt;br /&gt;
							&amp;lt;r&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;math:hex_to_color(regex-group(1))&amp;quot;/&amp;gt;&amp;lt;/r&amp;gt;&lt;br /&gt;
							&amp;lt;g&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;math:hex_to_color(regex-group(2))&amp;quot;/&amp;gt;&amp;lt;/g&amp;gt;&lt;br /&gt;
							&amp;lt;b&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;math:hex_to_color(regex-group(3))&amp;quot;/&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
							&amp;lt;a&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;if (matches($style, 'fill-opacity:')) then math:power(xs:float(replace($style, '.*fill-opacity:([-\d.]+).*', '$1')), 1 div 2.2) else 1&amp;quot;/&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
						&amp;lt;/color&amp;gt;&lt;br /&gt;
					&amp;lt;/param&amp;gt;&lt;br /&gt;
				&amp;lt;/xsl:matching-substring&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:analyze-string&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:if test=&amp;quot;matches($style, 'rgb')&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:analyze-string select=&amp;quot;concat($style, ';')&amp;quot; regex=&amp;quot;rgb[(\s]+([-\d.]+)[,\s]+([-\d.]+)[,\s]+([-\d.]+)[\s)]+;&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:matching-substring&amp;gt;&lt;br /&gt;
					&amp;lt;param name=&amp;quot;color&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;color&amp;gt;&lt;br /&gt;
							&amp;lt;r&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;math:power(xs:float(regex-group(1)) div 255, 2.2)&amp;quot;/&amp;gt;&amp;lt;/r&amp;gt;&lt;br /&gt;
							&amp;lt;g&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;math:power(xs:float(regex-group(2)) div 255, 2.2)&amp;quot;/&amp;gt;&amp;lt;/g&amp;gt;&lt;br /&gt;
							&amp;lt;b&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;math:power(xs:float(regex-group(3)) div 255, 2.2)&amp;quot;/&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
							&amp;lt;a&amp;gt;1&amp;lt;/a&amp;gt;&lt;br /&gt;
						&amp;lt;/color&amp;gt;&lt;br /&gt;
					&amp;lt;/param&amp;gt;&lt;br /&gt;
				&amp;lt;/xsl:matching-substring&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:analyze-string&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:if test=&amp;quot;matches($style, 'url')&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;param name=&amp;quot;color&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;color&amp;gt;&amp;lt;r&amp;gt;0.5&amp;lt;/r&amp;gt;&amp;lt;g&amp;gt;0.5&amp;lt;/g&amp;gt;&amp;lt;b&amp;gt;0.5&amp;lt;/b&amp;gt;&amp;lt;a&amp;gt;0.5&amp;lt;/a&amp;gt;	&amp;lt;/color&amp;gt;&lt;br /&gt;
			&amp;lt;/param&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:function name=&amp;quot;math:resolve_transform&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;transform&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:variable name=&amp;quot;stripped&amp;quot; select=&amp;quot;replace(replace($transform, 'translate\(', 'X(1,0,0,1,'), 'matrix', 'X')&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:analyze-string select=&amp;quot;concat('X(1,0,0,1,0,0)', $stripped)&amp;quot; regex=&amp;quot;(.*)X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\)[^X]*X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\).*&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:non-matching-substring&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:sequence select=&amp;quot;(1,0,0,1,0,0)&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/xsl:non-matching-substring&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:matching-substring&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;a2&amp;quot; select=&amp;quot;xs:float(regex-group(8))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;b2&amp;quot; select=&amp;quot;xs:float(regex-group(9))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;c2&amp;quot; select=&amp;quot;xs:float(regex-group(10))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;d2&amp;quot; select=&amp;quot;xs:float(regex-group(11))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;e2&amp;quot; select=&amp;quot;xs:float(regex-group(12))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;f2&amp;quot; select=&amp;quot;xs:float(regex-group(13))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;a1&amp;quot; select=&amp;quot;xs:float(regex-group(2))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;b1&amp;quot; select=&amp;quot;xs:float(regex-group(3))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;c1&amp;quot; select=&amp;quot;xs:float(regex-group(4))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;d1&amp;quot; select=&amp;quot;xs:float(regex-group(5))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;e1&amp;quot; select=&amp;quot;xs:float(regex-group(6))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;f1&amp;quot; select=&amp;quot;xs:float(regex-group(7))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;p&amp;quot; select=&amp;quot;($a1*$a2+$c1*$b2,$b1*$a2+$d1*$b2,$a1*$c2+$c1*$d2,$b1*$c2+$d1*$d2,$a1*$e2+$c1*$f2+$e1,$b1*$e2+$d1*$f2+$f1)&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;remainder&amp;quot; select=&amp;quot;replace(regex-group(1), 'X\(1,0,0,1,0,0\)', '')&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:when test=&amp;quot;matches($remainder, 'X')&amp;quot;&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:variable name=&amp;quot;recursion&amp;quot; select=&amp;quot;concat($remainder, 'X(', $p[1], ',', $p[2], ',', $p[3], ',', $p[4], ',', $p[5], ',', $p[6], ')')&amp;quot;/&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:sequence select=&amp;quot;math:resolve_transform($recursion)&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:sequence select=&amp;quot;$p&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
					&amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
				&amp;lt;/xsl:matching-substring&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:analyze-string&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:function&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:function name=&amp;quot;math:hex_to_color&amp;quot; as=&amp;quot;xs:float&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;hex&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:value-of select=&amp;quot;math:power(xs:float(string-length(substring-before('0123456789abcdef', substring($hex,1,1))) * 16 + string-length(substring-before('0123456789abcdef', substring($hex,2,1)))) div 255, 2.2)&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:function&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:function name=&amp;quot;math:units_to_px&amp;quot; as=&amp;quot;xs:float&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;size&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:analyze-string select=&amp;quot;$size&amp;quot; regex=&amp;quot;^([-\d.]+)([a-z%]*)$&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:matching-substring&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:variable name=&amp;quot;factor&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:when test=&amp;quot;regex-group(2) = 'pt'&amp;quot;&amp;gt;1.25&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:when test=&amp;quot;regex-group(2) = 'em'&amp;quot;&amp;gt;16&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:when test=&amp;quot;regex-group(2) = 'mm'&amp;quot;&amp;gt;3.54&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:when test=&amp;quot;regex-group(2) = 'pc'&amp;quot;&amp;gt;15&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:when test=&amp;quot;regex-group(2) = 'cm'&amp;quot;&amp;gt;35.43&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:when test=&amp;quot;regex-group(2) = 'in'&amp;quot;&amp;gt;90&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:otherwise&amp;gt;1&amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
					&amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
				&amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:value-of select=&amp;quot;xs:float($factor) * xs:float(regex-group(1))&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:matching-substring&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:analyze-string&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:function&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Option 2 ==&lt;br /&gt;
&lt;br /&gt;
This is a C program by akagogo that uses libxml to convert SVG to Synfig format.&lt;br /&gt;
&lt;br /&gt;
http://none.carlos.googlepages.com/svgtosif.zip&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
Just make the usual '''./configure &amp;amp;&amp;amp; make &amp;amp;&amp;amp; sudo make install'''&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&lt;br /&gt;
The SVG files needs to be inside a folder called '''data'''. You have to run the command from the parent directory, but just using the name file as the command argument. So if:&lt;br /&gt;
&lt;br /&gt;
* You are in folder &amp;quot;/example&amp;quot; you have to create a folder called &amp;quot;/example/data&amp;quot; and put the file &amp;quot;file.svg&amp;quot; there.&lt;br /&gt;
* Now you execute '''svgtosif file.svg''' when you got &amp;quot;/example&amp;quot; as your current working directory.&lt;br /&gt;
&lt;br /&gt;
As you can see, this is really not to friendly. To quickly fix the problem, use the following bash script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 mkdir data&lt;br /&gt;
 cp &amp;quot;$1&amp;quot; data/&lt;br /&gt;
 /usr/local/bin/svgtosif &amp;quot;$1&amp;quot;&lt;br /&gt;
 NAME=`echo &amp;quot;$1&amp;quot; | cut -d &amp;quot;.&amp;quot; -f 1`&lt;br /&gt;
 cp &amp;quot;data/$NAME.sif&amp;quot; .&lt;br /&gt;
 rm data/*&lt;br /&gt;
 rmdir data&lt;br /&gt;
 echo &amp;quot;Conversion complete!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Put those lines in a file named &amp;quot;svg2sif&amp;quot; (name it as you want, but avoid using &amp;quot;svgtosif&amp;quot;) and put it in a PATH directory (suggest /usr/bin). Then:&lt;br /&gt;
 chmod +x /usr/bin/svg2sif &lt;br /&gt;
&lt;br /&gt;
Thats all. Now use:&lt;br /&gt;
 svg2sif &amp;lt;file.svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and you will get a .sif file in the same folder you are working in.&lt;/div&gt;</summary>
		<author><name>Boamaod</name></author>	</entry>

	<entry>
		<id>https://www.wiki.synfig.org/index.php?title=Doc:Svg2synfig&amp;diff=14264</id>
		<title>Doc:Svg2synfig</title>
		<link rel="alternate" type="text/html" href="https://www.wiki.synfig.org/index.php?title=Doc:Svg2synfig&amp;diff=14264"/>
				<updated>2011-07-17T22:15:12Z</updated>
		
		<summary type="html">&lt;p&gt;Boamaod: Quick update to present state of SVG import&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Page info --&amp;gt;&lt;br /&gt;
{{Title|SVG Import}}&lt;br /&gt;
{{Navigation|Category:Manual|Doc:ListImporter}}&lt;br /&gt;
{{Category|Manual}}&lt;br /&gt;
&amp;lt;!-- Page info end --&amp;gt;&lt;br /&gt;
==Standard way to import SVG==&lt;br /&gt;
&lt;br /&gt;
From latest Synfig versions (at least in 0.62.02) there is an option to import SVG from ''File -&amp;gt; Import'' menu. This seems to work better than the options described below. however there may be problems importing some SVG elements correctly. See [http://synfig.org/forums/viewtopic.php?f=12&amp;amp;t=2728 this topic] in forums for some hints.&lt;br /&gt;
&lt;br /&gt;
* First import may fail, try to import same file for two times.&lt;br /&gt;
* 0.62.02 is reported to work better in Ubuntu than version 0.63.00.&lt;br /&gt;
&lt;br /&gt;
== Option 1 ==&lt;br /&gt;
This uses an XSLT 2.0 stylesheet to transform SVG XML to Synfig XML.&lt;br /&gt;
=== Objective ===&lt;br /&gt;
Turn an SVG image into a Synfig file for import. First posted in the forums: http://synfig.org/forums/viewtopic.php?t=30&lt;br /&gt;
=== Prerequisites ===&lt;br /&gt;
# Make sure a Java runtime environment is installed.&lt;br /&gt;
# Get a recent version of the SAXON XSLT processor for Java from http://saxon.sourceforge.net/. Recommended version: Saxon-SA 9.0 (saxonsa9-0-0-2j.zip).&lt;br /&gt;
# Extract the SAXON package to a folder of your choice. As an example we're going to use d:\saxon in the following. The folder will contain several JAR files.&lt;br /&gt;
# Create the file d:\saxon\svg2synfig.xsl with the content provided at the bottom of this document ({{l|#svg2synfig.xsl}}).&lt;br /&gt;
==== Optional Prerequites for Windows ====&lt;br /&gt;
If you don't want to use the command line, create a batch file d:\saxon\svg2synfig.bat with this content:&lt;br /&gt;
 @java -jar %0\..\saxon9.jar -xsl:%0\..\svg2synfig.xsl %1 &amp;gt; %0\..\synfig.sif&lt;br /&gt;
 @pause&lt;br /&gt;
=== Transforming an SVG into a Synfig File ===&lt;br /&gt;
==== Windows Batch File ====&lt;br /&gt;
# Just drop the SVG file onto svg2synfig.bat.&lt;br /&gt;
==== Command line ====&lt;br /&gt;
# Change directory to d:\saxon.&lt;br /&gt;
# Enter the following command (replace your_input.svg by the path of the SVG file):&lt;br /&gt;
 java -jar saxon9.jar -xsl:svg2synfig.xsl your_input.svg &amp;gt; synfig.sif&lt;br /&gt;
=== Result ===&lt;br /&gt;
If the conversion has been successful, the result will be written to the file d:\saxon\synfig.sif.&lt;br /&gt;
You can open this file in Synfig.&lt;br /&gt;
=== Limitations ===&lt;br /&gt;
* Doesn't seem to work with SaxonB (FOSS version)&lt;br /&gt;
* Compressed SVG (svgz) must be uncompressed first.&lt;br /&gt;
* Only SVG path objects are supported. Try converting all objects to paths.&lt;br /&gt;
* Only a subset of path elements is supported. Try to modify all path nodes to have split tangents, and all path segments to be curves.&lt;br /&gt;
* Sophisticated coloring (e. g. gradients) is not supported.&lt;br /&gt;
* Only basic transformations are supported.&lt;br /&gt;
* Fill and outline on the same object is not supported.&lt;br /&gt;
=== svg2synfig.xsl ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;2.0&amp;quot; exclude-result-prefixes=&amp;quot;#all&amp;quot;&lt;br /&gt;
		xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
		xmlns:svg=&amp;quot;http://www.w3.org/2000/svg&amp;quot;&lt;br /&gt;
		xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
		xmlns:math=&amp;quot;http://exslt.org/math&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;svg:svg&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;width&amp;quot; select=&amp;quot;math:units_to_px(@width)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;height&amp;quot; select=&amp;quot;math:units_to_px(@height)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;has_view_box&amp;quot; select=&amp;quot;matches(@viewBox, '(\d+\s){3}\d+')&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;canvas version=&amp;quot;0.2&amp;quot; id=&amp;quot;{@id}&amp;quot;&lt;br /&gt;
				width=&amp;quot;{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$3') else $width}&amp;quot;&lt;br /&gt;
				height=&amp;quot;{if ($has_view_box) then replace(@viewBox, '(\d+)\s(\d+)\s(\d+)\s(\d+)', '$4') else $height}&amp;quot;&lt;br /&gt;
				view-box=&amp;quot;{if ($has_view_box) then @viewBox else concat('0 0 ', $width, ' ', $height)}&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:apply-templates select=&amp;quot;svg:g|svg:svg|svg:path&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;/canvas&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;svg:g&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;layer type=&amp;quot;PasteCanvas&amp;quot; active=&amp;quot;true&amp;quot; version=&amp;quot;0.1&amp;quot; desc=&amp;quot;{@id}&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;param name=&amp;quot;canvas&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;canvas&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:apply-templates/&amp;gt;&lt;br /&gt;
				&amp;lt;/canvas&amp;gt;&lt;br /&gt;
			&amp;lt;/param&amp;gt;&lt;br /&gt;
		&amp;lt;/layer&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;svg:path&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;style&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:for-each select=&amp;quot;ancestor-or-self::*&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:sort select=&amp;quot;position()&amp;quot; data-type=&amp;quot;number&amp;quot; order=&amp;quot;descending&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:value-of select=&amp;quot;concat(@style, ';fill:', @fill, ';stroke:', @stroke, ';stroke-width:', @stroke-width, ';')&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;self&amp;quot; select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;is_fill&amp;quot; select=&amp;quot;not(matches(replace($style, 'fill:[^n;][^o].*', ''), 'fill:none'))&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:analyze-string select=&amp;quot;@d&amp;quot; regex=&amp;quot;m[^z]+(z|$)&amp;quot; flags=&amp;quot;i&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:matching-substring&amp;gt;&lt;br /&gt;
				&amp;lt;layer type=&amp;quot;{if ($is_fill) then 'region' else 'outline'}&amp;quot; version=&amp;quot;0.1&amp;quot; desc=&amp;quot;{$self/@id}&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:call-template name=&amp;quot;style-to-color&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:with-param name=&amp;quot;style&amp;quot; select=&amp;quot;replace(replace($style, ':none.*', ''), if ($is_fill) then '.*fill:([^;]+).*' else '.*stroke:([^;]+).*', '$1')&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:if test=&amp;quot;not ($is_fill)&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:call-template name=&amp;quot;style-to-width&amp;quot;&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:with-param name=&amp;quot;style&amp;quot; select=&amp;quot;replace($style, '.*stroke-width:([^;]+).*', '$1')&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;
					&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
					&amp;lt;param name=&amp;quot;bline&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;bline type=&amp;quot;bline_point&amp;quot; loop=&amp;quot;{matches(., 'z', 'i')}&amp;quot;&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:call-template name=&amp;quot;path-to-bline&amp;quot;&amp;gt;&lt;br /&gt;
								&amp;lt;xsl:with-param name=&amp;quot;path&amp;quot; select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
								&amp;lt;xsl:with-param name=&amp;quot;node&amp;quot; select=&amp;quot;$self&amp;quot; tunnel=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
							&amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;
						&amp;lt;/bline&amp;gt;&lt;br /&gt;
					&amp;lt;/param&amp;gt;&lt;br /&gt;
				&amp;lt;/layer&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:matching-substring&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:analyze-string&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template name=&amp;quot;path-to-bline&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;path&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;stripped&amp;quot; select=&amp;quot;replace(replace(translate($path, ',', ' '), '(\d)-', '$1 -'), '\s*([a-z]+)\s*', '$1', 'i')&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;closed&amp;quot; select=&amp;quot;if (matches($stripped, 'z', 'i')) then $stripped else replace($stripped, 'm([-\d.]+\s[-\d.]+).*$', '$0l$1z', 'i')&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;tmp&amp;quot; select=&amp;quot;replace($closed, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;curve&amp;quot; select=&amp;quot;replace($tmp, '([-\d.]+\s[-\d.]+)l([-\d.]+\s[-\d.]+)', '$1c$1 $2 $2', 'i')&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:analyze-string select=&amp;quot;$curve&amp;quot; regex=&amp;quot;\s([-\d.]+\s[-\d.]+)\s[-\d.]+\s[-\d.]+z&amp;quot; flags=&amp;quot;i&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:matching-substring&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:analyze-string select=&amp;quot;concat(regex-group(1), $curve)&amp;quot; regex=&amp;quot;([-\d.]+)\s([-\d.]+)[m\s]([-\d.]+)\s([-\d.]+)c([-\d.]+)\s([-\d.]+)&amp;quot; flags=&amp;quot;i&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:matching-substring&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:call-template name=&amp;quot;node-to-bline-point&amp;quot;&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:with-param name=&amp;quot;c1_x&amp;quot; select=&amp;quot;regex-group(1)&amp;quot;/&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:with-param name=&amp;quot;c1_y&amp;quot; select=&amp;quot;regex-group(2)&amp;quot;/&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:with-param name=&amp;quot;x&amp;quot; select=&amp;quot;regex-group(3)&amp;quot;/&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:with-param name=&amp;quot;y&amp;quot; select=&amp;quot;regex-group(4)&amp;quot;/&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:with-param name=&amp;quot;c2_x&amp;quot; select=&amp;quot;regex-group(5)&amp;quot;/&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:with-param name=&amp;quot;c2_y&amp;quot; select=&amp;quot;regex-group(6)&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;
					&amp;lt;/xsl:matching-substring&amp;gt;&lt;br /&gt;
				&amp;lt;/xsl:analyze-string&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:matching-substring&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:analyze-string&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template name=&amp;quot;node-to-bline-point&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;x&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;y&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;c1_x&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;c1_y&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;c2_x&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;c2_y&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;node&amp;quot; tunnel=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;transform&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:for-each select=&amp;quot;$node/ancestor-or-self::*/@transform&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;t&amp;quot; select=&amp;quot;math:resolve_transform($transform)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;transformed_x&amp;quot; select=&amp;quot;$t[5] + $t[1] * xs:float($x) + $t[3] * xs:float($y)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;transformed_y&amp;quot; select=&amp;quot;$t[6] + $t[2] * xs:float($x) + $t[4] * xs:float($y)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;transformed_c1_x&amp;quot; select=&amp;quot;$t[5] + $t[1] * xs:float($c1_x) + $t[3] * xs:float($c1_y)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;transformed_c1_y&amp;quot; select=&amp;quot;$t[6]+ $t[2] * xs:float($c1_x) + $t[4] * xs:float($c1_y)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;transformed_c2_x&amp;quot; select=&amp;quot;$t[5] + $t[1] * xs:float($c2_x) + $t[3] * xs:float($c2_y)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;transformed_c2_y&amp;quot; select=&amp;quot;$t[6]+ $t[2] * xs:float($c2_x) + $t[4] * xs:float($c2_y)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;entry&amp;gt;&lt;br /&gt;
			&amp;lt;composite type=&amp;quot;bline_point&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;point&amp;gt;&lt;br /&gt;
					&amp;lt;vector&amp;gt;&lt;br /&gt;
						&amp;lt;x&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;$transformed_x&amp;quot;/&amp;gt;&amp;lt;/x&amp;gt;&lt;br /&gt;
						&amp;lt;y&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;$transformed_y&amp;quot;/&amp;gt;&amp;lt;/y&amp;gt;&lt;br /&gt;
					&amp;lt;/vector&amp;gt;&lt;br /&gt;
				&amp;lt;/point&amp;gt;&lt;br /&gt;
				&amp;lt;width&amp;gt;&lt;br /&gt;
					&amp;lt;real value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/width&amp;gt;&lt;br /&gt;
				&amp;lt;origin&amp;gt;&lt;br /&gt;
					&amp;lt;real value=&amp;quot;0.5&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/origin&amp;gt;&lt;br /&gt;
				&amp;lt;split&amp;gt;&lt;br /&gt;
					&amp;lt;bool value=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/split&amp;gt;&lt;br /&gt;
				&amp;lt;t1&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:call-template name=&amp;quot;vector-pair-to-radial&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:with-param name=&amp;quot;origin-x&amp;quot; select=&amp;quot;$transformed_c1_x&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:with-param name=&amp;quot;origin-y&amp;quot; select=&amp;quot;$transformed_c1_y&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:with-param name=&amp;quot;x&amp;quot; select=&amp;quot;$transformed_x&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:with-param name=&amp;quot;y&amp;quot; select=&amp;quot;$transformed_y&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;
				&amp;lt;/t1&amp;gt;&lt;br /&gt;
				&amp;lt;t2&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:call-template name=&amp;quot;vector-pair-to-radial&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:with-param name=&amp;quot;origin-x&amp;quot; select=&amp;quot;$transformed_x&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:with-param name=&amp;quot;origin-y&amp;quot; select=&amp;quot;$transformed_y&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:with-param name=&amp;quot;x&amp;quot; select=&amp;quot;$transformed_c2_x&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:with-param name=&amp;quot;y&amp;quot; select=&amp;quot;$transformed_c2_y&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;
				&amp;lt;/t2&amp;gt;&lt;br /&gt;
			&amp;lt;/composite&amp;gt;&lt;br /&gt;
		&amp;lt;/entry&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template name=&amp;quot;vector-pair-to-radial&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;x&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;y&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;origin-x&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;origin-y&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;dx&amp;quot; select=&amp;quot;xs:float($x) - xs:float($origin-x)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;dy&amp;quot; select=&amp;quot;xs:float($y) - xs:float($origin-y)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;d&amp;quot; select=&amp;quot;math:sqrt($dx * $dx + $dy * $dy)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:variable name=&amp;quot;angle&amp;quot; select=&amp;quot;math:atan2($dy, $dx)&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;radial_composite type=&amp;quot;vector&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;radius&amp;gt;&lt;br /&gt;
				&amp;lt;real value=&amp;quot;{$d * 3}&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/radius&amp;gt;&lt;br /&gt;
			&amp;lt;theta&amp;gt;&lt;br /&gt;
				&amp;lt;angle value=&amp;quot;{$angle * 57.295779513082320876798154814105}&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/theta&amp;gt;&lt;br /&gt;
		&amp;lt;/radial_composite&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template name=&amp;quot;style-to-width&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;style&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:if test=&amp;quot;matches($style, '^\d')&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;param name=&amp;quot;width&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;real value=&amp;quot;{math:units_to_px($style)}&amp;quot;/&amp;gt;&lt;br /&gt;
			 &amp;lt;/param&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template name=&amp;quot;style-to-color&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;style&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:if test=&amp;quot;matches($style, '#')&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:analyze-string select=&amp;quot;concat($style, ';')&amp;quot; regex=&amp;quot;#([\da-f]{{2}})([\da-f]{{2}})([\da-f]{{2}});&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:matching-substring&amp;gt;&lt;br /&gt;
					&amp;lt;param name=&amp;quot;color&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;color&amp;gt;&lt;br /&gt;
							&amp;lt;r&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;math:hex_to_color(regex-group(1))&amp;quot;/&amp;gt;&amp;lt;/r&amp;gt;&lt;br /&gt;
							&amp;lt;g&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;math:hex_to_color(regex-group(2))&amp;quot;/&amp;gt;&amp;lt;/g&amp;gt;&lt;br /&gt;
							&amp;lt;b&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;math:hex_to_color(regex-group(3))&amp;quot;/&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
							&amp;lt;a&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;if (matches($style, 'fill-opacity:')) then math:power(xs:float(replace($style, '.*fill-opacity:([-\d.]+).*', '$1')), 1 div 2.2) else 1&amp;quot;/&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
						&amp;lt;/color&amp;gt;&lt;br /&gt;
					&amp;lt;/param&amp;gt;&lt;br /&gt;
				&amp;lt;/xsl:matching-substring&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:analyze-string&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:if test=&amp;quot;matches($style, 'rgb')&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:analyze-string select=&amp;quot;concat($style, ';')&amp;quot; regex=&amp;quot;rgb[(\s]+([-\d.]+)[,\s]+([-\d.]+)[,\s]+([-\d.]+)[\s)]+;&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:matching-substring&amp;gt;&lt;br /&gt;
					&amp;lt;param name=&amp;quot;color&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;color&amp;gt;&lt;br /&gt;
							&amp;lt;r&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;math:power(xs:float(regex-group(1)) div 255, 2.2)&amp;quot;/&amp;gt;&amp;lt;/r&amp;gt;&lt;br /&gt;
							&amp;lt;g&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;math:power(xs:float(regex-group(2)) div 255, 2.2)&amp;quot;/&amp;gt;&amp;lt;/g&amp;gt;&lt;br /&gt;
							&amp;lt;b&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;math:power(xs:float(regex-group(3)) div 255, 2.2)&amp;quot;/&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
							&amp;lt;a&amp;gt;1&amp;lt;/a&amp;gt;&lt;br /&gt;
						&amp;lt;/color&amp;gt;&lt;br /&gt;
					&amp;lt;/param&amp;gt;&lt;br /&gt;
				&amp;lt;/xsl:matching-substring&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:analyze-string&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:if test=&amp;quot;matches($style, 'url')&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;param name=&amp;quot;color&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;color&amp;gt;&amp;lt;r&amp;gt;0.5&amp;lt;/r&amp;gt;&amp;lt;g&amp;gt;0.5&amp;lt;/g&amp;gt;&amp;lt;b&amp;gt;0.5&amp;lt;/b&amp;gt;&amp;lt;a&amp;gt;0.5&amp;lt;/a&amp;gt;	&amp;lt;/color&amp;gt;&lt;br /&gt;
			&amp;lt;/param&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:function name=&amp;quot;math:resolve_transform&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;transform&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:variable name=&amp;quot;stripped&amp;quot; select=&amp;quot;replace(replace($transform, 'translate\(', 'X(1,0,0,1,'), 'matrix', 'X')&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:analyze-string select=&amp;quot;concat('X(1,0,0,1,0,0)', $stripped)&amp;quot; regex=&amp;quot;(.*)X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\)[^X]*X\((-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+),(-?[\d.]+)\).*&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:non-matching-substring&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:sequence select=&amp;quot;(1,0,0,1,0,0)&amp;quot;/&amp;gt;&lt;br /&gt;
				&amp;lt;/xsl:non-matching-substring&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:matching-substring&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;a2&amp;quot; select=&amp;quot;xs:float(regex-group(8))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;b2&amp;quot; select=&amp;quot;xs:float(regex-group(9))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;c2&amp;quot; select=&amp;quot;xs:float(regex-group(10))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;d2&amp;quot; select=&amp;quot;xs:float(regex-group(11))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;e2&amp;quot; select=&amp;quot;xs:float(regex-group(12))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;f2&amp;quot; select=&amp;quot;xs:float(regex-group(13))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;a1&amp;quot; select=&amp;quot;xs:float(regex-group(2))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;b1&amp;quot; select=&amp;quot;xs:float(regex-group(3))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;c1&amp;quot; select=&amp;quot;xs:float(regex-group(4))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;d1&amp;quot; select=&amp;quot;xs:float(regex-group(5))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;e1&amp;quot; select=&amp;quot;xs:float(regex-group(6))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;f1&amp;quot; select=&amp;quot;xs:float(regex-group(7))&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;p&amp;quot; select=&amp;quot;($a1*$a2+$c1*$b2,$b1*$a2+$d1*$b2,$a1*$c2+$c1*$d2,$b1*$c2+$d1*$d2,$a1*$e2+$c1*$f2+$e1,$b1*$e2+$d1*$f2+$f1)&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:variable name=&amp;quot;remainder&amp;quot; select=&amp;quot;replace(regex-group(1), 'X\(1,0,0,1,0,0\)', '')&amp;quot;/&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:when test=&amp;quot;matches($remainder, 'X')&amp;quot;&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:variable name=&amp;quot;recursion&amp;quot; select=&amp;quot;concat($remainder, 'X(', $p[1], ',', $p[2], ',', $p[3], ',', $p[4], ',', $p[5], ',', $p[6], ')')&amp;quot;/&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:sequence select=&amp;quot;math:resolve_transform($recursion)&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:sequence select=&amp;quot;$p&amp;quot;/&amp;gt;&lt;br /&gt;
						&amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
					&amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
				&amp;lt;/xsl:matching-substring&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:analyze-string&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:function&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:function name=&amp;quot;math:hex_to_color&amp;quot; as=&amp;quot;xs:float&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;hex&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:value-of select=&amp;quot;math:power(xs:float(string-length(substring-before('0123456789abcdef', substring($hex,1,1))) * 16 + string-length(substring-before('0123456789abcdef', substring($hex,2,1)))) div 255, 2.2)&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:function&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:function name=&amp;quot;math:units_to_px&amp;quot; as=&amp;quot;xs:float&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;size&amp;quot;/&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:analyze-string select=&amp;quot;$size&amp;quot; regex=&amp;quot;^([-\d.]+)([a-z%]*)$&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:matching-substring&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:variable name=&amp;quot;factor&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:when test=&amp;quot;regex-group(2) = 'pt'&amp;quot;&amp;gt;1.25&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:when test=&amp;quot;regex-group(2) = 'em'&amp;quot;&amp;gt;16&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:when test=&amp;quot;regex-group(2) = 'mm'&amp;quot;&amp;gt;3.54&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:when test=&amp;quot;regex-group(2) = 'pc'&amp;quot;&amp;gt;15&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:when test=&amp;quot;regex-group(2) = 'cm'&amp;quot;&amp;gt;35.43&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:when test=&amp;quot;regex-group(2) = 'in'&amp;quot;&amp;gt;90&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:otherwise&amp;gt;1&amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
					&amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
				&amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:value-of select=&amp;quot;xs:float($factor) * xs:float(regex-group(1))&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:matching-substring&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:analyze-string&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:function&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Option 2 ==&lt;br /&gt;
&lt;br /&gt;
This is a C program by akagogo that uses libxml to convert SVG to Synfig format.&lt;br /&gt;
&lt;br /&gt;
http://none.carlos.googlepages.com/svgtosif.zip&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
Just make the usual '''./configure &amp;amp;&amp;amp; make &amp;amp;&amp;amp; sudo make install'''&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&lt;br /&gt;
The SVG files needs to be inside a folder called '''data'''. You have to run the command from the parent directory, but just using the name file as the command argument. So if:&lt;br /&gt;
&lt;br /&gt;
* You are in folder &amp;quot;/example&amp;quot; you have to create a folder called &amp;quot;/example/data&amp;quot; and put the file &amp;quot;file.svg&amp;quot; there.&lt;br /&gt;
* Now you execute '''svgtosif file.svg''' when you got &amp;quot;/example&amp;quot; as your current working directory.&lt;br /&gt;
&lt;br /&gt;
As you can see, this is really not to friendly. To quickly fix the problem, use the following bash script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 mkdir data&lt;br /&gt;
 cp &amp;quot;$1&amp;quot; data/&lt;br /&gt;
 /usr/local/bin/svgtosif &amp;quot;$1&amp;quot;&lt;br /&gt;
 NAME=`echo &amp;quot;$1&amp;quot; | cut -d &amp;quot;.&amp;quot; -f 1`&lt;br /&gt;
 cp &amp;quot;data/$NAME.sif&amp;quot; .&lt;br /&gt;
 rm data/*&lt;br /&gt;
 rmdir data&lt;br /&gt;
 echo &amp;quot;Conversion complete!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Put those lines in a file named &amp;quot;svg2sif&amp;quot; (name it as you want, but avoid using &amp;quot;svgtosif&amp;quot;) and put it in a PATH directory (suggest /usr/bin). Then:&lt;br /&gt;
 chmod +x /usr/bin/svg2sif &lt;br /&gt;
&lt;br /&gt;
Thats all. Now use:&lt;br /&gt;
 svg2sif &amp;lt;file.svg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and you will get a .sif file in the same folder you are working in.&lt;/div&gt;</summary>
		<author><name>Boamaod</name></author>	</entry>

	</feed>