1 <?xml version=
"1.0" encoding=
"UTF-8"?>
3 <!-- This file is part of Shapes. -->
5 <!-- Shapes is free software: you can redistribute it and/or modify -->
6 <!-- it under the terms of the GNU General Public License as published by -->
7 <!-- the Free Software Foundation, either version 3 of the License, or -->
8 <!-- any later version. -->
10 <!-- Shapes is distributed in the hope that it will be useful, -->
11 <!-- but WITHOUT ANY WARRANTY; without even the implied warranty of -->
12 <!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -->
13 <!-- GNU General Public License for more details. -->
15 <!-- You should have received a copy of the GNU General Public License -->
16 <!-- along with Shapes. If not, see <http://www.gnu.org/licenses/>. -->
18 <!-- Copyright 2015 Henrik Tidefelt -->
22 xmlns:
xsl=
"http://www.w3.org/1999/XSL/Transform"
23 xmlns=
"http://www.w3.org/1999/xhtml"
26 <xsl:template name=
"name-to-a-id">
27 <xsl:param name=
"name" />
28 <xsl:value-of select=
"replace(replace($name, '-', '--'), '\?', '-_')" />
31 <xsl:template name=
"namespace-to-a-id">
32 <xsl:param name=
"name" />
33 <xsl:value-of select=
"replace(replace($name, '^\.\.', ''), '\.\.', '-')" />
35 <xsl:template name=
"namespace-to-href">
36 <xsl:param name=
"name" />
37 <xsl:value-of select=
"/book/base/@href" /><xsl:text>namespace/
</xsl:text><xsl:value-of select=
"replace(replace($name, '^\.\.', ''), '\.\.', '-')" /><xsl:text>.html
</xsl:text>
40 <xsl:template name=
"format-value-name">
41 <xsl:param name=
"namespace" />
42 <xsl:param name=
"name" />
43 <span class=
"varname">
44 <xsl:if test=
"$namespace != ''">
45 <xsl:value-of select=
"$namespace" /><xsl:text>..
</xsl:text>
47 <xsl:value-of select=
"$name" />
50 <xsl:template name=
"format-dynamic-name">
51 <xsl:param name=
"namespace" />
52 <xsl:param name=
"name" />
53 <span class=
"varname">
54 <xsl:if test=
"$namespace != ''">
55 <xsl:value-of select=
"$namespace" /><xsl:text>..
</xsl:text>
57 <xsl:text>@
</xsl:text>
58 <xsl:value-of select=
"$name" />
61 <xsl:template name=
"format-state-name">
62 <xsl:param name=
"namespace" />
63 <xsl:param name=
"name" />
64 <span class=
"varname">
65 <xsl:if test=
"$namespace != ''">
66 <xsl:value-of select=
"$namespace" /><xsl:text>..
</xsl:text>
68 <xsl:text>•
</xsl:text>
69 <xsl:value-of select=
"$name" />
72 <xsl:template name=
"format-escape-name">
73 <xsl:param name=
"namespace" />
74 <xsl:param name=
"name" />
75 <span class=
"varname">
76 <xsl:if test=
"$namespace != ''">
77 <xsl:value-of select=
"$namespace" /><xsl:text>..
</xsl:text>
80 <xsl:value-of select=
"$name" />
83 <xsl:template name=
"format-type-name">
84 <xsl:param name=
"namespace" />
85 <xsl:param name=
"name" />
86 <span class=
"typename">
87 <xsl:if test=
"$namespace != ''">
88 <xsl:value-of select=
"$namespace" /><xsl:text>..
</xsl:text>
90 <xsl:text>§
</xsl:text>
91 <xsl:value-of select=
"$name" />
94 <xsl:template name=
"format-statetype-name">
95 <xsl:param name=
"namespace" />
96 <xsl:param name=
"name" />
97 <span class=
"typename">
98 <xsl:if test=
"$namespace != ''">
99 <xsl:value-of select=
"$namespace" /><xsl:text>..
</xsl:text>
101 <xsl:text>§•
</xsl:text>
102 <xsl:value-of select=
"$name" />
106 <xsl:template name=
"format-kind-and-name">
107 <xsl:param name=
"kind" />
108 <xsl:param name=
"namespace" />
109 <xsl:param name=
"name" />
111 <xsl:when test=
"$kind='value'">
112 <xsl:call-template name=
"format-value-name">
113 <xsl:with-param name=
"namespace"><xsl:value-of select=
"$namespace" /></xsl:with-param>
114 <xsl:with-param name=
"name"><xsl:value-of select=
"$name" /></xsl:with-param>
117 <xsl:when test=
"$kind='state'">
118 <xsl:call-template name=
"format-state-name">
119 <xsl:with-param name=
"namespace"><xsl:value-of select=
"$namespace" /></xsl:with-param>
120 <xsl:with-param name=
"name"><xsl:value-of select=
"$name" /></xsl:with-param>
123 <xsl:when test=
"$kind='dynamic'">
124 <xsl:call-template name=
"format-dynamic-name">
125 <xsl:with-param name=
"namespace"><xsl:value-of select=
"$namespace" /></xsl:with-param>
126 <xsl:with-param name=
"name"><xsl:value-of select=
"$name" /></xsl:with-param>
129 <xsl:when test=
"$kind='escape'">
130 <xsl:call-template name=
"format-escape-name">
131 <xsl:with-param name=
"namespace"><xsl:value-of select=
"$namespace" /></xsl:with-param>
132 <xsl:with-param name=
"name"><xsl:value-of select=
"$name" /></xsl:with-param>
135 <xsl:when test=
"$kind='type'">
136 <xsl:call-template name=
"format-type-name">
137 <xsl:with-param name=
"namespace"><xsl:value-of select=
"$namespace" /></xsl:with-param>
138 <xsl:with-param name=
"name"><xsl:value-of select=
"$name" /></xsl:with-param>
141 <xsl:when test=
"$kind='statetype'">
142 <xsl:call-template name=
"format-statetype-name">
143 <xsl:with-param name=
"namespace"><xsl:value-of select=
"$namespace" /></xsl:with-param>
144 <xsl:with-param name=
"name"><xsl:value-of select=
"$name" /></xsl:with-param>
150 <xsl:template name=
"ns-kind-name-to-linked-binding">
151 <xsl:param name=
"current-namespace" />
152 <xsl:param name=
"placed" />
153 <xsl:param name=
"namespace" />
154 <xsl:param name=
"kind" />
155 <xsl:param name=
"name" />
156 <xsl:variable name=
"ns">
158 <xsl:when test=
"starts-with($namespace, '..')">
159 <xsl:value-of select=
"$namespace" />
161 <xsl:when test=
"$namespace = ''">
162 <xsl:value-of select=
"$current-namespace" />
164 <xsl:when test=
"$current-namespace = '..'">
165 <xsl:value-of select=
"concat('..', $namespace)" />
168 <xsl:value-of select=
"concat($current-namespace, '..', $namespace)" />
173 <xsl:when test=
"/book/external/toc/bindings/binding[@namespace = $ns and @kind = $kind and @name = $name]">
174 <xsl:element name=
"a">
175 <xsl:attribute name=
"class">discrete
</xsl:attribute>
176 <xsl:attribute name=
"href">
177 <xsl:for-each select=
"/book/external/toc/bindings/binding[@namespace = $ns and @kind = $kind and @name = $name][1]">
179 <xsl:when test=
"@extension">
180 <xsl:call-template name=
"extension-to-href">
181 <xsl:with-param name=
"namespace"><xsl:value-of select=
"$ns" /></xsl:with-param>
182 <xsl:with-param name=
"name"><xsl:value-of select=
"@extension" /></xsl:with-param>
186 <xsl:call-template name=
"namespace-to-href">
187 <xsl:with-param name=
"name"><xsl:value-of select=
"$ns" /></xsl:with-param>
192 <xsl:text>#
</xsl:text><xsl:value-of select=
"$kind" /><xsl:text>:
</xsl:text>
193 <xsl:call-template name=
"name-to-a-id">
194 <xsl:with-param name=
"name"><xsl:value-of select=
"$name" /></xsl:with-param>
198 <xsl:when test=
"$placed != ''">
199 <xsl:call-template name=
"format-kind-and-name">
200 <xsl:with-param name=
"kind"><xsl:value-of select=
"$kind" /></xsl:with-param>
201 <xsl:with-param name=
"name"><xsl:value-of select=
"$name" /></xsl:with-param>
204 <xsl:when test=
"$ns = $current-namespace">
205 <xsl:call-template name=
"format-kind-and-name">
206 <xsl:with-param name=
"kind"><xsl:value-of select=
"$kind" /></xsl:with-param>
207 <xsl:with-param name=
"name"><xsl:value-of select=
"$name" /></xsl:with-param>
210 <xsl:when test=
"$current-namespace != ''">
211 <xsl:variable name=
"prefix">^
<xsl:value-of select=
"$current-namespace" />\.\.
</xsl:variable>
212 <xsl:call-template name=
"format-kind-and-name">
213 <xsl:with-param name=
"kind"><xsl:value-of select=
"$kind" /></xsl:with-param>
214 <xsl:with-param name=
"name"><xsl:value-of select=
"$name" /></xsl:with-param>
215 <xsl:with-param name=
"namespace"><xsl:value-of select=
"replace($ns, $prefix, '')" /></xsl:with-param>
219 <xsl:call-template name=
"format-kind-and-name">
220 <xsl:with-param name=
"kind"><xsl:value-of select=
"$kind" /></xsl:with-param>
221 <xsl:with-param name=
"name"><xsl:value-of select=
"$name" /></xsl:with-param>
222 <xsl:with-param name=
"namespace"><xsl:value-of select=
"$ns" /></xsl:with-param>
229 <xsl:element name=
"a">
230 <xsl:attribute name=
"class">discrete
</xsl:attribute>
231 <xsl:attribute name=
"href"><xsl:value-of select=
"/book/base/@href" />toc-miss.html?namespace=
<xsl:value-of select=
"$ns" />&kind=
<xsl:value-of select=
"$kind" />&name=
<xsl:value-of select=
"$name" /></xsl:attribute>
232 <span class=
"broken-link">
233 <xsl:call-template name=
"format-kind-and-name">
234 <xsl:with-param name=
"kind"><xsl:value-of select=
"$kind" /></xsl:with-param>
235 <xsl:with-param name=
"name"><xsl:value-of select=
"$name" /></xsl:with-param>
243 <!-- Placed bindings may be generated without access to current-environment. -->
244 <xsl:template mode=
"placed-binding" match=
"toc/bindings/binding">
245 <xsl:call-template name=
"ns-kind-name-to-linked-binding">
246 <xsl:with-param name=
"placed">true
</xsl:with-param>
247 <xsl:with-param name=
"namespace"><xsl:value-of select=
"@namespace" /></xsl:with-param>
248 <xsl:with-param name=
"kind"><xsl:value-of select=
"@kind" /></xsl:with-param>
249 <xsl:with-param name=
"name"><xsl:value-of select=
"@name" /></xsl:with-param>
253 <xsl:template name=
"name-to-linked-value">
254 <xsl:param name=
"current-namespace" />
255 <xsl:param name=
"placed" />
256 <xsl:param name=
"namespace" />
257 <xsl:param name=
"name" />
258 <xsl:call-template name=
"ns-kind-name-to-linked-binding">
259 <xsl:with-param name=
"kind">value
</xsl:with-param>
260 <xsl:with-param name=
"current-namespace"><xsl:value-of select=
"$current-namespace" /></xsl:with-param>
261 <xsl:with-param name=
"placed"><xsl:value-of select=
"$placed" /></xsl:with-param>
262 <xsl:with-param name=
"namespace"><xsl:value-of select=
"$namespace" /></xsl:with-param>
263 <xsl:with-param name=
"name"><xsl:value-of select=
"$name" /></xsl:with-param>
266 <xsl:template name=
"name-to-linked-dynamic">
267 <xsl:param name=
"current-namespace" />
268 <xsl:param name=
"placed" />
269 <xsl:param name=
"namespace" />
270 <xsl:param name=
"name" />
271 <xsl:call-template name=
"ns-kind-name-to-linked-binding">
272 <xsl:with-param name=
"kind">dynamic
</xsl:with-param>
273 <xsl:with-param name=
"current-namespace"><xsl:value-of select=
"$current-namespace" /></xsl:with-param>
274 <xsl:with-param name=
"placed"><xsl:value-of select=
"$placed" /></xsl:with-param>
275 <xsl:with-param name=
"namespace"><xsl:value-of select=
"$namespace" /></xsl:with-param>
276 <xsl:with-param name=
"name"><xsl:value-of select=
"$name" /></xsl:with-param>
279 <xsl:template name=
"name-to-linked-state">
280 <xsl:param name=
"current-namespace" />
281 <xsl:param name=
"placed" />
282 <xsl:param name=
"namespace" />
283 <xsl:param name=
"name" />
284 <xsl:call-template name=
"ns-kind-name-to-linked-binding">
285 <xsl:with-param name=
"kind">state
</xsl:with-param>
286 <xsl:with-param name=
"current-namespace"><xsl:value-of select=
"$current-namespace" /></xsl:with-param>
287 <xsl:with-param name=
"placed"><xsl:value-of select=
"$placed" /></xsl:with-param>
288 <xsl:with-param name=
"namespace"><xsl:value-of select=
"$namespace" /></xsl:with-param>
289 <xsl:with-param name=
"name"><xsl:value-of select=
"$name" /></xsl:with-param>
292 <xsl:template name=
"name-to-linked-escape">
293 <xsl:param name=
"current-namespace" />
294 <xsl:param name=
"placed" />
295 <xsl:param name=
"namespace" />
296 <xsl:param name=
"name" />
297 <xsl:call-template name=
"ns-kind-name-to-linked-binding">
298 <xsl:with-param name=
"kind">escape
</xsl:with-param>
299 <xsl:with-param name=
"current-namespace"><xsl:value-of select=
"$current-namespace" /></xsl:with-param>
300 <xsl:with-param name=
"placed"><xsl:value-of select=
"$placed" /></xsl:with-param>
301 <xsl:with-param name=
"namespace"><xsl:value-of select=
"$namespace" /></xsl:with-param>
302 <xsl:with-param name=
"name"><xsl:value-of select=
"$name" /></xsl:with-param>
306 <xsl:template match=
"/book[namespace]//value[@name]">
307 <xsl:call-template name=
"name-to-linked-value">
308 <xsl:with-param name=
"current-namespace"><xsl:value-of select=
"ancestor::book[namespace][1]/namespace" /></xsl:with-param>
309 <xsl:with-param name=
"namespace"><xsl:value-of select=
"@namespace" /></xsl:with-param>
310 <xsl:with-param name=
"name"><xsl:value-of select=
"@name" /></xsl:with-param>
313 <xsl:template match=
"/book[not(namespace)]//value[@name]">
314 <xsl:call-template name=
"name-to-linked-value">
315 <xsl:with-param name=
"namespace"><xsl:value-of select=
"@namespace" /></xsl:with-param>
316 <xsl:with-param name=
"name"><xsl:value-of select=
"@name" /></xsl:with-param>
319 <xsl:template match=
"placed-value[@name]">
320 <xsl:call-template name=
"name-to-linked-value">
321 <xsl:with-param name=
"placed">true
</xsl:with-param>
322 <xsl:with-param name=
"namespace"><xsl:value-of select=
"@namespace" /></xsl:with-param>
323 <xsl:with-param name=
"name"><xsl:value-of select=
"@name" /></xsl:with-param>
326 <xsl:template match=
"user-value[@name]">
327 <xsl:call-template name=
"format-value-name">
328 <xsl:with-param name=
"namespace"><xsl:value-of select=
"@namespace" /></xsl:with-param>
329 <xsl:with-param name=
"name"><xsl:value-of select=
"@name" /></xsl:with-param>
333 <xsl:template match=
"/book[namespace]//dynamic[@name]">
334 <xsl:call-template name=
"name-to-linked-dynamic">
335 <xsl:with-param name=
"current-namespace"><xsl:value-of select=
"ancestor::book[namespace][1]/namespace" /></xsl:with-param>
336 <xsl:with-param name=
"namespace"><xsl:value-of select=
"@namespace" /></xsl:with-param>
337 <xsl:with-param name=
"name"><xsl:value-of select=
"@name" /></xsl:with-param>
340 <xsl:template match=
"/book[not(namespace)]//dynamic[@name]">
341 <xsl:call-template name=
"name-to-linked-dynamic">
342 <xsl:with-param name=
"namespace"><xsl:value-of select=
"@namespace" /></xsl:with-param>
343 <xsl:with-param name=
"name"><xsl:value-of select=
"@name" /></xsl:with-param>
346 <xsl:template match=
"placed-dynamic[@name]">
347 <xsl:call-template name=
"name-to-linked-dynamic">
348 <xsl:with-param name=
"placed">true
</xsl:with-param>
349 <xsl:with-param name=
"namespace"><xsl:value-of select=
"@namespace" /></xsl:with-param>
350 <xsl:with-param name=
"name"><xsl:value-of select=
"@name" /></xsl:with-param>
353 <xsl:template match=
"user-dynamic[@name]">
354 <xsl:call-template name=
"format-dynamic-name">
355 <xsl:with-param name=
"namespace"><xsl:value-of select=
"@namespace" /></xsl:with-param>
356 <xsl:with-param name=
"name"><xsl:value-of select=
"@name" /></xsl:with-param>
360 <xsl:template match=
"/book[namespace]//state[@name]">
361 <xsl:call-template name=
"name-to-linked-state">
362 <xsl:with-param name=
"current-namespace"><xsl:value-of select=
"ancestor::book[namespace][1]/namespace" /></xsl:with-param>
363 <xsl:with-param name=
"namespace"><xsl:value-of select=
"@namespace" /></xsl:with-param>
364 <xsl:with-param name=
"name"><xsl:value-of select=
"@name" /></xsl:with-param>
367 <xsl:template match=
"/book[not(namespace)]//state[@name]">
368 <xsl:call-template name=
"name-to-linked-state">
369 <xsl:with-param name=
"namespace"><xsl:value-of select=
"@namespace" /></xsl:with-param>
370 <xsl:with-param name=
"name"><xsl:value-of select=
"@name" /></xsl:with-param>
373 <xsl:template match=
"placed-state[@name]">
374 <xsl:call-template name=
"name-to-linked-state">
375 <xsl:with-param name=
"placed">true
</xsl:with-param>
376 <xsl:with-param name=
"namespace"><xsl:value-of select=
"@namespace" /></xsl:with-param>
377 <xsl:with-param name=
"name"><xsl:value-of select=
"@name" /></xsl:with-param>
380 <xsl:template match=
"user-state[@name]">
381 <xsl:call-template name=
"format-state-name">
382 <xsl:with-param name=
"namespace"><xsl:value-of select=
"@namespace" /></xsl:with-param>
383 <xsl:with-param name=
"name"><xsl:value-of select=
"@name" /></xsl:with-param>
387 <xsl:template match=
"/book[namespace]//escape[@name]">
388 <xsl:call-template name=
"name-to-linked-escape">
389 <xsl:with-param name=
"current-namespace"><xsl:value-of select=
"ancestor::book[namespace][1]/namespace" /></xsl:with-param>
390 <xsl:with-param name=
"namespace"><xsl:value-of select=
"@namespace" /></xsl:with-param>
391 <xsl:with-param name=
"name"><xsl:value-of select=
"@name" /></xsl:with-param>
394 <xsl:template match=
"/book[not(namespace)]//escape[@name]">
395 <xsl:call-template name=
"name-to-linked-escape">
396 <xsl:with-param name=
"namespace"><xsl:value-of select=
"@namespace" /></xsl:with-param>
397 <xsl:with-param name=
"name"><xsl:value-of select=
"@name" /></xsl:with-param>
400 <xsl:template match=
"placed-escape[@name]">
401 <xsl:call-template name=
"name-to-linked-escape">
402 <xsl:with-param name=
"placed">true
</xsl:with-param>
403 <xsl:with-param name=
"namespace"><xsl:value-of select=
"@namespace" /></xsl:with-param>
404 <xsl:with-param name=
"name"><xsl:value-of select=
"@name" /></xsl:with-param>
407 <xsl:template match=
"user-escape[@name]">
408 <xsl:call-template name=
"format-escape-name">
409 <xsl:with-param name=
"namespace"><xsl:value-of select=
"@namespace" /></xsl:with-param>
410 <xsl:with-param name=
"name"><xsl:value-of select=
"@name" /></xsl:with-param>
414 <!-- Special templates for commonly used values -->
415 <xsl:template match=
"value-the-void">
416 <xsl:call-template name=
"name-to-linked-value">
417 <xsl:with-param name=
"namespace">..Shapes
</xsl:with-param>
418 <xsl:with-param name=
"name">void
</xsl:with-param>
419 <xsl:with-param name=
"placed">true
</xsl:with-param> <!-- Suppress namespace for brevity. -->
422 <xsl:template match=
"value-the-false">
423 <xsl:call-template name=
"format-value-name">
424 <xsl:with-param name=
"name">false
</xsl:with-param>
427 <xsl:template match=
"value-the-true">
428 <xsl:call-template name=
"format-value-name">
429 <xsl:with-param name=
"name">true
</xsl:with-param>