Bonjour dans le cadre d'un entrainement sur les feuilles de transformatioon je dois passer de ce dérivé de SVG créé pour l'occasion,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
    <object ref="canard">
      <origin x="200" y="312"/>
      <style>
        <stroke>
          <color>green</color>
          <width>2</width>
        </stroke>
        <fill>red</fill>
      </style>
      <transform type="rotate">-50</transform>
      <transform type="scale">0.5</transform>
    </object>
à du SVG pur,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
        <g transform="scale(0.5)">
                <g transform="rotate(-50)">
                        <use x="200" y="312" xlink:href="#canard"
                                style="fill: red; stroke: green; stroke-width: 2;"/>
                </g>
        </g>
J'ai déjà réalisé le template s'appliquant sur object,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
    <xsl:template match="object">
        <use>
            <xsl:attribute name="x"><xsl:value-of select="origin/@x"/></xsl:attribute>
            <xsl:attribute name="y"><xsl:value-of select="origin/@y"/></xsl:attribute>
            <xsl:attribute name="xlink:href"><xsl:value-of select="concat('#',@ref)"/></xsl:attribute>
            <xsl:attribute name="style"><xsl:apply-templates select="style"/></xsl:attribute>
        </use>        
    </xsl:template>
 
    <xsl:template match="style">
        <xsl:apply-templates select="stroke"/>
        <xsl:choose>
            <xsl:when test="count(fill)>0">
                <xsl:text>fill: </xsl:text>
                <xsl:value-of select="fill"/>
                <xsl:text>; </xsl:text>
            </xsl:when>
        </xsl:choose>
    </xsl:template>
 
    <xsl:template match="stroke">
        <xsl:choose>
            <xsl:when test="count(color)>0">
                <xsl:text>stroke: </xsl:text>
                <xsl:value-of select="color"/>
                <xsl:text>; </xsl:text>
            </xsl:when>
        </xsl:choose>
        <xsl:choose>
            <xsl:when test="count(width)>0">
                <xsl:text>stroke-width: </xsl:text>
                <xsl:value-of select="width"/>
                <xsl:text>; </xsl:text>
            </xsl:when>
        </xsl:choose>
    </xsl:template>
mais comme vous pouvez le voir, je ne m'occupe pas encore de la balise "transform". Dans le premier schéma celle-ci est à l'intérieur de "object" alors qu'en SVG, elle l'englobe.
C'est sur ce dernier point que je viens demander conseil, auriez-vous une manière élégante d'effectuer cette transformation, sachant que "transform" peut apparaitre un nombre quelconque de fois, 0 inclus? Mes diverses tentatives en récursif me semble très sales.