<!-- Es llamado por semana -->
<!-- Rutina que va imprimiendo cada dia de la semana, usando recursividad con: indice+1-->
<xsl:template name="dias">
<xsl:param name="indice" select="1"/>
<xsl:param name="contador" select="1"/>
<xsl:choose>
<xsl:when test="$indice < $comienzo">
<fo:table-cell>
<fo:block line-height="0.8cm">-</fo:block>
</fo:table-cell>
</xsl:when>
<xsl:when test="$indice - $comienzo + 1 > $dias_mes">
<fo:table-cell>
<fo:block line-height="0.8cm">-</fo:block>
</fo:table-cell>
</xsl:when>
<xsl:when test="$indice > $comienzo - 1">
<fo:table-cell>
<fo:block line-height="0.8cm">
<xsl:choose>
<xsl:when test="($indice - $comienzo + 1) = ./asignatura/dia">
<fo:block color="rgb(128,64,0)">Exámen</fo:block>
</xsl:when>
<xsl:when test="($indice - $comienzo + 1) != ./asignatura/dia">
<xsl:value-of select="$indice - $comienzo + 1"/>
</xsl:when> </xsl:choose> </fo:block> </fo:table-cell> </xsl:when> </xsl:choose>
<xsl:if test="$contador > $indice">
<xsl:call-template name="dias">
<xsl:with-param name="indice" select="$indice + 1"/>
<xsl:with-param name="contador" select="$contador"/>
</xsl:call-template>
</xsl:if>
</xsl:template> </xsl:stylesheet>
CAPITULO 8.- PLANOS DE CÓDIGO 157
8.4
Hoja de estilo para transformación a WML
Esta hoja de estilo transforma la estructura de datos a un documento WML (Wireless Markup Language), que puede ser entendido por un dispositivo móvil WAP (Wireless Application Protocol):
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
<xsl:output encoding="iso-8859-1" doctype-public="-//WAPFORUM//DTD WML
1.1//EN" doctype-system="http://www.wapforum.org/DTD/wml_1.1.xml"
indent="yes"/>
<xsl:variable name="comienzo" select="/calendario/mes/@dia_comienzo"/>
<xsl:variable name="dias_mes" select="/calendario/mes/@n_dias"/>
<xsl:variable name="total" select="$comienzo + $dias_mes - 1"/>
<xsl:variable name="overflow" select="$total mod 7"/>
<xsl:variable name="n_elementos">
<xsl:choose>
<xsl:when test="$overflow > 0">
<xsl:value-of select="$total + 7 - $overflow"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$total"/>
</xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:template match="/"> <wml> <template> <do type="prev"> <prev/> </do> <do type="Indice"> <go href="#indice"/> </do> </template>
<card id="indice" title="Agenda de Examenes">
<p align="center">
<br/>
<big>
<b>
<xsl:value-of select="calendario/mes/nombre"/>
</b>
</big>
<br/>
<p> <table columns="7"> <tr> <td>L</td> <td>M</td> <td>X</td> <td>J</td> <td>V</td> <td>S</td> <td>D</td> </tr>
<xsl:call-template name="mes"/>
</table>
</p>
</card>
<xsl:apply-templates select="calendario/asignatura"/>
</wml>
</xsl:template>
<xsl:template match="calendario/asignatura">
<card id="{@id}" title="Dia {dia}{../mes/nombre}">
<p align="left">
<big>Examen: <b>
<xsl:value-of select="nombre"/>, </b>
<xsl:value-of select="@curso"/>Curso.</big>
</p>
</card>
</xsl:template>
<!-- Solo es llamado una vez por 'root' -->
<!-- Utiliza recursividad con indice+7 para cada semana-->
<xsl:template name="mes">
<xsl:param name="indice" select="1"/>
<xsl:if test="$indice < $n_elementos">
<xsl:call-template name="semana">
<xsl:with-param name="indice" select="$indice"/>
</xsl:call-template>
<xsl:call-template name="mes">
<xsl:with-param name="indice" select="$indice + 7"/>
</xsl:call-template>
</xsl:if>
CAPITULO 8.- PLANOS DE CÓDIGO 159
<!-- Le llama el template 'mes' cada semana -->
<xsl:template name="semana">
<xsl:param name="indice" select="1"/>
<tr>
<xsl:call-template name="dias">
<xsl:with-param name="indice" select="$indice"/>
<xsl:with-param name="contador" select="$indice + 6"/>
</xsl:call-template>
</tr>
</xsl:template>
<!-- Es llamado por semana -->
<!-- Rutina que va imprimiendo cada dia de la semana, usando recursividad con: indice+1-->
<xsl:template name="dias">
<xsl:param name="indice" select="1"/>
<xsl:param name="contador" select="1"/>
<xsl:choose>
<xsl:when test="$indice < $comienzo">
<td>-</td>
</xsl:when>
<xsl:when test="$indice - $comienzo + 1 > $dias_mes">
<td>-</td>
</xsl:when>
<xsl:when test="$indice > $comienzo - 1">
<td>
<xsl:choose>
<xsl:when test="($indice-$comienzo+1)=calendario/asignatura/dia">
<xsl:for-each select="calendario/asignatura">
<xsl:if test="($indice - $comienzo + 1) = dia">
<a href="#{@id}">
<xsl:value-of select="$indice - $comienzo + 1"/>
</a>
</xsl:if>
</xsl:for-each>
</xsl:when>
<xsl:whentest="($indice-$comienzo+1)!=calendario/asignatura/dia">
<xsl:value-of select="$indice - $comienzo + 1"/>
</xsl:when>
</xsl:choose>
</td>
</xsl:when>