working turtle
This commit is contained in:
parent
b87bb81be1
commit
9edde0d297
1 changed files with 112 additions and 3 deletions
115
tortue.xsl
115
tortue.xsl
|
@ -1,8 +1,117 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||||
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/1999/xhtml">
|
|
||||||
<xsl:output indent="yes" />
|
<xsl:output indent="yes" />
|
||||||
|
|
||||||
<!-- TODO : Anri -->
|
<xsl:param name="nom" />
|
||||||
|
<xsl:param name="n" />
|
||||||
|
|
||||||
|
<!-- Pour le Lsystem -->
|
||||||
|
<xsl:template match="lsystem">
|
||||||
|
<tortue>
|
||||||
|
<xsl:call-template name="substitution">
|
||||||
|
<xsl:with-param name="actuel" select="axiom" />
|
||||||
|
<xsl:with-param name="n" select="$n" />
|
||||||
|
</xsl:call-template>
|
||||||
|
</tortue>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- Substitution -->
|
||||||
|
<xsl:template name="substitution">
|
||||||
|
<xsl:param name="actuel" />
|
||||||
|
<xsl:param name="n" />
|
||||||
|
<!-- Si on doit encore substituer -->
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$n > 0">
|
||||||
|
<!-- Applique la substitution -->
|
||||||
|
<xsl:variable name="data">
|
||||||
|
<xsl:call-template name="Application">
|
||||||
|
<xsl:with-param name="data" select="$actuel" />
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:variable>
|
||||||
|
|
||||||
|
<!-- Appel récursif -->
|
||||||
|
<xsl:call-template
|
||||||
|
name="substitution">
|
||||||
|
<xsl:with-param name="actuel" select="$data" />
|
||||||
|
<xsl:with-param name="n" select="$n - 1" />
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<!-- Interprétation -->
|
||||||
|
<xsl:call-template name="Interpretation">
|
||||||
|
<xsl:with-param name="data" select="$actuel" />
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- Applique la substitution -->
|
||||||
|
<xsl:template name="Application">
|
||||||
|
<xsl:param name="data" />
|
||||||
|
<xsl:variable name="substitution" select="substitutions/substitution" />
|
||||||
|
<xsl:analyze-string
|
||||||
|
select="$data" regex=".">
|
||||||
|
<xsl:matching-substring>
|
||||||
|
<xsl:value-of select="$substitution[@member = current()]" />
|
||||||
|
</xsl:matching-substring>
|
||||||
|
</xsl:analyze-string>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- Interprète la séquence -->
|
||||||
|
<xsl:template name="Interpretation">
|
||||||
|
<xsl:param name="data" />
|
||||||
|
<xsl:variable name="interpretation"
|
||||||
|
select="interpretations/interpretation" />
|
||||||
|
<xsl:analyze-string
|
||||||
|
select="$data" regex=".">
|
||||||
|
<xsl:matching-substring>
|
||||||
|
<xsl:variable name="action"
|
||||||
|
select="$interpretation[@member = current()]" />
|
||||||
|
<xsl:choose>
|
||||||
|
<!-- Déplacer -->
|
||||||
|
<xsl:when test="matches($action, '^LINE \d+$')">
|
||||||
|
<move>
|
||||||
|
<xsl:value-of select="substring-after($action, 'LINE ')" />
|
||||||
|
</move>
|
||||||
|
</xsl:when>
|
||||||
|
|
||||||
|
<!-- Tourner -->
|
||||||
|
<xsl:when test="matches($action, '^TURN -?\d+$')">
|
||||||
|
<turn>
|
||||||
|
<xsl:value-of select="substring-after($action, 'TURN ')" />
|
||||||
|
</turn>
|
||||||
|
</xsl:when>
|
||||||
|
|
||||||
|
<!-- Store -->
|
||||||
|
<xsl:when test="$action = 'STORE'">
|
||||||
|
<store />
|
||||||
|
</xsl:when>
|
||||||
|
|
||||||
|
<!-- Restore -->
|
||||||
|
<xsl:when test="$action = 'RESTORE'">
|
||||||
|
<restore />
|
||||||
|
</xsl:when>
|
||||||
|
|
||||||
|
<!-- Debug -->
|
||||||
|
<!-- <xsl:otherwise>
|
||||||
|
<action>
|
||||||
|
<xsl:value-of select="$interpretation[@member = current()]" />
|
||||||
|
</action>
|
||||||
|
</xsl:otherwise> -->
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:matching-substring>
|
||||||
|
</xsl:analyze-string>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- On récupère le Lsystem qui nous intéresse -->
|
||||||
|
<xsl:template match="/">
|
||||||
|
<xsl:processing-instruction name="xml-model">
|
||||||
|
href="tortue.xsd"
|
||||||
|
</xsl:processing-instruction>
|
||||||
|
|
||||||
|
<xsl:apply-templates
|
||||||
|
select="lsystems/lsystem[name=$nom]" />
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
</xsl:transform>
|
</xsl:transform>
|
||||||
|
|
Reference in a new issue