More reasonable spacing for list.
<?xml version="1.0"?>
<xsl:stylesheet version="1.1"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xt="http://www.jclark.com/xt"
xmlns="http://www.w3.org/1999/xhtml"
extension-element-prefixes="xt">
<xsl:import href="common.xsl"/>
<xsl:output method="xml"
encoding="utf-8"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
indent="yes"/>
<xsl:param name="css-base-dir"/>
<xsl:param name="stylesheet"><xsl:text>html.xsl</xsl:text></xsl:param>
<xsl:param name="pdf-filename"><xsl:text>book.pdf</xsl:text></xsl:param>
<xsl:template name="get-id">
<xsl:choose>
<xsl:when test="@id"><xsl:value-of select="@id"/></xsl:when>
<xsl:otherwise><xsl:value-of select="generate-id(.)"/></xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="parent-id">
<xsl:choose>
<xsl:when test="../@id"><xsl:value-of select="../@id"/></xsl:when>
<xsl:otherwise><xsl:value-of select="generate-id(..)"/></xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="next-id">
<xsl:choose>
<xsl:when test="following::*[1]/@id"><xsl:value-of select="following::*[1]/@id"/></xsl:when>
<xsl:otherwise><xsl:value-of select="generate-id(following::*[1])"/></xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="prec-id">
<xsl:choose>
<xsl:when test="preceding::*[1]/@id"><xsl:value-of select="preceding::*[1]/@id"/></xsl:when>
<xsl:otherwise><xsl:value-of select="generate-id(preceding::*[1])"/></xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- book processing -->
<xsl:template match="book">
<html>
<head>
<xsl:choose>
<xsl:when test="docinfo">
<xsl:apply-templates select="docinfo" mode="heading"/>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="title" mode="heading"/>
</xsl:otherwise>
</xsl:choose>
<link href="{$css-base-dir}{$stylesheet}" media="screen" rel="stylesheet" type="text/css"/>
</head>
<body class="book">
<xsl:apply-templates select="docinfo/date"/>
<xsl:apply-templates/>
<p><strong>Table des Matières</strong></p>
<ul>
<xsl:apply-templates mode="book-toc" select="section|story|poetry"/>
</ul>
<hr/>
<address>
<xsl:apply-templates select="docinfo/copyright"/>
<p>Aussi disponible au format <a href="{$pdf-filename}">PDF</a>.</p>
</address>
</body>
</html>
</xsl:template>
<xsl:template match="section" mode="book-toc">
<xsl:variable name="href">
<xsl:call-template name="get-id"/>
</xsl:variable>
<li>
<a id="{$href}" href="{$href}.html">
<xsl:apply-templates select="title" mode="book-toc"/>
</a>
</li>
</xsl:template>
<xsl:template match="title" mode="book-toc">
<xsl:apply-templates/>
</xsl:template>
<!-- title default processing -->
<xsl:template match="title">
<h1><xsl:apply-templates/></h1>
</xsl:template>
<xsl:template match="subtitle">
<p class="subtitle"><em><xsl:apply-templates/></em></p>
</xsl:template>
<!-- normal name processing -->
<xsl:template name="name">
<xsl:variable name="fullname">
<xsl:apply-templates select="firstname"/>
<xsl:if test="initials">
<xsl:text> </xsl:text>
<xsl:apply-templates select="initials"/>
</xsl:if>
<xsl:text> </xsl:text>
<xsl:apply-templates select="surname"/>
</xsl:variable>
<xsl:choose>
<xsl:when test="email">
<a href="mailto:{email/text()}" class="mailto">
<xsl:value-of select="$fullname"/>
</a>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$fullname"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="*" mode="fullname">
<xsl:call-template name="name"/>
</xsl:template>
<xsl:template match="email">
<a href="mailto:{.}"><xsl:value-of select="."/></a>
</xsl:template>
<xsl:template match="web">
<a href="{.}"><xsl:value-of select="."/></a>
</xsl:template>
<!-- simple address format, good for Canada -->
<xsl:template match="address">
<xsl:apply-templates mode="address" select="street"/>
<xsl:value-of select="city"/>
(<xsl:value-of select="state"/>),
<xsl:value-of select="postcode"/><br/>
<xsl:apply-templates select="country" mode="address"/>
</xsl:template>
<xsl:template match="*" mode="address">
<xsl:apply-templates/><br/>
</xsl:template>
<!-- default docinfo processing -->
<!-- normal is not process -->
<xsl:template match="docinfo"/>
<!-- date processing if directly selected -->
<xsl:template match="date">
<address class="date">
<xsl:apply-templates/>
</address>
</xsl:template>
<!-- in heading, default is to not process. -->
<xsl:template match="*" mode="heading"/>
<xsl:template match="docinfo" mode="heading">
<xsl:apply-templates mode="heading"/>
</xsl:template>
<xsl:template match="title" mode="heading">
<title><xsl:apply-templates/></title>
</xsl:template>
<xsl:template match="author" mode="heading">
<meta name="author">
<xsl:attribute name="content">
<xsl:if test="firstname">
<xsl:apply-templates select="firstname"/><xsl:text> </xsl:text>
</xsl:if>
<xsl:if test="initials">
<xsl:apply-templates select="initials"/><xsl:text> </xsl:text>
</xsl:if>
<xsl:apply-templates select="surname"/>
</xsl:attribute>
</meta>
</xsl:template>
<xsl:template match="date" mode="heading">
<meta name="date" content="{text()}"/>
</xsl:template>
<!-- copyright footer processing -->
<xsl:template match="copyright">
© <xsl:apply-templates select="holder"/>
<xsl:text> </xsl:text>
<xsl:apply-templates select="year"/>
</xsl:template>
<xsl:template match="holder">
<xsl:call-template name="name"/>
</xsl:template>
<xsl:template match="year">
<xsl:apply-templates/>
<xsl:if test="position() != last()">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:template>
<!-- nda docinfo processing -->
<xsl:template match="*" mode="heading-nda"/>
<xsl:template match="title" mode="heading-nda">
<title>
<xsl:apply-templates/><xsl:text> (Notes de l'auteur)</xsl:text>
</title>
</xsl:template>
<xsl:template match="docinfo" mode="heading-nda">
<xsl:apply-templates mode="heading-nda"/>
<xsl:apply-templates select='*[name()!="title"]' mode="heading"/>
</xsl:template>
<!-- para default processing -->
<xsl:template match="para">
<p><xsl:apply-templates/></p>
</xsl:template>
<xsl:template match="para[list|shortlist]">
<div>
<xsl:apply-templates select="list|shortlist"/>
</div>
</xsl:template>
<!-- formalpara processing -->
<xsl:template match="formalpara/para">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="formalpara/title">
<strong><xsl:apply-templates/></strong>
</xsl:template>
<xsl:template match="formalpara">
<p><xsl:apply-templates/></p>
</xsl:template>
<xsl:template match="formalpara[list|shortlist]">
<div>
<p><xsl:apply-templates select="title"/></p>
<xsl:apply-templates select="list|shortlist"/>
</div>
</xsl:template>
<!-- citation -->
<xsl:template match="citation/author">
<address><xsl:apply-templates/></address>
</xsl:template>
<xsl:template match="citation">
<blockquote><xsl:apply-templates/></blockquote>
</xsl:template>
<xsl:template match="author/surname">
<xsl:apply-templates/>
<xsl:if test="following-sibling::author">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:template>
<xsl:template match="author/title">
<xsl:apply-templates/>
</xsl:template>
<!-- list processing -->
<xsl:template match="list">
<xsl:choose>
<xsl:when test="@type='none'">
<ul>
<xsl:apply-templates/>
</ul>
</xsl:when>
<xsl:otherwise>
<ol type="{@id}">
<xsl:apply-templates/>
</ol>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="shortlist">
<p><xsl:apply-templates mode="short"/></p>
</xsl:template>
<xsl:template match="item|listitem">
<li><xsl:apply-templates/></li>
</xsl:template>
<!-- inline element -->
<xsl:template match="emphasis">
<em><xsl:apply-templates/></em>
</xsl:template>
<xsl:template match="term">
<em class="term"><xsl:apply-templates/></em>
</xsl:template>
<xsl:template match="foreign">
<em class="foreign"><xsl:apply-templates/></em>
</xsl:template>
<xsl:template match="replaceable">
<em class="replaceable">
<xsl:text>[</xsl:text>
<xsl:apply-templates/>
<xsl:text>]</xsl:text>
</em>
</xsl:template>
<xsl:template match="literal">
<tt class="literal"><xsl:apply-templates/></tt>
</xsl:template>
<xsl:template match="acronym[@text]">
<acronym title="{@text}"><xsl:apply-templates/></acronym>
</xsl:template>
<xsl:template match="acronym">
<acronym><xsl:apply-templates/></acronym>
</xsl:template>
<xsl:template match="subscript">
<sub><xsl:apply-templates/></sub>
</xsl:template>
<xsl:template match="superscript">
<sup><xsl:apply-templates/></sup>
</xsl:template>
<xsl:template match="section" mode="navbar-name">
<xsl:value-of select="title/text()"/>
</xsl:template>
<xsl:template match="section|story|poetry" mode="href">
<xsl:call-template name="get-id"/>
</xsl:template>
<xsl:template name="navbar-link">
<xsl:param name="prefix"></xsl:param>
<a>
<xsl:attribute name="href">
<xsl:apply-templates select="." mode="href"/>
<xsl:text>.html</xsl:text>
</xsl:attribute>
<xsl:value-of select="$prefix"/>
<xsl:apply-templates select="." mode="navbar-name"/>
</a><br/>
</xsl:template>
<xsl:template match="section" mode="navbar-prec">
<xsl:call-template name="navbar-link">
<xsl:with-param name="prefix">
<xsl:text>Section précédente: </xsl:text>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template match="section" mode="navbar-next">
<xsl:call-template name="navbar-link">
<xsl:with-param name="prefix">
<xsl:text>Section suivante: </xsl:text>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template match="section" mode="navbar-section">
<xsl:apply-templates
select="preceding-sibling::section[1]"
mode="navbar-prec"/>
<xsl:apply-templates
select="following-sibling::section[1]"
mode="navbar-next"/>
<xsl:variable name="section-ref">
<xsl:call-template name="get-id"/>
</xsl:variable>
<a href="index.html#{$section-ref}">Retour à la table des matières</a><br/>
</xsl:template>
<!-- section files -->
<xsl:template match="section">
<xsl:variable name="href">
<xsl:call-template name="get-id"/>
</xsl:variable>
<xt:document href="{$href}.html" method="xml" encoding="utf-8"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
indent="yes">
<html>
<head>
<xsl:apply-templates select="title" mode="heading"/>
<link href="{$css-base-dir}{$stylesheet}" media="screen" rel="stylesheet" type="text/css"/>
</head>
<body>
<h1><xsl:value-of select="title"/></h1>
<xsl:apply-templates/>
<xsl:if test="child::*[name(.)='story' or name(.)='poetry' or name(.)='section']">
<ul>
<xsl:apply-templates mode="book-toc" select="child::*[name(.)='story' or name(.)='poetry' or name(.)='section']"/>
</ul>
</xsl:if>
<hr/>
<address>
<xsl:apply-templates select="../copyright"/>
</address>
<xsl:apply-templates mode="navbar-section" select="."/>
</body>
</html>
</xt:document>
</xsl:template>
<!-- anything else is clear -->
<xsl:template match="*" mode="book-toc"/>
<xsl:template match="*" mode="section-toc"/>
<xsl:template match="*" mode="navbar-section"/>
<!-- preambule section -->
<xsl:template match="preambule">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="preambule/title">
<h2><xsl:apply-templates/></h2>
</xsl:template>
<!-- short representation -->
<xsl:template match="list" mode="short">
<xsl:param name="ending">
<xsl:text>.</xsl:text>
</xsl:param>
<xsl:apply-templates mode="short">
<xsl:with-param name="ending" select="$ending"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="listitem" mode="short">
<xsl:apply-templates mode="short"/><xsl:text>, </xsl:text>
</xsl:template>
<xsl:template match="listitem[position() = last()]" mode="short">
<xsl:param name="ending">
<xsl:text>.</xsl:text>
</xsl:param>
<xsl:apply-templates mode="short"/><xsl:value-of select="$ending"/>
</xsl:template>
<xsl:template match="item" mode="short">
<xsl:apply-templates/><xsl:text>, </xsl:text>
</xsl:template>
<xsl:template match="item[position() = last()]" mode="short">
<xsl:param name="ending">
<xsl:text>.</xsl:text>
</xsl:param>
<xsl:apply-templates/><xsl:value-of select="$ending"/>
</xsl:template>
<xsl:template match="organism" mode="short">
<xsl:choose>
<xsl:when test="web">
<a><xsl:attribute name="href">
<xsl:apply-templates select="web"/>
</xsl:attribute><xsl:apply-templates select="name"/></a>
</xsl:when>
<xsl:otherwise><xsl:apply-templates select="name"/></xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="ulink">
<a>
<xsl:attribute name="href">
<xsl:value-of select="@url"/>
</xsl:attribute>
<xsl:apply-templates/>
</a>
</xsl:template>
<xsl:template match="xref">
<xsl:variable name="linkend" select="@linkend"/>
<xsl:apply-templates select="//*[@id=$linkend]" mode="xref"/>
</xsl:template>
<xsl:template match="section" mode="xref">
<xsl:variable name="href">
<xsl:call-template name="get-id"/>
</xsl:variable>
<a href="{$href}.html"><xsl:value-of select="title"/></a>
</xsl:template>
<xsl:template match="book" mode="xref">
<xsl:variable name="href">
<xsl:call-template name="get-id"/>
</xsl:variable>
<a href="{$href}.html"><xsl:value-of select="docinfo/title"/></a>
</xsl:template>
<xsl:template match="*" mode="xref"/>
<xsl:template match="link">
<xsl:variable name="linkend" select="@linkend"/>
<a>
<xsl:attribute name="href">
<xsl:apply-templates select="//*[@id=$linkend]" mode="href"/>
<xsl:text>.html</xsl:text>
</xsl:attribute>
<xsl:apply-templates/>
</a>
</xsl:template>
<xsl:template match="section/title"/>
<xsl:template match="section/subtitle"/>
</xsl:stylesheet>