]> git.stg.codes - stg.git/blob - doc/xslt/html/maketoc.xsl
Code deduplication (plugin creation via template PLUGIN_CREATOR)
[stg.git] / doc / xslt / html / maketoc.xsl
1 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
2                 xmlns:doc="http://nwalsh.com/xsl/documentation/1.0"
3                 version="1.0"
4                 exclude-result-prefixes="doc">
5
6 <!-- ********************************************************************
7      $Id: maketoc.xsl 6910 2007-06-28 23:23:30Z xmldoc $
8      ********************************************************************
9
10      This file is part of the XSL DocBook Stylesheet distribution.
11      See ../README or http://docbook.sf.net/release/xsl/current/ for
12      copyright and other information.
13
14      ******************************************************************** -->
15
16 <!-- ==================================================================== -->
17
18 <xsl:import href="docbook.xsl"/>
19 <xsl:import href="chunk.xsl"/>
20
21 <xsl:output method="xml" indent="no" encoding='utf-8'/>
22
23 <xsl:param name="toc.list.type" select="'tocentry'"/>
24
25 <!-- refentry in autotoc.xsl does not use subtoc, so must
26      handle it explicitly here. -->
27 <xsl:template match="refentry" mode="toc">
28   <xsl:param name="toc-context" select="."/>
29
30   <xsl:call-template name="subtoc">
31     <xsl:with-param name="toc-context" select="$toc-context"/>
32   </xsl:call-template>
33 </xsl:template>
34
35
36 <xsl:template name="subtoc">
37   <xsl:param name="nodes" select="NOT-AN-ELEMENT"/>
38   <xsl:variable name="filename">
39     <xsl:apply-templates select="." mode="chunk-filename"/>
40   </xsl:variable>
41
42   <xsl:variable name="chunk">
43     <xsl:call-template name="chunk"/>
44   </xsl:variable>
45
46   <xsl:if test="$chunk != 0">
47     <xsl:call-template name="indent-spaces"/>
48     <xsl:variable name="id">
49       <xsl:call-template name="object.id"/>
50     </xsl:variable>
51     <tocentry linkend="{$id}">
52       <xsl:processing-instruction name="dbhtml">
53         <xsl:text>filename="</xsl:text>
54         <xsl:value-of select="$filename"/>
55         <xsl:text>"</xsl:text>
56       </xsl:processing-instruction>
57       <xsl:text>&#xA;</xsl:text>
58       <xsl:apply-templates mode="toc" select="$nodes"/>
59       <xsl:call-template name="indent-spaces"/>
60     </tocentry>
61     <xsl:text>&#xA;</xsl:text>
62   </xsl:if>
63 </xsl:template>
64
65 <xsl:template name="indent-spaces">
66   <xsl:param name="node" select="."/>
67   <xsl:text>  </xsl:text>
68   <xsl:if test="$node/parent::*">
69     <xsl:call-template name="indent-spaces">
70       <xsl:with-param name="node" select="$node/parent::*"/>
71     </xsl:call-template>
72   </xsl:if>
73 </xsl:template>
74
75 <!-- ==================================================================== -->
76
77 <xsl:template match="/" priority="-1">
78   <xsl:text>&#xA;</xsl:text>
79   <toc role="chunk-toc">
80     <xsl:text>&#xA;</xsl:text>
81     <xsl:apply-templates select="/" mode="toc"/>
82   </toc>
83   <xsl:text>&#xA;</xsl:text>
84 </xsl:template>
85
86 </xsl:stylesheet>