diff options
Diffstat (limited to 'filter/source/xslt/import/wordml/wordml2ooo_draw.xsl')
-rw-r--r-- | filter/source/xslt/import/wordml/wordml2ooo_draw.xsl | 2170 |
1 files changed, 2170 insertions, 0 deletions
diff --git a/filter/source/xslt/import/wordml/wordml2ooo_draw.xsl b/filter/source/xslt/import/wordml/wordml2ooo_draw.xsl new file mode 100644 index 0000000000..3226f0d1c6 --- /dev/null +++ b/filter/source/xslt/import/wordml/wordml2ooo_draw.xsl @@ -0,0 +1,2170 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . +--> +<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: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:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" 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" xmlns:ole="http://libreoffice.org/2011/xslt/ole" exclude-result-prefixes="w wx aml o dt v"> + <xsl:include href="wordml2ooo_custom_draw.xsl"/> + <xsl:include href="wordml2ooo_path.xsl"/> + + <xsl:key name="imagedata" match="w:binData" use="@w:name"/> + <xsl:key name="shapetype" match="v:shapetype" use="concat('#', @id)"/> + <xsl:template match="v:fill" mode="get-xsl-number"> + <xsl:number from="/w:wordDocument/w:body" level="any" count="v:fill" format="1"/> + </xsl:template> + <xsl:template match="v:textpath" mode="get-xsl-number"> + <xsl:number from="/w:wordDocument/w:body" level="any" count="v:textpath" format="1"/> + </xsl:template> + <xsl:template match="v:fill" mode="office-style"> + <xsl:choose> + <xsl:when test="@type='pattern' or @type='tile' or @type='frame'"> + <xsl:variable name="fill-src" select="key('imagedata',@src)"/> + <xsl:if test="$fill-src"> + <draw:fill-image> + <xsl:if test="string-length(@o:title) > 0"> + <xsl:attribute name="draw:name"> + <xsl:value-of select="@o:title"/> + </xsl:attribute> + </xsl:if> + <xsl:attribute name="draw:name"> + <xsl:value-of select="translate(@src,'	  :/.','' ) "/> + </xsl:attribute> + <xsl:element name="office:binary-data"> + <xsl:value-of select="translate($fill-src/text(),'	  ','' ) "/> + </xsl:element> + </draw:fill-image> + </xsl:if> + </xsl:when> + <xsl:when test="contains(@type,'gradient')"> + <draw:gradient> + <xsl:attribute name="draw:name"> + <xsl:value-of select=" 'gradient' "/> + <xsl:number from="/w:wordDocument/w:body" level="any" count="v:fill" format="1"/> + </xsl:attribute> + <xsl:attribute name="draw:style">linear</xsl:attribute> + <xsl:if test="string-length(parent::v:*/@fillcolor) > 0"> + <xsl:attribute name="draw:start-color"> + <xsl:call-template name="MapConstColor"> + <xsl:with-param name="color" select="parent::v:*/@fillcolor"/> + </xsl:call-template> + </xsl:attribute> + </xsl:if> + <xsl:if test="string-length(@color2) > 0"> + <xsl:attribute name="draw:end-color"> + <xsl:call-template name="MapConstColor"> + <xsl:with-param name="color" select="@color2"/> + </xsl:call-template> + </xsl:attribute> + </xsl:if> + </draw:gradient> + </xsl:when> + </xsl:choose> + </xsl:template> + <xsl:template match="w:pict" mode="style4dash_mark"> + <xsl:if test="descendant::v:line or descendant::v:rect or descendant::v:oval or descendant::v:arc or descendant::v:shape"> + <!--Changed--> + <xsl:variable name="vchild" select="./v:*"/> + <xsl:variable name="def" select="$vchild/v:stroke"/> + <xsl:if test="$def"> + <!--<draw:marker draw:name="Stupid33" svg:viewBox="0 0 20 30" svg:d="m10 0-10 30h20z"/> --> + <xsl:variable name="wdashstyle" select="$vchild/v:stroke/@dashstyle"/> + <xsl:variable name="stroke-num"> + <xsl:number from="/w:wordDocument/w:body" level="any" count="v:stroke" format="1"/> + </xsl:variable> + <xsl:variable name="ptweight"> + <xsl:choose> + <xsl:when test="$vchild/@strokeweight"> + <xsl:call-template name="ConvertMeasure"> + <xsl:with-param name="TargetMeasure" select="'pt'"/> + <xsl:with-param name="value" select="$vchild/@strokeweight"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="ConvertMeasure"> + <xsl:with-param name="TargetMeasure" select="'pt'"/> + <xsl:with-param name="value" select="'1pt'"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:if test="$wdashstyle and not ($wdashstyle = 'solid')"> + <xsl:variable name="strdashdot"> + <xsl:call-template name="getstrdashdot"> + <xsl:with-param name="dashstyle" select="$wdashstyle"/> + <!--<xsl:with-param name="weight" select="$vchild/@strokeweight"/>--> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="draw-style"> + <xsl:variable name="end-cap" select="$vchild/v:stroke/@endcap"/> + <xsl:choose> + <xsl:when test="$end-cap = 'round'">round</xsl:when> + <xsl:otherwise>rect</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="dot1-length"> + <xsl:call-template name="get-middle-substring"> + <xsl:with-param name="string" select="$strdashdot"/> + <xsl:with-param name="prefix" select="'dol:'"/> + <xsl:with-param name="suffix" select="';don'"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="dot1n"> + <xsl:call-template name="get-middle-substring"> + <xsl:with-param name="string" select="$strdashdot"/> + <xsl:with-param name="prefix" select="'don:'"/> + <xsl:with-param name="suffix" select="';dist'"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="dist-length"> + <xsl:call-template name="get-middle-substring"> + <xsl:with-param name="string" select="$strdashdot"/> + <xsl:with-param name="prefix" select="'dist:'"/> + <xsl:with-param name="suffix" select="';dtl'"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="dot2-length"> + <xsl:call-template name="get-middle-substring"> + <xsl:with-param name="string" select="$strdashdot"/> + <xsl:with-param name="prefix" select="'dtl:'"/> + <xsl:with-param name="suffix" select="';dtn'"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="dot2n"> + <xsl:call-template name="get-middle-substring"> + <xsl:with-param name="string" select="$strdashdot"/> + <xsl:with-param name="prefix" select="'dtn:'"/> + <xsl:with-param name="suffix" select="';eddtn'"/> + </xsl:call-template> + </xsl:variable> + <xsl:element name="draw:stroke-dash"> + <!--dol:8;don:1;dist:2;dtl:1;dtn:2;eddtn" />--> + <xsl:attribute name="draw:name"> + <xsl:value-of select="concat('Tdash',$stroke-num)"/> + </xsl:attribute> + <xsl:attribute name="draw:style"> + <xsl:value-of select="$draw-style"/> + </xsl:attribute> + <xsl:if test="(string-length($dot1n) > 0 ) and not ($dot1n ='-1')"> + <xsl:attribute name="draw:dots1"> + <xsl:value-of select="$dot1n"/> + </xsl:attribute> + </xsl:if> + <xsl:if test="(string-length($dot2n) > 0 ) and not ($dot2n ='-1')"> + <xsl:attribute name="draw:dots2"> + <xsl:value-of select="$dot2n"/> + </xsl:attribute> + </xsl:if> + <xsl:if test="(string-length($dot1-length) > 0 ) and not ($dot1-length ='-1')"> + <xsl:attribute name="draw:dots1-length"> + <xsl:call-template name="ConvertMeasure"> + <xsl:with-param name="TargetMeasure" select="'in'"/> + <xsl:with-param name="value" select="concat($dot1-length,'pt')"/> + </xsl:call-template>in</xsl:attribute> + </xsl:if> + <xsl:if test="(string-length($dot2-length) > 0 ) and not ($dot2-length ='-1')"> + <xsl:attribute name="draw:dots2-length"> + <xsl:call-template name="ConvertMeasure"> + <xsl:with-param name="TargetMeasure" select="'in'"/> + <xsl:with-param name="value" select="concat($dot2-length,'pt')"/> + </xsl:call-template>in</xsl:attribute> + </xsl:if> + <xsl:if test="(string-length($dist-length) > 0 ) and not ($dist-length ='-1')"> + <xsl:variable name="valdistance-length"> + <xsl:call-template name="ConvertMeasure"> + <xsl:with-param name="TargetMeasure" select="'in'"/> + <xsl:with-param name="value" select="concat($dist-length,'pt')"/> + </xsl:call-template> + </xsl:variable> + <xsl:attribute name="draw:distance"> + <xsl:value-of select="$valdistance-length*$ptweight"/>in</xsl:attribute> + </xsl:if> + </xsl:element> + </xsl:if> + <xsl:if test="$vchild/v:stroke/@startarrow"> + <xsl:call-template name="CreateArrowStyle"> + <xsl:with-param name="arrow-name" select="$vchild/v:stroke/@startarrow"/> + <xsl:with-param name="namenumber" select="concat('markerstart',$stroke-num)"/> + </xsl:call-template> + </xsl:if> + <xsl:if test="$vchild/v:stroke/@endarrow"> + <xsl:call-template name="CreateArrowStyle"> + <xsl:with-param name="arrow-name" select="$vchild/v:stroke/@endarrow"/> + <xsl:with-param name="namenumber" select="concat('markerend',$stroke-num)"/> + </xsl:call-template> + </xsl:if> + <!--<v:stroke dashstyle="1 1" startarrow="diamond" startarrowwidth="wide" startarrowlength="long" endarrow="block" + endarrowwidth="wide" endarrowlength="long" endcap="round"/> + <draw:stroke-dash draw:name="2 2dots 1 dash" draw:style="rect" draw:dots1="2" draw:dots2="1" draw:dots2-length="0.0795in" + draw:distance="0.102in"/> + Hehe, it needs to be revised--> + </xsl:if> + </xsl:if> + </xsl:template> + <xsl:template name="CreateArrowStyle"> + <!--<draw:marker draw:name="Stupid33" svg:viewBox="0 0 20 30" svg:d="m10 0-10 30h20z"/> --> + <xsl:param name="arrow-name"/> + <xsl:param name="namenumber"/> + <xsl:param name="arrow-weight"/> + <xsl:variable name="svg-box"> + <xsl:choose> + <xsl:when test="$arrow-name = 'block' ">0 0 1131 902</xsl:when> + <xsl:when test="$arrow-name = 'diamond' ">0 0 10 10</xsl:when> + <xsl:when test="$arrow-name = 'open' ">0 0 1122 2243</xsl:when> + <xsl:when test="$arrow-name = 'oval' ">0 0 1131 1131</xsl:when> + <xsl:when test="$arrow-name = 'diamond' ">0 0 1131 1131</xsl:when> + <xsl:when test="$arrow-name = 'classic' ">0 0 1131 1580</xsl:when> + <xsl:otherwise>0 0 1122 2243</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="svg-d"> + <xsl:choose> + <xsl:when test="$arrow-name = 'block' ">m564 0-564 902h1131z</xsl:when> + <!--Symmetric Arrow--> + <xsl:when test="$arrow-name = 'diamond' ">m0 0h10v10h-10z</xsl:when> + <xsl:when test="$arrow-name = 'open' ">m0 2108v17 17l12 42 30 34 38 21 43 4 29-8 30-21 25-26 13-34 343-1532 339 1520 13 42 29 34 39 21 42 4 42-12 34-30 21-42v-39-12l-4 4-440-1998-9-42-25-39-38-25-43-8-42 8-38 25-26 39-8 42z</xsl:when> + <xsl:when test="$arrow-name = 'oval' ">m462 1118-102-29-102-51-93-72-72-93-51-102-29-102-13-105 13-102 29-106 51-102 72-89 93-72 102-50 102-34 106-9 101 9 106 34 98 50 93 72 72 89 51 102 29 106 13 102-13 105-29 102-51 102-72 93-93 72-98 51-106 29-101 13z</xsl:when> + <xsl:when test="$arrow-name = 'diamond' ">m0 564 564 567 567-567-567-564z</xsl:when> + <xsl:when test="$arrow-name = 'classic' ">m1013 1491 118 89-567-1580-564 1580 114-85 136-68 148-46 161-17 161 13 153 46z</xsl:when> + <xsl:otherwise>m0 2108v17 17l12 42 30 34 38 21 43 4 29-8 30-21 25-26 13-34 343-1532 339 1520 13 42 29 34 39 21 42 4 42-12 34-30 21-42v-39-12l-4 4-440-1998-9-42-25-39-38-25-43-8-42 8-38 25-26 39-8 42z</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:element name="draw:marker"> + <xsl:attribute name="draw:name"> + <xsl:value-of select="$namenumber"/> + </xsl:attribute> + <xsl:attribute name="draw:display-name"> + <xsl:value-of select="$namenumber"/> + </xsl:attribute> + <xsl:attribute name="svg:viewBox"> + <xsl:value-of select="$svg-box"/> + </xsl:attribute> + <xsl:attribute name="svg:d"> + <xsl:value-of select="$svg-d"/> + </xsl:attribute> + </xsl:element> + </xsl:template> + <!-- The template MapDashConst Map the const dashstyle to a number manner + It calls the template kickblanks to delete the extra blanks in the dash style here is the map +• Solid (default) • ShortDash "2 2" +• ShortDot "0 2" • ShortDashDot "2 2 0 2" +• ShortDashDotDot "2 2 0 2 0 2" • Dot "1 2" +• Dash "4 2" • LongDash "8 2" +• DashDot "4 2 1 2"• LongDashDot "8 2 1 2" +• LongDashDotDot "8 2 1 2 1 2" +--> + <xsl:template name="MapDashConst"> + <xsl:param name="dashstyle"/> + <xsl:choose> + <xsl:when test="$dashstyle='shortDash'"> 2 2 </xsl:when> + <xsl:when test="$dashstyle='shortDot'"> 0 2 </xsl:when> + <xsl:when test="$dashstyle='shortDashDot'"> 2 2 0 2 </xsl:when> + <xsl:when test="$dashstyle='shortDashDotDot'"> 2 2 0 2 0 2 </xsl:when> + <xsl:when test="$dashstyle='dot'"> 1 2 </xsl:when> + <xsl:when test="$dashstyle='dash'"> 4 2 </xsl:when> + <xsl:when test="$dashstyle='longDash'"> 8 2 </xsl:when> + <xsl:when test="$dashstyle='dashDot'"> 4 2 1 2 </xsl:when> + <xsl:when test="$dashstyle='longDashDot'"> 8 2 1 2 </xsl:when> + <xsl:when test="$dashstyle='longDashDotDot'"> 8 2 1 2 1 2 </xsl:when> + <xsl:otherwise> + <xsl:variable name="str-style" select="concat(' ',$dashstyle ,' ')"/> + <xsl:variable name="cleanstyle"> + <xsl:call-template name="kickblanks"> + <xsl:with-param name="str" select="translate($str-style,' ','-')"/> + </xsl:call-template> + </xsl:variable> + <xsl:value-of select="translate($cleanstyle,'-',' ')"/> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + <!--The template is used to delete the extra blanks from a string.--> + <xsl:template name="kickblanks"> + <xsl:param name="str"/> + <xsl:variable name="tmpstr"> + <xsl:choose> + <xsl:when test="contains($str,'--')"> + <xsl:variable name="str-before"> + <xsl:value-of select="substring-before($str,'--')"/> + </xsl:variable> + <xsl:variable name="str-after"> + <xsl:value-of select="substring-after($str,'--')"/> + </xsl:variable> + <xsl:value-of select="concat($str-before,'-',$str-after)"/> + </xsl:when> + <xsl:when test="contains($str,' ')"> + <xsl:variable name="str-before"> + <xsl:value-of select="substring-before($str,' ')"/> + </xsl:variable> + <xsl:variable name="str-after"> + <xsl:value-of select="substring-after($str,' ')"/> + </xsl:variable> + <xsl:value-of select="concat($str-before,' ',$str-after)"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$str"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:choose> + <xsl:when test="not ( string-length($str) = string-length($tmpstr) )"> + <xsl:variable name="restr"> + <xsl:call-template name="kickblanks"> + <xsl:with-param name="str" select="$tmpstr"/> + </xsl:call-template> + </xsl:variable> + <xsl:value-of select="$restr"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$str"/> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + <xsl:template name="substrcount"> + <xsl:param name="str"/> + <xsl:param name="substr"/> + <xsl:choose> + <xsl:when test="$substr and string-length($str) and contains($str,$substr) and string-length(substring-before($str,$substr)) = 0"> + <xsl:variable name="restr" select="substring-after($str,$substr)"/> + <xsl:variable name="num"> + <xsl:call-template name="substrcount"> + <xsl:with-param name="str" select="$restr"/> + <xsl:with-param name="substr" select="$substr"/> + </xsl:call-template> + </xsl:variable> + <xsl:value-of select="$num+1"/> + </xsl:when> + <xsl:otherwise>0</xsl:otherwise> + </xsl:choose> + </xsl:template> + <xsl:template name="latest-substr-after"> + <xsl:param name="str"/> + <xsl:param name="substr"/> + <xsl:choose> + <xsl:when test="contains($str,$substr) and string-length(substring-before($str,$substr)) = 0"> + <xsl:variable name="restr" select="substring-after($str,$substr)"/> + <xsl:call-template name="latest-substr-after"> + <xsl:with-param name="str" select="$restr"/> + <xsl:with-param name="substr" select="$substr"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$str"/> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + <!--Template get_revised_adj is used to get real adj when adj show two time in the file. --> + <xsl:template name="get_remained_adj"> + <xsl:param name="adj_typeid"/> + <xsl:param name="num"/> + <xsl:param name="mark"/> + <xsl:choose> + <xsl:when test="$num > 0 "> + <xsl:variable name="new_remained_adj"> + <xsl:choose> + <xsl:when test="string-length($adj_typeid) > 0"> + <xsl:call-template name="get_remained_adj"> + <xsl:with-param name="adj_typeid" select="substring-after($adj_typeid,$mark)"/> + <xsl:with-param name="num" select="$num -1"/> + <xsl:with-param name="mark" select="$mark"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise/> + </xsl:choose> + </xsl:variable> + <xsl:value-of select="$new_remained_adj"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$adj_typeid"/> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + <!--Template get_non_omit_adj is used to get the non-omit adj.(e.g. Adj="10,,11" means modifiers="10 0 11").--> + <xsl:template name="get_non_omit_adj"> + <xsl:param name="adj_typeid"/> + <xsl:param name="num"/> + <xsl:param name="mark"/> + <xsl:choose> + <xsl:when test="$num > 0 "> + <xsl:variable name="before" select="substring-before($adj_typeid,',')"/> + <xsl:variable name="after" select="substring-after($adj_typeid,',')"/> + <xsl:variable name="zero_or_itself"> + <xsl:choose> + <xsl:when test="string-length(translate($before, ' ','' ) ) > 0"> + <xsl:value-of select="$before"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="'0'"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="new_non_omit_adj"> + <xsl:call-template name="get_non_omit_adj"> + <xsl:with-param name="adj_typeid" select="$after"/> + <xsl:with-param name="num" select="$num -1"/> + <xsl:with-param name="mark" select="$mark"/> + </xsl:call-template> + </xsl:variable> + <xsl:value-of select="concat($zero_or_itself, ' ',$new_non_omit_adj)"/> + </xsl:when> + <xsl:otherwise> + <xsl:variable name="zero_or_itself"> + <xsl:choose> + <xsl:when test="string-length(translate($adj_typeid, ' ','' ) ) > 0"> + <xsl:value-of select="$adj_typeid"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="'0'"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:value-of select="$zero_or_itself"/> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + <xsl:template name="getstrdashdot"> + <!--Remember the robust!if dashstyle is '2'?What to do!--> + <xsl:param name="dashstyle"/> + <xsl:variable name="dstyle"> + <xsl:variable name="tmpstyle"> + <xsl:call-template name="MapDashConst"> + <xsl:with-param name="dashstyle" select="$dashstyle"/> + </xsl:call-template> + </xsl:variable> + <xsl:value-of select="substring-after($tmpstyle,' ')"/> + </xsl:variable> + <xsl:variable name="dot1" select="substring-before($dstyle,' ')"/> + <xsl:variable name="dot1after" select="substring-after($dstyle,' ')"/> + <xsl:variable name="dot1distance" select="substring-before($dot1after,' ')"/> + <xsl:variable name="modesubstr1" select="concat($dot1,' ',$dot1distance,' ')"/> + <xsl:variable name="dot1n"> + <xsl:call-template name="substrcount"> + <xsl:with-param name="str" select="$dstyle"/> + <xsl:with-param name="substr" select="$modesubstr1"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="dot2substr"> + <xsl:call-template name="latest-substr-after"> + <xsl:with-param name="str" select="$dstyle"/> + <xsl:with-param name="substr" select="$modesubstr1"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="dot2"> + <xsl:choose> + <xsl:when test="string-length($dot2substr) > 3"> + <xsl:value-of select="substring-before($dot2substr,' ')"/> + </xsl:when> + <xsl:otherwise>-1</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="dot2distance"> + <xsl:choose> + <xsl:when test="string-length($dot2substr) > 3"> + <xsl:variable name="tmpstr" select="substring-after($dot2substr,' ')"/> + <xsl:value-of select="substring-before($tmpstr,' ')"/> + </xsl:when> + <xsl:otherwise>-1</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="modesubstr2" select="concat($dot2,' ',$dot2distance,' ') "/> + <xsl:variable name="dot2n"> + <xsl:choose> + <xsl:when test="string-length($dot2substr) > 3"> + <xsl:call-template name="substrcount"> + <xsl:with-param name="str" select="$dot2substr"/> + <xsl:with-param name="substr" select="$modesubstr2"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise>-1</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="valDistance"> + <!--Over all distance is the larger one!--> + <xsl:choose> + <xsl:when test="$dot2distance > $dot1distance"> + <xsl:value-of select="$dot2distance"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$dot1distance"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:value-of select="concat('dol:',$dot1,';don:',$dot1n,';dist:',$valDistance,';dtl:',$dot2,';dtn:',$dot2n,';eddtn')"/> + <!--<xsl:choose> + <xsl:when test="$dashstyle='1 1' or $dashstyle='Dots'"> + <xsl:variable name="do"><xsl:value-of select="'1'"/></xsl:variable> + <xsl:variable name="dol"><xsl:value-of select="$do * $cmweight"/></xsl:variable> + <xsl:variable name="ds"><xsl:value-of select="'1'"/></xsl:variable> + <xsl:variable name="dsl"><xsl:value-of select="$ds * $cmweight"/></xsl:variable> + <xsl:variable name="dt"><xsl:value-of select="'-1'"/></xsl:variable> + <xsl:variable name="dtl"><xsl:value-of select="'-1'"/></xsl:variable> + <xsl:value-of select="concat('dsl:',$dsl,'edsl','do:',$do, 'edo;','do')"/> + </xsl:when> + </xsl:choose>--> + </xsl:template> + <xsl:template match="w:pict" mode="style"> + <xsl:apply-templates mode="style" select="v:*"/> + </xsl:template> + <xsl:template match="v:*" mode="style"> + <xsl:variable name="vchild" select="."/> + <xsl:variable name="style" select="concat($vchild/@style, ';')"/> + <xsl:variable name="z-index" select="substring-before(substring-after($style,'z-index:'),';')"/> + <xsl:variable name="right-name" select="not(name($vchild) = 'v:formulas') and not(name($vchild) = 'v:f') and not(name($vchild) = 'v:shapetype')"/> + <xsl:variable name="def" select="string-length($style) > 0 or $vchild/@stroke or $vchild/@stroked or $vchild/@strokecolor or $vchild/v:stroke or $vchild/@strokeweight or $vchild/@wrapcoords or $vchild/@fillcolor"/> + <xsl:choose> + <xsl:when test="$right-name and ($def or (number($z-index) < 0))"> + <xsl:element name="style:style"> + <xsl:attribute name="style:name">Tgr<xsl:number from="/w:wordDocument/w:body" level="any" count="v:*" format="1"/> + </xsl:attribute> + <xsl:attribute name="style:family">graphic</xsl:attribute> + <xsl:variable name="stroke-num"> + <xsl:if test="$vchild/v:stroke"> + <xsl:number from="/w:wordDocument/w:body" level="any" count="v:stroke" format="1"/> + </xsl:if> + </xsl:variable> + <xsl:variable name="draw-stroke"> + <xsl:variable name="dashstyle" select="$vchild/v:stroke/@dashstyle"/> + <xsl:choose> + <xsl:when test="$vchild/@stroked and $vchild/@stroked='f'">none</xsl:when> + <xsl:when test="$dashstyle and not ($dashstyle = 'solid')"> + <xsl:value-of select="concat('Tdash',$stroke-num)"/> + </xsl:when> + <xsl:otherwise/> + </xsl:choose> + </xsl:variable> + <xsl:element name="style:graphic-properties"> + <xsl:variable name="style-str" select="concat(@style,';')"/> + <xsl:choose> + <xsl:when test="number($z-index) < 0 or (name($vchild) = 'v:group' and $vchild/@editas ='canvas' )"> + <xsl:attribute name="style:wrap">run-through</xsl:attribute> + <xsl:attribute name="style:run-through">background</xsl:attribute> + <xsl:attribute name="style:flow-with-text">false</xsl:attribute> + <xsl:attribute name="fo:border">none</xsl:attribute> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="style:wrap">run-through</xsl:attribute> + <xsl:attribute name="style:run-through">foreground</xsl:attribute> + <xsl:attribute name="style:flow-with-text">false</xsl:attribute> + </xsl:otherwise> + </xsl:choose> + <xsl:choose> + <xsl:when test="contains($style-str,'mso-position-horizontal:')"> + <xsl:attribute name="style:horizontal-pos"> + <xsl:value-of select="substring-before( substring-after( $style-str , 'mso-position-horizontal:') , ';')"/> + </xsl:attribute> + </xsl:when> + <xsl:when test="v:imagedata or v:textbox"> + <xsl:attribute name="style:horizontal-pos">from-left</xsl:attribute> + </xsl:when> + </xsl:choose> + <xsl:if test="parent::w:pict/o:OLEObject"> + <xsl:variable name="width" select="substring-before( substring-after($style,'width:') ,';')"/> + <xsl:variable name="height" select="substring-before(substring-after($style,'height:'),';')"/> + <xsl:attribute name="draw:visible-area-left">0cm</xsl:attribute> + <xsl:attribute name="draw:visible-area-top">0cm</xsl:attribute> + <xsl:attribute name="draw:visible-area-width"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$width"/> + </xsl:call-template> + </xsl:attribute> + <xsl:attribute name="draw:visible-area-height"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$height"/> + </xsl:call-template> + </xsl:attribute> + <xsl:attribute name="draw:ole-draw-aspect"> + <!-- DVASPECT_CONTENT = 1, + DVASPECT_THUMBNAIL = 2, + DVASPECT_ICON = 4, + DVASPECT_DOCPRINT = 8 --> + <xsl:variable name="ms-aspect" select="parent::w:pict/o:OLEObject/@DrawAspect"/> + <xsl:choose> + <xsl:when test="$ms-aspect = 'Content'">1</xsl:when> + <xsl:when test="$ms-aspect = 'Thumbnail'">2</xsl:when> + <xsl:when test="$ms-aspect = 'Icon'">4</xsl:when> + <xsl:when test="$ms-aspect = 'Docprint'">8</xsl:when> + <xsl:otherwise>1</xsl:otherwise> + </xsl:choose> + </xsl:attribute> + </xsl:if> + <xsl:choose> + <xsl:when test="parent::w:pict/o:OLEObject"> + <xsl:attribute name="style:vertical-pos">middle</xsl:attribute> + <xsl:attribute name="style:vertical-rel">baseline</xsl:attribute> + </xsl:when> + <xsl:when test="contains($style-str,'mso-position-vertical:')"> + <xsl:attribute name="style:vertical-pos"> + <xsl:value-of select="substring-before( substring-after( $style-str , 'mso-position-vertical:') , ';')"/> + </xsl:attribute> + </xsl:when> + <xsl:when test="v:imagedata or v:textbox"> + <xsl:attribute name="style:vertical-pos">from-top</xsl:attribute> + </xsl:when> + </xsl:choose> + <xsl:if test="string-length($draw-stroke) > 0"> + <!--draw:stroke="dash" draw:stroke-dash="Ohon!Ultrafine dashed" --> + <xsl:choose> + <xsl:when test="not ($draw-stroke = 'none')"> + <xsl:attribute name="draw:stroke"> + <xsl:value-of select="'dash'"/> + </xsl:attribute> + <xsl:attribute name="draw:stroke-dash"> + <xsl:value-of select="$draw-stroke"/> + </xsl:attribute> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="draw:stroke"> + <xsl:value-of select="'none'"/> + </xsl:attribute> + </xsl:otherwise> + </xsl:choose> + </xsl:if> + <xsl:if test="$vchild/v:stroke/@startarrow"> + <!--<v:stroke startarrow="block" startarrowwidth="wide" startarrowlength="long"/--> + <xsl:attribute name="draw:marker-start"> + <xsl:value-of select="concat('markerstart',$stroke-num)"/> + </xsl:attribute> + </xsl:if> + <xsl:if test="$vchild/v:stroke/@endarrow"> + <!--<v:stroke startarrow="block" startarrowwidth="wide" startarrowlength="long"/--> + <xsl:attribute name="draw:marker-end"> + <xsl:value-of select="concat('markerend',$stroke-num)"/> + </xsl:attribute> + </xsl:if> + <xsl:if test="$vchild/@strokeweight"> + <xsl:attribute name="svg:stroke-width"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$vchild/@strokeweight"/> + </xsl:call-template> + </xsl:attribute> + </xsl:if> + <xsl:if test="$vchild/@strokecolor"> + <xsl:attribute name="svg:stroke-color"> + <xsl:call-template name="MapConstColor"> + <xsl:with-param name="color" select="$vchild/@strokecolor"/> + </xsl:call-template> + </xsl:attribute> + </xsl:if> + <xsl:if test="$vchild/@fillcolor"> + <xsl:attribute name="draw:fill-color"> + <xsl:call-template name="MapConstColor"> + <xsl:with-param name="color" select="$vchild/@fillcolor"/> + </xsl:call-template> + </xsl:attribute> + </xsl:if> + <xsl:if test="not($vchild/@fillcolor)"> + <xsl:choose> + <xsl:when test="ancestor::v:group | v:shadow"> + <xsl:attribute name="draw:fill-color">#ffffff</xsl:attribute> + </xsl:when> + <xsl:when test="not($vchild/v:fill) and not(v:shadow)"> + <xsl:attribute name="draw:fill">none</xsl:attribute> + </xsl:when> + </xsl:choose> + </xsl:if> + <xsl:if test="$vchild/v:fill/@opacity"> + <xsl:attribute name="draw:opacity"> + <xsl:call-template name="convert2percent"> + <xsl:with-param name="value" select="$vchild/v:fill/@opacity"/> + </xsl:call-template> + </xsl:attribute> + </xsl:if> + <xsl:if test="$vchild/v:fill/@type = 'pattern' or $vchild/v:fill/@type = 'tile' or $vchild/v:fill/@type = 'frame'"> + <xsl:attribute name="draw:fill">bitmap</xsl:attribute> + <xsl:attribute name="draw:fill-image-name"> + <xsl:value-of select="translate($vchild/v:fill/@src,'	  :/.','' ) "/> + </xsl:attribute> + </xsl:if> + <xsl:if test="$vchild/v:fill/@type = 'gradient'"> + <xsl:attribute name="draw:fill">gradient</xsl:attribute> + <xsl:attribute name="draw:fill-gradient-name"> + <xsl:value-of select=" 'gradient' "/> + <xsl:apply-templates mode="get-xsl-number" select="$vchild/v:fill"/> + </xsl:attribute> + </xsl:if> + <xsl:apply-templates mode="style" select="v:shadow"/> + </xsl:element> + </xsl:element> + </xsl:when> + <xsl:otherwise> + <!--Default style which will surely be removed during imported from a .flat file to SO--> + <xsl:element name="style:style"> + <xsl:attribute name="style:name">Tgr<xsl:number from="/w:wordDocument/w:body" level="any" count="v:*" format="1"/> + </xsl:attribute> + <xsl:attribute name="style:family">graphic</xsl:attribute> + <style:graphic-properties draw:textarea-horizontal-align="center" draw:textarea-vertical-align="middle" style:wrap="none" draw:fill="none"/> + </xsl:element> + </xsl:otherwise> + </xsl:choose> + <xsl:if test="name() = 'v:group'"> + <xsl:apply-templates mode="style" select="v:*"/> + </xsl:if> + <xsl:apply-templates mode="style" select="v:textpath"/> + </xsl:template> + <xsl:template match="v:shadow" mode="style"> + <!-- v:shadow on="t" color="aqua" opacity=".5" offset="13pt,11pt" offset2="14pt,10pt" --> + <xsl:attribute name="draw:shadow"> + <xsl:choose> + <xsl:when test="contains(@on,'f')">hidden</xsl:when> + <xsl:otherwise>visible</xsl:otherwise> + </xsl:choose> + </xsl:attribute> + <xsl:attribute name="draw:shadow-color"> + <xsl:call-template name="MapConstColor"> + <xsl:with-param name="color" select="@color"/> + </xsl:call-template> + </xsl:attribute> + <xsl:if test="string-length(@opacity) >0"> + <xsl:attribute name="draw:shadow-opacity"> + <xsl:call-template name="convert2percent"> + <xsl:with-param name="value" select="@opacity"/> + </xsl:call-template> + </xsl:attribute> + </xsl:if> + <xsl:choose> + <xsl:when test="contains(@offset,',')"> + <xsl:attribute name="draw:shadow-offset-x"> + <xsl:call-template name="ConvertMeasure"> + <xsl:with-param name="value" select="substring-before(@offset,',')"/> + <xsl:with-param name="TargetMeasure" select=" 'cm' "/> + </xsl:call-template> + <xsl:value-of select="'cm'"/> + </xsl:attribute> + <xsl:attribute name="draw:shadow-offset-y"> + <xsl:call-template name="ConvertMeasure"> + <xsl:with-param name="value" select="substring-after(@offset,',')"/> + <xsl:with-param name="TargetMeasure" select=" 'cm' "/> + </xsl:call-template> + <xsl:value-of select="'cm'"/> + </xsl:attribute> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="draw:shadow-offset-x"> + <xsl:call-template name="ConvertMeasure"> + <xsl:with-param name="value" select="@offset"/> + <xsl:with-param name="TargetMeasure" select=" 'cm' "/> + </xsl:call-template> + <xsl:value-of select="'cm'"/> + </xsl:attribute> + <xsl:attribute name="draw:shadow-offset-y">0.062cm</xsl:attribute> + </xsl:otherwise> + </xsl:choose> + <xsl:if test="@type='perspective' and @offset='0,0'"> + <xsl:message>This kind of shadow does not support yet.</xsl:message> + </xsl:if> + </xsl:template> + <xsl:template name="convert2percent"> + <xsl:param name="value"/> + <xsl:choose> + <xsl:when test="contains($value,'%')"> + <xsl:value-of select="$value"/> + </xsl:when> + <xsl:when test="contains($value,'f')"> + <xsl:variable name="num-value" select="round(substring-before($value,'f') div 6.5536) div 100"/> + <xsl:value-of select="concat(100 - $num-value ,'%')"/> + </xsl:when> + <xsl:when test="string-length($value) = 0"> + <xsl:value-of select="'1%'"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="concat($value * 100 ,'%')"/> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + <xsl:template match="w:pict"> + <xsl:param name="x-scale" select="1"/> + <xsl:param name="y-scale" select="1"/> + <xsl:param name="group-left" select="0"/> + <xsl:param name="group-top" select="0"/> + <xsl:param name="coord-left" select="0"/> + <xsl:param name="coord-top" select="0"/> + <xsl:param name="MeasureMark"/> + <xsl:apply-templates> + <xsl:with-param name="x-scale" select="$x-scale"/> + <xsl:with-param name="y-scale" select="$x-scale"/> + <xsl:with-param name="MeasureMark" select="$MeasureMark"/> + <xsl:with-param name="group-left" select="$group-left"/> + <xsl:with-param name="group-top" select="$group-top"/> + <xsl:with-param name="coord-left" select="$coord-left"/> + <xsl:with-param name="coord-top" select="$coord-top"/> + </xsl:apply-templates> + </xsl:template> + <xsl:template name="get-middle-substring"> + <xsl:param name="string"/> + <xsl:param name="prefix"/> + <xsl:param name="suffix"/> + <xsl:if test="contains($string, $prefix)"> + <xsl:choose> + <xsl:when test="contains(substring-after( $string, $prefix), $suffix)"> + <xsl:value-of select="substring-before(substring-after( $string, $prefix), $suffix)"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="substring-after( $string, $prefix)"/> + </xsl:otherwise> + </xsl:choose> + </xsl:if> + </xsl:template> + <xsl:template match="w:binData"> + </xsl:template> + <xsl:template match="v:group"> + <xsl:param name="x-scale" select="1"/> + <xsl:param name="y-scale" select="1"/> + <xsl:param name="MeasureMark"/> + <xsl:param name="group-left" select="0"/> + <xsl:param name="group-top" select="0"/> + <xsl:param name="coord-left" select="0"/> + <xsl:param name="coord-top" select="0"/> + <xsl:variable name="style" select="concat(@style, ';')"/> + <xsl:variable name="left"> + <xsl:variable name="direct-left" select="substring-before(substring-after($style,';left:'),';')"/> + <xsl:variable name="margin-left" select="substring-before( substring-after($style,'margin-left:') ,';')"/> + <xsl:call-template name="Add-with-Measure"> + <xsl:with-param name="value1" select="$margin-left"/> + <xsl:with-param name="value2" select="$direct-left"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="top"> + <xsl:variable name="direct-top" select="substring-before(substring-after($style,';top:'),';')"/> + <xsl:variable name="margin-top" select="substring-before( substring-after($style,'margin-top:') ,';')"/> + <xsl:call-template name="Add-with-Measure"> + <xsl:with-param name="value1" select="$margin-top"/> + <xsl:with-param name="value2" select="$direct-top"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="width" select="substring-before( substring-after($style,'width:') ,';')"/> + <xsl:variable name="height" select="substring-before(substring-after($style,'height:'),';')"/> + <xsl:variable name="Current-coord-left"> + <xsl:call-template name="get-number"> + <xsl:with-param name="value" select="substring-before(@coordorigin, ',' )"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="Current-coord-top"> + <xsl:call-template name="get-number"> + <xsl:with-param name="value" select="substring-after(@coordorigin, ',' )"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="Current-coord-width"> + <xsl:call-template name="get-number"> + <xsl:with-param name="value" select="substring-before(@coordsize, ',' )"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="Current-coord-height"> + <xsl:call-template name="get-number"> + <xsl:with-param name="value" select="substring-after(@coordsize, ',' )"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="Current-MeasureMark"> + <xsl:choose> + <xsl:when test="string-length($MeasureMark) > 0"> + <xsl:value-of select="$MeasureMark"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select=" 'cm' "/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="left-value"> + <xsl:variable name="adjusted-left"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$left"/> + <xsl:with-param name="scale" select="$x-scale"/> + <xsl:with-param name="MeasureMark" select="$Current-MeasureMark"/> + <xsl:with-param name="Target-Measure" select="$Current-MeasureMark"/> + <xsl:with-param name="group-value" select="$group-left"/> + <xsl:with-param name="coord-value" select="$coord-left"/> + </xsl:call-template> + </xsl:variable> + <xsl:call-template name="get-number"> + <xsl:with-param name="value" select="$adjusted-left"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="top-value"> + <xsl:variable name="adjusted-top"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$top"/> + <xsl:with-param name="scale" select="$x-scale"/> + <xsl:with-param name="MeasureMark" select="$Current-MeasureMark"/> + <xsl:with-param name="Target-Measure" select="$Current-MeasureMark"/> + <xsl:with-param name="group-value" select="$group-left"/> + <xsl:with-param name="coord-value" select="$coord-left"/> + </xsl:call-template> + </xsl:variable> + <xsl:call-template name="get-number"> + <xsl:with-param name="value" select="$adjusted-top"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="width-value"> + <xsl:variable name="adjusted-width"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$width"/> + <xsl:with-param name="scale" select="$x-scale"/> + <xsl:with-param name="MeasureMark" select="$Current-MeasureMark"/> + <xsl:with-param name="Target-Measure" select="$Current-MeasureMark"/> + <xsl:with-param name="group-value" select="$group-left"/> + <xsl:with-param name="coord-value" select="$coord-left"/> + </xsl:call-template> + </xsl:variable> + <xsl:call-template name="get-number"> + <xsl:with-param name="value" select="$adjusted-width"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="height-value"> + <xsl:variable name="adjusted-height"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$height"/> + <xsl:with-param name="scale" select="$y-scale"/> + <xsl:with-param name="MeasureMark" select="$Current-MeasureMark"/> + <xsl:with-param name="Target-Measure" select="$Current-MeasureMark"/> + <xsl:with-param name="group-value" select="$group-left"/> + <xsl:with-param name="coord-value" select="$coord-left"/> + </xsl:call-template> + </xsl:variable> + <xsl:call-template name="get-number"> + <xsl:with-param name="value" select="$adjusted-height"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="Current-x-scale" select="( $Current-coord-width div $width-value ) * $x-scale"/> + <xsl:variable name="Current-y-scale" select="( $Current-coord-height div $height-value ) * $y-scale"/> + <xsl:choose> + <xsl:when test="@editas='canvas' "> + <!-- frame --> + <xsl:variable name="style-name">Tgr<xsl:number from="/w:wordDocument/w:body" level="any" count="v:*" format="1"/> + </xsl:variable> + <xsl:variable name="frame-name">frame<xsl:number from="/w:wordDocument/w:body" level="any" count="v:group" format="1"/> + </xsl:variable> + <draw:frame draw:style-name="{$style-name}" draw:name="{$frame-name}" text:anchor-type="as-char" svg:x="{$left-value}{$Current-MeasureMark}" svg:y="{$top-value}{$Current-MeasureMark}" svg:width="{$width-value}{$Current-MeasureMark}" svg:height="{$height-value}{$Current-MeasureMark}" draw:z-index="0"> + <draw:text-box> + <text:p text:style-name="Drawing"> + <xsl:apply-templates select="w:r/w:pict | v:*"> + <xsl:with-param name="x-scale" select="$Current-x-scale"/> + <xsl:with-param name="y-scale" select="$Current-y-scale"/> + <xsl:with-param name="MeasureMark" select="$Current-MeasureMark"/> + <xsl:with-param name="group-left" select="$left-value"/> + <xsl:with-param name="group-top" select="$top-value"/> + <xsl:with-param name="coord-left" select="$Current-coord-left"/> + <xsl:with-param name="coord-top" select="$Current-coord-top"/> + </xsl:apply-templates> + </text:p> + </draw:text-box> + </draw:frame> + </xsl:when> + <xsl:otherwise> + <xsl:element name="draw:g"> + <xsl:apply-templates select="w:r/w:pict | v:*"> + <xsl:with-param name="x-scale" select="$Current-x-scale"/> + <xsl:with-param name="y-scale" select="$Current-y-scale"/> + <xsl:with-param name="MeasureMark" select="$Current-MeasureMark"/> + <xsl:with-param name="group-left" select="$left-value"/> + <xsl:with-param name="group-top" select="$top-value"/> + <xsl:with-param name="coord-left" select="$Current-coord-left"/> + <xsl:with-param name="coord-top" select="$Current-coord-top"/> + </xsl:apply-templates> + </xsl:element> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + <xsl:template match="v:*"> + <xsl:param name="x-scale" select="1"/> + <xsl:param name="y-scale" select="1"/> + <xsl:param name="MeasureMark"/> + <xsl:param name="group-left" select="0"/> + <xsl:param name="group-top" select="0"/> + <xsl:param name="coord-left" select="0"/> + <xsl:param name="coord-top" select="0"/> + <xsl:if test="not (name() = 'v:shapetype' )"> + <xsl:call-template name="DrawElements"> + <xsl:with-param name="x-scale" select="$x-scale"/> + <xsl:with-param name="y-scale" select="$y-scale"/> + <xsl:with-param name="MeasureMark" select="$MeasureMark"/> + <xsl:with-param name="group-left" select="$group-left"/> + <xsl:with-param name="group-top" select="$group-top"/> + <xsl:with-param name="coord-left" select="$coord-left"/> + <xsl:with-param name="coord-top" select="$coord-top"/> + </xsl:call-template> + </xsl:if> + </xsl:template> + <xsl:template name="DrawElements"> + <xsl:param name="x-scale" select="1"/> + <xsl:param name="y-scale" select="1"/> + <xsl:param name="MeasureMark"/> + <xsl:param name="group-left" select="0"/> + <xsl:param name="group-top" select="0"/> + <xsl:param name="coord-left" select="0"/> + <xsl:param name="coord-top" select="0"/> + <xsl:param name="force-draw" select="'false'"/> + <xsl:param name="shape-type"/> + <xsl:variable name="wordshapename" select="substring-after(name(),':')"/> + <xsl:variable name="custom_shapename"> + <xsl:if test="$wordshapename='roundrect' ">round-rectangle</xsl:if> + <xsl:if test="$wordshapename='shape' and not (v:imagedata) and not (v:textbox) and @type"> + <xsl:call-template name="ms_word_draw_map2ooo_custom_draw"> + <xsl:with-param name="ms_word_draw_type" select="@type"/> + </xsl:call-template> + </xsl:if> + </xsl:variable> + <xsl:variable name="is-image" select="$wordshapename='shape' and v:imagedata"/> + <xsl:variable name="element-name"> + <xsl:choose> + <xsl:when test="$wordshapename='line'">draw:line</xsl:when> + <xsl:when test="$wordshapename='rect'">draw:rect</xsl:when> + <xsl:when test="$wordshapename='oval'">draw:ellipse</xsl:when> + <xsl:when test="$wordshapename='arc'">draw:ellipse</xsl:when> + <xsl:when test="$wordshapename='polyline'">draw:polyline</xsl:when> + <xsl:when test="$wordshapename='roundrect' ">draw:custom-shape</xsl:when> + <xsl:when test="$wordshapename='shape' and v:imagedata">draw:frame</xsl:when> + <xsl:when test="$wordshapename='shape' and not (v:imagedata) and @type"> + <xsl:choose> + <xsl:when test="string-length($custom_shapename) > 0">draw:custom-shape</xsl:when> + <xsl:when test=" string-length(@type) > 0 and key('shapetype',@type)">draw:custom-shape</xsl:when> + <xsl:otherwise>draw:rect</xsl:otherwise> + <!--if nothing match it, we prefer rect--> + </xsl:choose> + </xsl:when> + <xsl:when test="$wordshapename='shape' and v:textbox">draw:frame</xsl:when> + <!--changed here!--> + <xsl:otherwise>draw:path</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="wfill" select="@fill"/> + <xsl:variable name="draw-kind"> + <xsl:if test="$wordshapename='arc' and string-length($wfill) > 0">arc</xsl:if> + <!--Means this is a Segment of Circle--> + </xsl:variable> + <!--Get the position,left,top,width,height,z-index,flip from Style--> + <xsl:variable name="style" select="concat(@style, ';')"/> + <xsl:variable name="position" select="substring-before(substring-after($style,'position:'),';')"/> + <xsl:variable name="direct-left" select="substring-before(substring-after($style,';left:'),';')"/> + <xsl:variable name="left"> + <xsl:variable name="margin-left" select="substring-before( substring-after($style,'margin-left:') ,';')"/> + <xsl:call-template name="Add-with-Measure"> + <xsl:with-param name="value1" select="$margin-left"/> + <xsl:with-param name="value2" select="$direct-left"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="direct-top" select="substring-before(substring-after($style,';top:'),';')"/> + <xsl:variable name="top"> + <xsl:variable name="margin-top" select="substring-before( substring-after($style,'margin-top:') ,';')"/> + <xsl:call-template name="Add-with-Measure"> + <xsl:with-param name="value1" select="$margin-top"/> + <xsl:with-param name="value2" select="$direct-top"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="width" select="substring-before( substring-after($style,'width:') ,';')"/> + <xsl:variable name="height" select="substring-before(substring-after($style,'height:'),';')"/> + <xsl:variable name="flip" select="substring-before(substring-after($style,'flip:'),';')"/> + <xsl:variable name="z-index" select="substring-before(substring-after($style,'z-index:'),';')"/> + <!--these are used for wrap margins get from style--> + <xsl:variable name="mso-wrap-distance-lefttmp" select="substring-after($style,'mso-wrap-distance-left:')"/> + <xsl:variable name="mso-wrap-distance-left" select="substring-before($mso-wrap-distance-lefttmp,';')"/> + <xsl:variable name="mso-wrap-distance-toptmp" select="substring-after($style,'mso-wrap-distance-top:')"/> + <xsl:variable name="mso-wrap-distance-top" select="substring-before($mso-wrap-distance-toptmp,';')"/> + <xsl:variable name="mso-wrap-distance-righttmp" select="substring-after($style,'mso-wrap-distance-right:')"/> + <xsl:variable name="mso-wrap-distance-right" select="substring-before($mso-wrap-distance-righttmp,';')"/> + <xsl:variable name="mso-wrap-distance-bottomtmp" select="substring-after($style,'mso-wrap-distance-bottom:')"/> + <xsl:variable name="mso-wrap-distance-bottom" select="substring-before($mso-wrap-distance-bottomtmp,';')"/> + <xsl:variable name="mso-position-horizontal-relativetmp" select="substring-after($style,'mso-position-horizontal-relative:')"/> + <xsl:variable name="mso-position-horizontal-relative" select="substring-before($mso-position-horizontal-relativetmp,';')"/> + <xsl:variable name="mso-position-vertical-relativetmp" select="substring-after($style,'mso-position-vertical-relative:')"/> + <xsl:variable name="mso-position-vertical-relative" select="substring-before($mso-position-vertical-relativetmp,';')"/> + <xsl:variable name="anchor-type"> + <xsl:choose> + <xsl:when test="$mso-position-vertical-relative='page' or $mso-position-horizontal-relative = 'page'">page</xsl:when> + <xsl:when test="$position='absolute'">paragraph</xsl:when> + <xsl:otherwise>as-char</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="text-style-name"> + <xsl:choose> + <xsl:when test="descendant::v:textbox">P1</xsl:when> + <xsl:when test="v:textpath">textpath<xsl:apply-templates mode="get-xsl-number" select="v:textpath"/> + </xsl:when> + <!--Should get the real style late--> + <xsl:otherwise>P1</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:element name="{$element-name}"> + <xsl:if test="$element-name = 'draw:frame'"> + <xsl:attribute name="draw:name"> + <xsl:value-of select="'frame'"/> + <xsl:number from="/w:wordDocument/w:body" level="any" count="v:*" format="1"/> + </xsl:attribute> + </xsl:if> + <xsl:if test="$element-name ='draw:path'"> + <xsl:choose> + <xsl:when test="string-length(@path) = 0"> + <xsl:attribute name="svg:d">M 0,0 L 0,0</xsl:attribute> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="svg:d"> + <xsl:call-template name="vmlpath2svgpath"> + <xsl:with-param name="vml-path" select="@path"/> + </xsl:call-template> + </xsl:attribute> + </xsl:otherwise> + </xsl:choose> + </xsl:if> + <xsl:if test="$element-name ='draw:path' or $wordshapename='polyline'"> + <xsl:attribute name="svg:viewBox"> + <xsl:value-of select="'0 0'"/> + <xsl:value-of select="' '"/> + <xsl:if test="string-length(@coordsize) = 0"> + <xsl:value-of select="'1000 1000'"/> + </xsl:if> + <xsl:if test="not(string-length(@coordsize) = 0)"> + <xsl:value-of select="translate(@coordsize,',',' ')"/> + </xsl:if> + </xsl:attribute> + </xsl:if> + <xsl:if test="contains($style,'rotation:')"> + <xsl:attribute name="draw:transform"> + <xsl:variable name="rotate"> + <xsl:call-template name="convert2redian"> + <xsl:with-param name="x" select="substring-before(substring-after($style,'rotation:') , ';')"/> + </xsl:call-template> + </xsl:variable> + <xsl:value-of select="concat( 'rotate(' , $rotate * -1 , ')' )"/> + </xsl:attribute> + </xsl:if> + <xsl:attribute name="text:anchor-type"> + <xsl:value-of select="$anchor-type"/> + <!--This need to be checkout and built!--> + </xsl:attribute> + <xsl:if test="string-length($z-index) > 0"> + <xsl:if test="number($z-index) < 0"> + <xsl:attribute name="draw:z-index"> + <xsl:value-of select="'0'"/> + </xsl:attribute> + </xsl:if> + <xsl:if test="not(number($z-index) < 0)"> + <xsl:attribute name="draw:z-index"> + <xsl:value-of select="$z-index"/> + </xsl:attribute> + </xsl:if> + </xsl:if> + <xsl:attribute name="draw:style-name">Tgr<xsl:number from="/w:wordDocument/w:body" level="any" count="v:*" format="1"/> + </xsl:attribute> + <xsl:attribute name="draw:text-style-name"> + <xsl:value-of select="$text-style-name"/> + <!--This is difficult!!--> + </xsl:attribute> + <xsl:if test="$wordshapename='line'"> + <xsl:variable name="fromx" select="substring-before(@from,',')"/> + <xsl:variable name="fromy" select="substring-after(@from,',')"/> + <xsl:variable name="tox" select="substring-before(@to,',')"/> + <xsl:variable name="toy" select="substring-after(@to,',')"/> + <xsl:variable name="valfromx"> </xsl:variable> + <xsl:if test="$anchor-type='as-char'"> + <xsl:attribute name="svg:x1"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$fromx"/> + <xsl:with-param name="scale" select="$x-scale"/> + <xsl:with-param name="MeasureMark" select="$MeasureMark"/> + <xsl:with-param name="group-value" select="$group-left"/> + <xsl:with-param name="coord-value" select="$coord-left"/> + </xsl:call-template> + </xsl:attribute> + <xsl:attribute name="svg:y1"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$fromy"/> + <xsl:with-param name="scale" select="$y-scale"/> + <xsl:with-param name="MeasureMark" select="$MeasureMark"/> + <xsl:with-param name="group-value" select="$group-top"/> + <xsl:with-param name="coord-value" select="$coord-top"/> + </xsl:call-template> + </xsl:attribute> + <xsl:attribute name="svg:x2"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$tox"/> + <xsl:with-param name="scale" select="$x-scale"/> + <xsl:with-param name="MeasureMark" select="$MeasureMark"/> + <xsl:with-param name="group-value" select="$group-left"/> + <xsl:with-param name="coord-value" select="$coord-left"/> + </xsl:call-template> + </xsl:attribute> + <xsl:attribute name="svg:y2"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$toy"/> + <xsl:with-param name="scale" select="$y-scale"/> + <xsl:with-param name="MeasureMark" select="$MeasureMark"/> + <xsl:with-param name="group-value" select="$group-top"/> + <xsl:with-param name="coord-value" select="$coord-top"/> + </xsl:call-template> + </xsl:attribute> + </xsl:if> + <xsl:if test="not ($anchor-type='as-char')"> + <xsl:attribute name="svg:x1"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$fromx"/> + <xsl:with-param name="scale" select="$x-scale"/> + <xsl:with-param name="MeasureMark" select="$MeasureMark"/> + <xsl:with-param name="group-value" select="$group-left"/> + <xsl:with-param name="coord-value" select="$coord-left"/> + </xsl:call-template> + </xsl:attribute> + <xsl:attribute name="svg:y1"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$toy"/> + <xsl:with-param name="scale" select="$y-scale"/> + <xsl:with-param name="MeasureMark" select="$MeasureMark"/> + <xsl:with-param name="group-value" select="$group-top"/> + <xsl:with-param name="coord-value" select="$coord-top"/> + </xsl:call-template> + </xsl:attribute> + <xsl:attribute name="svg:x2"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$tox"/> + <xsl:with-param name="scale" select="$x-scale"/> + <xsl:with-param name="MeasureMark" select="$MeasureMark"/> + <xsl:with-param name="group-value" select="$group-left"/> + <xsl:with-param name="coord-value" select="$coord-left"/> + </xsl:call-template> + </xsl:attribute> + <xsl:attribute name="svg:y2"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$fromy"/> + <xsl:with-param name="scale" select="$y-scale"/> + <xsl:with-param name="MeasureMark" select="$MeasureMark"/> + <xsl:with-param name="group-value" select="$group-top"/> + <xsl:with-param name="coord-value" select="$coord-top"/> + </xsl:call-template> + </xsl:attribute> + </xsl:if> + </xsl:if> + <xsl:if test="$wordshapename='rect' or $wordshapename='oval' or $wordshapename='arc' or $wordshapename='shape' or $wordshapename='polyline' or ($wordshapename='shape' and v:textbox) or ($wordshapename='roundrect' and v:textbox) "> + <xsl:if test="$anchor-type='as-char'"> + <xsl:attribute name="svg:width"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$width"/> + <xsl:with-param name="scale" select="$x-scale"/> + <xsl:with-param name="MeasureMark" select="$MeasureMark"/> + </xsl:call-template> + </xsl:attribute> + <xsl:attribute name="svg:height"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$height"/> + <xsl:with-param name="scale" select="$y-scale"/> + <xsl:with-param name="MeasureMark" select="$MeasureMark"/> + </xsl:call-template> + </xsl:attribute> + <xsl:attribute name="svg:x"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$left"/> + <xsl:with-param name="scale" select="$x-scale"/> + <xsl:with-param name="MeasureMark" select="$MeasureMark"/> + <xsl:with-param name="group-value" select="$group-left"/> + <xsl:with-param name="coord-value" select="$coord-left"/> + </xsl:call-template> + </xsl:attribute> + <xsl:attribute name="svg:y"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$top"/> + <xsl:with-param name="scale" select="$y-scale"/> + <xsl:with-param name="MeasureMark" select="$MeasureMark"/> + <xsl:with-param name="group-value" select="$group-top"/> + <xsl:with-param name="coord-value" select="$coord-top"/> + </xsl:call-template> + </xsl:attribute> + </xsl:if> + <xsl:if test="not ($anchor-type='as-char')"> + <!--Something has to be down because We have Margin-top options--> + <xsl:attribute name="svg:width"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$width"/> + <xsl:with-param name="scale" select="$x-scale"/> + <xsl:with-param name="MeasureMark" select="$MeasureMark"/> + </xsl:call-template> + </xsl:attribute> + <xsl:attribute name="svg:height"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$height"/> + <xsl:with-param name="scale" select="$y-scale"/> + <xsl:with-param name="MeasureMark" select="$MeasureMark"/> + </xsl:call-template> + </xsl:attribute> + <xsl:attribute name="svg:x"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$left"/> + <xsl:with-param name="scale" select="$x-scale"/> + <xsl:with-param name="MeasureMark" select="$MeasureMark"/> + <xsl:with-param name="group-value" select="$group-left"/> + <xsl:with-param name="coord-value" select="$coord-left"/> + </xsl:call-template> + </xsl:attribute> + <xsl:attribute name="svg:y"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$top"/> + <xsl:with-param name="scale" select="$y-scale"/> + <xsl:with-param name="MeasureMark" select="$MeasureMark"/> + <xsl:with-param name="group-value" select="$group-top"/> + <xsl:with-param name="coord-value" select="$coord-top"/> + </xsl:call-template> + </xsl:attribute> + </xsl:if> + </xsl:if> + <xsl:if test="$element-name='draw:ellipse' and string-length($draw-kind) > 0"> + <xsl:attribute name="draw:kind"> + <xsl:value-of select="$draw-kind"/> + </xsl:attribute> + </xsl:if> + <!--<draw:area-polygon … svg:x="0" svg:y="0" svg:width="2.0cm" svg:height="2.0cm" svg:viewBox="0 0 2000 2000" svg:points="400,1500 1600,1500 1000,400"/> + The element shown in the following example defines a triangle that is located in the middle of a 2cm by 2cm image. The bounding box covers an area of 2cm by 1.5cm. One view box unit corresponds to 0.01mm.--> + <xsl:if test="$wordshapename='polyline'"> + <xsl:variable name="MeasureMark_Here" select="'cm'"/> + <!--MeasureMarkHere is cm because One view box unit corresponds to 0.01mm--> + <xsl:variable name="width_cm"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$width"/> + <xsl:with-param name="scale" select="$x-scale"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="height_cm"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$height"/> + <xsl:with-param name="scale" select="$x-scale"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="widthval"> + <xsl:if test="contains($width_cm,'cm')"> + <xsl:value-of select="round(substring-before($width_cm,'cm')*1000)"/> + </xsl:if> + </xsl:variable> + <xsl:variable name="heightval"> + <xsl:if test="contains($height_cm,'cm')"> + <xsl:value-of select="round(substring-before($height_cm,'cm')*1000)"/> + </xsl:if> + </xsl:variable> + <xsl:variable name="viewBoxstr" select="concat('0 0 ',$widthval,' ',$heightval)"/> + <xsl:attribute name="svg:viewBox"> + <xsl:value-of select="$viewBoxstr"/> + </xsl:attribute> + <xsl:variable name="inputx_cm"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$left"/> + <xsl:with-param name="scale" select="$x-scale"/> + <xsl:with-param name="group-value" select="$group-left"/> + <xsl:with-param name="coord-value" select="$coord-left"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="inputy_cm"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$top"/> + <xsl:with-param name="scale" select="$y-scale"/> + <xsl:with-param name="group-value" select="$group-top"/> + <xsl:with-param name="coord-value" select="$coord-top"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="inputx_val"> + <xsl:choose> + <xsl:when test="contains($inputx_cm,'cm')"> + <xsl:value-of select="substring-before($inputx_cm,'cm')"/> + </xsl:when> + <xsl:otherwise>0</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="inputy_val"> + <xsl:choose> + <xsl:when test="contains($inputy_cm,'cm')"> + <xsl:value-of select="substring-before($inputy_cm,'cm')"/> + </xsl:when> + <xsl:otherwise>0</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="inputboxwidth" select="$widthval"/> + <xsl:variable name="oopoints"> + <xsl:call-template name="wordpoints2oopoints"> + <xsl:with-param name="input_x" select="$inputx_val"/> + <xsl:with-param name="input_y" select="$inputy_val"/> + <xsl:with-param name="input_width" select="$width"/> + <xsl:with-param name="input_height" select="$height"/> + <xsl:with-param name="input_boxwidth" select="$widthval"/> + <xsl:with-param name="input_boxheight" select="$heightval"/> + <xsl:with-param name="input_points" select="concat(@points,',')"/> + <!-- add a space to the end of input_points --> + </xsl:call-template> + </xsl:variable> + <xsl:if test="string-length($oopoints) > 0"> + <xsl:attribute name="draw:points"> + <xsl:value-of select="$oopoints"/> + </xsl:attribute> + </xsl:if> + </xsl:if> + <xsl:if test="$is-image"> + <xsl:variable name="the-image" select="key('imagedata',v:imagedata/@src)"/> + <xsl:choose> + <xsl:when test="string-length(v:imagedata/@o:title) > 0"> + <xsl:attribute name="draw:name"> + <xsl:value-of select="v:imagedata/@o:title"/> + </xsl:attribute> + </xsl:when> + <xsl:when test="string-length(parent::w:pict/o:OLEObject/@ObjectID) > 0"> + <xsl:attribute name="draw:name"> + <xsl:value-of select="parent::w:pict/o:OLEObject/@ObjectID"/> + </xsl:attribute> + </xsl:when> + </xsl:choose> + <xsl:apply-templates select="parent::w:pict/o:OLEObject" mode="output"/> + <draw:image> + <xsl:element name="office:binary-data"> + <xsl:value-of select="translate($the-image/text(),'	  ','' ) "/> + </xsl:element> + </draw:image> + </xsl:if> + <xsl:if test="$element-name = 'draw:custom-shape'"> + <xsl:apply-templates select="v:textpath" mode="text-p"> + <xsl:with-param name="type-textpath" select="key('shapetype',@type)/v:textpath[1]"/> + </xsl:apply-templates> + <xsl:element name="draw:enhanced-geometry"> + <xsl:variable name="enhanced_path"> + <!--enhanced_path call a template to get the enhanced-path--> + <xsl:choose> + <xsl:when test="string-length($custom_shapename) = 0"> + <xsl:call-template name="vmlpath2enhancedpath"> + <xsl:with-param name="vml-path" select="@path"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise/> + </xsl:choose> + </xsl:variable> + <!--####notice that:there is some drawing elements that don't have the shapetype so that can not have a viewbox + It is a ****problem**** now-so be sure to check it out.--> + <xsl:if test="$wordshapename='roundrect' "> + <xsl:variable name="tmp_MeasueMark"> + <xsl:value-of select="'cm'"/> + </xsl:variable> + <xsl:variable name="svg_viewwidth"> + <xsl:if test="$anchor-type='as-char'"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$width"/> + <xsl:with-param name="scale" select="$x-scale"/> + <xsl:with-param name="MeasureMark" select="$tmp_MeasueMark"/> + </xsl:call-template> + </xsl:if> + <xsl:if test="not ($anchor-type='as-char')"> + <!--Something has to be down because We have Margin-top options--> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$width"/> + <xsl:with-param name="scale" select="$x-scale"/> + <xsl:with-param name="MeasureMark" select="$tmp_MeasueMark"/> + </xsl:call-template> + </xsl:if> + </xsl:variable> + <xsl:variable name="svg_viewheight"> + <xsl:if test="$anchor-type='as-char'"> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$height"/> + <xsl:with-param name="scale" select="$y-scale"/> + <xsl:with-param name="MeasureMark" select="$tmp_MeasueMark"/> + </xsl:call-template> + </xsl:if> + <xsl:if test="not ($anchor-type='as-char')"> + <!--Something has to be down because We have Margin-top options--> + <xsl:call-template name="convert-with-scale-and-measure"> + <xsl:with-param name="value" select="$height"/> + <xsl:with-param name="scale" select="$y-scale"/> + <xsl:with-param name="MeasureMark" select="$tmp_MeasueMark"/> + </xsl:call-template> + </xsl:if> + </xsl:variable> + <xsl:variable name="svg_viewBox"> + <xsl:value-of select="concat( '0 0 ',substring-before($svg_viewwidth,$tmp_MeasueMark)*10000,' ',substring-before($svg_viewheight,$tmp_MeasueMark)*10000)"/> + </xsl:variable> + <xsl:attribute name="svg:viewBox"> + <xsl:value-of select="$svg_viewBox"/> + </xsl:attribute> + </xsl:if> + <xsl:if test="string-length($custom_shapename) > 0"> + <xsl:attribute name="draw:type"> + <xsl:value-of select="$custom_shapename"/> + </xsl:attribute> + </xsl:if> + <xsl:if test="string-length($enhanced_path) > 0"> + <xsl:attribute name="draw:enhanced-path"> + <xsl:value-of select="$enhanced_path"/> + </xsl:attribute> + </xsl:if> + <xsl:variable name="typeid_adj"> + <!--for fix the bug of version 1.63: the following description: adj="-11796480,,5400" in OOo should be: modifier =" -11796480 0 5400"--> + <xsl:variable name="tmp_adj"> + <xsl:value-of select="key('shapetype',@type)/@adj"/> + </xsl:variable> + <xsl:if test="contains($tmp_adj, ',') "> + <xsl:variable name="number"> + <xsl:value-of select="string-length(translate($tmp_adj,'+-0123456789 ','' ) )"/> + </xsl:variable> + <xsl:call-template name="get_non_omit_adj"> + <xsl:with-param name="adj_typeid" select="$tmp_adj"/> + <xsl:with-param name="num" select="$number"/> + <xsl:with-param name="mark" select="',' "/> + </xsl:call-template> + </xsl:if> + <xsl:if test="not (contains($tmp_adj, ',') )"> + <xsl:value-of select="$tmp_adj"/> + </xsl:if> + </xsl:variable> + <!--the following choose statement code will process the revised modifier + It happens that if a drawing elements has more than 2 modifier, the modifier (or say adj + in wordml) can be adjusted and only the modified adj is recorded. + what makes it more complicated is that adj support both comma and blanks. + so you have to use kickblanks template to kick the blanks and change it to comma version. + <key('shapetype',@type)/v:textpath[1]--> + <xsl:choose> + <xsl:when test="string-length($typeid_adj) = 0"> + <xsl:if test="contains(@adj,',')"> + <!--Please Note that the modifier can be more than 2 , so use a translate can be more efficient. + -####Note that comma can't be recognized by OOo's modifiers + <xsl:variable name="adjust-x" select="substring-before(@adj,',')"/> + <xsl:variable name="adjust-y" select="substring-after(@adj,',')"/> + <xsl:variable name="adjuststr"> + <xsl:if test="$adjust-x and $adjust-y"> + -####Note that comma can't be recognized by OOo's modifiers-> + <xsl:value-of select="concat( $adjust-x , ' ' ,$adjust-y )"/> + </xsl:if> + </xsl:variable>--> + <xsl:attribute name="draw:modifiers"> + <xsl:value-of select="translate(@adj ,',' ,' ')"/> + </xsl:attribute> + </xsl:if> + <xsl:if test="@adj and not(contains(@adj,','))"> + <!--####Note that comma can't be recognized by OOo's modifiers.--> + <xsl:attribute name="draw:modifiers"> + <xsl:value-of select="@adj"/> + </xsl:attribute> + </xsl:if> + </xsl:when> + <xsl:otherwise> + <!--Means that you have to care about 2 adj parameters which is different--> + <xsl:variable name="mark_used_by_typeid"> + <xsl:if test="contains($typeid_adj, ',' )"> + <xsl:value-of select="',' "/> + </xsl:if> + <xsl:if test="not (contains( $typeid_adj, ',' ) ) "> + <xsl:value-of select="' ' "/> + </xsl:if> + </xsl:variable> + <xsl:choose> + <xsl:when test="@adj"> + <xsl:variable name="remained_adj"> + <xsl:if test="contains(@adj,',' ) "> + <xsl:variable name="number"> + <xsl:value-of select="string-length(translate(@adj,'+-0123456789 ','' ) )"/> + </xsl:variable> + <xsl:call-template name="get_remained_adj"> + <xsl:with-param name="adj_typeid" select="$typeid_adj"/> + <xsl:with-param name="num" select="$number+1"/> + <xsl:with-param name="mark" select="$mark_used_by_typeid"/> + </xsl:call-template> + </xsl:if> + <xsl:if test="not (contains(@adj,',' ) ) "> + <xsl:variable name="tmp_str_adj"> + <xsl:call-template name="kickblanks"> + <xsl:with-param name="str" select="concat(' ' ,@adj,' ')"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="number"> + <xsl:value-of select="string-length(translate($tmp_str_adj,'+-0123456789','' ) )"/> + </xsl:variable> + <xsl:call-template name="get_remained_adj"> + <xsl:with-param name="adj_typeid" select="$typeid_adj"/> + <xsl:with-param name="num" select="$number - 1"/> + <xsl:with-param name="mark" select="$mark_used_by_typeid "/> + </xsl:call-template> + </xsl:if> + </xsl:variable> + <xsl:attribute name="draw:modifiers"> + <xsl:value-of select="translate(concat(@adj ,',' ,$remained_adj), ',' ,' ' )"/> + </xsl:attribute> + </xsl:when> + <xsl:otherwise> + <xsl:if test="contains($typeid_adj,',')"> + <xsl:attribute name="draw:modifiers"> + <xsl:value-of select="translate($typeid_adj ,',' ,' ')"/> + </xsl:attribute> + </xsl:if> + <xsl:if test="not(contains($typeid_adj,','))"> + <xsl:attribute name="draw:modifiers"> + <xsl:value-of select="$typeid_adj"/> + </xsl:attribute> + </xsl:if> + </xsl:otherwise> + </xsl:choose> + </xsl:otherwise> + </xsl:choose> + <xsl:if test="@type"> + <xsl:apply-templates select="v:textpath" mode="output"> + <xsl:with-param name="type-textpath" select="key('shapetype',@type)/v:textpath[1]"/> + </xsl:apply-templates> + <xsl:apply-templates select="key('shapetype',@type)" mode="output"> + <xsl:with-param name="instance" select="."/> + </xsl:apply-templates> + </xsl:if> + </xsl:element> + </xsl:if> + <xsl:choose> + <xsl:when test="$wordshapename='shape' and v:textbox and $element-name='draw:frame' "> + <xsl:element name="draw:text-box"> + <xsl:apply-templates select="v:textbox/w:txbxContent/w:p"/> + </xsl:element> + </xsl:when> + <!--It is a case statement for all shapes,so we add v:roundrect here.--> + <xsl:when test="$wordshapename='roundrect' and v:textbox and $element-name='draw:frame' "> + <xsl:element name="draw:text-box"> + <xsl:apply-templates select="v:textbox/w:txbxContent/w:p"/> + </xsl:element> + </xsl:when> + <xsl:when test="v:textbox"> + <xsl:apply-templates select="v:textbox/w:txbxContent/w:p"/> + </xsl:when> + </xsl:choose> + </xsl:element> + </xsl:template> + <xsl:template match="w:docOleData" mode="init"> + <xsl:apply-templates select="w:binData[@w:name='oledata.mso']" mode="oledata.mso"/> + </xsl:template> + <xsl:template match="w:binData" mode="oledata.mso"> + <xsl:variable name="tmp" select="ole:insertByName('oledata.mso', translate(text(),'  ','' ) )"/> + </xsl:template> + <xsl:template match="o:OLEObject " mode="output"> + <!-- depends on i43230,we can uncomment this code or find another way after i43230 got fixed --> + <draw:object-ole> + <xsl:element name="office:binary-data"> + <xsl:value-of select="translate(ole:getByName(@ObjectID),' ','')"/> + </xsl:element> + </draw:object-ole> + </xsl:template> + <xsl:template name="get-vml-value"> + <xsl:param name="node1" select="''"/> + <xsl:param name="property-name"/> + <xsl:variable name="pn" select="concat(';',$property-name, ':')"/> + <xsl:choose> + <xsl:when test="string-length(@*[name() = $property-name]) > 0"> + <xsl:value-of select="@*[name() = $property-name]"/> + </xsl:when> + <xsl:when test="string-length(@style) > 0 and contains(concat(';',translate(@style,' ','')),$pn)"> + <xsl:value-of select=" substring-before( concat(substring-after(concat(';',translate($node1/@style,' ','')) , $pn),';') , ';') "/> + </xsl:when> + <xsl:when test="$node1 and string-length($node1/@*[name() = $property-name]) > 0"> + <xsl:value-of select="$node1/@*[name() = $property-name]"/> + </xsl:when> + <xsl:when test="$node1 and string-length($node1/@style) > 0 and contains(concat(';',translate($node1/@style,' ','')),$pn)"> + <xsl:value-of select=" substring-before( concat(substring-after(concat(';',translate($node1/@style,' ','')) , $pn),';') , ';') "/> + </xsl:when> + </xsl:choose> + </xsl:template> + <xsl:template match="v:textpath" mode="text-p"> + <xsl:param name="type-textpath" select="''"/> + <xsl:variable name="the-string"> + <xsl:call-template name="get-vml-value"> + <xsl:with-param name="node1" select="$type-textpath"/> + <xsl:with-param name="property-name" select="'string'"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="style-name"> + <xsl:value-of select="'textpath'"/> + <xsl:number from="/w:wordDocument/w:body" level="any" count="v:textpath" format="1"/> + </xsl:variable> + <text:p text:style-name="{$style-name}"> + <xsl:value-of select="$the-string"/> + </text:p> + </xsl:template> + <xsl:template match="v:textpath" mode="style"> + <xsl:if test="contains(@style,'font-family:')"> + <xsl:variable name="style-name"> + <xsl:value-of select="'textpath'"/> + <xsl:number from="/w:wordDocument/w:body" level="any" count="v:textpath" format="1"/> + </xsl:variable> + <xsl:variable name="font-family"> + <!-- we need remove the additional " from font-family --> + <xsl:value-of select="translate(substring-before(substring-after(@style,'font-family:'),';'), '"' ,'')"/> + </xsl:variable> + <xsl:variable name="font-size"> + <xsl:choose> + <xsl:when test="contains(@style,'font-size:')"> + <xsl:value-of select="substring-before(substring-after(@style,'font-size:'),';')"/> + </xsl:when> + <xsl:otherwise>36pt</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <style:style style:name="{$style-name}" style:family="paragraph"> + <style:paragraph-properties text:enable-numbering="false" style:writing-mode="lr-tb"/> + <style:text-properties fo:font-family="{$font-family}" fo:font-size="{$font-size}" style:font-family-generic="roman" style:text-scale="80%"/> + </style:style> + </xsl:if> + </xsl:template> + <xsl:template match="v:textpath" mode="output"> + <xsl:param name="type-textpath" select="''"/> + <xsl:variable name="on"> + <xsl:call-template name="get-vml-value"> + <xsl:with-param name="node1" select="$type-textpath"/> + <xsl:with-param name="property-name" select="'on'"/> + </xsl:call-template> + </xsl:variable> + <xsl:if test="starts-with($on,'t')"> + <xsl:attribute name="draw:text-path">true</xsl:attribute> + </xsl:if> + <xsl:variable name="fitshape"> + <xsl:call-template name="get-vml-value"> + <xsl:with-param name="node1" select="$type-textpath"/> + <xsl:with-param name="property-name" select="'fitshape'"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="fitpath"> + <xsl:call-template name="get-vml-value"> + <xsl:with-param name="node1" select="$type-textpath"/> + <xsl:with-param name="property-name" select="'fitpath'"/> + </xsl:call-template> + </xsl:variable> + <xsl:attribute name="draw:type">fontwork-plain-text</xsl:attribute> + <xsl:attribute name="draw:text-path-mode"> + <xsl:choose> + <xsl:when test="starts-with($fitpath,'t') ">path</xsl:when> + <xsl:when test="starts-with($fitshape,'t') ">shape</xsl:when> + <xsl:otherwise>normal</xsl:otherwise> + </xsl:choose> + </xsl:attribute> + <xsl:attribute name="draw:text-path-scale">path</xsl:attribute> + <!-- xsl:attribute name="draw:text-path-same-letter-heights">false</xsl:attribute --> + <!-- xsl:attribute name="draw:text-path-scale-x">false</xsl:attribute --> + </xsl:template> + <xsl:template match="v:shapetype" mode="output"> + <xsl:param name="instance" select="''"/> + <!--#Dummy after version 1.63 The following test is for the adj attribute of the file. It is Dummy now. + <xsl:if test="not($instance/@adj)"> + <xsl:if test="contains(@adj,',')">--> + <!--Please Note that the modifier can be more than 2 , so use a translate can be more efficient. + -####Note that comma can't be recognized by OOo's modifiers + <xsl:variable name="adjust-x" select="substring-before(@adj,',')"/> + <xsl:variable name="adjust-y" select="substring-after(@adj,',')"/> + <xsl:variable name="adjuststr"> + <xsl:if test="$adjust-x and $adjust-y"> + < -####Note that comma can't be recognized by OOo's modifiers.-> + <xsl:value-of select="concat( $adjust-x , ' ' ,$adjust-y )"/> + </xsl:if> + </xsl:variable>--> + <!--Dummy after version 1.63 <xsl:attribute name="draw:modifiers"> + <xsl:value-of select="translate(@adj, ',' , ' ' )"/> + </xsl:attribute> + </xsl:if> + <xsl:if test="@adj and not(contains(@adj,','))">--> + <!--####Note that comma can't be recognized by OOo's modifiers.--> + <!--Dummy after version 1.63 <xsl:attribute name="draw:modifiers"> + <xsl:value-of select="@adj"/> + </xsl:attribute> + </xsl:if> + </xsl:if>--> + <xsl:variable name="viewbox"> + <xsl:value-of select="'0 0'"/> + <xsl:value-of select="' '"/> + <xsl:if test="string-length(@coordsize) = 0"> + <xsl:value-of select="'1000 1000'"/> + </xsl:if> + <xsl:if test="not(string-length(@coordsize) = 0)"> + <xsl:value-of select="translate(@coordsize,',',' ')"/> + </xsl:if> + </xsl:variable> + <xsl:attribute name="svg:viewBox"> + <xsl:value-of select="$viewbox"/> + </xsl:attribute> + <xsl:attribute name="draw:text-areas"> + <xsl:value-of select="$viewbox"/> + </xsl:attribute> + <!-- This path need be output is instance does not have a path--> + <xsl:if test="not($instance/@path) and string-length(@path) >0"> + <xsl:attribute name="draw:enhanced-path"> + <!--<xsl:call-template name="vmlpath2svgpath">rrrrrrevised--> + <xsl:call-template name="vmlpath2enhancedpath"> + <xsl:with-param name="vml-path" select="@path"/> + </xsl:call-template> + </xsl:attribute> + </xsl:if> + <xsl:apply-templates select="v:formulas | v:handles" mode="output"/> + </xsl:template> + <xsl:template match="v:formulas" mode="output"> + <xsl:apply-templates select="v:f" mode="output"/> + </xsl:template> + <xsl:template match="v:f" mode="output"> + <xsl:element name="draw:equation"> + <xsl:attribute name="draw:formula"> + <xsl:call-template name="v-formula2o-formula"> + <xsl:with-param name="v-formula" select="@eqn"/> + </xsl:call-template> + </xsl:attribute> + <xsl:attribute name="draw:name"> + <xsl:value-of select="'f'"/> + <xsl:variable name="the-number"> + <xsl:number format="1" level="single"/> + </xsl:variable> + <xsl:value-of select="$the-number - 1"/> + </xsl:attribute> + </xsl:element> + </xsl:template> + <xsl:template name="v-formula2o-formula"> + <xsl:param name="v-formula"/> + <xsl:variable name="command" select="substring-before(normalize-space($v-formula), ' ')"/> + <xsl:variable name="tmp" select="normalize-space(substring-after($v-formula, $command ))"/> + <xsl:variable name="step1"> + <xsl:choose> + <xsl:when test="$command ='val'"> + <xsl:value-of select="$tmp"/> + </xsl:when> + <!-- (sum a b c) = (a + b - c)--> + <xsl:when test="$command = 'sum' "> + <xsl:call-template name="replace-space"> + <xsl:with-param name="value" select="$tmp"/> + <xsl:with-param name="replace1" select="'+'"/> + <xsl:with-param name="replace2" select="'-'"/> + </xsl:call-template> + </xsl:when> + <!-- (prod a b c) = (a * b / c)--> + <xsl:when test="$command = 'prod'"> + <xsl:call-template name="replace-space"> + <xsl:with-param name="value" select="$tmp"/> + <xsl:with-param name="replace1" select="'*'"/> + <xsl:with-param name="replace2" select="'/'"/> + </xsl:call-template> + </xsl:when> + <!-- (mid a b) = ((a + b) / 2)--> + <xsl:when test="$command = 'mid'"> + <xsl:value-of select="concat('(' , translate($tmp,' ', '+') , ') / 2' )"/> + </xsl:when> + <!-- (if a b c) = (a>0? b : c) Conditional testing. --> + <xsl:when test="$command = 'if' "> + <xsl:value-of select="concat('if(' , translate($tmp,' ', ',') , ')' )"/> + </xsl:when> + <!-- (min a b) = (min (a , b) )--> + <!-- (max a b) = (max (a , b) )--> + <xsl:when test="$command = 'min' or $command = 'max'"> + <xsl:value-of select="concat($command, '(' , translate($tmp,' ', ',') , ')' )"/> + </xsl:when> + <xsl:when test="$command = 'abs' or $command = 'sqrt'"> + <xsl:value-of select="concat($command, '(' , $tmp , ')' )"/> + </xsl:when> + <!-- sin(a,b) = a*sin(b) --> + <xsl:when test="$command = 'sin' or $command = 'cos' or $command = 'tan' "> + <!-- atan is not this kind 2 $command = 'atan2' "--> + <xsl:variable name="value1" select="substring-before($tmp,' ')"/> + <xsl:variable name="value2" select="substring-after($tmp,' ')"/> + <xsl:value-of select="concat( $value1 , ' * ' , $command, '(' , $value2 , ')' )"/> + </xsl:when> + <!-- --> + <xsl:when test="$command = 'atan2' "> + <xsl:variable name="value1" select="substring-before($tmp,' ')"/> + <xsl:variable name="value2" select="substring-after($tmp,' ')"/> + <xsl:value-of select="concat( $command , '( ' , $value2, ',' , $value1 , ')' )"/> + </xsl:when> + <!-- --> + <!--><xsl:when test="$command = 'atan2' "> + <xsl:variable name="value1" select="substring-before($tmp,' ')"/> + <xsl:variable name="value2" select="substring-after($tmp,' ')"/> + <xsl:value-of select="concat( 'atan' , '( ' , $value2, '/' , $value1 , ')' )"/> + </xsl:when><- --> + <!-- ellipse and sumangle are always used by arc command like this + eqn="ellipse @24 @4 height" ; and eqn="sumangle @2 360 0" + mod is always used too.--> + <!--mod =sqrt( v*v + P1×P1 + P2×P2). ( 3 parameters )--> + <xsl:when test="$command='mod' "> + <xsl:variable name="value1" select="substring-before($tmp,' ')"/> + <xsl:variable name="value2" select="substring-before(substring-after($tmp,' '), ' ')"/> + <xsl:variable name="value3" select="substring-after(substring-after($tmp,' '), ' ')"/> + <xsl:value-of select="concat( 'sqrt( ' , $value3, ' * ',$value3, ' + ' ,$value2, ' * ' ,$value2, ' + ' ,$value1, ' * ', $value1, ' )' )"/> + </xsl:when> + <!--ellipse= P2* sqrt(1 - v*v /P1*P1) ( 3 parameters )--> + <xsl:when test="$command='ellipse' "> + <xsl:variable name="value1" select="substring-before($tmp,' ')"/> + <xsl:variable name="value2" select="substring-before(substring-after($tmp,' '), ' ')"/> + <xsl:variable name="value3" select="substring-after(substring-after($tmp,' '), ' ')"/> + <xsl:value-of select="concat( $value3 , ' * sqrt( ' , $value2 , ' * ' , $value2, ' - ',$value1 , ' * ', $value1, ' )' ,'/',$value2 )"/> + </xsl:when> + <!--sumangle =v + P1×2^16 - P2×2^16. ( 3 parameters )--> + <!--<xsl:when test="$command='sumangle' "> + <xsl:variable name="value1" select="substring-before($tmp,' ')"/> + <xsl:variable name="value2" select="substring-before(substring-after($tmp,' '), ' ')"/> + <xsl:variable name="value3" select="substring-after(substring-after($tmp,' '), ' ')"/> + <xsl:value-of select="concat( $value1 , '+' , $value2 , ' * ' , '65535',' + ', $value2,' - ' ,$value3 , ' * ', '65535', ' - ', $value3)"/> + </xsl:when>--> + <!--sumangle =v + P1×2^16 - P2×2^16. ( 3 parameters )--> + <xsl:when test="$command='sumangle' "> + <xsl:variable name="value1" select="substring-before($tmp,' ')"/> + <xsl:variable name="value2" select="substring-before(substring-after($tmp,' '), ' ')"/> + <xsl:variable name="value3" select="substring-after(substring-after($tmp,' '), ' ')"/> + <xsl:value-of select="concat( $value1 , '+' , $value2 , '*pi/180',' - ' ,$value3 , '*pi/180' )"/> + </xsl:when> + <xsl:otherwise> + <xsl:message>Find an unsupported formula:<xsl:value-of select="$v-formula"/> + </xsl:message> + <!--<xsl:value-of select="'0'"/><-for release use--> + <xsl:value-of select="concat('not found this:', $v-formula)"/> + <!--for Debug use--> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="step2"> + <xsl:value-of select="translate($step1,'#','$')"/> + </xsl:variable> + <xsl:call-template name="replace-at"> + <xsl:with-param name="value" select="$step2"/> + </xsl:call-template> + </xsl:template> + <xsl:template name="replace-space"> + <xsl:param name="value"/> + <xsl:param name="replace1"/> + <xsl:param name="replace2"/> + <xsl:value-of select=" concat( substring-before($value,' ') , $replace1, translate(substring-after($value,' '), ' ', $replace2 ) ) "/> + </xsl:template> + <xsl:template name="replace-at"> + <xsl:param name="value"/> + <xsl:param name="position" select="1"/> + <xsl:choose> + <xsl:when test="string-length($value) < $position"> + <xsl:value-of select="$value"/> + </xsl:when> + <xsl:when test="substring($value,$position,1) = '@'"> + <xsl:call-template name="replace-at"> + <xsl:with-param name="value" select="concat(substring($value,1,$position -1) , '?f' , substring($value,$position+1)) "/> + <xsl:with-param name="position" select="$position + 2"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="replace-at"> + <xsl:with-param name="value" select="$value"/> + <xsl:with-param name="position" select="$position + 1"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + <xsl:if test=" substring($value,$position,1) = '@'"> + </xsl:if> + </xsl:template> + <xsl:template match="v:handles" mode="output"> + <xsl:apply-templates select="v:h" mode="output"/> + </xsl:template> + <xsl:template match="v:h" mode="output"> + <xsl:element name="draw:handle"> + <xsl:if test="@position"> + <xsl:attribute name="draw:handle-position"> + <xsl:value-of select="translate(@position,'#,' , '$ ')"/> + </xsl:attribute> + </xsl:if> + <xsl:if test="@switch"> + <xsl:attribute name="draw:handle-switched"> + <xsl:value-of select="@switch"/> + </xsl:attribute> + </xsl:if> + <xsl:if test="@xrange"> + <xsl:attribute name="draw:handle-range-x-maximum"> + <xsl:value-of select="substring-after(@xrange,',')"/> + </xsl:attribute> + <xsl:attribute name="draw:handle-range-x-minimum"> + <xsl:value-of select="substring-before(@xrange,',')"/> + </xsl:attribute> + </xsl:if> + <xsl:if test="@yrange"> + <xsl:attribute name="draw:handle-range-y-maximum"> + <xsl:value-of select="substring-after(@yrange,',')"/> + </xsl:attribute> + <xsl:attribute name="draw:handle-range-y-minimum"> + <xsl:value-of select="substring-before(@yrange,',')"/> + </xsl:attribute> + </xsl:if> + </xsl:element> + </xsl:template> + <!--this template map word's points to svg:viewbox's point they are quite different because word's use pt but svg's use 0.001cm as a unit--> + <xsl:template name="wordpoints2oopoints"> + <xsl:param name="input_points"/> + <xsl:param name="input_x"/> + <xsl:param name="input_y"/> + <xsl:param name="input_width"/> + <xsl:param name="input_height"/> + <xsl:param name="input_boxwidth"/> + <xsl:param name="input_boxheight"/> + <xsl:variable name="ptx" select="substring-before($input_points,',')"/> + <xsl:variable name="tempstr" select="substring-after($input_points,',')"/> + <xsl:variable name="pty" select="substring-before($tempstr,',')"/> + <xsl:variable name="nextinput" select="substring-after ($tempstr,',')"/> + <xsl:if test="$ptx and $pty"> + <xsl:variable name="val_ptx"> + <xsl:call-template name="ConvertMeasure"> + <xsl:with-param name="value" select="$ptx"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="val_pty"> + <xsl:call-template name="ConvertMeasure"> + <xsl:with-param name="value" select="$pty"/> + </xsl:call-template> + </xsl:variable> + <xsl:value-of select="round( $input_boxwidth - ( $val_ptx - $input_x ) * 1000 )"/> + <xsl:value-of select="','"/> + <xsl:value-of select="round( ( $val_pty - $input_y ) * 1000 )"/> + </xsl:if> + <xsl:if test="contains($nextinput,',')"> + <xsl:value-of select="' '"/> + <!--Leave a blank first as mark of points group--> + <xsl:call-template name="wordpoints2oopoints"> + <xsl:with-param name="input_points" select="$nextinput"/> + <xsl:with-param name="input_x" select="$input_x"/> + <xsl:with-param name="input_y" select="$input_y"/> + <xsl:with-param name="input_width" select="$input_width"/> + <xsl:with-param name="input_height" select="$input_height"/> + <xsl:with-param name="input_boxwidth" select="$input_boxwidth"/> + <xsl:with-param name="input_boxheight" select="$input_boxheight"/> + </xsl:call-template> + </xsl:if> + </xsl:template> + <!--template MapConstColor:input is a color in form of const e.g 'red' or number e.g '#ff0010' output is a number color--> + <xsl:template name="MapConstColor"> + <xsl:param name="color"/> + <xsl:choose> + <xsl:when test="$color='black'">#000000</xsl:when> + <xsl:when test="$color='olive'">#808000</xsl:when> + <xsl:when test="$color='red'">#ff0000</xsl:when> + <xsl:when test="$color='teal'">#008080</xsl:when> + <xsl:when test="$color='green'">#00ff00</xsl:when> + <xsl:when test="$color='gray'">#808080</xsl:when> + <xsl:when test="$color='blue'">#0000ff</xsl:when> + <xsl:when test="$color='navy'">#000080</xsl:when> + <xsl:when test="$color='white'">#ffffff</xsl:when> + <xsl:when test="$color='lime'">#00ff00</xsl:when> + <xsl:when test="$color='yellow'">#ffff00</xsl:when> + <xsl:when test="$color='fuchsia'">#ff00ff</xsl:when> + <xsl:when test="$color='purple'">#800080</xsl:when> + <xsl:when test="$color='aqua'">#00ffff</xsl:when> + <xsl:when test="$color='maroon'">#800000</xsl:when> + <xsl:when test="$color='silver'">#c0c0c0</xsl:when> + <xsl:when test="$color='window'">#ffffff</xsl:when> + <xsl:otherwise> + <xsl:choose> + <xsl:when test="string-length($color) =7"> + <xsl:value-of select="$color"/> + </xsl:when> + <xsl:when test="string-length($color) =4"> + <!--short form representation of color--> + <xsl:variable name="valr"> + <xsl:value-of select="concat(substring($color,2,1),substring($color,2,1))"/> + <!--<xsl:call-template name="shortcolorconv"><xsl:with-param name="value" select="substring($color,2,1)"/></xsl:call-template>--> + </xsl:variable> + <xsl:variable name="valg" select="concat(substring($color,3,1),substring($color,3,1))"/> + <xsl:variable name="valb" select="concat(substring($color,4,1),substring($color,4,1))"/> + <xsl:value-of select="concat('#',$valr,$valg,$valb)"/> + </xsl:when> + <xsl:otherwise>#000000</xsl:otherwise> + </xsl:choose> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + <xsl:template name="shortcolorconv"> + <xsl:param name="value"/> + <xsl:choose> + <xsl:when test="$value='1'">11</xsl:when> + <xsl:when test="$value='2'">22</xsl:when> + <xsl:when test="$value='3'">33</xsl:when> + <xsl:when test="$value='4'">44</xsl:when> + <xsl:when test="$value='5'">55</xsl:when> + <xsl:when test="$value='6'">66</xsl:when> + <xsl:when test="$value='7'">77</xsl:when> + <xsl:when test="$value='8'">88</xsl:when> + <xsl:when test="$value='9'">99</xsl:when> + <xsl:when test="$value='a'">aa</xsl:when> + <xsl:when test="$value='b'">bb</xsl:when> + <xsl:when test="$value='c'">cc</xsl:when> + <xsl:when test="$value='d'">dd</xsl:when> + <xsl:when test="$value='e'">ee</xsl:when> + <xsl:when test="$value='f'">ff</xsl:when> + <!--I just guess it, maybe it is not right--> + </xsl:choose> + </xsl:template> + <xsl:template name="MapArrowStyle"> + <!--What is a block?normal arrow?--> + <xsl:param name="arrow-name"/> + <xsl:choose> + <xsl:when test="$arrow-name = 'Block' ">Arrow</xsl:when> + <xsl:when test="$arrow-name = 'Diamond' ">Square</xsl:when> + <xsl:when test="$arrow-name = 'Open' ">Line Arrow</xsl:when> + <xsl:when test="$arrow-name = 'Oval' ">Circle</xsl:when> + <xsl:when test="$arrow-name = 'Diamond' ">Square 45</xsl:when> + <xsl:when test="$arrow-name = 'Classic' ">Arrow concave</xsl:when> + <xsl:otherwise>Arrow</xsl:otherwise> + </xsl:choose> + </xsl:template> + <xsl:template name="Add-with-Measure"> + <xsl:param name="value1"/> + <xsl:param name="value2"/> + <xsl:variable name="Current-MeasureMark"> + <xsl:choose> + <xsl:when test="string-length(translate($value1 ,'-.0123456789 ','' )) > 0"> + <xsl:value-of select="translate($value1 ,'-.0123456789 ','' )"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="translate($value2 ,'-.0123456789 ','' )"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="number-value1"> + <xsl:call-template name="get-number"> + <xsl:with-param name="value" select="$value1"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="number-value2"> + <xsl:call-template name="get-number"> + <xsl:with-param name="value" select="$value2"/> + </xsl:call-template> + </xsl:variable> + <xsl:value-of select="concat( $number-value1 + $number-value2 , $Current-MeasureMark)"/> + </xsl:template> + <xsl:template name="convert-with-scale-and-measure"> + <xsl:param name="value"/> + <xsl:param name="group-value" select="0"/> + <xsl:param name="coord-value" select="0"/> + <xsl:param name="scale" select="1"/> + <xsl:param name="MeasureMark" select="''"/> + <xsl:param name="Target-Measure" select="''"/> + <xsl:variable name="Current-MeasureMark"> + <xsl:choose> + <xsl:when test="not (translate($value ,'-. 0123456789 ','' ) = '') "> + <xsl:value-of select="translate($value ,'-. 0123456789 ','' ) "/> + </xsl:when> + <xsl:when test="string-length($MeasureMark) > 0"> + <xsl:value-of select="$MeasureMark"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="translate($value ,'-. 0123456789 ','' ) "/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="number-value"> + <xsl:call-template name="get-number"> + <xsl:with-param name="value" select="$value"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="value-string" select="( $number-value - $coord-value) div $scale + $group-value"/> + <xsl:choose> + <xsl:when test="$value-string = 0">0cm</xsl:when> + <xsl:when test="$Target-Measure = $Current-MeasureMark"> + <xsl:value-of select="concat($value-string , $Current-MeasureMark)"/> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="ConvertMeasure"> + <xsl:with-param name="value" select="concat($value-string , $Current-MeasureMark)"/> + </xsl:call-template> + <xsl:value-of select=" 'cm' "/> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + <xsl:template name="get-number"> + <xsl:param name="value"/> + <xsl:choose> + <xsl:when test="translate($value,'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ','') = '' ">0</xsl:when> + <xsl:otherwise> + <xsl:value-of select="number(translate($value,'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',''))"/> + </xsl:otherwise> + </xsl:choose> + </xsl:template> +</xsl:stylesheet> |