]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/tools/boostbook/xsl/caramel/concept2docbook.xsl
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / tools / boostbook / xsl / caramel / concept2docbook.xsl
1 <?xml version="1.0" ?>
2
3 <!--
4 Copyright (c) 2002-2003 The Trustees of Indiana University.
5 All rights reserved.
6 Copyright (c) 2000-2001 University of Notre Dame. All rights reserved.
7
8 Distributed under the Boost Software License, Version 1.0.
9 (See accompanying file LICENSE_1_0.txt or copy at
10 http://www.boost.org/LICENSE_1_0.txt)
11 -->
12
13 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
14 <xsl:strip-space elements="* xsl:*"/>
15
16 <xsl:include href="unparser.xsl"/>
17
18 <xsl:key name="concepts" match="concept" use="@name"/>
19
20 <!-- The layout type to use for concept descriptions. Can be one of:
21 sgi: simulate the SGI STL documentation
22 austern: simulate the documentation in Generic Programming and the STL,
23 by Matthew H. Austern
24 caramel: simulate the formatting from Caramel
25 -->
26 <xsl:param name="boost.concept.layout" select="'austern'"/>
27
28 <xsl:template match="concept">
29 <refentry>
30 <xsl:attribute name="id">
31 <xsl:call-template name="generate.id"/>
32 </xsl:attribute>
33
34 <refmeta>
35 <refentrytitle>Concept <xsl:value-of select="@name"/></refentrytitle>
36 <manvolnum>7</manvolnum>
37 </refmeta>
38
39 <refnamediv>
40 <refname><xsl:value-of select="@name"/></refname>
41 <xsl:if test="purpose">
42 <refpurpose>
43 <xsl:apply-templates select="purpose/*|purpose/text()"/>
44 </refpurpose>
45 </xsl:if>
46 </refnamediv>
47
48 <!--
49 <refentryinfo>
50 <xsl:for-each select="copyright | copyright-include | legalnotice">
51 <xsl:choose>
52 <xsl:when test="name(.)='copyright'">
53 <copyright><xsl:copy-of select="./node()"/></copyright>
54 </xsl:when>
55 <xsl:when test="name(.)='legalnotice'">
56 <legalnotice><xsl:copy-of select="./node()"/></legalnotice>
57 </xsl:when>
58 <xsl:when test="name(.)='copyright-include'">
59 <copyright><xsl:copy-of select="document(concat('../concepts/', @file))/copyright/node()"/></copyright>
60 </xsl:when>
61 </xsl:choose>
62 </xsl:for-each>
63 </refentryinfo>
64 -->
65
66 <xsl:if test="description">
67 <xsl:if test="description">
68 <refsect1>
69 <title>Description</title>
70 <xsl:for-each select="description">
71 <xsl:apply-templates/>
72 </xsl:for-each>
73 </refsect1>
74 </xsl:if>
75 </xsl:if>
76
77 <xsl:if test="refines | refines-when-mutable">
78 <refsect1>
79 <title>Refinement of</title>
80 <itemizedlist>
81 <xsl:if test="refines">
82 <xsl:for-each select="refines">
83 <listitem>
84 <para>
85 <xsl:call-template name="concept.link">
86 <xsl:with-param name="name" select="@concept"/>
87 </xsl:call-template>
88 </para>
89 </listitem>
90 </xsl:for-each>
91 </xsl:if>
92 <xsl:if test="refines-when-mutable">
93 <xsl:for-each select="refines-when-mutable">
94 <listitem>
95 <para>
96 <xsl:text>When mutable: </xsl:text>
97 <xsl:call-template name="concept.link">
98 <xsl:with-param name="name" select="@concept"/>
99 </xsl:call-template>
100 </para>
101 </listitem>
102 </xsl:for-each>
103 </xsl:if>
104 </itemizedlist>
105 </refsect1>
106 </xsl:if>
107
108 <!-- This part must be run even if there are no associated types to print out, so the hidden type definitions can be found -->
109 <xsl:variable name="definition_list">
110 <xsl:call-template name="make-definition-list">
111 <xsl:with-param name="typedefs" select="define-type | associated-type"/>
112 <xsl:with-param name="definition_list">
113 <xsl:for-each select="param/@name">
114 @(@<xsl:value-of select="."/>=<xsl:value-of select="."/>@)@
115 </xsl:for-each>
116 </xsl:with-param>
117 </xsl:call-template>
118 </xsl:variable>
119
120 <!-- <xsl:message>Definition list: <xsl:value-of select="$definition_list"/></xsl:message> -->
121
122 <xsl:call-template name="print-associated-types">
123 <xsl:with-param name="typedefs" select="associated-type"/>
124 <xsl:with-param name="definition_list" select="$definition_list"/>
125 </xsl:call-template>
126
127 <xsl:call-template name="concept.notation">
128 <xsl:with-param name="definition_list" select="$definition_list"/>
129 </xsl:call-template>
130
131 <xsl:variable name="notations">
132 <xsl:for-each select="notation">
133 @@(@@<xsl:call-template name="unparse-cpp">
134 <xsl:with-param name="typeref" select="*[1]"/>
135 <xsl:with-param name="definition_list" select="$definition_list"/>
136 <xsl:with-param name="ignore-cv" select="true()"/>
137 <xsl:with-param name="ignore-references" select="true()"/>
138 </xsl:call-template>@@=@@<xsl:value-of select="normalize-space(@variables)"/>@@)@@
139 </xsl:for-each>
140 </xsl:variable>
141
142 <!-- <xsl:message>Notations: <xsl:value-of select="normalize-space($notations)"/> End notations</xsl:message> -->
143
144 <xsl:if test="definition">
145 <refsect1>
146 <title>Definitions</title>
147 <xsl:for-each select="definition">
148 <p><xsl:apply-templates/></p>
149 </xsl:for-each>
150 </refsect1>
151 </xsl:if>
152
153 <xsl:if test="valid-type-expression | models | models-when-mutable">
154 <refsect1>
155 <title>Type expressions</title>
156 <variablelist>
157 <xsl:for-each select="models">
158 <varlistentry>
159 <term/>
160 <listitem>
161 <para>
162 <xsl:call-template name="unparse-operator-definition">
163 <xsl:with-param name="typeref" select="."/>
164 <xsl:with-param name="operator_nodeset" select="key('concepts', @concept)/models-sentence/node()"/>
165 <xsl:with-param name="definition_list" select="$definition_list"/>
166 <xsl:with-param name="notations" select="$notations"/>
167 <xsl:with-param name="ignore-cv" select="false()"/>
168 <xsl:with-param name="self" select="@concept"/>
169 <xsl:with-param name="use-code-block" select="true()"/>
170 </xsl:call-template>
171 </para>
172 </listitem>
173 </varlistentry>
174 </xsl:for-each>
175 <xsl:for-each select="models-when-mutable">
176 <varlistentry>
177 <term>Only when mutable</term>
178 <listitem>
179 <para>
180 <xsl:call-template name="unparse-operator-definition">
181 <xsl:with-param name="typeref" select="."/>
182 <xsl:with-param name="operator_nodeset" select="key('concepts', @concept)/models-sentence/node()"/>
183 <xsl:with-param name="definition_list" select="$definition_list"/>
184 <xsl:with-param name="notations" select="$notations"/>
185 <xsl:with-param name="ignore-cv" select="false()"/>
186 <xsl:with-param name="self" select="@concept"/>
187 <xsl:with-param name="use-code-block" select="true()"/>
188 </xsl:call-template>
189 </para>
190 </listitem>
191 </varlistentry>
192 </xsl:for-each>
193 <xsl:for-each select="valid-type-expression">
194 <varlistentry>
195 <term><xsl:value-of select="@name"/></term>
196 <listitem>
197 <para>
198 <type>
199 <xsl:call-template name="unparse-cpp">
200 <xsl:with-param name="typeref" select="*[2]"/>
201 <xsl:with-param name="definition_list" select="$definition_list"/>
202 <xsl:with-param name="notations" select="normalize-space($notations)"/>
203 </xsl:call-template>
204 </type>
205
206 <xsl:comment/> must be
207 <xsl:for-each select="return-type/*">
208 <xsl:if test="position()!=1 and last()!=2">, </xsl:if>
209 <xsl:if test="position()=last() and last()!=1"> and </xsl:if>
210 <xsl:call-template name="unparse-constraint">
211 <xsl:with-param name="constraint" select="."/>
212 <xsl:with-param name="definition_list" select="$definition_list"/>
213 <xsl:with-param name="type-expr-mode" select="true()"/>
214 </xsl:call-template>
215 </xsl:for-each><xsl:comment/>.
216 </para>
217
218 <xsl:if test="description">
219 <xsl:for-each select="description">
220 <xsl:apply-templates/>
221 </xsl:for-each>
222 </xsl:if>
223 </listitem>
224 </varlistentry>
225 </xsl:for-each>
226 </variablelist>
227 </refsect1>
228 </xsl:if>
229
230 <xsl:if test="valid-expression">
231 <refsect1>
232 <title>Valid expressions</title>
233
234 <xsl:variable name="columns">
235 <xsl:if test="valid-expression/return-type">
236 <xsl:text>T</xsl:text>
237 </xsl:if>
238 <xsl:if test="valid-expression/precondition">
239 <xsl:text>P</xsl:text>
240 </xsl:if>
241 <xsl:if test="valid-expression/semantics">
242 <xsl:text>S</xsl:text>
243 </xsl:if>
244 <xsl:if test="valid-expression/postcondition">
245 <xsl:text>O</xsl:text>
246 </xsl:if>
247 </xsl:variable>
248
249 <informaltable>
250 <tgroup>
251 <xsl:attribute name="cols">
252 <xsl:value-of select="string-length($columns) + 2"/>
253 </xsl:attribute>
254 <thead>
255 <row>
256 <entry>Name</entry>
257 <entry>Expression</entry>
258 <xsl:if test="contains($columns, 'T')">
259 <entry>Type</entry>
260 </xsl:if>
261 <xsl:if test="contains($columns, 'P')">
262 <entry>Precondition</entry>
263 </xsl:if>
264 <xsl:if test="contains($columns, 'S')">
265 <entry>Semantics</entry>
266 </xsl:if>
267 <xsl:if test="contains($columns, 'O')">
268 <entry>Postcondition</entry>
269 </xsl:if>
270 </row>
271 </thead>
272 <tbody>
273 <xsl:apply-templates select="valid-expression">
274 <xsl:with-param name="definition_list"
275 select="$definition_list"/>
276 <xsl:with-param name="notations"
277 select="normalize-space($notations)"/>
278 <xsl:with-param name="columns" select="$columns"/>
279 </xsl:apply-templates>
280 </tbody>
281 </tgroup>
282 </informaltable>
283 <!-- Doug prefers the table
284 <variablelist>
285 <xsl:for-each select="valid-expression">
286 <xsl:variable name="as-cxx-value">
287 <xsl:call-template name="unparse-cpp">
288 <xsl:with-param name="typeref" select="*[1]"/>
289 <xsl:with-param name="definition_list" select="$definition_list"/>
290 <xsl:with-param name="notations" select="normalize-space($notations)"/>
291 </xsl:call-template>
292 </xsl:variable>
293 <varlistentry>
294 <term><xsl:value-of select="@name"/>: <literal><xsl:value-of select="$as-cxx-value"/></literal></term>
295 <listitem><variablelist>
296 <xsl:if test="return-type/*">
297 <varlistentry><term>Return value</term><listitem><para>
298 <xsl:for-each select="return-type/*">
299 <xsl:if test="position()!=1 and last()!=2">, </xsl:if>
300 <xsl:if test="position()=last() and last()!=1"> and </xsl:if>
301 <xsl:call-template name="unparse-constraint">
302 <xsl:with-param name="constraint" select="."/>
303 <xsl:with-param name="definition_list" select="$definition_list"/>
304 <xsl:with-param name="capitalize" select="position()=1"/>
305 </xsl:call-template>
306 </xsl:for-each>
307 </para></listitem></varlistentry>
308 </xsl:if>
309
310 <xsl:for-each select="precondition">
311 <varlistentry><term>Precondition</term><listitem><para>
312 <xsl:apply-templates/>
313 </para></listitem></varlistentry>
314 </xsl:for-each>
315
316 <xsl:for-each select="semantics">
317 <varlistentry><term>Semantics</term><listitem><para>
318 <xsl:apply-templates/>
319 </para></listitem></varlistentry>
320 </xsl:for-each>
321
322 <xsl:for-each select="postcondition">
323 <varlistentry><term>Postcondition</term><listitem><para>
324 <xsl:apply-templates/>
325 </para></listitem></varlistentry>
326 </xsl:for-each>
327
328 </variablelist></listitem>
329 </varlistentry>
330
331 </xsl:for-each>
332 </variablelist>
333 -->
334 </refsect1>
335 </xsl:if>
336
337 <xsl:if test="complexity">
338 <refsect1>
339 <title>Complexity</title>
340 <xsl:for-each select="complexity">
341 <para><xsl:apply-templates/></para>
342 </xsl:for-each>
343 </refsect1>
344 </xsl:if>
345
346 <xsl:if test="invariant">
347 <refsect1>
348 <title>Invariants</title>
349 <variablelist>
350 <xsl:for-each select="invariant">
351 <varlistentry>
352 <term><xsl:value-of select="@name"/></term>
353 <listitem>
354 <para><xsl:apply-templates/></para>
355 </listitem>
356 </varlistentry>
357 </xsl:for-each>
358 </variablelist>
359 </refsect1>
360 </xsl:if>
361
362 <xsl:if test="example-model">
363 <refsect1>
364 <title>Models</title>
365 <itemizedlist>
366 <xsl:for-each select="example-model">
367 <listitem>
368 <simplelist type="inline">
369 <xsl:for-each select="*">
370 <xsl:variable name="example-value">
371 <xsl:call-template name="unparse-cpp">
372 <xsl:with-param name="typeref" select="."/>
373 <xsl:with-param name="definition_list" select="$definition_list"/>
374 </xsl:call-template>
375 </xsl:variable>
376 <member><type><xsl:value-of select="$example-value"/></type></member>
377 </xsl:for-each>
378 </simplelist>
379 </listitem>
380 </xsl:for-each>
381 </itemizedlist>
382 </refsect1>
383 </xsl:if>
384
385 <xsl:variable name="see-also-list-0" select="concept-ref | see-also | refines | refines-when-mutable | models-as-first-arg | models | models-when-mutable"/>
386 <xsl:variable name="see-also-list-1" select="$see-also-list-0[string(@name | @concept) != string(../@name)]"/>
387 <xsl:variable name="see-also-list" select="$see-also-list-1[not(string(@name|@concept) = (preceding::*/@name | preceding::*/@concept | ancestor::*/@name | ancestor::*/@concept))]"/>
388 <xsl:if test="$see-also-list">
389 <refsect1>
390 <title>See also</title>
391 <itemizedlist>
392 <xsl:for-each select="$see-also-list">
393 <xsl:sort select="string(@name|@concept)" data-type="text"/>
394 <listitem>
395 <para>
396 <xsl:call-template name="concept.link">
397 <xsl:with-param name="name" select="@name|@concept"/>
398 </xsl:call-template>
399 </para>
400 </listitem>
401 </xsl:for-each>
402 </itemizedlist>
403 </refsect1>
404 </xsl:if>
405
406 </refentry>
407 </xsl:template>
408
409 <xsl:template name="unparse-constraint">
410 <xsl:param name="constraint"/>
411 <xsl:param name="definition_list"/>
412 <xsl:param name="type-expr-mode" select="false()"/>
413 <xsl:param name="capitalize" select="true()"/>
414
415 <xsl:choose>
416
417 <xsl:when test="name($constraint)='require-same-type'">
418 <xsl:if test="$type-expr-mode">identical to </xsl:if>
419 <type>
420 <xsl:call-template name="unparse-cpp">
421 <xsl:with-param name="typeref" select="$constraint/*[1]"/>
422 <xsl:with-param name="definition_list" select="definition_list"/>
423 </xsl:call-template>
424 </type>
425 </xsl:when>
426
427 <xsl:when test="name($constraint)='convertible-to'">
428 <xsl:choose>
429 <xsl:when test="$type-expr-mode">convertible to </xsl:when>
430 <xsl:when test="not($type-expr-mode) and $capitalize">Convertible to </xsl:when>
431 <xsl:when test="not($type-expr-mode) and not($capitalize)">convertible to </xsl:when>
432 </xsl:choose>
433 <type>
434 <xsl:call-template name="unparse-cpp">
435 <xsl:with-param name="typeref" select="$constraint/*[1]"/>
436 <xsl:with-param name="definition_list" select="definition_list"/>
437 </xsl:call-template>
438 </type>
439 </xsl:when>
440
441 <xsl:when test="name($constraint)='derived-from'">
442 <xsl:choose>
443 <xsl:when test="$type-expr-mode">derived from </xsl:when>
444 <xsl:when test="not($type-expr-mode) and $capitalize">Derived from </xsl:when>
445 <xsl:when test="not($type-expr-mode) and not($capitalize)">derived from </xsl:when>
446 </xsl:choose>
447 <type>
448 <xsl:call-template name="unparse-cpp">
449 <xsl:with-param name="typeref" select="$constraint/*[1]"/>
450 <xsl:with-param name="definition_list" select="definition_list"/>
451 </xsl:call-template>
452 </type>
453 </xsl:when>
454
455 <xsl:when test="name($constraint)='assignable-to'">
456 <xsl:choose>
457 <xsl:when test="$type-expr-mode">assignable to </xsl:when>
458 <xsl:when test="not($type-expr-mode) and $capitalize">Assignable to </xsl:when>
459 <xsl:when test="not($type-expr-mode) and not($capitalize)">assignable to </xsl:when>
460 </xsl:choose>
461 <type>
462 <xsl:call-template name="unparse-cpp">
463 <xsl:with-param name="typeref" select="$constraint/*[1]"/>
464 <xsl:with-param name="definition_list" select="definition_list"/>
465 </xsl:call-template>
466 </type>
467 </xsl:when>
468
469 <xsl:when test="name($constraint)='models-as-first-arg'">
470 <xsl:choose>
471 <xsl:when test="$type-expr-mode"> a model </xsl:when>
472 <xsl:when test="not($type-expr-mode) and $capitalize"> Models </xsl:when>
473 <xsl:when test="not($type-expr-mode) and not($capitalize)"> models </xsl:when>
474 </xsl:choose>
475 <xsl:if test="$constraint/*"><xsl:comment/>
476 (along with <xsl:for-each select="$constraint/*"><type>
477 <xsl:call-template name="unparse-cpp">
478 <xsl:with-param name="typeref" select="."/>
479 <xsl:with-param name="definition_list" select="definition_list"/>
480 </xsl:call-template>
481 </type>
482 <xsl:choose>
483 <xsl:when test="position()=last()"/>
484 <xsl:when test="position()=last()-1 and last()=2"> and </xsl:when>
485 <xsl:when test="position()=last()-1 and last()!=2">, and </xsl:when>
486 <xsl:otherwise>, </xsl:otherwise>
487 </xsl:choose><xsl:comment/>
488 </xsl:for-each><xsl:comment/>) <xsl:comment/>
489 </xsl:if><xsl:comment/>
490 <xsl:if test="$type-expr-mode"> of </xsl:if>
491 <xsl:call-template name="concept.link">
492 <xsl:with-param name="name" select="$constraint/@concept"/>
493 </xsl:call-template>
494 </xsl:when>
495
496 </xsl:choose>
497 </xsl:template>
498
499 <xsl:template name="make-definition-list">
500 <xsl:param name="typedefs"/>
501 <xsl:param name="definition_list"/>
502
503 <xsl:choose>
504 <xsl:when test="$typedefs">
505 <xsl:variable name="type_definition">
506 <xsl:if test="name($typedefs[1]/*[1])!='description'">
507 <xsl:call-template name="unparse-cpp">
508 <xsl:with-param name="typeref" select="$typedefs[1]/*[1]"/>
509 <xsl:with-param name="definition_list" select="$definition_list"/>
510 </xsl:call-template>
511 </xsl:if>
512 </xsl:variable>
513
514 <xsl:variable name="new_type_definition">
515 <xsl:choose>
516 <xsl:when test="name($typedefs[1])='associated-type'">
517 <xsl:value-of select="$typedefs[1]/@name"/>
518 </xsl:when>
519 <xsl:otherwise>
520 <xsl:value-of select="$type_definition"/>
521 </xsl:otherwise>
522 </xsl:choose>
523 </xsl:variable>
524
525 <xsl:call-template name="make-definition-list">
526 <xsl:with-param name="typedefs" select="$typedefs[position()!=1]"/>
527 <xsl:with-param name="definition_list" select="concat($definition_list, ' @(@', $typedefs[1]/@name, '=', $new_type_definition, '@)@')"/>
528 </xsl:call-template>
529
530 </xsl:when>
531
532 <xsl:otherwise> <!-- End of expression list, emit the results that have accumulated -->
533 <xsl:value-of select="$definition_list"/>
534 </xsl:otherwise>
535 </xsl:choose>
536 </xsl:template>
537
538 <xsl:template name="print-associated-types">
539 <xsl:param name="typedefs"/>
540 <xsl:param name="definition_list"/>
541
542 <xsl:if test="$typedefs">
543 <refsect1>
544 <title>Associated types</title>
545
546 <xsl:choose>
547 <xsl:when test="$boost.concept.layout='sgi'">
548 <informaltable>
549 <tgroup cols="2">
550 <tbody>
551 <xsl:apply-templates select="associated-type" mode="sgi">
552 <xsl:with-param name="definition_list"
553 select="$definition_list"/>
554 </xsl:apply-templates>
555 </tbody>
556 </tgroup>
557 </informaltable>
558 </xsl:when>
559 <xsl:when test="$boost.concept.layout='austern'">
560 <itemizedlist>
561 <xsl:apply-templates select="associated-type" mode="austern">
562 <xsl:with-param name="definition_list"
563 select="$definition_list"/>
564 </xsl:apply-templates>
565 </itemizedlist>
566 </xsl:when>
567 <xsl:when test="$boost.concept.layout='caramel'">
568 <segmentedlist>
569 <segtitle>Name</segtitle>
570 <segtitle>Code</segtitle>
571 <segtitle>Description</segtitle>
572 <xsl:for-each select="$typedefs">
573 <xsl:variable name="type_definition">
574 <xsl:call-template name="unparse-cpp">
575 <xsl:with-param name="typeref" select="*[1]"/>
576 <xsl:with-param name="definition_list" select="$definition_list"/>
577 </xsl:call-template>
578 </xsl:variable>
579 <seglistitem>
580 <seg><xsl:value-of select="@name"/></seg>
581 <seg><xsl:value-of select="$type_definition"/></seg>
582 <seg>
583 <xsl:for-each select="description">
584 <xsl:call-template name="description"/>
585 </xsl:for-each>
586 </seg>
587 </seglistitem>
588 </xsl:for-each>
589 </segmentedlist>
590 </xsl:when>
591 </xsl:choose>
592 </refsect1>
593 </xsl:if>
594 </xsl:template>
595
596 <xsl:template name="comma-list">
597 <xsl:param name="list"/>
598
599 <xsl:if test="$list!=''">
600 <term><varname>
601 <xsl:if test="substring-before($list,' ')=''"><xsl:value-of select="$list"/></xsl:if>
602 <xsl:value-of select="substring-before($list,' ')"/>
603 </varname></term>
604 <xsl:call-template name="comma-list">
605 <xsl:with-param name="list" select="substring-after($list,' ')"/>
606 </xsl:call-template>
607 </xsl:if>
608 </xsl:template>
609
610 <xsl:template match="associated-type" mode="sgi">
611 <row>
612 <entry><simpara><xsl:value-of select="@name"/></simpara></entry>
613
614 <entry>
615 <para>
616 <xsl:for-each select="description">
617 <xsl:apply-templates/>
618 </xsl:for-each>
619 </para>
620 </entry>
621 </row>
622 </xsl:template>
623
624 <xsl:template match="associated-type" mode="austern">
625 <xsl:param name="definition_list" select="''"/>
626
627 <listitem>
628 <para>
629 <emphasis role="bold"><xsl:value-of select="@name"/></emphasis>
630
631 <xsl:call-template name="preformatted">
632 <xsl:with-param name="text">
633 <xsl:call-template name="unparse-cpp">
634 <xsl:with-param name="typeref" select="*[1]"/>
635 <xsl:with-param name="definition_list" select="$definition_list"/>
636 </xsl:call-template>
637 </xsl:with-param>
638 </xsl:call-template>
639
640 <xsl:for-each select="description">
641 <xsl:apply-templates/>
642 </xsl:for-each>
643 </para>
644 </listitem>
645 </xsl:template>
646
647 <xsl:template match="valid-expression">
648 <xsl:param name="definition_list"/>
649 <xsl:param name="notations"/>
650 <xsl:param name="columns"/>
651
652 <row>
653 <entry><simpara><xsl:value-of select="@name"/></simpara></entry>
654
655 <entry>
656 <simpara>
657 <xsl:call-template name="unparse-cpp">
658 <xsl:with-param name="typeref" select="*[1]"/>
659 <xsl:with-param name="definition_list" select="$definition_list"/>
660 <xsl:with-param name="notations" select="$notations"/>
661 </xsl:call-template>
662 </simpara>
663 </entry>
664
665 <xsl:if test="contains($columns, 'T')">
666 <entry>
667 <simpara>
668 <xsl:for-each select="return-type/*">
669 <xsl:if test="position()!=1 and last()!=2">, </xsl:if>
670 <xsl:if test="position()=last() and last()!=1"> and </xsl:if>
671 <xsl:call-template name="unparse-constraint">
672 <xsl:with-param name="constraint" select="."/>
673 <xsl:with-param name="definition_list"
674 select="$definition_list"/>
675 <xsl:with-param name="capitalize" select="position()=1"/>
676 </xsl:call-template>
677 </xsl:for-each>
678 </simpara>
679 </entry>
680 </xsl:if>
681
682 <xsl:if test="contains($columns, 'P')">
683 <entry>
684 <xsl:for-each select="precondition">
685 <simpara><xsl:apply-templates/></simpara>
686 </xsl:for-each>
687 </entry>
688 </xsl:if>
689
690 <xsl:if test="contains($columns, 'S')">
691 <entry>
692 <xsl:for-each select="semantics">
693 <simpara><xsl:apply-templates/></simpara>
694 </xsl:for-each>
695 </entry>
696 </xsl:if>
697
698 <xsl:if test="contains($columns, 'O')">
699 <entry>
700 <xsl:for-each select="postcondition">
701 <simpara><xsl:apply-templates/></simpara>
702 </xsl:for-each>
703 </entry>
704 </xsl:if>
705 </row>
706 </xsl:template>
707
708 <xsl:template name="concept.notation">
709 <xsl:param name="definition_list"/>
710
711 <refsect1>
712 <title>Notation</title>
713 <variablelist>
714 <xsl:for-each select="param">
715 <varlistentry>
716 <term><xsl:value-of select="@name"/></term>
717 <listitem>
718 <simpara>
719 <xsl:text>A type playing the role of </xsl:text>
720 <xsl:value-of select="@role"/>
721 <xsl:text> in the </xsl:text>
722 <xsl:call-template name="concept.link">
723 <xsl:with-param name="name" select="../@name"/>
724 </xsl:call-template>
725 <xsl:text> concept.</xsl:text>
726 </simpara>
727 </listitem>
728 </varlistentry>
729 </xsl:for-each>
730 <xsl:for-each select="notation">
731 <xsl:variable name="notation_name">
732 <xsl:call-template name="comma-list">
733 <xsl:with-param name="list"
734 select="normalize-space(@variables)"/>
735 </xsl:call-template>
736 </xsl:variable>
737
738 <varlistentry>
739 <xsl:copy-of select="$notation_name"/>
740 <listitem>
741 <simpara>
742 <xsl:variable name="output-plural" select="substring-before(normalize-space(@variables),' ')!=''"/>
743 <xsl:if test="name(*[1])='sample-value'">Object<xsl:if test="$output-plural">s</xsl:if> of type </xsl:if>
744 <xsl:variable name="typeref-to-print" select="*[name()!='sample-value'] | sample-value/*[name()!='sample-value']"/>
745 <xsl:call-template name="unparse-cpp">
746 <xsl:with-param name="typeref" select="$typeref-to-print"/>
747 <xsl:with-param name="definition_list" select="$definition_list"/>
748 <xsl:with-param name="ignore-cv" select="true()"/>
749 <xsl:with-param name="ignore-references" select="true()"/>
750 </xsl:call-template>
751 </simpara>
752 </listitem>
753 </varlistentry>
754 </xsl:for-each>
755 </variablelist>
756 </refsect1>
757 </xsl:template>
758
759 <xsl:template name="concept.link">
760 <xsl:param name="name" select="text()"/>
761 <xsl:param name="warn" select="true()"/>
762 <xsl:param name="text" select="$name"/>
763 <xsl:variable name="node" select="key('concepts', $name)"/>
764
765 <xsl:choose>
766 <xsl:when test="count($node)=0">
767 <xsl:if test="$warn">
768 <xsl:message>
769 <xsl:text>warning: cannot find concept '</xsl:text>
770 <xsl:value-of select="$name"/>
771 <xsl:text>'</xsl:text>
772 </xsl:message>
773 </xsl:if>
774 <xsl:value-of select="$text"/>
775 </xsl:when>
776 <xsl:otherwise>
777 <xsl:call-template name="internal-link">
778 <xsl:with-param name="to">
779 <xsl:call-template name="generate.id">
780 <xsl:with-param name="node" select="$node"/>
781 </xsl:call-template>
782 </xsl:with-param>
783 <xsl:with-param name="text" select="$text"/>
784 </xsl:call-template>
785 </xsl:otherwise>
786 </xsl:choose>
787 </xsl:template>
788
789 <xsl:template name="remove-whitespace">
790 <xsl:param name="text" select="text()"/>
791
792 <xsl:variable name="normalized" select="normalize-space($text)"/>
793 <xsl:choose>
794 <xsl:when test="contains($normalized, ' ')">
795 <xsl:value-of select="substring-before($normalized, ' ')"/>
796 <xsl:call-template name="remove-whitespace">
797 <xsl:with-param name="text"
798 select="substring-after($normalized, ' ')"/>
799 </xsl:call-template>
800 </xsl:when>
801 <xsl:otherwise>
802 <xsl:value-of select="$normalized"/>
803 </xsl:otherwise>
804 </xsl:choose>
805 </xsl:template>
806
807 <xsl:template match="concept" mode="generate.id">
808 <xsl:call-template name="remove-whitespace">
809 <xsl:with-param name="text" select="@name"/>
810 </xsl:call-template>
811 </xsl:template>
812 </xsl:stylesheet>