</xsl:choose>
</xsl:template>
+<!-- ====================================================================== -->
+<!-- OrderedList Numeration -->
+
+<xsl:template name="next.numeration">
+ <xsl:param name="numeration" select="'default'"/>
+ <xsl:choose>
+ <!-- Change this list if you want to change the order of numerations -->
+ <xsl:when test="$numeration = 'arabic'">loweralpha</xsl:when>
+ <xsl:when test="$numeration = 'loweralpha'">lowerroman</xsl:when>
+ <xsl:when test="$numeration = 'lowerroman'">upperalpha</xsl:when>
+ <xsl:when test="$numeration = 'upperalpha'">upperroman</xsl:when>
+ <xsl:when test="$numeration = 'upperroman'">arabic</xsl:when>
+ <xsl:otherwise>arabic</xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="list.numeration">
+ <xsl:param name="node" select="."/>
+
+ <xsl:choose>
+ <xsl:when test="$node/@numeration">
+ <xsl:value-of select="$node/@numeration"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test="$node/ancestor::orderedlist">
+ <xsl:call-template name="next.numeration">
+ <xsl:with-param name="numeration">
+ <xsl:call-template name="list.numeration">
+ <xsl:with-param name="node" select="$node/ancestor::orderedlist[1]"/>
+ </xsl:call-template>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="next.numeration"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
<!-- ====================================================================== -->
</xsl:stylesheet>
<xsl:template match="orderedlist/listitem">
<xsl:variable name="id"><xsl:call-template name="object.id"/></xsl:variable>
+
+ <xsl:variable name="numeration">
+ <xsl:call-template name="list.numeration">
+ <xsl:with-param name="node" select="parent::orderedlist"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:variable name="type">
+ <xsl:choose>
+ <xsl:when test="$numeration='arabic'">1.</xsl:when>
+ <xsl:when test="$numeration='loweralpha'">a.</xsl:when>
+ <xsl:when test="$numeration='lowerroman'">i.</xsl:when>
+ <xsl:when test="$numeration='upperalpha'">A.</xsl:when>
+ <xsl:when test="$numeration='upperroman'">I.</xsl:when>
+ <!-- What!? This should never happen -->
+ <xsl:otherwise>
+ <xsl:message>
+ <xsl:text>Unexpected numeration: </xsl:text>
+ <xsl:value-of select="$numeration"/>
+ </xsl:message>
+ <xsl:value-of select="1."/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
<fo:list-item id="{$id}" xsl:use-attribute-sets="list.item.spacing">
<fo:list-item-label end-indent="label-end()">
<fo:block>
- <xsl:number count="listitem" format="1."/>
+ <xsl:number count="listitem" format="{$type}"/>
</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="body-start()">
<xsl:otherwise>1</xsl:otherwise>
</xsl:choose>
</xsl:variable>
+
<xsl:variable name="numeration">
+ <xsl:call-template name="list.numeration"/>
+ </xsl:variable>
+
+ <xsl:variable name="type">
<xsl:choose>
- <xsl:when test="@numeration='arabic'">1</xsl:when>
- <xsl:when test="@numeration='loweralpha'">a</xsl:when>
- <xsl:when test="@numeration='lowerroman'">i</xsl:when>
- <xsl:when test="@numeration='upperalpha'">A</xsl:when>
- <xsl:when test="@numeration='upperroman'">I</xsl:when>
+ <xsl:when test="$numeration='arabic'">1</xsl:when>
+ <xsl:when test="$numeration='loweralpha'">a</xsl:when>
+ <xsl:when test="$numeration='lowerroman'">i</xsl:when>
+ <xsl:when test="$numeration='upperalpha'">A</xsl:when>
+ <xsl:when test="$numeration='upperroman'">I</xsl:when>
+ <!-- What!? This should never happen -->
<xsl:otherwise>
- <!-- alternate the numeration based on depth -->
- <xsl:variable name="depth" select="count(ancestor::orderedlist)"/>
- <xsl:variable name="type" select="$depth mod 5"/>
- <xsl:choose>
- <xsl:when test="$type = 0">1</xsl:when>
- <xsl:when test="$type = 1">a</xsl:when>
- <xsl:when test="$type = 2">i</xsl:when>
- <xsl:when test="$type = 3">A</xsl:when>
- <xsl:when test="$type = 4">I</xsl:when>
- </xsl:choose>
+ <xsl:message>
+ <xsl:text>Unexpected numeration: </xsl:text>
+ <xsl:value-of select="$numeration"/>
+ </xsl:message>
+ <xsl:value-of select="1"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
+
<div class="{name(.)}">
<xsl:if test="@id">
<a name="{@id}"/>
</xsl:if>
<xsl:if test="$numeration != ''">
<xsl:attribute name="type">
- <xsl:value-of select="$numeration"/>
+ <xsl:value-of select="$type"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="@spacing='compact'">