1<?xml version='1.0'?>
2<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3                version='1.0'>
4
5<!-- ********************************************************************
6     $Id$
7     ********************************************************************
8
9     This file is part of the XSL DocBook Stylesheet distribution.
10     See ../README or http://nwalsh.com/docbook/xsl/ for copyright
11     and other information.
12
13     ******************************************************************** -->
14
15<!-- ==================================================================== -->
16
17<xsl:template match="section">
18  <xsl:variable name="depth" select="count(ancestor::section)+1"/>
19
20  <xsl:call-template name="id.warning"/>
21
22  <div>
23    <xsl:apply-templates select="." mode="class.attribute"/>
24    <xsl:call-template name="dir">
25      <xsl:with-param name="inherit" select="1"/>
26    </xsl:call-template>
27    <xsl:call-template name="language.attribute"/>
28    <xsl:call-template name="section.titlepage"/>
29
30    <xsl:variable name="toc.params">
31      <xsl:call-template name="find.path.params">
32        <xsl:with-param name="table" select="normalize-space($generate.toc)"/>
33      </xsl:call-template>
34    </xsl:variable>
35
36    <xsl:if test="contains($toc.params, 'toc')
37                  and $depth &lt;= $generate.section.toc.level">
38      <xsl:call-template name="section.toc">
39        <xsl:with-param name="toc.title.p" select="contains($toc.params, 'title')"/>
40      </xsl:call-template>
41      <xsl:call-template name="section.toc.separator"/>
42    </xsl:if>
43    <xsl:apply-templates/>
44    <xsl:call-template name="process.chunk.footnotes"/>
45  </div>
46</xsl:template>
47
48<xsl:template name="section.title">
49  <!-- the context node should be the title of a section when called -->
50  <xsl:variable name="section" select="(ancestor::section
51                                        |ancestor::simplesect
52                                        |ancestor::sect1
53                                        |ancestor::sect2
54                                        |ancestor::sect3
55                                        |ancestor::sect4
56                                        |ancestor::sect5)[last()]"/>
57
58  <xsl:variable name="renderas">
59    <xsl:choose>
60      <xsl:when test="$section/@renderas = 'sect1'">1</xsl:when>
61      <xsl:when test="$section/@renderas = 'sect2'">2</xsl:when>
62      <xsl:when test="$section/@renderas = 'sect3'">3</xsl:when>
63      <xsl:when test="$section/@renderas = 'sect4'">4</xsl:when>
64      <xsl:when test="$section/@renderas = 'sect5'">5</xsl:when>
65      <xsl:otherwise><xsl:value-of select="''"/></xsl:otherwise>
66    </xsl:choose>
67  </xsl:variable>
68
69  <xsl:variable name="level">
70    <xsl:choose>
71      <xsl:when test="$renderas != ''">
72        <xsl:value-of select="$renderas"/>
73      </xsl:when>
74      <xsl:otherwise>
75        <xsl:call-template name="section.level">
76          <xsl:with-param name="node" select="$section"/>
77        </xsl:call-template>
78      </xsl:otherwise>
79    </xsl:choose>
80  </xsl:variable>
81
82  <xsl:call-template name="section.heading">
83    <xsl:with-param name="section" select="$section"/>
84    <xsl:with-param name="level" select="$level"/>
85    <xsl:with-param name="title">
86      <xsl:apply-templates select="$section" mode="object.title.markup">
87        <xsl:with-param name="allow-anchors" select="1"/>
88      </xsl:apply-templates>
89    </xsl:with-param>
90  </xsl:call-template>
91</xsl:template>
92
93<xsl:template match="section/title
94                    |section/info/title
95                    |sectioninfo/title"
96              mode="titlepage.mode" priority="2">
97  <xsl:call-template name="section.title"/>
98</xsl:template>
99
100<xsl:template match="sect1">
101  <xsl:call-template name="id.warning"/>
102
103  <div>
104    <xsl:apply-templates select="." mode="class.attribute"/>
105    <xsl:call-template name="dir">
106      <xsl:with-param name="inherit" select="1"/>
107    </xsl:call-template>
108    <xsl:call-template name="language.attribute"/>
109
110    <xsl:choose>
111      <xsl:when test="@renderas = 'sect2'">
112        <xsl:call-template name="sect2.titlepage"/>
113      </xsl:when>
114      <xsl:when test="@renderas = 'sect3'">
115        <xsl:call-template name="sect3.titlepage"/>
116      </xsl:when>
117      <xsl:when test="@renderas = 'sect4'">
118        <xsl:call-template name="sect4.titlepage"/>
119      </xsl:when>
120      <xsl:when test="@renderas = 'sect5'">
121        <xsl:call-template name="sect5.titlepage"/>
122      </xsl:when>
123      <xsl:otherwise>
124        <xsl:call-template name="sect1.titlepage"/>
125      </xsl:otherwise>
126    </xsl:choose>
127
128    <xsl:variable name="toc.params">
129      <xsl:call-template name="find.path.params">
130        <xsl:with-param name="table" select="normalize-space($generate.toc)"/>
131      </xsl:call-template>
132    </xsl:variable>
133
134    <xsl:if test="contains($toc.params, 'toc')
135                  and $generate.section.toc.level &gt;= 1">
136      <xsl:call-template name="section.toc">
137        <xsl:with-param name="toc.title.p" select="contains($toc.params, 'title')"/>
138      </xsl:call-template>
139      <xsl:call-template name="section.toc.separator"/>
140    </xsl:if>
141    <xsl:apply-templates/>
142    <xsl:call-template name="process.chunk.footnotes"/>
143  </div>
144</xsl:template>
145
146<xsl:template match="sect1/title
147                    |sect1/info/title
148                    |sect1info/title"
149              mode="titlepage.mode" priority="2">
150  <xsl:call-template name="section.title"/>
151</xsl:template>
152
153<xsl:template match="sect2">
154  <xsl:call-template name="id.warning"/>
155
156  <div>
157    <xsl:apply-templates select="." mode="class.attribute"/>
158    <xsl:call-template name="dir">
159      <xsl:with-param name="inherit" select="1"/>
160    </xsl:call-template>
161    <xsl:call-template name="language.attribute"/>
162
163    <xsl:choose>
164      <xsl:when test="@renderas = 'sect1'">
165        <xsl:call-template name="sect1.titlepage"/>
166      </xsl:when>
167      <xsl:when test="@renderas = 'sect3'">
168        <xsl:call-template name="sect3.titlepage"/>
169      </xsl:when>
170      <xsl:when test="@renderas = 'sect4'">
171        <xsl:call-template name="sect4.titlepage"/>
172      </xsl:when>
173      <xsl:when test="@renderas = 'sect5'">
174        <xsl:call-template name="sect5.titlepage"/>
175      </xsl:when>
176      <xsl:otherwise>
177        <xsl:call-template name="sect2.titlepage"/>
178      </xsl:otherwise>
179    </xsl:choose>
180
181    <xsl:variable name="toc.params">
182      <xsl:call-template name="find.path.params">
183        <xsl:with-param name="table" select="normalize-space($generate.toc)"/>
184      </xsl:call-template>
185    </xsl:variable>
186
187    <xsl:if test="contains($toc.params, 'toc')
188                  and $generate.section.toc.level &gt;= 2">
189      <xsl:call-template name="section.toc">
190        <xsl:with-param name="toc.title.p" select="contains($toc.params, 'title')"/>
191      </xsl:call-template>
192      <xsl:call-template name="section.toc.separator"/>
193    </xsl:if>
194    <xsl:apply-templates/>
195    <xsl:call-template name="process.chunk.footnotes"/>
196  </div>
197</xsl:template>
198
199<xsl:template match="sect2/title
200                    |sect2/info/title
201                    |sect2info/title"
202              mode="titlepage.mode" priority="2">
203  <xsl:call-template name="section.title"/>
204</xsl:template>
205
206<xsl:template match="sect3">
207  <xsl:call-template name="id.warning"/>
208
209  <div>
210    <xsl:apply-templates select="." mode="class.attribute"/>
211    <xsl:call-template name="dir">
212      <xsl:with-param name="inherit" select="1"/>
213    </xsl:call-template>
214    <xsl:call-template name="language.attribute"/>
215
216    <xsl:choose>
217      <xsl:when test="@renderas = 'sect1'">
218        <xsl:call-template name="sect1.titlepage"/>
219      </xsl:when>
220      <xsl:when test="@renderas = 'sect2'">
221        <xsl:call-template name="sect2.titlepage"/>
222      </xsl:when>
223      <xsl:when test="@renderas = 'sect4'">
224        <xsl:call-template name="sect4.titlepage"/>
225      </xsl:when>
226      <xsl:when test="@renderas = 'sect5'">
227        <xsl:call-template name="sect5.titlepage"/>
228      </xsl:when>
229      <xsl:otherwise>
230        <xsl:call-template name="sect3.titlepage"/>
231      </xsl:otherwise>
232    </xsl:choose>
233
234    <xsl:variable name="toc.params">
235      <xsl:call-template name="find.path.params">
236        <xsl:with-param name="table" select="normalize-space($generate.toc)"/>
237      </xsl:call-template>
238    </xsl:variable>
239
240    <xsl:if test="contains($toc.params, 'toc')
241                  and $generate.section.toc.level &gt;= 3">
242      <xsl:call-template name="section.toc">
243        <xsl:with-param name="toc.title.p" select="contains($toc.params, 'title')"/>
244      </xsl:call-template>
245      <xsl:call-template name="section.toc.separator"/>
246    </xsl:if>
247    <xsl:apply-templates/>
248    <xsl:call-template name="process.chunk.footnotes"/>
249  </div>
250</xsl:template>
251
252<xsl:template match="sect3/title
253                    |sect3/info/title
254                    |sect3info/title"
255              mode="titlepage.mode" priority="2">
256  <xsl:call-template name="section.title"/>
257</xsl:template>
258
259<xsl:template match="sect4">
260  <xsl:call-template name="id.warning"/>
261
262  <div>
263    <xsl:apply-templates select="." mode="class.attribute"/>
264    <xsl:call-template name="dir">
265      <xsl:with-param name="inherit" select="1"/>
266    </xsl:call-template>
267    <xsl:call-template name="language.attribute"/>
268
269    <xsl:choose>
270      <xsl:when test="@renderas = 'sect1'">
271        <xsl:call-template name="sect1.titlepage"/>
272      </xsl:when>
273      <xsl:when test="@renderas = 'sect2'">
274        <xsl:call-template name="sect2.titlepage"/>
275      </xsl:when>
276      <xsl:when test="@renderas = 'sect3'">
277        <xsl:call-template name="sect3.titlepage"/>
278      </xsl:when>
279      <xsl:when test="@renderas = 'sect5'">
280        <xsl:call-template name="sect5.titlepage"/>
281      </xsl:when>
282      <xsl:otherwise>
283        <xsl:call-template name="sect4.titlepage"/>
284      </xsl:otherwise>
285    </xsl:choose>
286
287    <xsl:variable name="toc.params">
288      <xsl:call-template name="find.path.params">
289        <xsl:with-param name="table" select="normalize-space($generate.toc)"/>
290      </xsl:call-template>
291    </xsl:variable>
292
293    <xsl:if test="contains($toc.params, 'toc')
294                  and $generate.section.toc.level &gt;= 4">
295      <xsl:call-template name="section.toc">
296        <xsl:with-param name="toc.title.p" select="contains($toc.params, 'title')"/>
297      </xsl:call-template>
298      <xsl:call-template name="section.toc.separator"/>
299    </xsl:if>
300    <xsl:apply-templates/>
301    <xsl:call-template name="process.chunk.footnotes"/>
302  </div>
303</xsl:template>
304
305<xsl:template match="sect4/title
306                    |sect4/info/title
307                    |sect4info/title"
308              mode="titlepage.mode" priority="2">
309  <xsl:call-template name="section.title"/>
310</xsl:template>
311
312<xsl:template match="sect5">
313  <xsl:call-template name="id.warning"/>
314
315  <div>
316    <xsl:apply-templates select="." mode="class.attribute"/>
317    <xsl:call-template name="dir">
318      <xsl:with-param name="inherit" select="1"/>
319    </xsl:call-template>
320    <xsl:call-template name="language.attribute"/>
321
322    <xsl:choose>
323      <xsl:when test="@renderas = 'sect1'">
324        <xsl:call-template name="sect1.titlepage"/>
325      </xsl:when>
326      <xsl:when test="@renderas = 'sect2'">
327        <xsl:call-template name="sect2.titlepage"/>
328      </xsl:when>
329      <xsl:when test="@renderas = 'sect3'">
330        <xsl:call-template name="sect3.titlepage"/>
331      </xsl:when>
332      <xsl:when test="@renderas = 'sect4'">
333        <xsl:call-template name="sect4.titlepage"/>
334      </xsl:when>
335      <xsl:otherwise>
336        <xsl:call-template name="sect5.titlepage"/>
337      </xsl:otherwise>
338    </xsl:choose>
339
340    <xsl:variable name="toc.params">
341      <xsl:call-template name="find.path.params">
342        <xsl:with-param name="table" select="normalize-space($generate.toc)"/>
343      </xsl:call-template>
344    </xsl:variable>
345
346    <xsl:if test="contains($toc.params, 'toc')
347                  and $generate.section.toc.level &gt;= 5">
348      <xsl:call-template name="section.toc">
349        <xsl:with-param name="toc.title.p" select="contains($toc.params, 'title')"/>
350      </xsl:call-template>
351      <xsl:call-template name="section.toc.separator"/>
352    </xsl:if>
353    <xsl:apply-templates/>
354    <xsl:call-template name="process.chunk.footnotes"/>
355  </div>
356</xsl:template>
357
358<xsl:template match="sect5/title
359                    |sect5/info/title
360                    |sect5info/title"
361              mode="titlepage.mode" priority="2">
362  <xsl:call-template name="section.title"/>
363</xsl:template>
364
365<xsl:template match="simplesect">
366  <xsl:call-template name="id.warning"/>
367
368  <div>
369    <xsl:apply-templates select="." mode="class.attribute"/>
370    <xsl:call-template name="dir">
371      <xsl:with-param name="inherit" select="1"/>
372    </xsl:call-template>
373    <xsl:call-template name="language.attribute"/>
374    <xsl:call-template name="simplesect.titlepage"/>
375    <xsl:apply-templates/>
376  </div>
377</xsl:template>
378
379<xsl:template match="simplesect/title|simplesect/info/title"
380              mode="titlepage.mode" priority="2">
381  <xsl:call-template name="section.title"/>
382</xsl:template>
383
384<xsl:template match="section/title"></xsl:template>
385<xsl:template match="section/titleabbrev"></xsl:template>
386<xsl:template match="section/subtitle"></xsl:template>
387<xsl:template match="sectioninfo"></xsl:template>
388<xsl:template match="section/info"></xsl:template>
389
390<xsl:template match="sect1/title"></xsl:template>
391<xsl:template match="sect1/titleabbrev"></xsl:template>
392<xsl:template match="sect1/subtitle"></xsl:template>
393<xsl:template match="sect1info"></xsl:template>
394<xsl:template match="sect1/info"></xsl:template>
395
396<xsl:template match="sect2/title"></xsl:template>
397<xsl:template match="sect2/subtitle"></xsl:template>
398<xsl:template match="sect2/titleabbrev"></xsl:template>
399<xsl:template match="sect2info"></xsl:template>
400<xsl:template match="sect2/info"></xsl:template>
401
402<xsl:template match="sect3/title"></xsl:template>
403<xsl:template match="sect3/subtitle"></xsl:template>
404<xsl:template match="sect3/titleabbrev"></xsl:template>
405<xsl:template match="sect3info"></xsl:template>
406<xsl:template match="sect3/info"></xsl:template>
407
408<xsl:template match="sect4/title"></xsl:template>
409<xsl:template match="sect4/subtitle"></xsl:template>
410<xsl:template match="sect4/titleabbrev"></xsl:template>
411<xsl:template match="sect4info"></xsl:template>
412<xsl:template match="sect4/info"></xsl:template>
413
414<xsl:template match="sect5/title"></xsl:template>
415<xsl:template match="sect5/subtitle"></xsl:template>
416<xsl:template match="sect5/titleabbrev"></xsl:template>
417<xsl:template match="sect5info"></xsl:template>
418<xsl:template match="sect5/info"></xsl:template>
419
420<xsl:template match="simplesect/title"></xsl:template>
421<xsl:template match="simplesect/subtitle"></xsl:template>
422<xsl:template match="simplesect/titleabbrev"></xsl:template>
423<xsl:template match="simplesect/info"></xsl:template>
424
425<!-- ==================================================================== -->
426
427<xsl:template name="section.heading">
428  <xsl:param name="section" select="."/>
429  <xsl:param name="level" select="1"/>
430  <xsl:param name="allow-anchors" select="1"/>
431  <xsl:param name="title"/>
432  <xsl:param name="class" select="'title'"/>
433
434  <xsl:variable name="id">
435    <xsl:choose>
436      <!-- if title is in an *info wrapper, get the grandparent -->
437      <xsl:when test="contains(local-name(..), 'info')">
438        <xsl:call-template name="object.id">
439          <xsl:with-param name="object" select="../.."/>
440        </xsl:call-template>
441      </xsl:when>
442      <xsl:otherwise>
443        <xsl:call-template name="object.id">
444          <xsl:with-param name="object" select=".."/>
445        </xsl:call-template>
446      </xsl:otherwise>
447    </xsl:choose>
448  </xsl:variable>
449
450  <!-- HTML H level is one higher than section level -->
451  <xsl:variable name="hlevel">
452    <xsl:choose>
453      <!-- highest valid HTML H level is H6; so anything nested deeper
454           than 5 levels down just becomes H6 -->
455      <xsl:when test="$level &gt; 5">6</xsl:when>
456      <xsl:otherwise>
457        <xsl:value-of select="$level + 1"/>
458      </xsl:otherwise>
459    </xsl:choose>
460  </xsl:variable>
461  <xsl:element name="h{$hlevel}">
462    <xsl:attribute name="class"><xsl:value-of select="$class"/></xsl:attribute>
463    <xsl:if test="$css.decoration != '0'">
464      <xsl:if test="$hlevel&lt;3">
465        <xsl:attribute name="style">clear: both</xsl:attribute>
466      </xsl:if>
467    </xsl:if>
468    <xsl:if test="$allow-anchors != 0">
469      <xsl:call-template name="anchor">
470        <xsl:with-param name="node" select="$section"/>
471        <xsl:with-param name="conditional" select="0"/>
472      </xsl:call-template>
473    </xsl:if>
474    <xsl:copy-of select="$title"/>
475  </xsl:element>
476</xsl:template>
477
478<!-- ==================================================================== -->
479
480<xsl:template match="bridgehead">
481  <xsl:variable name="container"
482                select="(ancestor::appendix
483                        |ancestor::article
484                        |ancestor::bibliography
485                        |ancestor::chapter
486                        |ancestor::glossary
487                        |ancestor::glossdiv
488                        |ancestor::index
489                        |ancestor::partintro
490                        |ancestor::preface
491                        |ancestor::refsect1
492                        |ancestor::refsect2
493                        |ancestor::refsect3
494                        |ancestor::sect1
495                        |ancestor::sect2
496                        |ancestor::sect3
497                        |ancestor::sect4
498                        |ancestor::sect5
499                        |ancestor::section
500                        |ancestor::setindex
501                        |ancestor::simplesect)[last()]"/>
502
503  <xsl:variable name="clevel">
504    <xsl:choose>
505      <xsl:when test="local-name($container) = 'appendix'
506                      or local-name($container) = 'chapter'
507                      or local-name($container) = 'article'
508                      or local-name($container) = 'bibliography'
509                      or local-name($container) = 'glossary'
510                      or local-name($container) = 'index'
511                      or local-name($container) = 'partintro'
512                      or local-name($container) = 'preface'
513                      or local-name($container) = 'setindex'">1</xsl:when>
514      <xsl:when test="local-name($container) = 'glossdiv'">
515        <xsl:value-of select="count(ancestor::glossdiv)+1"/>
516      </xsl:when>
517      <xsl:when test="local-name($container) = 'sect1'
518                      or local-name($container) = 'sect2'
519                      or local-name($container) = 'sect3'
520                      or local-name($container) = 'sect4'
521                      or local-name($container) = 'sect5'
522                      or local-name($container) = 'refsect1'
523                      or local-name($container) = 'refsect2'
524                      or local-name($container) = 'refsect3'
525                      or local-name($container) = 'section'
526                      or local-name($container) = 'simplesect'">
527        <xsl:variable name="slevel">
528          <xsl:call-template name="section.level">
529            <xsl:with-param name="node" select="$container"/>
530          </xsl:call-template>
531        </xsl:variable>
532        <xsl:value-of select="$slevel + 1"/>
533      </xsl:when>
534      <xsl:otherwise>1</xsl:otherwise>
535    </xsl:choose>
536  </xsl:variable>
537
538  <!-- HTML H level is one higher than section level -->
539  <xsl:variable name="hlevel">
540    <xsl:choose>
541      <xsl:when test="@renderas = 'sect1'">2</xsl:when>
542      <xsl:when test="@renderas = 'sect2'">3</xsl:when>
543      <xsl:when test="@renderas = 'sect3'">4</xsl:when>
544      <xsl:when test="@renderas = 'sect4'">5</xsl:when>
545      <xsl:when test="@renderas = 'sect5'">6</xsl:when>
546      <xsl:otherwise>
547        <xsl:value-of select="$clevel + 1"/>
548      </xsl:otherwise>
549    </xsl:choose>
550  </xsl:variable>
551
552  <xsl:element name="h{$hlevel}">
553    <xsl:call-template name="anchor">
554      <xsl:with-param name="conditional" select="0"/>
555    </xsl:call-template>
556    <xsl:apply-templates/>
557  </xsl:element>
558</xsl:template>
559
560<xsl:template match="section/subtitle" mode="titlepage.mode" priority="2">
561  <xsl:call-template name="section.subtitle"/>
562</xsl:template>
563
564<xsl:template match="simplesect/subtitle" mode="titlepage.mode" priority="2">
565  <xsl:call-template name="section.subtitle"/>
566</xsl:template>
567
568<xsl:template match="sect1/subtitle" mode="titlepage.mode" priority="2">
569  <xsl:call-template name="section.subtitle"/>
570</xsl:template>
571
572<xsl:template match="sect2/subtitle" mode="titlepage.mode" priority="2">
573  <xsl:call-template name="section.subtitle"/>
574</xsl:template>
575
576<xsl:template match="sect3/subtitle" mode="titlepage.mode" priority="2">
577  <xsl:call-template name="section.subtitle"/>
578</xsl:template>
579
580<xsl:template match="sect4/subtitle" mode="titlepage.mode" priority="2">
581  <xsl:call-template name="section.subtitle"/>
582</xsl:template>
583
584<xsl:template match="sect5/subtitle" mode="titlepage.mode" priority="2">
585  <xsl:call-template name="section.subtitle"/>
586</xsl:template>
587
588<xsl:template name="section.subtitle">
589  <!-- the context node should be the subtitle of a section when called -->
590  <xsl:variable name="section" select="(ancestor::section
591                                        |ancestor::simplesect
592                                        |ancestor::sect1
593                                        |ancestor::sect2
594                                        |ancestor::sect3
595                                        |ancestor::sect4
596                                        |ancestor::sect5)[last()]"/>
597
598  <xsl:variable name="level">
599    <xsl:call-template name="section.level">
600      <xsl:with-param name="node" select="$section"/>
601    </xsl:call-template>
602  </xsl:variable>
603
604  <xsl:call-template name="section.heading">
605    <xsl:with-param name="section" select=".."/>
606    <xsl:with-param name="allow-anchors" select="0"/>
607    <!-- subtitle heading level one higher than section level -->
608    <xsl:with-param name="level" select="$level + 1"/>
609    <xsl:with-param name="class" select="'subtitle'"/>
610    <xsl:with-param name="title">
611      <xsl:apply-templates select="$section" mode="object.subtitle.markup">
612        <xsl:with-param name="allow-anchors" select="0"/>
613      </xsl:apply-templates>
614    </xsl:with-param>
615  </xsl:call-template>
616</xsl:template>
617
618</xsl:stylesheet>
619
620