Ammend merge: Misc stuff
[shapes.git] / doc / parts / formats / bindings-html.xsl
blobf40c726b17c95ec69e691e29e387a84f96108877
1 <?xml version="1.0" encoding="UTF-8"?>
3 <!-- This file is part of Shapes. -->
4 <!-- -->
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. -->
9 <!-- -->
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. -->
14 <!-- -->
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/>. -->
17 <!-- -->
18 <!-- Copyright 2015 Henrik Tidefelt -->
20 <xsl:stylesheet
21 version="2.0"
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, '-', '--'), '\?', '-_')" />
29 </xsl:template>
31 <xsl:template name="namespace-to-a-id">
32 <xsl:param name="name" />
33 <xsl:value-of select="replace(replace($name, '^\.\.', ''), '\.\.', '-')" />
34 </xsl:template>
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>
38 </xsl:template>
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>
46 </xsl:if>
47 <xsl:value-of select="$name" />
48 </span>
49 </xsl:template>
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>
56 </xsl:if>
57 <xsl:text>@</xsl:text>
58 <xsl:value-of select="$name" />
59 </span>
60 </xsl:template>
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>
67 </xsl:if>
68 <xsl:text></xsl:text>
69 <xsl:value-of select="$name" />
70 </span>
71 </xsl:template>
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>
78 </xsl:if>
79 <b>C—</b>
80 <xsl:value-of select="$name" />
81 </span>
82 </xsl:template>
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>
89 </xsl:if>
90 <xsl:text>§</xsl:text>
91 <xsl:value-of select="$name" />
92 </span>
93 </xsl:template>
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>
100 </xsl:if>
101 <xsl:text>§•</xsl:text>
102 <xsl:value-of select="$name" />
103 </span>
104 </xsl:template>
106 <xsl:template name="format-kind-and-name">
107 <xsl:param name="kind" />
108 <xsl:param name="namespace" />
109 <xsl:param name="name" />
110 <xsl:choose>
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>
115 </xsl:call-template>
116 </xsl:when>
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>
121 </xsl:call-template>
122 </xsl:when>
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>
127 </xsl:call-template>
128 </xsl:when>
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>
133 </xsl:call-template>
134 </xsl:when>
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>
139 </xsl:call-template>
140 </xsl:when>
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>
145 </xsl:call-template>
146 </xsl:when>
147 </xsl:choose>
148 </xsl:template>
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">
157 <xsl:choose>
158 <xsl:when test="starts-with($namespace, '..')">
159 <xsl:value-of select="$namespace" />
160 </xsl:when>
161 <xsl:when test="$namespace = ''">
162 <xsl:value-of select="$current-namespace" />
163 </xsl:when>
164 <xsl:when test="$current-namespace = '..'">
165 <xsl:value-of select="concat('..', $namespace)" />
166 </xsl:when>
167 <xsl:otherwise>
168 <xsl:value-of select="concat($current-namespace, '..', $namespace)" />
169 </xsl:otherwise>
170 </xsl:choose>
171 </xsl:variable>
172 <xsl:choose>
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]">
178 <xsl:choose>
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>
183 </xsl:call-template>
184 </xsl:when>
185 <xsl:otherwise>
186 <xsl:call-template name="namespace-to-href">
187 <xsl:with-param name="name"><xsl:value-of select="$ns" /></xsl:with-param>
188 </xsl:call-template>
189 </xsl:otherwise>
190 </xsl:choose>
191 </xsl:for-each>
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>
195 </xsl:call-template>
196 </xsl:attribute>
197 <xsl:choose>
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>
202 </xsl:call-template>
203 </xsl:when>
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>
208 </xsl:call-template>
209 </xsl:when>
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>
216 </xsl:call-template>
217 </xsl:when>
218 <xsl:otherwise>
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>
223 </xsl:call-template>
224 </xsl:otherwise>
225 </xsl:choose>
226 </xsl:element>
227 </xsl:when>
228 <xsl:otherwise>
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" />&amp;kind=<xsl:value-of select="$kind" />&amp;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>
236 </xsl:call-template>
237 </span>
238 </xsl:element>
239 </xsl:otherwise>
240 </xsl:choose>
241 </xsl:template>
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>
250 </xsl:call-template>
251 </xsl:template>
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>
264 </xsl:call-template>
265 </xsl:template>
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>
277 </xsl:call-template>
278 </xsl:template>
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>
290 </xsl:call-template>
291 </xsl:template>
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>
303 </xsl:call-template>
304 </xsl:template>
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>
311 </xsl:call-template>
312 </xsl:template>
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>
317 </xsl:call-template>
318 </xsl:template>
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>
324 </xsl:call-template>
325 </xsl:template>
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>
330 </xsl:call-template>
331 </xsl:template>
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>
338 </xsl:call-template>
339 </xsl:template>
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>
344 </xsl:call-template>
345 </xsl:template>
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>
351 </xsl:call-template>
352 </xsl:template>
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>
357 </xsl:call-template>
358 </xsl:template>
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>
365 </xsl:call-template>
366 </xsl:template>
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>
371 </xsl:call-template>
372 </xsl:template>
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>
378 </xsl:call-template>
379 </xsl:template>
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>
384 </xsl:call-template>
385 </xsl:template>
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>
392 </xsl:call-template>
393 </xsl:template>
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>
398 </xsl:call-template>
399 </xsl:template>
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>
405 </xsl:call-template>
406 </xsl:template>
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>
411 </xsl:call-template>
412 </xsl:template>
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. -->
420 </xsl:call-template>
421 </xsl:template>
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>
425 </xsl:call-template>
426 </xsl:template>
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>
430 </xsl:call-template>
431 </xsl:template>
433 </xsl:stylesheet>