<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
		version="1.0">

  <xsl:output method="xml" encoding="iso-8859-1"/>


  <!-- Lecture du document XML -->
  <xsl:template match="//syracuse">
    <syracuse>
      <xsl:choose>
	<!-- Cas pour un seul vol -->
	<xsl:when test="@value">
	  <xsl:call-template name="syracuse">
	    <xsl:with-param name="value" select="@value"/>
	  </xsl:call-template>
	</xsl:when>

	<!-- Cas pour plusieurs vol dans un intervalle -->
	<xsl:when test="@minvalue and @maxvalue">
	  <xsl:call-template name="boucle">
	    <xsl:with-param name="current" select="@minvalue"/>
	    <xsl:with-param name="max" select="@maxvalue"/>
	  </xsl:call-template>
	</xsl:when>
      </xsl:choose>
    </syracuse>
  </xsl:template>

  <!-- Boucler sur plusieurs vols -->
  <xsl:template name="boucle">
    <xsl:param name="current"/>
    <xsl:param name="max"/>

    <xsl:if test="$current &lt;= $max">
      <loop num="{$current}">
	<xsl:call-template name="syracuse">
	  <xsl:with-param name="value" select="$current"/>
	</xsl:call-template>
      </loop>
      <xsl:call-template name="boucle">
	<xsl:with-param name="current" select="$current + 1"/>
	<xsl:with-param name="max" select="$max"/>
      </xsl:call-template>
    </xsl:if>
  </xsl:template>


  <!-- Un vol -->
  <xsl:template name="syracuse">
    <xsl:param name="value"/>
    <step value="{$value}"/>

    <xsl:if test="$value > 1">
      <xsl:choose>
	<xsl:when test="($value mod 2) = 0">
	  <xsl:call-template name="syracuse">
	    <xsl:with-param name="value" select="$value div 2"/>
	  </xsl:call-template>
	</xsl:when>
	<xsl:otherwise>
	  <xsl:call-template name="syracuse">
	    <xsl:with-param name="value" select="(3 * $value) + 1"/>
	  </xsl:call-template>
	</xsl:otherwise>
      </xsl:choose>
    </xsl:if>
  </xsl:template>

</xsl:stylesheet>
