1cdf0e10cSrcweir<?xml version="1.0" encoding="UTF-8"?> 2*1e519d8dSAndrew Rist<!--*********************************************************** 3*1e519d8dSAndrew Rist * 4*1e519d8dSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 5*1e519d8dSAndrew Rist * or more contributor license agreements. See the NOTICE file 6*1e519d8dSAndrew Rist * distributed with this work for additional information 7*1e519d8dSAndrew Rist * regarding copyright ownership. The ASF licenses this file 8*1e519d8dSAndrew Rist * to you under the Apache License, Version 2.0 (the 9*1e519d8dSAndrew Rist * "License"); you may not use this file except in compliance 10*1e519d8dSAndrew Rist * with the License. You may obtain a copy of the License at 11*1e519d8dSAndrew Rist * 12*1e519d8dSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 13*1e519d8dSAndrew Rist * 14*1e519d8dSAndrew Rist * Unless required by applicable law or agreed to in writing, 15*1e519d8dSAndrew Rist * software distributed under the License is distributed on an 16*1e519d8dSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17*1e519d8dSAndrew Rist * KIND, either express or implied. See the License for the 18*1e519d8dSAndrew Rist * specific language governing permissions and limitations 19*1e519d8dSAndrew Rist * under the License. 20*1e519d8dSAndrew Rist * 21*1e519d8dSAndrew Rist ***********************************************************--> 22cdf0e10cSrcweir 23cdf0e10cSrcweir 24cdf0e10cSrcweir<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" exclude-result-prefixes="office table style text draw svg dc config xlink meta oooc dom ooo chart math dr3d form script ooow draw"> 25cdf0e10cSrcweir <xsl:include href="../../common/math.xsl"/> 26cdf0e10cSrcweir <xsl:template name="test-arc"> 27cdf0e10cSrcweir <xsl:call-template name="svg-arc2vml-arc"> 28cdf0e10cSrcweir <!-- M 125,75 a100,50 0 ?,? 100,50 --> 29cdf0e10cSrcweir <xsl:with-param name="x0" select="125"/> 30cdf0e10cSrcweir <xsl:with-param name="y0" select="75"/> 31cdf0e10cSrcweir <xsl:with-param name="rx" select="100"/> 32cdf0e10cSrcweir <xsl:with-param name="ry" select="50"/> 33cdf0e10cSrcweir <xsl:with-param name="x-axis-rotation" select="0"/> 34cdf0e10cSrcweir <xsl:with-param name="large-arc-flag" select="0"/> 35cdf0e10cSrcweir <xsl:with-param name="sweep-flag" select="0"/> 36cdf0e10cSrcweir <xsl:with-param name="x" select="225"/> 37cdf0e10cSrcweir <xsl:with-param name="y" select="125"/> 38cdf0e10cSrcweir </xsl:call-template> 39cdf0e10cSrcweir </xsl:template> 40cdf0e10cSrcweir <xsl:template name="test"> 41cdf0e10cSrcweir <xsl:call-template name="svgpath2vmlpath"> 42cdf0e10cSrcweir <xsl:with-param name="svg-path" select="'M 36.0 162.0 C 38.0 168.0 39.0-172.0 40.0 176.0 S 42.0 184.0 144.0 188.0'"/> 43cdf0e10cSrcweir </xsl:call-template> 44cdf0e10cSrcweir </xsl:template> 45cdf0e10cSrcweir <xsl:template name="svgpath2vmlpath"> 46cdf0e10cSrcweir <xsl:param name="svg-path"/> 47cdf0e10cSrcweir <xsl:param name="vml-path" select="''"/> 48cdf0e10cSrcweir <xsl:param name="position" select="1"/> 49cdf0e10cSrcweir <xsl:param name="last-command" select="'M'"/> 50cdf0e10cSrcweir <xsl:param name="current-x" select="'0'"/> 51cdf0e10cSrcweir <xsl:param name="current-y" select="'0'"/> 52cdf0e10cSrcweir <xsl:variable name="command-and-newpos"> 53cdf0e10cSrcweir <xsl:call-template name="get-path-command"> 54cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 55cdf0e10cSrcweir <xsl:with-param name="position" select="$position"/> 56cdf0e10cSrcweir <xsl:with-param name="last-command" select="$last-command"/> 57cdf0e10cSrcweir </xsl:call-template> 58cdf0e10cSrcweir </xsl:variable> 59cdf0e10cSrcweir <xsl:variable name="command" select="substring-before($command-and-newpos , ':')"/> 60cdf0e10cSrcweir <xsl:variable name="newpos" select="substring-after($command-and-newpos , ':')"/> 61cdf0e10cSrcweir <xsl:choose> 62cdf0e10cSrcweir <xsl:when test="$command = 'M' "> 63cdf0e10cSrcweir <!-- absolute moveto --> 64cdf0e10cSrcweir <xsl:variable name="new-vml-path" select="concat($vml-path ,' m ' ) "/> 65cdf0e10cSrcweir <xsl:variable name="num-and-pos"> 66cdf0e10cSrcweir <xsl:call-template name="get-number-after"> 67cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 68cdf0e10cSrcweir <xsl:with-param name="position" select="$newpos"/> 69cdf0e10cSrcweir <xsl:with-param name="count" select="2"/> 70cdf0e10cSrcweir </xsl:call-template> 71cdf0e10cSrcweir </xsl:variable> 72cdf0e10cSrcweir <xsl:call-template name="svgpath2vmlpath"> 73cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 74cdf0e10cSrcweir <xsl:with-param name="vml-path" select=" concat($new-vml-path , substring-before( $num-and-pos , ':') , ' ') "/> 75cdf0e10cSrcweir <xsl:with-param name="position" select=" substring-after( $num-and-pos , ':') "/> 76cdf0e10cSrcweir <xsl:with-param name="last-command" select="'L'"/> 77cdf0e10cSrcweir <xsl:with-param name="current-x" select=" substring-before( substring-before( $num-and-pos , ':') , ' ') "/> 78cdf0e10cSrcweir <xsl:with-param name="current-y" select=" substring-after( substring-before( $num-and-pos , ':') , ' ') "/> 79cdf0e10cSrcweir </xsl:call-template> 80cdf0e10cSrcweir </xsl:when> 81cdf0e10cSrcweir <xsl:when test="$command = 'm' "> 82cdf0e10cSrcweir <!-- relative moveto --> 83cdf0e10cSrcweir <xsl:variable name="new-vml-path" select="concat($vml-path ,' t ' ) "/> 84cdf0e10cSrcweir <xsl:variable name="num-and-pos"> 85cdf0e10cSrcweir <xsl:call-template name="get-number-after"> 86cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 87cdf0e10cSrcweir <xsl:with-param name="position" select="$newpos"/> 88cdf0e10cSrcweir <xsl:with-param name="count" select="2"/> 89cdf0e10cSrcweir </xsl:call-template> 90cdf0e10cSrcweir </xsl:variable> 91cdf0e10cSrcweir <xsl:call-template name="svgpath2vmlpath"> 92cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 93cdf0e10cSrcweir <xsl:with-param name="vml-path" select=" concat($new-vml-path , substring-before( $num-and-pos , ':') , ' ') "/> 94cdf0e10cSrcweir <xsl:with-param name="position" select=" substring-after( $num-and-pos , ':') "/> 95cdf0e10cSrcweir <xsl:with-param name="last-command" select="'l'"/> 96cdf0e10cSrcweir <xsl:with-param name="current-x" select=" substring-before( substring-before( $num-and-pos , ':') , ' ') + $current-x"/> 97cdf0e10cSrcweir <xsl:with-param name="current-y" select=" substring-after( substring-before( $num-and-pos , ':') , ' ') + $current-y "/> 98cdf0e10cSrcweir </xsl:call-template> 99cdf0e10cSrcweir </xsl:when> 100cdf0e10cSrcweir <xsl:when test="$command = 'L' "> 101cdf0e10cSrcweir <!-- absolute lineto --> 102cdf0e10cSrcweir <xsl:variable name="new-vml-path" select="concat($vml-path ,' l ' ) "/> 103cdf0e10cSrcweir <xsl:variable name="num-and-pos"> 104cdf0e10cSrcweir <xsl:call-template name="get-number-after"> 105cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 106cdf0e10cSrcweir <xsl:with-param name="position" select="$newpos"/> 107cdf0e10cSrcweir <xsl:with-param name="count" select="2"/> 108cdf0e10cSrcweir </xsl:call-template> 109cdf0e10cSrcweir </xsl:variable> 110cdf0e10cSrcweir <xsl:call-template name="svgpath2vmlpath"> 111cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 112cdf0e10cSrcweir <xsl:with-param name="vml-path" select=" concat($new-vml-path , substring-before( $num-and-pos , ':') , ' ') "/> 113cdf0e10cSrcweir <xsl:with-param name="position" select=" substring-after( $num-and-pos , ':') "/> 114cdf0e10cSrcweir <xsl:with-param name="last-command" select="$command"/> 115cdf0e10cSrcweir <xsl:with-param name="current-x" select=" substring-before( substring-before( $num-and-pos , ':') , ' ') "/> 116cdf0e10cSrcweir <xsl:with-param name="current-y" select=" substring-after( substring-before( $num-and-pos , ':') , ' ') "/> 117cdf0e10cSrcweir </xsl:call-template> 118cdf0e10cSrcweir </xsl:when> 119cdf0e10cSrcweir <xsl:when test="$command = 'l' "> 120cdf0e10cSrcweir <!-- relative lineto --> 121cdf0e10cSrcweir <xsl:variable name="new-vml-path" select="concat($vml-path ,' r ' ) "/> 122cdf0e10cSrcweir <xsl:variable name="num-and-pos"> 123cdf0e10cSrcweir <xsl:call-template name="get-number-after"> 124cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 125cdf0e10cSrcweir <xsl:with-param name="position" select="$newpos"/> 126cdf0e10cSrcweir <xsl:with-param name="count" select="2"/> 127cdf0e10cSrcweir </xsl:call-template> 128cdf0e10cSrcweir </xsl:variable> 129cdf0e10cSrcweir <xsl:call-template name="svgpath2vmlpath"> 130cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 131cdf0e10cSrcweir <xsl:with-param name="vml-path" select=" concat($new-vml-path , substring-before( $num-and-pos , ':') , ' ') "/> 132cdf0e10cSrcweir <xsl:with-param name="position" select=" substring-after( $num-and-pos , ':') "/> 133cdf0e10cSrcweir <xsl:with-param name="last-command" select="$command"/> 134cdf0e10cSrcweir <xsl:with-param name="current-x" select=" substring-before( substring-before( $num-and-pos , ':') , ' ') + $current-x "/> 135cdf0e10cSrcweir <xsl:with-param name="current-y" select=" substring-after( substring-before( $num-and-pos , ':') , ' ') + $current-y "/> 136cdf0e10cSrcweir </xsl:call-template> 137cdf0e10cSrcweir </xsl:when> 138cdf0e10cSrcweir <xsl:when test="$command = 'H' "> 139cdf0e10cSrcweir <!-- absolute horizontal lineto --> 140cdf0e10cSrcweir <xsl:variable name="new-vml-path" select="concat($vml-path ,' l ' ) "/> 141cdf0e10cSrcweir <xsl:variable name="num-and-pos"> 142cdf0e10cSrcweir <xsl:call-template name="get-number-after"> 143cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 144cdf0e10cSrcweir <xsl:with-param name="position" select="$newpos"/> 145cdf0e10cSrcweir <xsl:with-param name="count" select="1"/> 146cdf0e10cSrcweir </xsl:call-template> 147cdf0e10cSrcweir </xsl:variable> 148cdf0e10cSrcweir <xsl:call-template name="svgpath2vmlpath"> 149cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 150cdf0e10cSrcweir <xsl:with-param name="vml-path" select=" concat($new-vml-path , substring-before( $num-and-pos , ':') , ' ' , $current-y , ' ') "/> 151cdf0e10cSrcweir <xsl:with-param name="position" select=" substring-after( $num-and-pos , ':') "/> 152cdf0e10cSrcweir <xsl:with-param name="last-command" select="$command"/> 153cdf0e10cSrcweir <xsl:with-param name="current-x" select=" substring-before( $num-and-pos , ':') "/> 154cdf0e10cSrcweir <xsl:with-param name="current-y" select=" $current-y"/> 155cdf0e10cSrcweir </xsl:call-template> 156cdf0e10cSrcweir </xsl:when> 157cdf0e10cSrcweir <xsl:when test="$command = 'h' "> 158cdf0e10cSrcweir <!-- relative horizontal lineto --> 159cdf0e10cSrcweir <xsl:variable name="new-vml-path" select="concat($vml-path ,' l ' ) "/> 160cdf0e10cSrcweir <xsl:variable name="num-and-pos"> 161cdf0e10cSrcweir <xsl:call-template name="get-number-after"> 162cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 163cdf0e10cSrcweir <xsl:with-param name="position" select="$newpos"/> 164cdf0e10cSrcweir <xsl:with-param name="count" select="1"/> 165cdf0e10cSrcweir </xsl:call-template> 166cdf0e10cSrcweir </xsl:variable> 167cdf0e10cSrcweir <xsl:call-template name="svgpath2vmlpath"> 168cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 169cdf0e10cSrcweir <xsl:with-param name="vml-path" select=" concat($new-vml-path , substring-before( $num-and-pos , ':') + $current-x , ' ' , $current-y , ' ') "/> 170cdf0e10cSrcweir <xsl:with-param name="position" select=" substring-after( $num-and-pos , ':') "/> 171cdf0e10cSrcweir <xsl:with-param name="last-command" select="$command"/> 172cdf0e10cSrcweir <xsl:with-param name="current-x" select=" substring-before( $num-and-pos , ':') + $current-x"/> 173cdf0e10cSrcweir <xsl:with-param name="current-y" select=" $current-y"/> 174cdf0e10cSrcweir </xsl:call-template> 175cdf0e10cSrcweir </xsl:when> 176cdf0e10cSrcweir <xsl:when test="$command = 'V' "> 177cdf0e10cSrcweir <!-- absolute vertical lineto --> 178cdf0e10cSrcweir <xsl:variable name="new-vml-path" select="concat($vml-path ,' l ' ) "/> 179cdf0e10cSrcweir <xsl:variable name="num-and-pos"> 180cdf0e10cSrcweir <xsl:call-template name="get-number-after"> 181cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 182cdf0e10cSrcweir <xsl:with-param name="position" select="$newpos"/> 183cdf0e10cSrcweir <xsl:with-param name="count" select="1"/> 184cdf0e10cSrcweir </xsl:call-template> 185cdf0e10cSrcweir </xsl:variable> 186cdf0e10cSrcweir <xsl:call-template name="svgpath2vmlpath"> 187cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 188cdf0e10cSrcweir <xsl:with-param name="vml-path" select=" concat($new-vml-path , $current-x , ' ' , substring-before( $num-and-pos , ':') , ' ' ) "/> 189cdf0e10cSrcweir <xsl:with-param name="position" select=" substring-after( $num-and-pos , ':') "/> 190cdf0e10cSrcweir <xsl:with-param name="last-command" select="$command"/> 191cdf0e10cSrcweir <xsl:with-param name="current-x" select=" $current-x"/> 192cdf0e10cSrcweir <xsl:with-param name="current-y" select=" substring-before( $num-and-pos , ':') "/> 193cdf0e10cSrcweir </xsl:call-template> 194cdf0e10cSrcweir </xsl:when> 195cdf0e10cSrcweir <xsl:when test="$command = 'v' "> 196cdf0e10cSrcweir <!-- relative horizontal lineto --> 197cdf0e10cSrcweir <xsl:variable name="new-vml-path" select="concat($vml-path ,' l ' ) "/> 198cdf0e10cSrcweir <xsl:variable name="num-and-pos"> 199cdf0e10cSrcweir <xsl:call-template name="get-number-after"> 200cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 201cdf0e10cSrcweir <xsl:with-param name="position" select="$newpos"/> 202cdf0e10cSrcweir <xsl:with-param name="count" select="1"/> 203cdf0e10cSrcweir </xsl:call-template> 204cdf0e10cSrcweir </xsl:variable> 205cdf0e10cSrcweir <xsl:call-template name="svgpath2vmlpath"> 206cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 207cdf0e10cSrcweir <xsl:with-param name="vml-path" select=" concat($new-vml-path , $current-x , ' ' , substring-before( $num-and-pos , ':') + $current-y , ' ' ) "/> 208cdf0e10cSrcweir <xsl:with-param name="position" select=" substring-after( $num-and-pos , ':') "/> 209cdf0e10cSrcweir <xsl:with-param name="last-command" select="$command"/> 210cdf0e10cSrcweir <xsl:with-param name="current-x" select=" $current-x"/> 211cdf0e10cSrcweir <xsl:with-param name="current-y" select=" substring-before( $num-and-pos , ':') "/> 212cdf0e10cSrcweir </xsl:call-template> 213cdf0e10cSrcweir </xsl:when> 214cdf0e10cSrcweir <xsl:when test="$command = 'C' "> 215cdf0e10cSrcweir <!-- absolute curveto --> 216cdf0e10cSrcweir <xsl:variable name="new-vml-path" select="concat($vml-path ,' c ' ) "/> 217cdf0e10cSrcweir <xsl:variable name="control-and-pos"> 218cdf0e10cSrcweir <xsl:call-template name="get-number-after"> 219cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 220cdf0e10cSrcweir <xsl:with-param name="position" select="$newpos"/> 221cdf0e10cSrcweir <xsl:with-param name="count" select="4"/> 222cdf0e10cSrcweir </xsl:call-template> 223cdf0e10cSrcweir </xsl:variable> 224cdf0e10cSrcweir <xsl:variable name="num-and-pos"> 225cdf0e10cSrcweir <xsl:call-template name="get-number-after"> 226cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 227cdf0e10cSrcweir <xsl:with-param name="position" select="substring-after( $control-and-pos , ':') "/> 228cdf0e10cSrcweir <xsl:with-param name="count" select="2"/> 229cdf0e10cSrcweir </xsl:call-template> 230cdf0e10cSrcweir </xsl:variable> 231cdf0e10cSrcweir <xsl:call-template name="svgpath2vmlpath"> 232cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 233cdf0e10cSrcweir <xsl:with-param name="vml-path" select=" concat($new-vml-path , substring-before( $control-and-pos , ':') , ' ' , substring-before( $num-and-pos , ':') , ' ') "/> 234cdf0e10cSrcweir <xsl:with-param name="position" select=" substring-after( $num-and-pos , ':') "/> 235cdf0e10cSrcweir <xsl:with-param name="last-command" select="$command"/> 236cdf0e10cSrcweir <xsl:with-param name="current-x" select=" substring-before( substring-before( $num-and-pos , ':') , ' ') "/> 237cdf0e10cSrcweir <xsl:with-param name="current-y" select=" substring-after( substring-before( $num-and-pos , ':') , ' ') "/> 238cdf0e10cSrcweir </xsl:call-template> 239cdf0e10cSrcweir </xsl:when> 240cdf0e10cSrcweir <xsl:when test="$command = 'c' "> 241cdf0e10cSrcweir <!-- relative curveto --> 242cdf0e10cSrcweir <xsl:variable name="new-vml-path" select="concat($vml-path ,' v ' ) "/> 243cdf0e10cSrcweir <xsl:variable name="control-and-pos"> 244cdf0e10cSrcweir <xsl:call-template name="get-number-after"> 245cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 246cdf0e10cSrcweir <xsl:with-param name="position" select="$newpos"/> 247cdf0e10cSrcweir <xsl:with-param name="count" select="4"/> 248cdf0e10cSrcweir </xsl:call-template> 249cdf0e10cSrcweir </xsl:variable> 250cdf0e10cSrcweir <xsl:variable name="num-and-pos"> 251cdf0e10cSrcweir <xsl:call-template name="get-number-after"> 252cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 253cdf0e10cSrcweir <xsl:with-param name="position" select="substring-after( $control-and-pos , ':') "/> 254cdf0e10cSrcweir <xsl:with-param name="count" select="2"/> 255cdf0e10cSrcweir </xsl:call-template> 256cdf0e10cSrcweir </xsl:variable> 257cdf0e10cSrcweir <xsl:call-template name="svgpath2vmlpath"> 258cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 259cdf0e10cSrcweir <xsl:with-param name="vml-path" select=" concat($new-vml-path , substring-before( $control-and-pos , ':') , ' ' , substring-before( $num-and-pos , ':') , ' ') "/> 260cdf0e10cSrcweir <xsl:with-param name="position" select=" substring-after( $num-and-pos , ':') "/> 261cdf0e10cSrcweir <xsl:with-param name="last-command" select="$command"/> 262cdf0e10cSrcweir <xsl:with-param name="current-x" select=" substring-before( substring-before( $num-and-pos , ':') , ' ') + $current-x "/> 263cdf0e10cSrcweir <xsl:with-param name="current-y" select=" substring-after( substring-before( $num-and-pos , ':') , ' ') + $current-y "/> 264cdf0e10cSrcweir </xsl:call-template> 265cdf0e10cSrcweir </xsl:when> 266cdf0e10cSrcweir <xsl:when test="$command = 'S' "> 267cdf0e10cSrcweir <!-- absolute shorthand/smooth curveto --> 268cdf0e10cSrcweir <xsl:variable name="new-vml-path" select="concat($vml-path ,' c ' ) "/> 269cdf0e10cSrcweir <xsl:variable name="control-and-pos"> 270cdf0e10cSrcweir <xsl:call-template name="get-number-after"> 271cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 272cdf0e10cSrcweir <xsl:with-param name="position" select="$newpos"/> 273cdf0e10cSrcweir <xsl:with-param name="count" select="2"/> 274cdf0e10cSrcweir </xsl:call-template> 275cdf0e10cSrcweir </xsl:variable> 276cdf0e10cSrcweir <xsl:variable name="num-and-pos"> 277cdf0e10cSrcweir <xsl:call-template name="get-number-after"> 278cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 279cdf0e10cSrcweir <xsl:with-param name="position" select="substring-after( $control-and-pos , ':') "/> 280cdf0e10cSrcweir <xsl:with-param name="count" select="2"/> 281cdf0e10cSrcweir </xsl:call-template> 282cdf0e10cSrcweir </xsl:variable> 283cdf0e10cSrcweir <xsl:variable name="control-1"> 284cdf0e10cSrcweir <xsl:choose> 285cdf0e10cSrcweir <xsl:when test="string-length(translate($last-command, 'CcSs','') )= 0 "> 286cdf0e10cSrcweir <xsl:variable name="previous-control-2"> 287cdf0e10cSrcweir <xsl:call-template name="get-number-before"> 288cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 289cdf0e10cSrcweir <xsl:with-param name="position" select="$position"/> 290cdf0e10cSrcweir <xsl:with-param name="count" select="2"/> 291cdf0e10cSrcweir <xsl:with-param name="skipcount" select="2"/> 292cdf0e10cSrcweir </xsl:call-template> 293cdf0e10cSrcweir </xsl:variable> 294cdf0e10cSrcweir <xsl:value-of select="substring-before($previous-control-2 , ':') "/> 295cdf0e10cSrcweir </xsl:when> 296cdf0e10cSrcweir <xsl:otherwise> 297cdf0e10cSrcweir <xsl:value-of select="substring-before($control-and-pos, ':') "/> 298cdf0e10cSrcweir </xsl:otherwise> 299cdf0e10cSrcweir </xsl:choose> 300cdf0e10cSrcweir </xsl:variable> 301cdf0e10cSrcweir <xsl:call-template name="svgpath2vmlpath"> 302cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 303cdf0e10cSrcweir <xsl:with-param name="vml-path" select=" concat($new-vml-path , $control-1 , ' ' , substring-before( $control-and-pos , ':') , ' ' , substring-before( $num-and-pos , ':') , ' ') "/> 304cdf0e10cSrcweir <xsl:with-param name="position" select=" substring-after( $num-and-pos , ':') "/> 305cdf0e10cSrcweir <xsl:with-param name="last-command" select="$command"/> 306cdf0e10cSrcweir <xsl:with-param name="current-x" select=" substring-before( substring-before( $num-and-pos , ':') , ' ') "/> 307cdf0e10cSrcweir <xsl:with-param name="current-y" select=" substring-after( substring-before( $num-and-pos , ':') , ' ') "/> 308cdf0e10cSrcweir </xsl:call-template> 309cdf0e10cSrcweir </xsl:when> 310cdf0e10cSrcweir <xsl:when test="$command = 's' "> 311cdf0e10cSrcweir <!-- absolute shorthand/smooth curveto --> 312cdf0e10cSrcweir <xsl:variable name="new-vml-path" select="concat($vml-path ,' v ' ) "/> 313cdf0e10cSrcweir <xsl:variable name="control-and-pos"> 314cdf0e10cSrcweir <xsl:call-template name="get-number-after"> 315cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 316cdf0e10cSrcweir <xsl:with-param name="position" select="$newpos"/> 317cdf0e10cSrcweir <xsl:with-param name="count" select="2"/> 318cdf0e10cSrcweir </xsl:call-template> 319cdf0e10cSrcweir </xsl:variable> 320cdf0e10cSrcweir <xsl:variable name="num-and-pos"> 321cdf0e10cSrcweir <xsl:call-template name="get-number-after"> 322cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 323cdf0e10cSrcweir <xsl:with-param name="position" select="substring-after( $control-and-pos , ':') "/> 324cdf0e10cSrcweir <xsl:with-param name="count" select="2"/> 325cdf0e10cSrcweir </xsl:call-template> 326cdf0e10cSrcweir </xsl:variable> 327cdf0e10cSrcweir <xsl:variable name="control-1"> 328cdf0e10cSrcweir <xsl:choose> 329cdf0e10cSrcweir <xsl:when test="string-length(translate($last-command, 'CcSs' , '')) = 0 "> 330cdf0e10cSrcweir <xsl:variable name="previous-control-2"> 331cdf0e10cSrcweir <xsl:call-template name="get-number-before"> 332cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 333cdf0e10cSrcweir <xsl:with-param name="position" select="$position"/> 334cdf0e10cSrcweir <xsl:with-param name="count" select="2"/> 335cdf0e10cSrcweir <xsl:with-param name="skipcount" select="2"/> 336cdf0e10cSrcweir </xsl:call-template> 337cdf0e10cSrcweir </xsl:variable> 338cdf0e10cSrcweir <xsl:value-of select="substring-before($previous-control-2 , ':') "/> 339cdf0e10cSrcweir </xsl:when> 340cdf0e10cSrcweir <xsl:otherwise> 341cdf0e10cSrcweir <xsl:value-of select="substring-before($control-and-pos, ':') "/> 342cdf0e10cSrcweir </xsl:otherwise> 343cdf0e10cSrcweir </xsl:choose> 344cdf0e10cSrcweir </xsl:variable> 345cdf0e10cSrcweir <xsl:call-template name="svgpath2vmlpath"> 346cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 347cdf0e10cSrcweir <xsl:with-param name="vml-path" select=" concat($new-vml-path , $control-1 , ' ' , substring-before( $control-and-pos , ':') , ' ' , substring-before( $num-and-pos , ':') , ' ') "/> 348cdf0e10cSrcweir <xsl:with-param name="position" select=" substring-after( $num-and-pos , ':') "/> 349cdf0e10cSrcweir <xsl:with-param name="last-command" select="$command"/> 350cdf0e10cSrcweir <xsl:with-param name="current-x" select=" substring-before( substring-before( $num-and-pos , ':') , ' ') + $current-x "/> 351cdf0e10cSrcweir <xsl:with-param name="current-y" select=" substring-after( substring-before( $num-and-pos , ':') , ' ') + $current-y "/> 352cdf0e10cSrcweir </xsl:call-template> 353cdf0e10cSrcweir </xsl:when> 354cdf0e10cSrcweir <xsl:when test="$command = 'Q' "> 355cdf0e10cSrcweir <!-- absolute quadratic bézier curves --> 356cdf0e10cSrcweir <xsl:variable name="new-vml-path" select="concat($vml-path ,' qb ' ) "/> 357cdf0e10cSrcweir <xsl:variable name="control-and-pos"> 358cdf0e10cSrcweir <xsl:call-template name="get-number-after"> 359cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 360cdf0e10cSrcweir <xsl:with-param name="position" select="$newpos"/> 361cdf0e10cSrcweir <xsl:with-param name="count" select="2"/> 362cdf0e10cSrcweir </xsl:call-template> 363cdf0e10cSrcweir </xsl:variable> 364cdf0e10cSrcweir <xsl:variable name="num-and-pos"> 365cdf0e10cSrcweir <xsl:call-template name="get-number-after"> 366cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 367cdf0e10cSrcweir <xsl:with-param name="position" select="substring-after( $control-and-pos , ':') "/> 368cdf0e10cSrcweir <xsl:with-param name="count" select="2"/> 369cdf0e10cSrcweir </xsl:call-template> 370cdf0e10cSrcweir </xsl:variable> 371cdf0e10cSrcweir <xsl:call-template name="svgpath2vmlpath"> 372cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 373cdf0e10cSrcweir <xsl:with-param name="vml-path" select=" concat($new-vml-path , substring-before( $control-and-pos , ':') , ' ' , substring-before( $num-and-pos , ':') , ' ') "/> 374cdf0e10cSrcweir <xsl:with-param name="position" select=" substring-after( $num-and-pos , ':') "/> 375cdf0e10cSrcweir <xsl:with-param name="last-command" select="$command"/> 376cdf0e10cSrcweir <xsl:with-param name="current-x" select=" substring-before( substring-before( $num-and-pos , ':') , ' ') "/> 377cdf0e10cSrcweir <xsl:with-param name="current-y" select=" substring-after( substring-before( $num-and-pos , ':') , ' ') "/> 378cdf0e10cSrcweir </xsl:call-template> 379cdf0e10cSrcweir </xsl:when> 380cdf0e10cSrcweir <xsl:when test="$command = 'q' "> 381cdf0e10cSrcweir <!-- relative quadratic bézier curves --> 382cdf0e10cSrcweir <xsl:variable name="control-and-pos"> 383cdf0e10cSrcweir <xsl:call-template name="get-number-after"> 384cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 385cdf0e10cSrcweir <xsl:with-param name="position" select="$newpos"/> 386cdf0e10cSrcweir <xsl:with-param name="count" select="2"/> 387cdf0e10cSrcweir </xsl:call-template> 388cdf0e10cSrcweir </xsl:variable> 389cdf0e10cSrcweir <xsl:variable name="control" select="substring-before( $control-and-pos , ':') "/> 390cdf0e10cSrcweir <xsl:variable name="new-vml-path" select="concat($vml-path ,' qb ' , substring-before($control,' ') + $current-x , ' ' , substring-after($control , ' ') + $current-y ) "/> 391cdf0e10cSrcweir <xsl:variable name="num-and-pos"> 392cdf0e10cSrcweir <xsl:call-template name="get-number-after"> 393cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 394cdf0e10cSrcweir <xsl:with-param name="position" select="substring-after( $control-and-pos , ':') "/> 395cdf0e10cSrcweir <xsl:with-param name="count" select="2"/> 396cdf0e10cSrcweir </xsl:call-template> 397cdf0e10cSrcweir </xsl:variable> 398cdf0e10cSrcweir <xsl:variable name="number" select="substring-before($num-and-pos, ':')"/> 399cdf0e10cSrcweir <xsl:variable name="absolute-number" select="concat(substring-before($number, ' ') + $current-x , ' ' , substring-after($number, ' ') + $current-y)"/> 400cdf0e10cSrcweir <xsl:call-template name="svgpath2vmlpath"> 401cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 402cdf0e10cSrcweir <xsl:with-param name="vml-path" select=" concat($new-vml-path , ' ' , $absolute-number , ' ') "/> 403cdf0e10cSrcweir <xsl:with-param name="position" select=" substring-after( $num-and-pos , ':') "/> 404cdf0e10cSrcweir <xsl:with-param name="last-command" select="$command"/> 405cdf0e10cSrcweir <xsl:with-param name="current-x" select=" substring-before( $absolute-number , ' ') "/> 406cdf0e10cSrcweir <xsl:with-param name="current-y" select=" substring-after( $absolute-number , ' ') "/> 407cdf0e10cSrcweir </xsl:call-template> 408cdf0e10cSrcweir </xsl:when> 409cdf0e10cSrcweir <xsl:when test="$command = 'Z' or $command = 'z' "> 410cdf0e10cSrcweir <!-- closepath --> 411cdf0e10cSrcweir <xsl:variable name="new-vml-path" select="concat($vml-path ,' x ' ) "/> 412cdf0e10cSrcweir <xsl:call-template name="svgpath2vmlpath"> 413cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 414cdf0e10cSrcweir <xsl:with-param name="vml-path" select=" concat($new-vml-path , ' ') "/> 415cdf0e10cSrcweir <xsl:with-param name="position" select=" $newpos "/> 416cdf0e10cSrcweir <xsl:with-param name="last-command" select="$command"/> 417cdf0e10cSrcweir <xsl:with-param name="current-x" select=" $current-x "/> 418cdf0e10cSrcweir <xsl:with-param name="current-y" select=" $current-y"/> 419cdf0e10cSrcweir </xsl:call-template> 420cdf0e10cSrcweir </xsl:when> 421cdf0e10cSrcweir <xsl:otherwise> 422cdf0e10cSrcweir <xsl:value-of select="$vml-path"/> 423cdf0e10cSrcweir </xsl:otherwise> 424cdf0e10cSrcweir </xsl:choose> 425cdf0e10cSrcweir </xsl:template> 426cdf0e10cSrcweir <xsl:template name="get-number-before"> 427cdf0e10cSrcweir <!-- get $count number of number before current position , output format:number1 number2 ... numberN:newpostion 428cdf0e10cSrcweir skip $skipcount of numbers 429cdf0e10cSrcweir --> 430cdf0e10cSrcweir <xsl:param name="svg-path"/> 431cdf0e10cSrcweir <xsl:param name="position" select="1"/> 432cdf0e10cSrcweir <xsl:param name="count" select="1"/> 433cdf0e10cSrcweir <xsl:param name="skipcount" select="0"/> 434cdf0e10cSrcweir <xsl:param name="number" select="''"/> 435cdf0e10cSrcweir <xsl:choose> 436cdf0e10cSrcweir <xsl:when test="$count = 0"> 437cdf0e10cSrcweir <xsl:value-of select=" concat($number , ':' , $position) "/> 438cdf0e10cSrcweir </xsl:when> 439cdf0e10cSrcweir <xsl:otherwise> 440cdf0e10cSrcweir <xsl:variable name="num-pos"> 441cdf0e10cSrcweir <xsl:call-template name="get-number-position"> 442cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 443cdf0e10cSrcweir <xsl:with-param name="position" select="$position"/> 444cdf0e10cSrcweir <xsl:with-param name="direction" select="-1"/> 445cdf0e10cSrcweir </xsl:call-template> 446cdf0e10cSrcweir </xsl:variable> 447cdf0e10cSrcweir <xsl:variable name="previous-num-and-pos"> 448cdf0e10cSrcweir <xsl:call-template name="get-previous-number"> 449cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 450cdf0e10cSrcweir <xsl:with-param name="position" select="$num-pos"/> 451cdf0e10cSrcweir </xsl:call-template> 452cdf0e10cSrcweir </xsl:variable> 453cdf0e10cSrcweir <xsl:if test="$skipcount > 0"> 454cdf0e10cSrcweir <xsl:call-template name="get-number-before"> 455cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 456cdf0e10cSrcweir <xsl:with-param name="position" select="substring-after($previous-num-and-pos , ':')"/> 457cdf0e10cSrcweir <xsl:with-param name="count" select="$count"/> 458cdf0e10cSrcweir <xsl:with-param name="skipcount" select="$skipcount - 1"/> 459cdf0e10cSrcweir <xsl:with-param name="number" select="$number"/> 460cdf0e10cSrcweir </xsl:call-template> 461cdf0e10cSrcweir </xsl:if> 462cdf0e10cSrcweir <xsl:if test="$skipcount = 0"> 463cdf0e10cSrcweir <xsl:variable name="new-number"> 464cdf0e10cSrcweir <xsl:if test="not($count = 1)"> 465cdf0e10cSrcweir <xsl:value-of select="' '"/> 466cdf0e10cSrcweir </xsl:if> 467cdf0e10cSrcweir <xsl:value-of select=" concat( substring-before($previous-num-and-pos , ':') , $number ) "/> 468cdf0e10cSrcweir </xsl:variable> 469cdf0e10cSrcweir <xsl:call-template name="get-number-before"> 470cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 471cdf0e10cSrcweir <xsl:with-param name="position" select="substring-after($previous-num-and-pos , ':')"/> 472cdf0e10cSrcweir <xsl:with-param name="count" select="$count - 1"/> 473cdf0e10cSrcweir <xsl:with-param name="skipcount" select="0"/> 474cdf0e10cSrcweir <xsl:with-param name="number" select="$new-number"/> 475cdf0e10cSrcweir </xsl:call-template> 476cdf0e10cSrcweir </xsl:if> 477cdf0e10cSrcweir </xsl:otherwise> 478cdf0e10cSrcweir </xsl:choose> 479cdf0e10cSrcweir </xsl:template> 480cdf0e10cSrcweir <xsl:template name="get-number-after"> 481cdf0e10cSrcweir <!-- get $count number of number after current position, output format:number1 number2 ... numberN:newpostion 482cdf0e10cSrcweir skip $skipcount of numbers 483cdf0e10cSrcweir --> 484cdf0e10cSrcweir <xsl:param name="svg-path"/> 485cdf0e10cSrcweir <xsl:param name="position" select="1"/> 486cdf0e10cSrcweir <xsl:param name="count" select="1"/> 487cdf0e10cSrcweir <xsl:param name="skipcount" select="0"/> 488cdf0e10cSrcweir <xsl:param name="number" select="''"/> 489cdf0e10cSrcweir <xsl:choose> 490cdf0e10cSrcweir <xsl:when test="$count = 0"> 491cdf0e10cSrcweir <xsl:value-of select=" concat($number , ':' , $position) "/> 492cdf0e10cSrcweir </xsl:when> 493cdf0e10cSrcweir <xsl:otherwise> 494cdf0e10cSrcweir <xsl:variable name="num-pos"> 495cdf0e10cSrcweir <xsl:call-template name="get-number-position"> 496cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 497cdf0e10cSrcweir <xsl:with-param name="position" select="$position"/> 498cdf0e10cSrcweir <xsl:with-param name="direction" select="1"/> 499cdf0e10cSrcweir </xsl:call-template> 500cdf0e10cSrcweir </xsl:variable> 501cdf0e10cSrcweir <xsl:variable name="next-num-and-pos"> 502cdf0e10cSrcweir <xsl:call-template name="get-next-number"> 503cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 504cdf0e10cSrcweir <xsl:with-param name="position" select="$num-pos"/> 505cdf0e10cSrcweir </xsl:call-template> 506cdf0e10cSrcweir </xsl:variable> 507cdf0e10cSrcweir <xsl:if test="$skipcount > 0"> 508cdf0e10cSrcweir <xsl:call-template name="get-number-after"> 509cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 510cdf0e10cSrcweir <xsl:with-param name="position" select="substring-after($next-num-and-pos , ':')"/> 511cdf0e10cSrcweir <xsl:with-param name="count" select="$count"/> 512cdf0e10cSrcweir <xsl:with-param name="skipcount" select="$skipcount - 1"/> 513cdf0e10cSrcweir <xsl:with-param name="number" select="$number"/> 514cdf0e10cSrcweir </xsl:call-template> 515cdf0e10cSrcweir </xsl:if> 516cdf0e10cSrcweir <xsl:if test="$skipcount = 0"> 517cdf0e10cSrcweir <xsl:variable name="new-number"> 518cdf0e10cSrcweir <xsl:value-of select=" concat( $number , substring-before($next-num-and-pos , ':') ) "/> 519cdf0e10cSrcweir <xsl:if test="not($count = 1)"> 520cdf0e10cSrcweir <xsl:value-of select="' '"/> 521cdf0e10cSrcweir </xsl:if> 522cdf0e10cSrcweir </xsl:variable> 523cdf0e10cSrcweir <xsl:call-template name="get-number-after"> 524cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 525cdf0e10cSrcweir <xsl:with-param name="position" select="substring-after($next-num-and-pos , ':')"/> 526cdf0e10cSrcweir <xsl:with-param name="count" select="$count - 1"/> 527cdf0e10cSrcweir <xsl:with-param name="skipcount" select="0"/> 528cdf0e10cSrcweir <xsl:with-param name="number" select="$new-number"/> 529cdf0e10cSrcweir </xsl:call-template> 530cdf0e10cSrcweir </xsl:if> 531cdf0e10cSrcweir </xsl:otherwise> 532cdf0e10cSrcweir </xsl:choose> 533cdf0e10cSrcweir </xsl:template> 534cdf0e10cSrcweir <xsl:template name="get-number-position"> 535cdf0e10cSrcweir <!-- get the next number start position, direction should be 1 or -1--> 536cdf0e10cSrcweir <xsl:param name="svg-path"/> 537cdf0e10cSrcweir <xsl:param name="position"/> 538cdf0e10cSrcweir <xsl:param name="direction" select="1"/> 539cdf0e10cSrcweir <xsl:choose> 540cdf0e10cSrcweir <xsl:when test="$direction = 1 and $position > string-length($svg-path) ">0</xsl:when> 541cdf0e10cSrcweir <xsl:when test="$direction = -1 and not($position > 0)">0</xsl:when> 542cdf0e10cSrcweir <xsl:otherwise> 543cdf0e10cSrcweir <xsl:variable name="curr-char"> 544cdf0e10cSrcweir <xsl:if test="$direction = 1"> 545cdf0e10cSrcweir <xsl:value-of select="substring($svg-path, $position , 1)"/> 546cdf0e10cSrcweir </xsl:if> 547cdf0e10cSrcweir <xsl:if test="$direction = -1"> 548cdf0e10cSrcweir <xsl:value-of select="substring($svg-path, $position -1 , 1)"/> 549cdf0e10cSrcweir </xsl:if> 550cdf0e10cSrcweir </xsl:variable> 551cdf0e10cSrcweir <xsl:choose> 552cdf0e10cSrcweir <xsl:when test="string-length(translate($curr-char , '+-.0123456789' ,'')) = 0 "> 553cdf0e10cSrcweir <!-- number start--> 554cdf0e10cSrcweir <xsl:value-of select="$position"/> 555cdf0e10cSrcweir </xsl:when> 556cdf0e10cSrcweir <xsl:otherwise> 557cdf0e10cSrcweir <xsl:call-template name="get-number-position"> 558cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 559cdf0e10cSrcweir <xsl:with-param name="position" select="$position + $direction"/> 560cdf0e10cSrcweir <xsl:with-param name="direction" select="$direction"/> 561cdf0e10cSrcweir </xsl:call-template> 562cdf0e10cSrcweir </xsl:otherwise> 563cdf0e10cSrcweir </xsl:choose> 564cdf0e10cSrcweir </xsl:otherwise> 565cdf0e10cSrcweir </xsl:choose> 566cdf0e10cSrcweir </xsl:template> 567cdf0e10cSrcweir <xsl:template name="get-next-number"> 568cdf0e10cSrcweir <!-- get the next number from current position--> 569cdf0e10cSrcweir <xsl:param name="svg-path"/> 570cdf0e10cSrcweir <xsl:param name="position"/> 571cdf0e10cSrcweir <xsl:param name="number" select="''"/> 572cdf0e10cSrcweir <xsl:choose> 573cdf0e10cSrcweir <xsl:when test="$position > string-length($svg-path) "> 574cdf0e10cSrcweir <xsl:value-of select=" concat(round($number) , ':' , $position) "/> 575cdf0e10cSrcweir </xsl:when> 576cdf0e10cSrcweir <xsl:otherwise> 577cdf0e10cSrcweir <xsl:variable name="curr-char" select="substring($svg-path, $position , 1)"/> 578cdf0e10cSrcweir <xsl:choose> 579cdf0e10cSrcweir <xsl:when test="string-length(translate($curr-char , '.0123456789' ,'')) = 0 "> 580cdf0e10cSrcweir <!-- is number --> 581cdf0e10cSrcweir <xsl:call-template name="get-next-number"> 582cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 583cdf0e10cSrcweir <xsl:with-param name="position" select="$position +1"/> 584cdf0e10cSrcweir <xsl:with-param name="number" select="concat( $number, $curr-char) "/> 585cdf0e10cSrcweir </xsl:call-template> 586cdf0e10cSrcweir </xsl:when> 587cdf0e10cSrcweir <xsl:when test="string-length(translate($curr-char , '+-' ,'') ) = 0 and string-length($number) = 0"> 588cdf0e10cSrcweir <!-- is number --> 589cdf0e10cSrcweir <xsl:call-template name="get-next-number"> 590cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 591cdf0e10cSrcweir <xsl:with-param name="position" select="$position +1"/> 592cdf0e10cSrcweir <xsl:with-param name="number" select="concat( $number, $curr-char) "/> 593cdf0e10cSrcweir </xsl:call-template> 594cdf0e10cSrcweir </xsl:when> 595cdf0e10cSrcweir <xsl:otherwise> 596cdf0e10cSrcweir <xsl:value-of select="concat( round($number) , ':' , $position)"/> 597cdf0e10cSrcweir </xsl:otherwise> 598cdf0e10cSrcweir </xsl:choose> 599cdf0e10cSrcweir </xsl:otherwise> 600cdf0e10cSrcweir </xsl:choose> 601cdf0e10cSrcweir </xsl:template> 602cdf0e10cSrcweir <xsl:template name="get-previous-number"> 603cdf0e10cSrcweir <!-- get the previous number from current position--> 604cdf0e10cSrcweir <xsl:param name="svg-path"/> 605cdf0e10cSrcweir <xsl:param name="position"/> 606cdf0e10cSrcweir <xsl:param name="number" select="''"/> 607cdf0e10cSrcweir <xsl:choose> 608cdf0e10cSrcweir <xsl:when test="not($position > 0)"> 609cdf0e10cSrcweir <xsl:value-of select="concat( round($number ), ':0')"/> 610cdf0e10cSrcweir </xsl:when> 611cdf0e10cSrcweir <xsl:otherwise> 612cdf0e10cSrcweir <xsl:variable name="curr-char" select="substring($svg-path, $position -1 , 1)"/> 613cdf0e10cSrcweir <xsl:choose> 614cdf0e10cSrcweir <xsl:when test="string-length(translate($curr-char , '.0123456789' ,'')) = 0 "> 615cdf0e10cSrcweir <!-- is number --> 616cdf0e10cSrcweir <xsl:call-template name="get-previous-number"> 617cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 618cdf0e10cSrcweir <xsl:with-param name="position" select="$position -1"/> 619cdf0e10cSrcweir <xsl:with-param name="number" select="concat($curr-char , $number) "/> 620cdf0e10cSrcweir </xsl:call-template> 621cdf0e10cSrcweir </xsl:when> 622cdf0e10cSrcweir <xsl:when test="string-length(translate($curr-char , '+-' ,'') ) = 0 and string-length($number) = 0"> 623cdf0e10cSrcweir <!-- skip it --> 624cdf0e10cSrcweir <xsl:call-template name="get-previous-number"> 625cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 626cdf0e10cSrcweir <xsl:with-param name="position" select="$position -1"/> 627cdf0e10cSrcweir <xsl:with-param name="number" select="$number "/> 628cdf0e10cSrcweir </xsl:call-template> 629cdf0e10cSrcweir </xsl:when> 630cdf0e10cSrcweir <xsl:when test="string-length(translate($curr-char , '+-' ,'') ) = 0 and string-length($number) > 0"> 631cdf0e10cSrcweir <!-- finsh it with +/- --> 632cdf0e10cSrcweir <xsl:value-of select="concat( round( concat( $curr-char, $number)) , ':' , $position)"/> 633cdf0e10cSrcweir </xsl:when> 634cdf0e10cSrcweir <xsl:otherwise> 635cdf0e10cSrcweir <xsl:value-of select="concat( round($number) , ':' , $position)"/> 636cdf0e10cSrcweir </xsl:otherwise> 637cdf0e10cSrcweir </xsl:choose> 638cdf0e10cSrcweir </xsl:otherwise> 639cdf0e10cSrcweir </xsl:choose> 640cdf0e10cSrcweir </xsl:template> 641cdf0e10cSrcweir <xsl:template name="get-path-command"> 642cdf0e10cSrcweir <xsl:param name="svg-path"/> 643cdf0e10cSrcweir <xsl:param name="position" select="1"/> 644cdf0e10cSrcweir <xsl:param name="last-command"/> 645cdf0e10cSrcweir <xsl:choose> 646cdf0e10cSrcweir <xsl:when test="$position > string-length($svg-path) "/> 647cdf0e10cSrcweir <xsl:otherwise> 648cdf0e10cSrcweir <xsl:variable name="curr-char" select="substring($svg-path, $position , 1)"/> 649cdf0e10cSrcweir <xsl:choose> 650cdf0e10cSrcweir <xsl:when test="string-length(translate($curr-char , 'MmZzLlHhVvCcSsQqTtAa' ,'')) = 0 "> 651cdf0e10cSrcweir <!-- "MmZzLlHhVvCcSsQqTtAa" are all possiable command chars --> 652cdf0e10cSrcweir <xsl:value-of select="concat( $curr-char , ':' , $position +1)"/> 653cdf0e10cSrcweir </xsl:when> 654cdf0e10cSrcweir <xsl:when test="string-length(translate($curr-char , '+-.0123456789' ,'')) = 0 "> 655cdf0e10cSrcweir <!-- number start, use last command --> 656cdf0e10cSrcweir <xsl:if test="string-length($last-command) = 0"> 657cdf0e10cSrcweir <xsl:message>ooo2wordml_path.xsl: Find undefined command</xsl:message> 658cdf0e10cSrcweir </xsl:if> 659cdf0e10cSrcweir <xsl:value-of select="concat( $last-command , ':' , $position )"/> 660cdf0e10cSrcweir </xsl:when> 661cdf0e10cSrcweir <xsl:when test="string-length(translate($curr-char , ',	  ' ,'')) = 0 "> 662cdf0e10cSrcweir <!-- space or ',' should be skip --> 663cdf0e10cSrcweir <xsl:call-template name="get-path-command"> 664cdf0e10cSrcweir <xsl:with-param name="svg-path" select="$svg-path"/> 665cdf0e10cSrcweir <xsl:with-param name="position" select="$position +1"/> 666cdf0e10cSrcweir <xsl:with-param name="last-command" select="$last-command"/> 667cdf0e10cSrcweir </xsl:call-template> 668cdf0e10cSrcweir </xsl:when> 669cdf0e10cSrcweir <xsl:otherwise> 670cdf0e10cSrcweir <xsl:message>ooo2wordml_path.xsl: Find undefined command:<xsl:value-of select="$curr-char"/> 671cdf0e10cSrcweir </xsl:message> 672cdf0e10cSrcweir </xsl:otherwise> 673cdf0e10cSrcweir </xsl:choose> 674cdf0e10cSrcweir </xsl:otherwise> 675cdf0e10cSrcweir </xsl:choose> 676cdf0e10cSrcweir </xsl:template> 677cdf0e10cSrcweir <xsl:template name="svg-arc2vml-arc"> 678cdf0e10cSrcweir <xsl:param name="x0"/> 679cdf0e10cSrcweir <xsl:param name="y0"/> 680cdf0e10cSrcweir <xsl:param name="rx"/> 681cdf0e10cSrcweir <xsl:param name="ry"/> 682cdf0e10cSrcweir <xsl:param name="x-axis-rotation" select="0"/> 683cdf0e10cSrcweir <xsl:param name="large-arc-flag" select="0"/> 684cdf0e10cSrcweir <xsl:param name="sweep-flag" select="0"/> 685cdf0e10cSrcweir <xsl:param name="x"/> 686cdf0e10cSrcweir <xsl:param name="y"/> 687cdf0e10cSrcweir <!-- Compute 1/2 distance between current and final point --> 688cdf0e10cSrcweir <xsl:variable name="dx2" select="($x0 - $x) div 2"/> 689cdf0e10cSrcweir <xsl:variable name="dy2" select="($y0 - $y) div 2"/> 690cdf0e10cSrcweir <!-- Convert from degrees to radians --> 691cdf0e10cSrcweir <xsl:variable name="rotation-radian" select="$x-axis-rotation * $pi div 180"/> 692cdf0e10cSrcweir <!-- Compute (x1, y1). What are x1,y1?--> 693cdf0e10cSrcweir <xsl:variable name="cos-rotation"> 694cdf0e10cSrcweir <xsl:call-template name="cos"> 695cdf0e10cSrcweir <xsl:with-param name="x" select="$rotation-radian"/> 696cdf0e10cSrcweir </xsl:call-template> 697cdf0e10cSrcweir </xsl:variable> 698cdf0e10cSrcweir <xsl:variable name="sin-rotation"> 699cdf0e10cSrcweir <xsl:call-template name="sin"> 700cdf0e10cSrcweir <xsl:with-param name="x" select="$rotation-radian"/> 701cdf0e10cSrcweir </xsl:call-template> 702cdf0e10cSrcweir </xsl:variable> 703cdf0e10cSrcweir <xsl:variable name="x1" select="$cos-rotation * $dx2 + $sin-rotation * $dy2"/> 704cdf0e10cSrcweir <xsl:variable name="y1" select="-1 * $sin-rotation * $dx2 + $cos-rotation * $dy2"/> 705cdf0e10cSrcweir <!-- Make sure radii are large enough --> 706cdf0e10cSrcweir <xsl:variable name="rx-abs"> 707cdf0e10cSrcweir <xsl:call-template name="abs"> 708cdf0e10cSrcweir <xsl:with-param name="x" select="$rx"/> 709cdf0e10cSrcweir </xsl:call-template> 710cdf0e10cSrcweir </xsl:variable> 711cdf0e10cSrcweir <xsl:variable name="ry-abs"> 712cdf0e10cSrcweir <xsl:call-template name="abs"> 713cdf0e10cSrcweir <xsl:with-param name="x" select="$ry"/> 714cdf0e10cSrcweir </xsl:call-template> 715cdf0e10cSrcweir </xsl:variable> 716cdf0e10cSrcweir <xsl:variable name="rx-sq" select="$rx-abs * $rx-abs"/> 717cdf0e10cSrcweir <xsl:variable name="ry-sq" select="$ry-abs * $ry-abs"/> 718cdf0e10cSrcweir <xsl:variable name="x1-sq" select="$x1 * $x1"/> 719cdf0e10cSrcweir <xsl:variable name="y1-sq" select="$y1 * $y1"/> 720cdf0e10cSrcweir <xsl:variable name="radius-check" select=" $x1-sq div $rx-sq + $y1-sq div $ry-sq "/> 721cdf0e10cSrcweir <xsl:variable name="radius-check-sqrt"> 722cdf0e10cSrcweir <xsl:call-template name="sqrt"> 723cdf0e10cSrcweir <xsl:with-param name="x" select="$radius-check"/> 724cdf0e10cSrcweir </xsl:call-template> 725cdf0e10cSrcweir </xsl:variable> 726cdf0e10cSrcweir <xsl:variable name="new-rx"> 727cdf0e10cSrcweir <xsl:choose> 728cdf0e10cSrcweir <xsl:when test="$radius-check > 1"> 729cdf0e10cSrcweir <xsl:value-of select="$rx-abs * $radius-check-sqrt"/> 730cdf0e10cSrcweir </xsl:when> 731cdf0e10cSrcweir <xsl:otherwise> 732cdf0e10cSrcweir <xsl:value-of select="$rx-abs"/> 733cdf0e10cSrcweir </xsl:otherwise> 734cdf0e10cSrcweir </xsl:choose> 735cdf0e10cSrcweir </xsl:variable> 736cdf0e10cSrcweir <xsl:variable name="new-ry"> 737cdf0e10cSrcweir <xsl:choose> 738cdf0e10cSrcweir <xsl:when test="$radius-check > 1"> 739cdf0e10cSrcweir <xsl:value-of select="$ry-abs * $radius-check-sqrt"/> 740cdf0e10cSrcweir </xsl:when> 741cdf0e10cSrcweir <xsl:otherwise> 742cdf0e10cSrcweir <xsl:value-of select="$ry-abs"/> 743cdf0e10cSrcweir </xsl:otherwise> 744cdf0e10cSrcweir </xsl:choose> 745cdf0e10cSrcweir </xsl:variable> 746cdf0e10cSrcweir <xsl:variable name="new-ry-sq"> 747cdf0e10cSrcweir <xsl:choose> 748cdf0e10cSrcweir <xsl:when test="$radius-check > 1"> 749cdf0e10cSrcweir <xsl:value-of select="$new-ry * $new-ry"/> 750cdf0e10cSrcweir </xsl:when> 751cdf0e10cSrcweir <xsl:otherwise> 752cdf0e10cSrcweir <xsl:value-of select="$ry-sq"/> 753cdf0e10cSrcweir </xsl:otherwise> 754cdf0e10cSrcweir </xsl:choose> 755cdf0e10cSrcweir </xsl:variable> 756cdf0e10cSrcweir <xsl:variable name="new-rx-sq"> 757cdf0e10cSrcweir <xsl:choose> 758cdf0e10cSrcweir <xsl:when test="$radius-check > 1"> 759cdf0e10cSrcweir <xsl:value-of select="$new-rx * $new-rx"/> 760cdf0e10cSrcweir </xsl:when> 761cdf0e10cSrcweir <xsl:otherwise> 762cdf0e10cSrcweir <xsl:value-of select="$rx-sq"/> 763cdf0e10cSrcweir </xsl:otherwise> 764cdf0e10cSrcweir </xsl:choose> 765cdf0e10cSrcweir </xsl:variable> 766cdf0e10cSrcweir <!-- Step 2: Compute (cx1, cy1) --> 767cdf0e10cSrcweir <xsl:variable name="sign"> 768cdf0e10cSrcweir <xsl:choose> 769cdf0e10cSrcweir <xsl:when test="$large-arc-flag = $sweep-flag">-1</xsl:when> 770cdf0e10cSrcweir <xsl:otherwise>1</xsl:otherwise> 771cdf0e10cSrcweir </xsl:choose> 772cdf0e10cSrcweir </xsl:variable> 773cdf0e10cSrcweir <xsl:variable name="unchecked-sq" select=" (($new-rx-sq * $new-ry-sq) - ($new-rx-sq * $y1-sq) - ($new-ry-sq * $x1-sq)) div (($new-rx-sq * $y1-sq) + ($new-ry-sq * $x1-sq)) "/> 774cdf0e10cSrcweir <xsl:variable name="sq"> 775cdf0e10cSrcweir <xsl:choose> 776cdf0e10cSrcweir <xsl:when test=" $unchecked-sq < 0">0</xsl:when> 777cdf0e10cSrcweir <xsl:otherwise> 778cdf0e10cSrcweir <xsl:value-of select="$unchecked-sq"/> 779cdf0e10cSrcweir </xsl:otherwise> 780cdf0e10cSrcweir </xsl:choose> 781cdf0e10cSrcweir </xsl:variable> 782cdf0e10cSrcweir <xsl:variable name="sq-sqrt"> 783cdf0e10cSrcweir <xsl:call-template name="sqrt"> 784cdf0e10cSrcweir <xsl:with-param name="x" select="$sq"/> 785cdf0e10cSrcweir </xsl:call-template> 786cdf0e10cSrcweir </xsl:variable> 787cdf0e10cSrcweir <xsl:variable name="coef" select="$sign * $sq-sqrt "/> 788cdf0e10cSrcweir <xsl:variable name="cx1" select="$coef * $new-rx * $y1 div $new-ry"/> 789cdf0e10cSrcweir <xsl:variable name="cy1" select=" -1 * $coef * $new-ry * $x1 div $new-rx"/> 790cdf0e10cSrcweir <!-- Step 3: Compute (cx, cy) from (cx1, cy1) --> 791cdf0e10cSrcweir <xsl:variable name="sx2" select="($x0 +$x) div 2 "/> 792cdf0e10cSrcweir <xsl:variable name="sy2" select="($y0 +$y) div 2 "/> 793cdf0e10cSrcweir <xsl:variable name="tmp1" select="$cos-rotation * $cx1 "/> 794cdf0e10cSrcweir <xsl:variable name="tmp2" select="$cos-rotation * $cx1 "/> 795cdf0e10cSrcweir <xsl:variable name="cx" select=" $sx2 + ( $cos-rotation * $cx1 - $sin-rotation * $cy1 ) "/> 796cdf0e10cSrcweir <xsl:variable name="cy" select=" $sy2 + ( $sin-rotation * $cx1 + $cos-rotation * $cy1 ) "/> 797cdf0e10cSrcweir <!-- Step 4: Compute angle start and angle extent --> 798cdf0e10cSrcweir <xsl:variable name="ux" select="( $x1 - $cx1) div $new-rx"/> 799cdf0e10cSrcweir <xsl:variable name="uy" select="( $y1 - $cy1) div $new-ry"/> 800cdf0e10cSrcweir <xsl:variable name="vx" select="( - 1 * $x1 - $cx1) div $new-rx"/> 801cdf0e10cSrcweir <xsl:variable name="vy" select="(- 1 * $y1 - $cy1) div $new-ry"/> 802cdf0e10cSrcweir <xsl:variable name="n"> 803cdf0e10cSrcweir <xsl:call-template name="sqrt"> 804cdf0e10cSrcweir <xsl:with-param name="x" select=" ($ux * $ux) + ($uy * $uy) "/> 805cdf0e10cSrcweir </xsl:call-template> 806cdf0e10cSrcweir </xsl:variable> 807cdf0e10cSrcweir <!-- 1 * ux + 0 * uy --> 808cdf0e10cSrcweir <xsl:variable name="p" select="$ux"/> 809cdf0e10cSrcweir <xsl:variable name="uy-sign"> 810cdf0e10cSrcweir <xsl:choose> 811cdf0e10cSrcweir <xsl:when test=" $uy < 0 ">-1</xsl:when> 812cdf0e10cSrcweir <xsl:otherwise>1</xsl:otherwise> 813cdf0e10cSrcweir </xsl:choose> 814cdf0e10cSrcweir </xsl:variable> 815cdf0e10cSrcweir <xsl:variable name="acos-pn"> 816cdf0e10cSrcweir <xsl:call-template name="acos"> 817cdf0e10cSrcweir <xsl:with-param name="x" select="$p div $n"/> 818cdf0e10cSrcweir </xsl:call-template> 819cdf0e10cSrcweir </xsl:variable> 820cdf0e10cSrcweir <xsl:variable name="theta" select="( $uy-sign * $acos-pn * 180 div $pi ) mod 360 "/> 821cdf0e10cSrcweir <xsl:variable name="n-delta"> 822cdf0e10cSrcweir <xsl:call-template name="sqrt"> 823cdf0e10cSrcweir <xsl:with-param name="x" select="($ux * $ux + $uy * $uy) * ($vx * $vx + $vy * $vy)"/> 824cdf0e10cSrcweir </xsl:call-template> 825cdf0e10cSrcweir </xsl:variable> 826cdf0e10cSrcweir <xsl:variable name="p-delta" select="$ux * $vx + $uy * $vy"/> 827cdf0e10cSrcweir <xsl:variable name="vy-sign"> 828cdf0e10cSrcweir <xsl:choose> 829cdf0e10cSrcweir <xsl:when test="($ux * $vy - $uy * $vx) < 0 ">-1</xsl:when> 830cdf0e10cSrcweir <xsl:otherwise>1</xsl:otherwise> 831cdf0e10cSrcweir </xsl:choose> 832cdf0e10cSrcweir </xsl:variable> 833cdf0e10cSrcweir <xsl:variable name="acos-pn-delta"> 834cdf0e10cSrcweir <xsl:call-template name="acos"> 835cdf0e10cSrcweir <xsl:with-param name="x" select="$p-delta div $n-delta"/> 836cdf0e10cSrcweir </xsl:call-template> 837cdf0e10cSrcweir </xsl:variable> 838cdf0e10cSrcweir <xsl:variable name="unchecked-delta" select="$vy-sign * $acos-pn-delta * 180 div $pi "/> 839cdf0e10cSrcweir <xsl:variable name="delta"> 840cdf0e10cSrcweir <xsl:choose> 841cdf0e10cSrcweir <xsl:when test=" $sweep-flag = 0 and $unchecked-delta > 0 "> 842cdf0e10cSrcweir <xsl:value-of select=" ($unchecked-delta - 360) mod 360 "/> 843cdf0e10cSrcweir </xsl:when> 844cdf0e10cSrcweir <xsl:when test=" $sweep-flag = 1 and $unchecked-delta < 0 "> 845cdf0e10cSrcweir <xsl:value-of select=" ($unchecked-delta + 360) mod 360 "/> 846cdf0e10cSrcweir </xsl:when> 847cdf0e10cSrcweir <xsl:otherwise> 848cdf0e10cSrcweir <xsl:value-of select=" $unchecked-delta mod 360 "/> 849cdf0e10cSrcweir </xsl:otherwise> 850cdf0e10cSrcweir </xsl:choose> 851cdf0e10cSrcweir </xsl:variable> 852cdf0e10cSrcweir <xsl:value-of select="concat ($cx, ' ' , $cy, ' ' , $rx, ' ' , $ry, ' ' , $theta, ' ' , $delta, ' ' , $x-axis-rotation) "/> 853cdf0e10cSrcweir </xsl:template> 854cdf0e10cSrcweir</xsl:stylesheet> 855