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,
à du SVG pur,
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>
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 <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>
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.
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>
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.
Partager