summaryrefslogtreecommitdiffstats
path: root/share/extensions/xaml2svg/geometry.xsl
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--share/extensions/xaml2svg/geometry.xsl272
1 files changed, 272 insertions, 0 deletions
diff --git a/share/extensions/xaml2svg/geometry.xsl b/share/extensions/xaml2svg/geometry.xsl
new file mode 100644
index 0000000..c28e6a6
--- /dev/null
+++ b/share/extensions/xaml2svg/geometry.xsl
@@ -0,0 +1,272 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Copyright (c) 2005-2007 Toine de Greef (a.degreef@chello.nl)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+-->
+
+<xsl:stylesheet version="1.0"
+xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+xmlns:xlink="http://www.w3.org/1999/xlink"
+xmlns:svg="http://www.w3.org/2000/svg"
+xmlns:def="Definition"
+exclude-result-prefixes="def">
+<xsl:strip-space elements="*" />
+<xsl:output method="xml" encoding="ISO-8859-1"/>
+
+<xsl:template mode="forward" match="*[name(.) = 'ClipGeometry']">
+<!-- -->
+</xsl:template>
+
+<xsl:template mode="forward" match="*[name(.) = 'GlyphRunDrawing']">
+<!-- -->
+</xsl:template>
+
+<xsl:template mode="forward" match="*[name(.) = 'ImageDrawing']">
+ <image>
+ <xsl:if test="@ImageSource"><xsl:attribute name="xlink:href"><xsl:value-of select="@ImageSource" /></xsl:attribute></xsl:if>
+ <xsl:if test="@Rect">
+ <xsl:attribute name="x"><xsl:value-of select="substring-before(@Rect, ',')" /></xsl:attribute>
+ <xsl:attribute name="y"><xsl:value-of select="substring-before(substring-after(@Rect, ','), ',')" /></xsl:attribute>
+ <xsl:attribute name="width"><xsl:value-of select="substring-before(substring-after(substring-after(@Rect, ','), ','), ',')" /></xsl:attribute>
+ <xsl:attribute name="height"><xsl:value-of select="substring-after(substring-after(substring-after(@Rect, ','), ','), ',')" /></xsl:attribute>
+ </xsl:if>
+ </image>
+</xsl:template>
+
+<xsl:template mode="forward" match="*[name(.) = 'DrawingGroup']">
+ <xsl:call-template name="template_properties" />
+ <xsl:call-template name="template_transform" />
+ <xsl:apply-templates mode="forward" />
+</xsl:template>
+
+<xsl:template mode="forward" match="*[name(.) = 'EllipseGeometry']">
+ <xsl:variable name="cx" select="substring-before(@Center, ',')" />
+ <xsl:variable name="cy" select="substring-after(@Center, ',')" />
+ <xsl:value-of select="concat('M ', $cx + @RadiusX, ',', $cy, ' ')" />
+ <xsl:value-of select="concat('A ', @RadiusX, ',', @RadiusY, ' 0 0 1 ', $cx, ',', $cy + @RadiusY, ' ')" />
+ <xsl:value-of select="concat('A ', @RadiusX, ',', @RadiusY, ' 0 0 1 ', $cx - @RadiusX, ',', $cy, ' ')" />
+ <xsl:value-of select="concat('A ', @RadiusX, ',', @RadiusY, ' 0 0 1 ', $cx, ',', $cy - @RadiusY, ' ')" />
+ <xsl:value-of select="concat('A ', @RadiusX, ',', @RadiusY, ' 0 0 1 ', $cx + @RadiusX, ',', $cy, ' ')" />
+</xsl:template>
+
+<xsl:template mode="forward" match="*[name(.) = 'LineGeometry']">
+ <xsl:value-of select="concat('M ', @StartPoint, ' ')" />
+ <xsl:value-of select="concat('L ', @EndPoint, ' ')" />
+</xsl:template>
+
+<xsl:template mode="forward" match="*[name(.) = 'PathGeometry']">
+ <xsl:apply-templates mode="forward" />
+</xsl:template>
+
+<xsl:template mode="forward" match="*[name(.) = 'PathGeometry.Figures']">
+ <xsl:apply-templates mode="forward" />
+</xsl:template>
+
+<xsl:template mode="forward" match="*[name(.) = 'PathFigureCollection']">
+ <xsl:apply-templates mode="forward" />
+</xsl:template>
+
+<xsl:template mode="forward" match="*[name(.) = 'PathFigure']">
+ <xsl:apply-templates mode="forward" />
+</xsl:template>
+
+<xsl:template mode="forward" match="*[name(.) = 'PathFigure.Segments']">
+ <xsl:apply-templates mode="forward" />
+</xsl:template>
+
+<xsl:template mode="forward" match="*[name(.) = 'PathSegmentCollection']">
+ <xsl:apply-templates mode="forward" />
+</xsl:template>
+
+<xsl:template mode="forward" match="*[name(.) = 'StartSegment']">
+ <xsl:value-of select="concat('M ', @Point, ' ')" />
+</xsl:template>
+
+<xsl:template mode="forward" match="*[name(.) = 'CloseSegment']">
+ <xsl:value-of select="'z '" />
+</xsl:template>
+
+<xsl:template mode="forward" match="*[name(.) = 'LineSegment']">
+ <xsl:value-of select="concat('L ', @Point, ' ')" />
+</xsl:template>
+
+<xsl:template mode="forward" match="*[name(.) = 'ArcSegment']">
+ <xsl:value-of select="concat('A ', substring-before(@Size, ','), ',', substring-after(@Size, ','), ' ', @XRotation, ' ', number(@LargeArc = 'True'), ' ', number(@Sweepflag = 'True'), ' ', @Point, ' ')" />
+</xsl:template>
+
+<xsl:template mode="forward" match="*[name(.) = 'BezierSegment']">
+ <xsl:value-of select="concat('C ', @Point1, ' ', @Point2, ' ', @Point3, ' ')" />
+</xsl:template>
+
+<xsl:template mode="forward" match="*[name(.) = 'QuadraticBezierSegment']">
+ <xsl:value-of select="concat('Q ', @Point1, ' ', @Point2, ' ', @Point3, ' ')" />
+</xsl:template>
+
+<xsl:template name="PrintPolyBezierPoints">
+ <xsl:param name="segments" />
+ <xsl:param name="segmentsize" />
+ <xsl:param name="cursor" />
+ <xsl:text>C </xsl:text>
+ <xsl:value-of select="concat(substring-before($segments, ','), ',')" />
+ <xsl:variable name="segments1"><xsl:value-of select="substring-after($segments, ',')" /></xsl:variable>
+ <xsl:value-of select="concat(substring-before($segments1, ' '), ' ')" />
+ <xsl:variable name="segments2"><xsl:value-of select="substring-after($segments1, ' ')" /></xsl:variable>
+ <xsl:value-of select="concat(substring-before($segments2, ','), ',')" />
+ <xsl:variable name="segments3"><xsl:value-of select="substring-after($segments2, ',')" /></xsl:variable>
+ <xsl:value-of select="concat(substring-before($segments3, ' '), ' ')" />
+ <xsl:variable name="segments4"><xsl:value-of select="substring-after($segments3, ' ')" /></xsl:variable>
+ <xsl:value-of select="concat(substring-before($segments4, ','), ',')" />
+ <xsl:variable name="segments5"><xsl:value-of select="substring-after($segments4, ',')" /></xsl:variable>
+ <xsl:choose>
+ <xsl:when test="contains($segments5, ' ')">
+ <xsl:value-of select="concat(substring-before($segments5, ' '), ' ')" />
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$segments5" />
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:variable name="segments6"><xsl:value-of select="substring-after($segments5, ' ')" /></xsl:variable>
+ <xsl:if test="contains($segments6, ' ')">
+ <xsl:call-template name="PrintPolyBezierPoints">
+ <xsl:with-param name="segments" select="$segments6" />
+ </xsl:call-template>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template name="PrintPolyLinePoints">
+ <xsl:param name="segments" />
+ <xsl:text>L </xsl:text>
+ <xsl:value-of select="concat(substring-before($segments, ','), ',')" />
+ <xsl:variable name="segments1"><xsl:value-of select="substring-after($segments, ',')" /></xsl:variable>
+ <xsl:value-of select="concat(substring-before($segments1, ' '), ' ')" />
+ <xsl:variable name="segments2"><xsl:value-of select="substring-after($segments1, ' ')" /></xsl:variable>
+ <xsl:value-of select="concat(substring-before($segments2, ','), ',')" />
+ <xsl:variable name="segments3"><xsl:value-of select="substring-after($segments2, ',')" /></xsl:variable>
+ <xsl:choose>
+ <xsl:when test="contains($segments3, ' ')">
+ <xsl:value-of select="concat(substring-before($segments3, ' '), ' ')" />
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$segments3" />
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:variable name="segments4"><xsl:value-of select="substring-after($segments3, ' ')" /></xsl:variable>
+ <xsl:if test="contains($segments4, ' ')">
+ <xsl:call-template name="PrintPolyLinePoints">
+ <xsl:with-param name="segments" select="$segments4" />
+ </xsl:call-template>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template name="PrintQuadraticBezierPoints">
+ <xsl:param name="segments" />
+ <xsl:text>Q </xsl:text>
+ <xsl:value-of select="concat(substring-before($segments, ','), ',')" />
+ <xsl:variable name="segments1"><xsl:value-of select="substring-after($segments, ',')" /></xsl:variable>
+ <xsl:value-of select="concat(substring-before($segments1, ' '), ' ')" />
+ <xsl:variable name="segments2"><xsl:value-of select="substring-after($segments1, ' ')" /></xsl:variable>
+ <xsl:value-of select="concat(substring-before($segments2, ','), ',')" />
+ <xsl:variable name="segments3"><xsl:value-of select="substring-after($segments2, ',')" /></xsl:variable>
+ <xsl:choose>
+ <xsl:when test="contains($segments3, ' ')">
+ <xsl:value-of select="concat(substring-before($segments3, ' '), ' ')" />
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$segments3" />
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:variable name="segments4"><xsl:value-of select="substring-after($segments3, ' ')" /></xsl:variable>
+ <xsl:if test="contains($segments4, ' ')">
+ <xsl:call-template name="PrintQuadraticBezierPoints">
+ <xsl:with-param name="segments" select="$segments4" />
+ </xsl:call-template>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template mode="forward" match="*[name(.) = 'PolyBezierSegment']">
+ <xsl:call-template name="PrintPolyBezierPoints">
+ <xsl:with-param name="segments" select="@Points" />
+ </xsl:call-template>
+</xsl:template>
+
+<xsl:template mode="forward" match="*[name(.) = 'PolyLineSegment']">
+ <xsl:call-template name="PrintPolyLinePoints">
+ <xsl:with-param name="segments" select="@Points" />
+ </xsl:call-template>
+</xsl:template>
+
+<xsl:template mode="forward" match="*[name(.) = 'PolyQuadraticBezierSegment']">
+ <xsl:call-template name="PrintQuadraticBezierPoints">
+ <xsl:with-param name="segments" select="@Points" />
+ </xsl:call-template>
+</xsl:template>
+
+<xsl:template mode="forward" match="*[name(.) = 'RectangleGeometry']">
+ <xsl:variable name="rect" select="RectangleGeometry.Rect/Rect" />
+ <xsl:choose>
+ <xsl:when test="$rect">
+ <xsl:value-of select="concat('M ', $rect/@X, ',', $rect/@Y, ' ')" />
+ <xsl:value-of select="concat('H ', $rect/@X + $rect/@Width, ' V ', $rect/@Y + $rect/@Height, ' H ', $rect/@X,' V ', $rect/@Y, ' ')" />
+ </xsl:when>
+ <xsl:when test="@Rect">
+ <xsl:variable name="x" select="substring-before(substring-before(@Rect, ' '), ',')" />
+ <xsl:variable name="y" select="substring-after(substring-before(@Rect, ' '), ',')" />
+ <xsl:variable name="width" select="substring-before(substring-after(@Rect, ' '), ',')" />
+ <xsl:variable name="height" select="substring-after(substring-after(@Rect, ' '), ',')" />
+ <xsl:value-of select="concat('M ', $x, ',', $y, ' ')" />
+ <xsl:value-of select="concat('H ', $x + $width, ' V ', $y + $height, ' H ', $x,' V ', $y, ' ')" />
+ </xsl:when>
+ </xsl:choose>
+</xsl:template>
+
+<!--
+<xsl:template mode="forward" match="*[name(.) = 'GeometryCollection']">
+ <xsl:apply-templates mode="forward" />
+</xsl:template>
+-->
+
+<xsl:template mode="forward" match="*[name(.) = 'GeometryGroup']">
+ <xsl:apply-templates mode="forward" />
+</xsl:template>
+
+<xsl:template mode="forward" match="*[name(.) = 'GeometryDrawing']">
+ <path>
+ <xsl:attribute name="d"><xsl:apply-templates select="*[name(.) = 'GeometryDrawing.Geometry']" mode="forward" /></xsl:attribute>
+ <xsl:attribute name="fill"><xsl:value-of select="@Brush" /></xsl:attribute>
+ <xsl:apply-templates mode="forward" select="*[name(.) = 'GeometryDrawing.Pen']" />
+ </path>
+</xsl:template>
+
+<xsl:template mode="forward" match="*[name(.) = 'GeometryDrawing.Geometry']">
+ <xsl:apply-templates mode="forward" />
+</xsl:template>
+
+<xsl:template mode="forward" match="*[name(.) = 'GeometryDrawing.Pen']">
+ <xsl:variable name="pen" select="*[name(.) = 'Pen']" />
+ <xsl:if test="$pen/@Brush"><xsl:attribute name="stroke"><xsl:value-of select="$pen/@Brush" /></xsl:attribute></xsl:if>
+ <xsl:if test="$pen/@Thickness"><xsl:attribute name="stroke-width"><xsl:value-of select="$pen/@Thickness" /></xsl:attribute></xsl:if>
+</xsl:template>
+
+<xsl:template mode="forward" match="*[name(.) = 'CombinedGeometry' or name(.) = 'CombinedGeometry.Geometry1' or name(.) = 'CombinedGeometry.Geometry2']">
+ <xsl:apply-templates mode="forward" />
+</xsl:template>
+
+</xsl:stylesheet>