This commit was manufactured by cvs2svn to create branch 'SAMBA_3_0'.
[ira/wip.git] / docs / docbook / xslt / db2latex / lists.mod.xsl
1 <?xml version='1.0'?>
2 <!--############################################################################# 
3 |       $Id: lists.mod.xsl,v 1.1 2003/04/30 21:39:49 ab Exp $
4 |- #############################################################################
5 |       $Author: ab $
6 |                                                                                                               
7 |   PURPOSE:
8 + ############################################################################## -->
9
10 <xsl:stylesheet 
11     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
12     xmlns:doc="http://nwalsh.com/xsl/documentation/1.0"
13     exclude-result-prefixes="doc" version='1.0'>
14
15
16
17     <!--############################################################################# -->
18     <!-- DOCUMENTATION                                                                -->
19     <doc:reference id="lists" xmlns="">
20         <referenceinfo>
21             <releaseinfo role="meta">
22                 $Id: lists.mod.xsl,v 1.1 2003/04/30 21:39:49 ab Exp $
23             </releaseinfo>
24         <authorgroup>
25             <author> <firstname>Ramon</firstname> <surname>Casellas</surname> </author>
26             <author> <firstname>James</firstname> <surname>Devenish</surname> </author>
27         </authorgroup>
28             <copyright>
29                 <year>2000</year> <year>2001</year> <year>2002</year> <year>2003</year>
30                 <holder>Ramon Casellas</holder>
31             </copyright>
32         </referenceinfo>
33
34         <title>Lists <filename>lists.mod.xsl</filename></title>
35         <partintro>
36             <section><title>Introduction</title>
37                 <para></para>
38             </section>
39         </partintro>
40     </doc:reference>
41
42
43
44     <xsl:template match="variablelist/title| orderedlist/title | itemizedlist/title | simplelist/title">
45         <xsl:text>&#10;{\sc </xsl:text>
46         <xsl:apply-templates/>
47         <xsl:text>}&#10;</xsl:text>
48     </xsl:template>
49
50
51     <xsl:template match="itemizedlist">
52         <xsl:if test="title"> <xsl:apply-templates select="title"/></xsl:if>
53         <xsl:text>&#10;\begin{itemize}&#10;</xsl:text>
54         <xsl:apply-templates select="listitem"/>
55         <xsl:text>&#10;\end{itemize}&#10;</xsl:text>
56     </xsl:template>
57
58
59     <xsl:template match="orderedlist">
60         <xsl:variable name="numeration">
61             <xsl:choose>
62                 <xsl:when test="@numeration">
63                     <xsl:value-of select="@numeration"/>
64                 </xsl:when>
65                 <xsl:otherwise>
66                     <xsl:value-of select="arabic"/>
67                 </xsl:otherwise>
68             </xsl:choose>
69         </xsl:variable>
70         <xsl:if test="title"> <xsl:apply-templates select="title"/></xsl:if>
71         <xsl:text>&#10;\begin{enumerate}</xsl:text>
72         <xsl:if test="@numeration">
73             <xsl:choose>
74                 <xsl:when test="@numeration='arabic'">  <xsl:text>[1]</xsl:text>&#10;</xsl:when>
75                 <xsl:when test="@numeration='upperalpha'"><xsl:text>[A]</xsl:text>&#10;</xsl:when>
76                 <xsl:when test="@numeration='loweralpha'"><xsl:text>[a]</xsl:text>&#10;</xsl:when>
77                 <xsl:when test="@numeration='upperroman'"><xsl:text>[I]</xsl:text>&#10;</xsl:when>
78                 <xsl:when test="@numeration='lowerroman'"><xsl:text>[i]</xsl:text>&#10;</xsl:when>
79             </xsl:choose>
80         </xsl:if>
81         <xsl:apply-templates select="listitem"/>
82         \end{enumerate}&#10;
83     </xsl:template>
84
85
86
87     <xsl:template match="variablelist">
88         <xsl:if test="title"> 
89                 <xsl:apply-templates select="title"/>
90         </xsl:if>
91         <xsl:text>&#10;\noindent&#10;</xsl:text> 
92         <xsl:text>&#10;\begin{description}&#10;</xsl:text> 
93         <xsl:apply-templates select="varlistentry"/>
94         <xsl:text>&#10;\end{description}&#10;</xsl:text> 
95     </xsl:template>
96
97
98     <xsl:template match="listitem">
99         <xsl:text>&#10;%--- Item&#10;</xsl:text>
100         <xsl:text>\item </xsl:text>
101         <xsl:apply-templates/>
102         <xsl:text>&#10;</xsl:text>
103     </xsl:template>
104
105
106     <xsl:template match="varlistentry">
107         <xsl:variable name="id"> 
108                 <xsl:call-template name="label.id"/>
109         </xsl:variable>
110         <xsl:text>\item[</xsl:text><xsl:apply-templates select="term"/><xsl:text>]\mbox{} % mbox is a trick to induce different typesetting decisions</xsl:text>
111         <xsl:apply-templates select="listitem"/>
112     </xsl:template>
113
114
115     <xsl:template match="varlistentry/term">
116         <xsl:apply-templates/><xsl:text>, </xsl:text>
117     </xsl:template>
118
119     <xsl:template match="varlistentry/term[position()=last()]">
120         <xsl:apply-templates/>
121     </xsl:template>
122
123     <xsl:template match="varlistentry/listitem">
124         <xsl:apply-templates/>
125     </xsl:template>
126
127
128     <xsl:template name="tabular.string">
129         <xsl:param name="cols" select="1"/>
130         <xsl:param name="i" select="1"/>
131         <xsl:choose>
132             <xsl:when test="$i > $cols"></xsl:when>
133             <xsl:otherwise>
134                 <xsl:text>l</xsl:text>
135                 <xsl:call-template name="tabular.string">
136                     <xsl:with-param name="i" select="$i+1"/>
137                     <xsl:with-param name="cols" select="$cols"/>
138                 </xsl:call-template>
139             </xsl:otherwise>
140         </xsl:choose>
141     </xsl:template>
142
143
144     <!--========================================================================== 
145     | Inline simplelist. It is rendered as a list of comma separated values.
146     | We make the difference between the last member and the rest. XSL easily
147     | allows this.
148     +============================================================================-->
149
150     <xsl:template match="simplelist[@type='inline']">
151         <xsl:apply-templates/>
152     </xsl:template>
153     <xsl:template match="simplelist[@type='inline']/member">
154         <xsl:apply-templates/>
155         <xsl:text>, </xsl:text>
156     </xsl:template>
157     <xsl:template match="simplelist[@type='inline']/member[position()=last()]">
158         <xsl:apply-templates/>
159     </xsl:template>
160
161     <xsl:template match="simplelist[@type='horiz']">
162         <xsl:variable name="cols">
163             <xsl:choose>
164                 <xsl:when test="@columns">
165                     <xsl:value-of select="@columns"/>
166                 </xsl:when>
167                 <xsl:otherwise>1</xsl:otherwise>
168             </xsl:choose>
169         </xsl:variable>
170         <xsl:text>&#10;</xsl:text>
171         <xsl:text>\begin{tabular*}{\linewidth}{</xsl:text>
172         <xsl:call-template name="tabular.string">
173             <xsl:with-param name="cols" select="$cols"/>
174         </xsl:call-template>
175         <xsl:text>} </xsl:text> 
176         <xsl:call-template name="simplelist.horiz">
177             <xsl:with-param name="cols" select="$cols"/>
178         </xsl:call-template>
179         <xsl:text>&#10;\end{tabular*}&#10;</xsl:text>
180     </xsl:template>
181
182
183
184
185     <xsl:template name="simplelist.horiz">
186         <xsl:param name="cols">1</xsl:param>
187         <xsl:param name="cell">1</xsl:param>
188         <xsl:param name="members" select="./member"/>
189         <xsl:if test="$cell &lt;= count($members)">
190             <xsl:text>&#10;</xsl:text> 
191             <xsl:call-template name="simplelist.horiz.row">
192                 <xsl:with-param name="cols" select="$cols"/>
193                 <xsl:with-param name="cell" select="$cell"/>
194                 <xsl:with-param name="members" select="$members"/>
195             </xsl:call-template>
196             <xsl:text> \\</xsl:text> 
197             <xsl:call-template name="simplelist.horiz">
198                 <xsl:with-param name="cols" select="$cols"/>
199                 <xsl:with-param name="cell" select="$cell + $cols"/>
200                 <xsl:with-param name="members" select="$members"/>
201             </xsl:call-template>
202         </xsl:if>
203     </xsl:template>
204
205     <xsl:template name="simplelist.horiz.row">
206         <xsl:param name="cols">1</xsl:param>
207         <xsl:param name="cell">1</xsl:param>
208         <xsl:param name="members" select="./member"/>
209         <xsl:param name="curcol">1</xsl:param>
210         <xsl:if test="$curcol &lt;= $cols">
211             <xsl:choose>
212                 <xsl:when test="$members[position()=$cell]">
213                     <xsl:apply-templates select="$members[position()=$cell]"/>
214                     <xsl:text> </xsl:text> 
215                     <xsl:if test="$curcol &lt; $cols">
216                         <xsl:call-template name="generate.latex.cell.separator"/>
217                     </xsl:if>
218                 </xsl:when>
219             </xsl:choose>
220             <xsl:call-template name="simplelist.horiz.row">
221                 <xsl:with-param name="cols" select="$cols"/>
222                 <xsl:with-param name="cell" select="$cell+1"/>
223                 <xsl:with-param name="members" select="$members"/>
224                 <xsl:with-param name="curcol" select="$curcol+1"/>
225             </xsl:call-template>
226         </xsl:if>
227     </xsl:template>
228
229
230
231
232
233
234
235
236
237
238
239     <xsl:template match="simplelist|simplelist[@type='vert']">
240         <xsl:variable name="cols">
241             <xsl:choose>
242                 <xsl:when test="@columns">
243                     <xsl:value-of select="@columns"/>
244                 </xsl:when>
245                 <xsl:otherwise>1</xsl:otherwise>
246             </xsl:choose>
247         </xsl:variable>
248         <xsl:text>&#10;</xsl:text>
249         <!--<xsl:text>\vspace{1cm}&#10;</xsl:text>-->
250         <xsl:text>\begin{tabular*}{\linewidth}{</xsl:text>
251         <xsl:call-template name="tabular.string">
252             <xsl:with-param name="i" select="1"/>
253             <xsl:with-param name="cols" select="$cols"/>
254         </xsl:call-template>
255         <xsl:text>}</xsl:text> 
256         <xsl:call-template name="simplelist.vert">
257             <xsl:with-param name="cols" select="$cols"/>
258         </xsl:call-template>
259         <xsl:text>&#10;\end{tabular*}&#10;</xsl:text>
260         <!--<xsl:text>\vspace{1cm}&#10;</xsl:text>-->
261     </xsl:template>
262
263
264
265     <xsl:template name="simplelist.vert">
266         <xsl:param name="cols">1</xsl:param>
267         <xsl:param name="cell">1</xsl:param>
268         <xsl:param name="members" select="./member"/>
269         <xsl:param name="rows" select="floor((count($members)+$cols - 1) div $cols)"/>
270         <xsl:if test="$cell &lt;= $rows">
271             <xsl:text>&#10;</xsl:text> 
272             <xsl:call-template name="simplelist.vert.row">
273                 <xsl:with-param name="cols" select="$cols"/>
274                 <xsl:with-param name="rows" select="$rows"/>
275                 <xsl:with-param name="cell" select="$cell"/>
276                 <xsl:with-param name="members" select="$members"/>
277             </xsl:call-template>
278             <xsl:text> \\</xsl:text> 
279             <xsl:call-template name="simplelist.vert">
280                 <xsl:with-param name="cols" select="$cols"/>
281                 <xsl:with-param name="cell" select="$cell+1"/>
282                 <xsl:with-param name="members" select="$members"/>
283                 <xsl:with-param name="rows" select="$rows"/>
284             </xsl:call-template>
285         </xsl:if>
286     </xsl:template>
287
288
289
290     <xsl:template name="simplelist.vert.row">
291         <xsl:param name="cols">1</xsl:param>
292         <xsl:param name="rows">1</xsl:param>
293         <xsl:param name="cell">1</xsl:param>
294         <xsl:param name="members" select="./member"/>
295         <xsl:param name="curcol">1</xsl:param>
296         <xsl:if test="$curcol &lt;= $cols">
297             <xsl:choose>
298                 <xsl:when test="$members[position()=$cell]">
299                     <xsl:apply-templates select="$members[position()=$cell]"/>
300                     <xsl:text> </xsl:text> 
301                     <xsl:if test="$curcol &lt; $cols">
302                         <xsl:call-template name="generate.latex.cell.separator"/>
303                     </xsl:if>
304                 </xsl:when>
305                 <xsl:otherwise>
306                 </xsl:otherwise>
307             </xsl:choose>
308             <xsl:call-template name="simplelist.vert.row">
309                 <xsl:with-param name="cols" select="$cols"/>
310                 <xsl:with-param name="rows" select="$rows"/>
311                 <xsl:with-param name="cell" select="$cell+$rows"/>
312                 <xsl:with-param name="members" select="$members"/>
313                 <xsl:with-param name="curcol" select="$curcol+1"/>
314             </xsl:call-template>
315         </xsl:if>
316     </xsl:template>
317
318
319     <xsl:template match="member">
320         <xsl:apply-templates/>
321     </xsl:template>
322
323
324
325
326     <xsl:template match="segmentedlist">
327         <xsl:apply-templates/>
328     </xsl:template>
329
330     <xsl:template match="segmentedlist/title">
331         <xsl:text>&#10;{\sc </xsl:text>
332         <xsl:apply-templates/>
333         <xsl:text>} \\&#10;</xsl:text>
334     </xsl:template>
335
336     <xsl:template match="segtitle">
337     </xsl:template>
338
339     <xsl:template match="segtitle" mode="segtitle-in-seg">
340         <xsl:apply-templates/>
341     </xsl:template>
342
343     <xsl:template match="seglistitem">
344         <xsl:apply-templates/>
345         <xsl:choose>
346                 <xsl:when test="position()=last()"><xsl:text>&#10;&#10;</xsl:text></xsl:when>
347                 <xsl:otherwise><xsl:text> \\&#10;</xsl:text></xsl:otherwise>
348         </xsl:choose>
349     </xsl:template>
350
351
352
353
354     <xsl:template match="seg">
355         <xsl:variable name="segnum" select="position()"/>
356         <xsl:variable name="seglist" select="ancestor::segmentedlist"/>
357         <xsl:variable name="segtitles" select="$seglist/segtitle"/>
358
359         <!--
360         Note: segtitle is only going to be the right thing in a well formed
361         SegmentedList.  If there are too many Segs or too few SegTitles,
362         you'll get something odd...maybe an error
363         -->
364
365         <xsl:text>{ \em </xsl:text>
366         <xsl:apply-templates select="$segtitles[$segnum=position()]" mode="segtitle-in-seg"/>
367         <xsl:text>:} </xsl:text>
368         <xsl:apply-templates/>
369     </xsl:template>
370
371
372
373
374
375
376
377
378
379
380     <!-- ==================================================================== -->
381
382     <xsl:template match="calloutlist">
383         <xsl:if test="./title">
384             <xsl:apply-templates select="./title" mode="calloutlist.title.mode"/>
385         </xsl:if>
386         <xsl:apply-templates/>
387     </xsl:template>
388
389     <xsl:template match="calloutlist/title">
390     </xsl:template>
391
392     <xsl:template match="calloutlist/title" mode="calloutlist.title.mode">
393         <xsl:apply-templates/>
394     </xsl:template>
395
396     <xsl:template match="callout">
397         <dt>
398             <xsl:call-template name="callout.arearefs">
399                 <xsl:with-param name="arearefs" select="@arearefs"/>
400             </xsl:call-template>
401         </dt>
402         <dl><xsl:apply-templates/></dl>
403     </xsl:template>
404
405     <xsl:template name="callout.arearefs">
406         <xsl:param name="arearefs"></xsl:param>
407         <xsl:if test="$arearefs!=''">
408             <xsl:choose>
409                 <xsl:when test="substring-before($arearefs,' ')=''">
410                     <xsl:call-template name="callout.arearef">
411                         <xsl:with-param name="arearef" select="$arearefs"/>
412                     </xsl:call-template>
413                 </xsl:when>
414                 <xsl:otherwise>
415                     <xsl:call-template name="callout.arearef">
416                         <xsl:with-param name="arearef"
417                             select="substring-before($arearefs,' ')"/>
418                     </xsl:call-template>
419                 </xsl:otherwise>
420             </xsl:choose>
421             <xsl:call-template name="callout.arearefs">
422                 <xsl:with-param name="arearefs"
423                     select="substring-after($arearefs,' ')"/>
424             </xsl:call-template>
425         </xsl:if>
426     </xsl:template>
427
428
429
430
431
432     <xsl:template name="callout.arearef">
433         <xsl:param name="arearef"></xsl:param>
434         <xsl:variable name="targets" select="//node()[@id=$arearef]"/>
435         <xsl:variable name="target" select="$targets[1]"/>
436         <xsl:choose>
437             <xsl:when test="count($target)=0">
438                 <xsl:value-of select="$arearef"/>
439                 <xsl:text>callout ???</xsl:text>
440             </xsl:when>
441             <xsl:when test="local-name($target)='co'">
442                 <!-- FIXME -->
443                 <xsl:text>\href{ </xsl:text>
444                 <xsl:value-of select="$target/@id"/> 
445                 <xsl:text>}{</xsl:text>
446                 <xsl:value-of select="$target/@id"/><xsl:text>} </xsl:text>
447             </xsl:when>
448             <xsl:otherwise>
449                 <xsl:text>callout ???</xsl:text>
450             </xsl:otherwise>
451         </xsl:choose>
452     </xsl:template>
453
454
455 </xsl:stylesheet>