link: Extended example for more cases, cleanup
[docpond.git] / link / footnote.html.xsl
1 <?xml version="1.0" encoding="utf-8"?>
2 <xsl:stylesheet version="1.0" xmlns="http://www.w3.org/1999/xhtml"
3                 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
4                 xmlns:d="http://docbook.org/ns/docbook"
5                 xmlns:xlink="http://www.w3.org/1999/xlink">
6
7 <!-- Fredrik Unger <fred@tree.se>  -->
8
9 <xsl:import href="../default.html.xsl"/>
10
11 <xsl:template match="d:link">
12   <xsl:variable name="name">
13     <xsl:call-template name="object.id"/>
14   </xsl:variable>
15   <xsl:variable name="href">
16     <xsl:text>#ftn.</xsl:text>
17     <xsl:call-template name="object.id"/>
18   </xsl:variable>
19   <xsl:apply-templates mode="no.anchor.mode"/>
20   <sup>
21     <xsl:text>[</xsl:text>
22     <a name="{$name}" href="{$href}">
23       <xsl:apply-templates select="." mode="class.attribute"/>
24       <xsl:apply-templates select="." mode="footnote.number"/>
25     </a>
26     <xsl:text>]</xsl:text>
27   </sup>
28 </xsl:template>
29
30 <xsl:template match="d:link" mode="footnote.number">
31   <xsl:choose>
32     <xsl:when test="string-length(@label) != 0">
33       <xsl:value-of select="@label"/>
34     </xsl:when>
35     <xsl:when test="ancestor::d:table or ancestor::d:informaltable">
36       <xsl:variable name="tfnum">
37         <xsl:number level="any" from="d:table|d:informaltable" format="1"/>
38       </xsl:variable>
39
40       <xsl:choose>
41         <xsl:when test="string-length($table.footnote.number.symbols) &gt;= $tfnum">
42           <xsl:value-of select="substring($table.footnote.number.symbols, $tfnum, 1)"/>
43         </xsl:when>
44         <xsl:otherwise>
45           <xsl:number level="any" from="d:table | d:informaltable"
46                       format="{$table.footnote.number.format}"/>
47         </xsl:otherwise>
48       </xsl:choose>
49     </xsl:when>
50     <xsl:otherwise>
51       <xsl:variable name="pfoot" select="preceding::d:footnote[not(@label)]"/>
52       <xsl:variable name="ptfoot" select="preceding::d:table//d:footnote |
53                                           preceding::d:informaltable//d:footnote"/>
54       <xsl:variable name="fnum" select="count($pfoot) - count($ptfoot) + 1"/>
55
56       <xsl:choose>
57         <xsl:when test="string-length($footnote.number.symbols) &gt;= $fnum">
58           <xsl:value-of select="substring($footnote.number.symbols, $fnum, 1)"/>
59         </xsl:when>
60         <xsl:otherwise>
61           <xsl:number value="$fnum" format="{$footnote.number.format}"/>
62         </xsl:otherwise>
63       </xsl:choose>
64     </xsl:otherwise>
65   </xsl:choose>
66 </xsl:template>
67 <xsl:template name="process.footnotes">
68   <xsl:variable name="footnotes" select=".//d:footnote | .//d:link"/>
69   <xsl:variable name="table.footnotes"
70                 select=".//d:table//d:footnote | .//d:informaltable//d:footnote"/>
71
72   <!-- Only bother to do this if there's at least one non-table footnote -->
73   <xsl:if test="count($footnotes)>count($table.footnotes)">
74     <div class="footnotes">
75       <br/>
76       <hr width="100" align="{$direction.align.start}"/>
77       <xsl:apply-templates select="$footnotes" mode="process.footnote.mode"/>
78     </div>
79   </xsl:if>
80
81   <xsl:if test="$annotation.support != 0 and //d:annotation">
82     <div class="annotation-list">
83       <div class="annotation-nocss">
84         <p>The following annotations are from this essay. You are seeing
85         them here because your browser doesn’t support the user-interface
86         techniques used to make them appear as ‘popups’ on modern browsers.</p>
87       </div>
88
89       <xsl:apply-templates select="//d:annotation"
90                            mode="annotation-popup"/>
91     </div>
92   </xsl:if>
93 </xsl:template>
94
95 <xsl:template match="d:link" name="process.footnote" mode="process.footnote.mode">
96   <div>
97     <xsl:call-template name="common.html.attributes"/>
98     <xsl:variable name="href" select="./@xlink:href"/>
99     <xsl:text>[</xsl:text>
100     <xsl:apply-templates select="." mode="footnote.number"/>
101     <xsl:text>] </xsl:text>
102     <a href="{$href}"><xsl:value-of select="./@xlink:href"/></a>
103   </div>
104 </xsl:template>
105
106 <xsl:template match="d:link" mode="table.footnote.mode">
107   <xsl:call-template name="process.footnote"/>
108 </xsl:template>
109
110 </xsl:stylesheet>