<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">
 <xsl:output method="html"/>

<xsl:param name="mesActual" select="10" />
<xsl:param name="añoActual" select="2006" />
 
 <xsl:template match="/">
  <html>
   <head>
   <title>Calendario</title>
   <link rel="stylesheet" href="calendario.css" />
   </head>
   <body>
    <p>Días del mes: <xsl:call-template name="diasMes">
        <xsl:with-param name="mes" select="$mesActual" />
        <xsl:with-param name="año" select="$añoActual" />
      </xsl:call-template></p>
    <p>1 de enero: <xsl:call-template name="unoEnero">
        <xsl:with-param name="año" select="$añoActual" />
      </xsl:call-template>
    </p>

    <xsl:call-template name="creaTabla">
     <xsl:with-param name="m" select="5" />
     <xsl:with-param name="n" select="7" />
    </xsl:call-template>
   </body>
  </html>
 </xsl:template>


 <xsl:template name="diasMes">
  <xsl:param name="mes"/>
  <xsl:param name="año"/>
  
  <xsl:choose>
   <xsl:when test="$mes=1">31</xsl:when>
   <xsl:when test="$mes=2">
    <!-- Chequear si es bisiesto -->
    <xsl:choose>
     <xsl:when test="($año mod 100 = 0 and $año mod 400 = 0) 
                  or ($año mod 4 = 0)">
     29
     </xsl:when> 
     <xsl:otherwise>
     28
     </xsl:otherwise>
    </xsl:choose>
    </xsl:when>
    <xsl:when test="$mes=3">31</xsl:when>
    <xsl:when test="$mes=4">30</xsl:when>
    <xsl:when test="$mes=5">31</xsl:when>
    <xsl:when test="$mes=6">30</xsl:when>
    <xsl:when test="$mes=7">31</xsl:when>
	<xsl:when test="$mes=8">31</xsl:when>
	<xsl:when test="$mes=9">30</xsl:when>
	<xsl:when test="$mes=10">31</xsl:when>
	<xsl:when test="$mes=11">30</xsl:when>
	<xsl:when test="$mes=12">31</xsl:when>
  </xsl:choose>  
 </xsl:template>
 
 <xsl:template name="unoEnero">
  <xsl:param name="año" />
  <xsl:value-of select="floor(($año + ($año - 1) div 4 -
                                ($año - 1) div 100 +
                                ($año - 1) div 400 + 6) mod 7) + 1"/>
 </xsl:template>
 
 
 <xsl:template name="creaTabla">
  <xsl:param name="m" />
  <xsl:param name="n" />
  <table>
  <xsl:call-template name="creaTablaAux">
   <xsl:with-param name="mActual" select="1" />
   <xsl:with-param name="nActual" select="1" />
   <xsl:with-param name="m" select="$m" />
   <xsl:with-param name="n" select="$n" />
  </xsl:call-template>
  </table>
 </xsl:template>

<xsl:template name="creaTablaAux">
  <xsl:param name="nActual" />
  <xsl:param name="m" />
  <xsl:param name="n" />
  
  <xsl:choose>
   <xsl:when test="$nActual > $n" />
   <xsl:otherwise>
    <tr>
    <xsl:call-template name="creaFila">
     <xsl:with-param name="mActual" select="1" />
     <xsl:with-param name="m" select="$m" />
    </xsl:call-template>
    </tr>
    <xsl:call-template name="creaTablaAux">
     <xsl:with-param name="nActual" select="$nActual + 1" />
     <xsl:with-param name="m" select="$m" />
     <xsl:with-param name="n" select="$n" />
    </xsl:call-template>
   </xsl:otherwise>
  </xsl:choose>
 </xsl:template>

<xsl:template name="creaFila">
  <xsl:param name="mActual" />
  <xsl:param name="m" />
 
 <xsl:choose>
 <xsl:when test="$mActual > $m" />
 <xsl:otherwise>
  <td>M</td>
  <xsl:call-template name="creaFila">
   <xsl:with-param name="mActual" select="$mActual + 1" />
   <xsl:with-param name="m" select="$m" />
  </xsl:call-template>   
 </xsl:otherwise>
 </xsl:choose>
</xsl:template>
 
 
</xsl:stylesheet>