Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_33_1/tools/boostbook/xsl/caramel/concept2docbook.xsl @ 12

Last change on this file since 12 was 12, checked in by landauf, 17 years ago

added boost

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