Make site2html.xsl import mal2html.xsl so overrides work correctly
[projectmallard:j1mcs-mallard-site-tool.git] / site2html.xsl.in
1 <?xml version='1.0' encoding='UTF-8'?><!-- -*- indent-tabs-mode: nil -*- -->
2 <!--
3 This program is free software; you can redistribute it and/or modify it under
4 the terms of the GNU Lesser General Public License as published by the Free
5 Software Foundation; either version 2 of the License, or (at your option) any
6 later version.
7
8 This program is distributed in the hope that it will be useful, but WITHOUT
9 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
10 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
11 details.
12
13 You should have received a copy of the GNU Lesser General Public License
14 along with this program; see the file COPYING.LGPL.  If not, write to the
15 Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
16 02111-1307, USA.
17 -->
18
19 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
20                 xmlns:mal="http://projectmallard.org/1.0/"
21                 xmlns:str="http://exslt.org/strings"
22                 xmlns:exsl="http://exslt.org/common"
23                 xmlns="http://www.w3.org/1999/xhtml"
24                 version="1.0">
25
26 <xsl:import href="@MAL2HTML@"/>
27
28 <xsl:param name="mal.site.root"/>
29 <xsl:param name="mal.site.dir"/>
30
31 <xsl:variable name="mal.site.root_noslash">
32   <xsl:variable name="len" select="string-length($mal.site.root)"/>
33   <xsl:choose>
34     <xsl:when test="substring($mal.site.root, $len) = '/'">
35       <xsl:value-of select="substring($mal.site.root, 1, $len - 1)"/>
36     </xsl:when>
37     <xsl:otherwise>
38       <xsl:value-of select="$mal.site.root"/>
39     </xsl:otherwise>
40   </xsl:choose>
41 </xsl:variable>
42
43 <xsl:param name="mal.link.default_root" select="concat($mal.site.dir, 'index')"/>
44
45 <xsl:template name="mal.site.sitetrail">
46   <xsl:param name="node" select="."/>
47   <xsl:param name="xref" select="$node/@xref"/>
48   <xsl:variable name="sitetrail" select="str:tokenize($xref, '/')[position() != last()]"/>
49   <xsl:for-each select="$sitetrail">
50     <xsl:variable name="pos" select="position()"/>
51     <xsl:variable name="id">
52       <xsl:for-each select="$sitetrail[position() &lt; $pos]">
53         <xsl:text>/</xsl:text>
54         <xsl:value-of select="."/>
55       </xsl:for-each>
56       <xsl:text>/index</xsl:text>
57     </xsl:variable>
58     <a class="linktrail">
59       <xsl:attribute name="href">
60         <xsl:call-template name="mal.link.target">
61           <xsl:with-param name="xref" select="$id"/>
62         </xsl:call-template>
63       </xsl:attribute>
64       <xsl:call-template name="mal.link.content">
65         <xsl:with-param name="xref" select="$id"/>
66         <xsl:with-param name="role" select="'guide'"/>
67       </xsl:call-template>
68     </a>
69     <xsl:text> ยป </xsl:text>
70   </xsl:for-each>
71 </xsl:template>
72
73 <xsl:template name="mal2html.page.linktrails">
74   <xsl:param name="node" select="."/>
75   <xsl:variable name="linktrails">
76     <xsl:call-template name="mal.link.linktrails">
77       <xsl:with-param name="node" select="$node"/>
78     </xsl:call-template>
79   </xsl:variable>
80   <xsl:variable name="trailnodes" select="exsl:node-set($linktrails)/*"/>
81   <xsl:choose>
82     <xsl:when test="count($trailnodes) &gt; 0">
83       <div class="linktrails">
84         <xsl:for-each select="$trailnodes">
85           <xsl:sort select="(.//mal:title[@type='sort'])[1]"/>
86           <xsl:sort select="(.//mal:title[@type='sort'])[2]"/>
87           <xsl:sort select="(.//mal:title[@type='sort'])[3]"/>
88           <xsl:sort select="(.//mal:title[@type='sort'])[4]"/>
89           <xsl:sort select="(.//mal:title[@type='sort'])[5]"/>
90           <xsl:call-template name="mal2html.page.linktrails.trail"/>
91         </xsl:for-each>
92       </div>
93     </xsl:when>
94     <xsl:otherwise>
95       <div class="linktrail">
96         <xsl:call-template name="mal.site.sitetrail">
97           <xsl:with-param name="xref">
98             <xsl:value-of select="$mal.site.dir"/>
99             <xsl:value-of select="$node/@id"/>
100           </xsl:with-param>
101         </xsl:call-template>
102       </div>
103     </xsl:otherwise>
104   </xsl:choose>
105 </xsl:template>
106
107 <xsl:template name="mal2html.page.linktrails.trail">
108   <xsl:param name="node" select="."/>
109   <div class="linktrail">
110     <xsl:call-template name="mal.site.sitetrail">
111       <xsl:with-param name="node" select="$node"/>
112     </xsl:call-template>
113     <xsl:call-template name="mal2html.page.linktrails.link">
114       <xsl:with-param name="node" select="$node"/>
115     </xsl:call-template>
116   </div>
117 </xsl:template>
118
119 <xsl:template name="mal.link.target">
120   <xsl:param name="node" select="."/>
121   <xsl:param name="xref" select="$node/@xref"/>
122   <xsl:param name="href" select="$node/@href"/>
123   <xsl:choose>
124     <xsl:when test="string($xref) = ''">
125       <xsl:value-of select="$href"/>
126     </xsl:when>
127     <xsl:when test="starts-with($xref, '#')">
128       <xsl:value-of select="$xref"/>
129     </xsl:when>
130     <xsl:otherwise>
131       <xsl:value-of select="$mal.site.root_noslash"/>
132       <xsl:if test="not(starts-with($xref, '/'))">
133         <xsl:value-of select="$mal.site.dir"/>
134       </xsl:if>
135       <xsl:choose>
136         <xsl:when test="contains($xref, '#')">
137           <xsl:variable name="pageid" select="substring-before($xref, '#')"/>
138           <xsl:variable name="sectionid" select="substring-after($xref, '#')"/>
139           <xsl:value-of select="concat($pageid, $mal.chunk.extension)"/>
140           <xsl:value-of select="concat('#', $sectionid)"/>
141         </xsl:when>
142         <xsl:otherwise>
143           <xsl:value-of select="concat($xref, $mal.chunk.extension)"/>
144         </xsl:otherwise>
145       </xsl:choose>
146     </xsl:otherwise>
147   </xsl:choose>
148 </xsl:template>
149
150 <xsl:template name="mal.link.linkid">
151   <xsl:param name="node" select="."/>
152   <xsl:choose>
153     <xsl:when test="starts-with($node/@id, '/')">
154       <xsl:value-of select="$node/@id"/>
155     </xsl:when>
156     <xsl:when test="contains($node/@id, '#')">
157       <xsl:value-of select="$mal.site.dir"/>
158       <xsl:value-of select="$node/@id"/>
159     </xsl:when>
160     <xsl:when test="$node/self::mal:section">
161       <xsl:value-of select="$mal.site.dir"/>
162       <xsl:value-of select="concat($node/ancestor::mal:page[1]/@id, '#', $node/@id)"/>
163     </xsl:when>
164     <xsl:otherwise>
165       <xsl:value-of select="$mal.site.dir"/>
166       <xsl:value-of select="$node/@id"/>
167     </xsl:otherwise>
168   </xsl:choose>
169 </xsl:template>
170
171 <xsl:template name="mal.link.xref.linkid">
172   <xsl:param name="node" select="."/>
173   <xsl:param name="xref" select="$node/@xref"/>
174   <xsl:if test="not(starts-with($xref, '/'))">
175     <xsl:value-of select="$mal.site.dir"/>
176   </xsl:if>
177   <xsl:if test="starts-with($xref, '#')">
178     <xsl:value-of select="$node/ancestor-or-self::mal:page/@id"/>
179   </xsl:if>
180   <xsl:value-of select="$xref"/>
181 </xsl:template>
182
183 <xsl:template name="mal2html.css">
184   <link rel="stylesheet" type="text/css">
185     <xsl:attribute name="href">
186       <xsl:value-of select="$mal.site.root_noslash"/>
187       <xsl:text>/index.css</xsl:text>
188     </xsl:attribute>
189   </link>
190 </xsl:template>
191
192 </xsl:stylesheet>