******************************************************************** -->
<xsl:template name="href.target">
+ <xsl:param name="context" select="."/>
<xsl:param name="object" select="."/>
<xsl:text>#</xsl:text>
<xsl:call-template name="object.id">
</xsl:variable>
<xsl:template name="set.toc">
+ <xsl:param name="toc-context" select="."/>
+
<xsl:variable name="toc.title">
<p>
<b>
<div class="toc">
<xsl:copy-of select="$toc.title"/>
<xsl:element name="{$toc.list.type}">
- <xsl:apply-templates select="$nodes" mode="toc"/>
+ <xsl:apply-templates select="$nodes" mode="toc">
+ <xsl:with-param name="toc-context" select="$toc-context"/>
+ </xsl:apply-templates>
</xsl:element>
</div>
</xsl:if>
</xsl:template>
<xsl:template name="division.toc">
+ <xsl:param name="toc-context" select="."/>
+
<xsl:variable name="toc.title">
<p>
<b>
<div class="toc">
<xsl:copy-of select="$toc.title"/>
<xsl:element name="{$toc.list.type}">
- <xsl:apply-templates select="$nodes" mode="toc"/>
+ <xsl:apply-templates select="$nodes" mode="toc">
+ <xsl:with-param name="toc-context" select="$toc-context"/>
+ </xsl:apply-templates>
</xsl:element>
</div>
</xsl:if>
</xsl:template>
<xsl:template name="component.toc">
+ <xsl:param name="toc-context" select="."/>
+
<xsl:variable name="toc.title">
<p>
<b>
<div class="toc">
<xsl:copy-of select="$toc.title"/>
<xsl:element name="{$toc.list.type}">
- <xsl:apply-templates select="$nodes" mode="toc"/>
+ <xsl:apply-templates select="$nodes" mode="toc">
+ <xsl:with-param name="toc-context" select="$toc-context"/>
+ </xsl:apply-templates>
</xsl:element>
</div>
</xsl:if>
</xsl:template>
<xsl:template name="section.toc">
+ <xsl:param name="toc-context" select="."/>
+
<xsl:variable name="toc.title">
<p>
<b>
<div class="toc">
<xsl:copy-of select="$toc.title"/>
<xsl:element name="{$toc.list.type}">
- <xsl:apply-templates select="$nodes" mode="toc"/>
+ <xsl:apply-templates select="$nodes" mode="toc">
+ <xsl:with-param name="toc-context" select="$toc-context"/>
+ </xsl:apply-templates>
</xsl:element>
</div>
</xsl:if>
<!-- ==================================================================== -->
<xsl:template name="subtoc">
+ <xsl:param name="toc-context" select="."/>
<xsl:param name="nodes" select="NOT-AN-ELEMENT"/>
<xsl:variable name="subtoc">
<xsl:element name="{$toc.list.type}">
- <xsl:apply-templates mode="toc" select="$nodes"/>
+ <xsl:apply-templates mode="toc" select="$nodes">
+ <xsl:with-param name="toc-context" select="$toc-context"/>
+ </xsl:apply-templates>
</xsl:element>
</xsl:variable>
<a>
<xsl:attribute name="href">
- <xsl:call-template name="href.target"/>
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="context" select="$toc-context"/>
+ </xsl:call-template>
</xsl:attribute>
<xsl:apply-templates select="." mode="title.markup"/>
</a>
</xsl:template>
<xsl:template match="book|setindex" mode="toc">
+ <xsl:param name="toc-context" select="."/>
+
<xsl:call-template name="subtoc">
+ <xsl:with-param name="toc-context" select="$toc-context"/>
<xsl:with-param name="nodes" select="part|reference
|preface|chapter|appendix
|article
</xsl:template>
<xsl:template match="part|reference" mode="toc">
+ <xsl:param name="toc-context" select="."/>
+
<xsl:call-template name="subtoc">
+ <xsl:with-param name="toc-context" select="$toc-context"/>
<xsl:with-param name="nodes" select="appendix|chapter|article
|index|glossary|bibliography
|preface|reference|refentry
</xsl:template>
<xsl:template match="preface|chapter|appendix|article" mode="toc">
+ <xsl:param name="toc-context" select="."/>
+
<xsl:call-template name="subtoc">
+ <xsl:with-param name="toc-context" select="$toc-context"/>
<xsl:with-param name="nodes" select="section|sect1|bridgehead"/>
</xsl:call-template>
</xsl:template>
<xsl:template match="sect1" mode="toc">
+ <xsl:param name="toc-context" select="."/>
<xsl:call-template name="subtoc">
+ <xsl:with-param name="toc-context" select="$toc-context"/>
<xsl:with-param name="nodes" select="sect2|bridgehead"/>
</xsl:call-template>
</xsl:template>
<xsl:template match="sect2" mode="toc">
+ <xsl:param name="toc-context" select="."/>
+
<xsl:call-template name="subtoc">
+ <xsl:with-param name="toc-context" select="$toc-context"/>
<xsl:with-param name="nodes" select="sect3|bridgehead"/>
</xsl:call-template>
</xsl:template>
<xsl:template match="sect3" mode="toc">
+ <xsl:param name="toc-context" select="."/>
+
<xsl:call-template name="subtoc">
+ <xsl:with-param name="toc-context" select="$toc-context"/>
<xsl:with-param name="nodes" select="sect4|bridgehead"/>
</xsl:call-template>
</xsl:template>
<xsl:template match="sect4" mode="toc">
+ <xsl:param name="toc-context" select="."/>
+
<xsl:call-template name="subtoc">
+ <xsl:with-param name="toc-context" select="$toc-context"/>
<xsl:with-param name="nodes" select="sect5|bridgehead"/>
</xsl:call-template>
</xsl:template>
<xsl:template match="sect5" mode="toc">
- <xsl:call-template name="subtoc"/>
+ <xsl:param name="toc-context" select="."/>
+
+ <xsl:call-template name="subtoc">
+ <xsl:with-param name="toc-context" select="$toc-context"/>
+ </xsl:call-template>
</xsl:template>
<xsl:template match="section" mode="toc">
+ <xsl:param name="toc-context" select="."/>
+
<xsl:call-template name="subtoc">
+ <xsl:with-param name="toc-context" select="$toc-context"/>
<xsl:with-param name="nodes" select="section|bridgehead"/>
</xsl:call-template>
</xsl:template>
<xsl:template match="bridgehead" mode="toc">
+ <xsl:param name="toc-context" select="."/>
+
<xsl:if test="$bridgehead.in.toc != 0">
- <xsl:call-template name="subtoc"/>
+ <xsl:call-template name="subtoc">
+ <xsl:with-param name="toc-context" select="$toc-context"/>
+ </xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template match="bibliography|glossary" mode="toc">
- <xsl:call-template name="subtoc"/>
+ <xsl:param name="toc-context" select="."/>
+
+ <xsl:call-template name="subtoc">
+ <xsl:with-param name="toc-context" select="$toc-context"/>
+ </xsl:call-template>
</xsl:template>
<xsl:template match="index" mode="toc">
+ <xsl:param name="toc-context" select="."/>
+
<!-- If the index tag is empty, don't point at it from the TOC -->
<xsl:if test="* or $generate.index">
- <xsl:call-template name="subtoc"/>
+ <xsl:call-template name="subtoc">
+ <xsl:with-param name="toc-context" select="$toc-context"/>
+ </xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template match="refentry" mode="toc">
+ <xsl:param name="toc-context" select="."/>
+
<xsl:variable name="refmeta" select=".//refmeta"/>
<xsl:variable name="refentrytitle" select="$refmeta//refentrytitle"/>
<xsl:variable name="refnamediv" select=".//refnamediv"/>
</xsl:template>
<xsl:template match="title" mode="toc">
+ <xsl:param name="toc-context" select="."/>
+
<a>
<xsl:attribute name="href">
<xsl:call-template name="href.target">
</xsl:template>
<xsl:template name="manual-toc">
+ <xsl:param name="toc-context" select="."/>
<xsl:param name="tocentry"/>
<!-- be careful, we don't want to change the current document to the other tree! -->
<!-- ==================================================================== -->
<xsl:template name="list.of.titles">
+ <xsl:param name="toc-context" select="."/>
<xsl:param name="titles" select="'table'"/>
<xsl:param name="nodes" select=".//table"/>
</p>
<xsl:element name="{$toc.list.type}">
- <xsl:apply-templates select="$nodes" mode="toc"/>
+ <xsl:apply-templates select="$nodes" mode="toc">
+ <xsl:with-param name="toc-context" select="$toc-context"/>
+ </xsl:apply-templates>
</xsl:element>
</div>
</xsl:if>
</xsl:template>
<xsl:template match="figure|table|example|equation" mode="toc">
+ <xsl:param name="toc-context" select="."/>
+
<xsl:element name="{$toc.listitem.type}">
<xsl:variable name="label">
<xsl:apply-templates select="." mode="label.markup"/>
</xsl:choose>
</xsl:variable>
- <xsl:variable name="dir">
- <xsl:call-template name="dbhtml-dir"/>
- </xsl:variable>
-
<xsl:choose>
<xsl:when test="$ischunk='0'">
<!-- if called on something that isn't a chunk, walk up... -->
<xsl:when test="not($recursive) and $filename != ''">
<!-- if this chunk has an explicit name, use it -->
- <xsl:if test="$dir != ''">
- <xsl:value-of select="$dir"/>
- <xsl:text>/</xsl:text>
- </xsl:if>
+ <xsl:call-template name="dbhtml-dir"/>
<xsl:value-of select="$filename"/>
</xsl:when>
<!-- ==================================================================== -->
-<xsl:template name="href.target">
+<xsl:template name="href.target.uri">
<xsl:param name="object" select="."/>
<xsl:variable name="ischunk">
<xsl:call-template name="chunk">
</xsl:if>
</xsl:template>
+<xsl:template name="href.target">
+ <xsl:param name="context" select="."/>
+ <xsl:param name="object" select="."/>
+
+ <xsl:variable name="href.to.uri">
+ <xsl:call-template name="href.target.uri">
+ <xsl:with-param name="object" select="$object"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:variable name="href.from.uri">
+ <xsl:call-template name="href.target.uri">
+ <xsl:with-param name="object" select="$context"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:variable name="href.to">
+ <xsl:call-template name="trim.common.uri.paths">
+ <xsl:with-param name="uriA" select="$href.to.uri"/>
+ <xsl:with-param name="uriB" select="$href.from.uri"/>
+ <xsl:with-param name="return" select="'A'"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:variable name="href.from">
+ <xsl:call-template name="trim.common.uri.paths">
+ <xsl:with-param name="uriA" select="$href.to.uri"/>
+ <xsl:with-param name="uriB" select="$href.from.uri"/>
+ <xsl:with-param name="return" select="'B'"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:variable name="depth">
+ <xsl:call-template name="count.uri.path.depth">
+ <xsl:with-param name="filename" select="$href.from"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:variable name="href">
+ <xsl:call-template name="copy-string">
+ <xsl:with-param name="string" select="'../'"/>
+ <xsl:with-param name="count" select="$depth"/>
+ </xsl:call-template>
+ <xsl:value-of select="$href.to"/>
+ </xsl:variable>
+
+<!--
+ <xsl:message>
+ <xsl:text>In </xsl:text>
+ <xsl:value-of select="name(.)"/>
+ <xsl:text> (</xsl:text>
+ <xsl:value-of select="$href.from"/>
+ <xsl:text>,</xsl:text>
+ <xsl:value-of select="$depth"/>
+ <xsl:text>) </xsl:text>
+ <xsl:value-of select="name($object)"/>
+ <xsl:text> href=</xsl:text>
+ <xsl:value-of select="$href"/>
+ </xsl:message>
+-->
+
+ <xsl:value-of select="$href"/>
+</xsl:template>
+
<!-- ==================================================================== -->
<xsl:template name="html.head">