root/docs/docbook-xsl/fo/glossary.xsl

Revision 23dea7e00df87480acb58bb3398283c2bb227949, 34.0 kB (checked in by Theo Schlossnagle <jesus@omniti.com>, 3 years ago)

pull docs into master

  • Property mode set to 100644
Line 
1 <?xml version='1.0'?>
2 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3                 xmlns:fo="http://www.w3.org/1999/XSL/Format"
4                 version='1.0'>
5
6 <!-- ********************************************************************
7      $Id: glossary.xsl,v 1.30 2005/05/13 17:17:00 bobstayton Exp $
8      ********************************************************************
9
10      This file is part of the XSL DocBook Stylesheet distribution.
11      See ../README or http://nwalsh.com/docbook/xsl/ for copyright
12      and other information.
13
14      ******************************************************************** -->
15
16 <!-- ==================================================================== -->
17
18 <xsl:template match="glossary">
19   <xsl:call-template name="make-glossary"/>
20 </xsl:template>
21
22 <xsl:template match="glossdiv/title"/>
23 <xsl:template match="glossdiv/subtitle"/>
24 <xsl:template match="glossdiv/titleabbrev"/>
25
26 <!-- ==================================================================== -->
27
28 <xsl:template name="make-glossary">
29   <xsl:param name="divs" select="glossdiv"/>
30   <xsl:param name="entries" select="glossentry"/>
31   <xsl:param name="preamble" select="*[not(self::title
32                                            or self::subtitle
33                                            or self::glossdiv
34                                            or self::glossentry)]"/>
35
36   <xsl:variable name="id">
37     <xsl:call-template name="object.id"/>
38   </xsl:variable>
39
40   <xsl:variable name="presentation">
41     <xsl:call-template name="dbfo-attribute">
42       <xsl:with-param name="pis"
43                       select="processing-instruction('dbfo')"/>
44       <xsl:with-param name="attribute" select="'glossary-presentation'"/>
45     </xsl:call-template>
46   </xsl:variable>
47
48   <xsl:variable name="term-width">
49     <xsl:call-template name="dbfo-attribute">
50       <xsl:with-param name="pis"
51                       select="processing-instruction('dbfo')"/>
52       <xsl:with-param name="attribute" select="'glossterm-width'"/>
53     </xsl:call-template>
54   </xsl:variable>
55
56   <xsl:variable name="width">
57     <xsl:choose>
58       <xsl:when test="$term-width = ''">
59         <xsl:value-of select="$glossterm.width"/>
60       </xsl:when>
61       <xsl:otherwise>
62         <xsl:value-of select="$term-width"/>
63       </xsl:otherwise>
64     </xsl:choose>
65   </xsl:variable>
66
67   <fo:block id="{$id}">
68     <xsl:call-template name="glossary.titlepage"/>
69   </fo:block>
70
71   <xsl:if test="$preamble">
72     <xsl:apply-templates select="$preamble"/>
73   </xsl:if>
74
75   <xsl:choose>
76     <xsl:when test="$presentation = 'list'">
77       <xsl:apply-templates select="$divs" mode="glossary.as.list">
78         <xsl:with-param name="width" select="$width"/>
79       </xsl:apply-templates>
80       <xsl:if test="$entries">
81         <fo:list-block provisional-distance-between-starts="{$width}"
82                        provisional-label-separation="{$glossterm.separation}"
83                        xsl:use-attribute-sets="normal.para.spacing">
84           <xsl:apply-templates select="$entries" mode="glossary.as.list"/>
85         </fo:list-block>
86       </xsl:if>
87     </xsl:when>
88     <xsl:when test="$presentation = 'blocks'">
89       <xsl:apply-templates select="$divs" mode="glossary.as.blocks"/>
90       <xsl:apply-templates select="$entries" mode="glossary.as.blocks"/>
91     </xsl:when>
92     <xsl:when test="$glossary.as.blocks != 0">
93       <xsl:apply-templates select="$divs" mode="glossary.as.blocks"/>
94       <xsl:apply-templates select="$entries" mode="glossary.as.blocks"/>
95     </xsl:when>
96     <xsl:otherwise>
97       <xsl:apply-templates select="$divs" mode="glossary.as.list">
98         <xsl:with-param name="width" select="$width"/>
99       </xsl:apply-templates>
100       <xsl:if test="$entries">
101         <fo:list-block provisional-distance-between-starts="{$width}"
102                        provisional-label-separation="{$glossterm.separation}"
103                        xsl:use-attribute-sets="normal.para.spacing">
104           <xsl:apply-templates select="$entries" mode="glossary.as.list"/>
105         </fo:list-block>
106       </xsl:if>
107     </xsl:otherwise>
108   </xsl:choose>
109 </xsl:template>
110
111 <xsl:template match="book/glossary|part/glossary|/glossary" priority="2">
112   <xsl:variable name="id">
113     <xsl:call-template name="object.id"/>
114   </xsl:variable>
115
116   <xsl:variable name="master-reference">
117     <xsl:call-template name="select.pagemaster"/>
118   </xsl:variable>
119
120   <fo:page-sequence hyphenate="{$hyphenate}"
121                     master-reference="{$master-reference}">
122     <xsl:attribute name="language">
123       <xsl:call-template name="l10n.language"/>
124     </xsl:attribute>
125     <xsl:attribute name="format">
126       <xsl:call-template name="page.number.format">
127         <xsl:with-param name="master-reference" select="$master-reference"/>
128       </xsl:call-template>
129     </xsl:attribute>
130    
131     <xsl:attribute name="initial-page-number">
132       <xsl:call-template name="initial.page.number">
133         <xsl:with-param name="master-reference" select="$master-reference"/>
134       </xsl:call-template>
135     </xsl:attribute>
136
137     <xsl:attribute name="force-page-count">
138       <xsl:call-template name="force.page.count">
139         <xsl:with-param name="master-reference" select="$master-reference"/>
140       </xsl:call-template>
141     </xsl:attribute>
142
143     <xsl:attribute name="hyphenation-character">
144       <xsl:call-template name="gentext">
145         <xsl:with-param name="key" select="'hyphenation-character'"/>
146       </xsl:call-template>
147     </xsl:attribute>
148     <xsl:attribute name="hyphenation-push-character-count">
149       <xsl:call-template name="gentext">
150         <xsl:with-param name="key" select="'hyphenation-push-character-count'"/>
151       </xsl:call-template>
152     </xsl:attribute>
153     <xsl:attribute name="hyphenation-remain-character-count">
154       <xsl:call-template name="gentext">
155         <xsl:with-param name="key" select="'hyphenation-remain-character-count'"/>
156       </xsl:call-template>
157     </xsl:attribute>
158
159     <xsl:apply-templates select="." mode="running.head.mode">
160       <xsl:with-param name="master-reference" select="$master-reference"/>
161     </xsl:apply-templates>
162     <xsl:apply-templates select="." mode="running.foot.mode">
163       <xsl:with-param name="master-reference" select="$master-reference"/>
164     </xsl:apply-templates>
165
166     <fo:flow flow-name="xsl-region-body">
167       <xsl:call-template name="set.flow.properties">
168         <xsl:with-param name="element" select="local-name(.)"/>
169         <xsl:with-param name="master-reference" select="$master-reference"/>
170       </xsl:call-template>
171
172       <xsl:call-template name="make-glossary"/>
173     </fo:flow>
174   </fo:page-sequence>
175 </xsl:template>
176
177 <xsl:template match="glossary/glossaryinfo"></xsl:template>
178 <xsl:template match="glossary/title"></xsl:template>
179 <xsl:template match="glossary/subtitle"></xsl:template>
180 <xsl:template match="glossary/titleabbrev"></xsl:template>
181
182 <!-- ==================================================================== -->
183
184 <xsl:template match="glosslist">
185   <xsl:variable name="presentation">
186     <xsl:call-template name="dbfo-attribute">
187       <xsl:with-param name="pis"
188                       select="processing-instruction('dbfo')"/>
189       <xsl:with-param name="attribute" select="'glosslist-presentation'"/>
190     </xsl:call-template>
191   </xsl:variable>
192
193   <xsl:variable name="term-width">
194     <xsl:call-template name="dbfo-attribute">
195       <xsl:with-param name="pis"
196                       select="processing-instruction('dbfo')"/>
197       <xsl:with-param name="attribute" select="'glossterm-width'"/>
198     </xsl:call-template>
199   </xsl:variable>
200
201   <xsl:variable name="width">
202     <xsl:choose>
203       <xsl:when test="$term-width = ''">
204         <xsl:value-of select="$glossterm.width"/>
205       </xsl:when>
206       <xsl:otherwise>
207         <xsl:value-of select="$term-width"/>
208       </xsl:otherwise>
209     </xsl:choose>
210   </xsl:variable>
211
212   <xsl:if test="title">
213     <xsl:apply-templates select="title" mode="list.title.mode"/>
214   </xsl:if>
215
216   <xsl:choose>
217     <xsl:when test="$presentation = 'list'">
218       <fo:list-block provisional-distance-between-starts="{$width}"
219                      provisional-label-separation="{$glossterm.separation}"
220                      xsl:use-attribute-sets="normal.para.spacing">
221         <xsl:apply-templates mode="glossary.as.list" select="glossentry"/>
222       </fo:list-block>
223     </xsl:when>
224     <xsl:when test="$presentation = 'blocks'">
225       <xsl:apply-templates mode="glossary.as.blocks" select="glossentry"/>
226     </xsl:when>
227     <xsl:when test="$glosslist.as.blocks != 0">
228       <xsl:apply-templates mode="glossary.as.blocks" select="glossentry"/>
229     </xsl:when>
230     <xsl:otherwise>
231       <fo:list-block provisional-distance-between-starts="{$width}"
232                      provisional-label-separation="{$glossterm.separation}"
233                      xsl:use-attribute-sets="normal.para.spacing">
234         <xsl:apply-templates mode="glossary.as.list" select="glossentry"/>
235       </fo:list-block>
236     </xsl:otherwise>
237   </xsl:choose>
238 </xsl:template>
239
240 <!-- ==================================================================== -->
241 <!-- Glossary collection -->
242
243 <xsl:template match="glossary[@role='auto']" priority="2">
244   <xsl:variable name="collection" select="document($glossary.collection, .)"/>
245   <xsl:if test="$glossary.collection = ''">
246     <xsl:message>
247       <xsl:text>Warning: processing automatic glossary </xsl:text>
248       <xsl:text>without a glossary.collection file.</xsl:text>
249     </xsl:message>
250   </xsl:if>
251
252   <xsl:if test="not($collection) and $glossary.collection != ''">
253     <xsl:message>
254       <xsl:text>Warning: processing automatic glossary but unable to </xsl:text>
255       <xsl:text>open glossary.collection file '</xsl:text>
256       <xsl:value-of select="$glossary.collection"/>
257       <xsl:text>'</xsl:text>
258     </xsl:message>
259   </xsl:if>
260
261   <xsl:call-template name="make-auto-glossary"/>
262 </xsl:template>
263
264 <xsl:template name="make-auto-glossary">
265   <xsl:param name="collection" select="document($glossary.collection, .)"/>
266   <xsl:param name="terms" select="//glossterm[not(parent::glossdef)]|//firstterm"/>
267   <xsl:param name="preamble" select="*[not(self::title
268                                            or self::subtitle
269                                            or self::glossdiv
270                                            or self::glossentry)]"/>
271
272   <xsl:variable name="id">
273     <xsl:call-template name="object.id"/>
274   </xsl:variable>
275
276   <xsl:variable name="presentation">
277     <xsl:call-template name="dbfo-attribute">
278       <xsl:with-param name="pis"
279                       select="processing-instruction('dbfo')"/>
280       <xsl:with-param name="attribute" select="'glossary-presentation'"/>
281     </xsl:call-template>
282   </xsl:variable>
283
284   <xsl:variable name="term-width">
285     <xsl:call-template name="dbfo-attribute">
286       <xsl:with-param name="pis"
287                       select="processing-instruction('dbfo')"/>
288       <xsl:with-param name="attribute" select="'glossterm-width'"/>
289     </xsl:call-template>
290   </xsl:variable>
291
292   <xsl:variable name="width">
293     <xsl:choose>
294       <xsl:when test="$term-width = ''">
295         <xsl:value-of select="$glossterm.width"/>
296       </xsl:when>
297       <xsl:otherwise>
298         <xsl:value-of select="$term-width"/>
299       </xsl:otherwise>
300     </xsl:choose>
301   </xsl:variable>
302
303   <xsl:if test="$glossary.collection = ''">
304     <xsl:message>
305       <xsl:text>Warning: processing automatic glossary </xsl:text>
306       <xsl:text>without a glossary.collection file.</xsl:text>
307     </xsl:message>
308   </xsl:if>
309
310   <fo:block id="{$id}">
311     <xsl:call-template name="glossary.titlepage"/>
312   </fo:block>
313
314   <xsl:if test="$preamble">
315     <xsl:apply-templates select="$preamble"/>
316   </xsl:if>
317
318   <xsl:choose>
319     <xsl:when test="glossdiv and $collection//glossdiv">
320       <xsl:for-each select="$collection//glossdiv">
321         <!-- first see if there are any in this div -->
322         <xsl:variable name="exist.test">
323           <xsl:for-each select="glossentry">
324             <xsl:variable name="cterm" select="glossterm"/>
325             <xsl:if test="$terms[@baseform = $cterm or . = $cterm]">
326               <xsl:value-of select="glossterm"/>
327             </xsl:if>
328           </xsl:for-each>
329         </xsl:variable>
330
331         <xsl:if test="$exist.test != ''">
332           <xsl:choose>
333             <xsl:when test="$presentation = 'list'">
334               <xsl:apply-templates select="." mode="auto-glossary-as-list">
335                 <xsl:with-param name="width" select="$width"/>
336                 <xsl:with-param name="terms" select="$terms"/>
337               </xsl:apply-templates>
338             </xsl:when>
339             <xsl:when test="$presentation = 'blocks'">
340               <xsl:apply-templates select="." mode="auto-glossary-as-blocks">
341                 <xsl:with-param name="terms" select="$terms"/>
342               </xsl:apply-templates>
343             </xsl:when>
344             <xsl:when test="$glossary.as.blocks != 0">
345               <xsl:apply-templates select="." mode="auto-glossary-as-blocks">
346                 <xsl:with-param name="terms" select="$terms"/>
347               </xsl:apply-templates>
348             </xsl:when>
349             <xsl:otherwise>
350               <xsl:apply-templates select="." mode="auto-glossary-as-list">
351                 <xsl:with-param name="width" select="$width"/>
352                 <xsl:with-param name="terms" select="$terms"/>
353               </xsl:apply-templates>
354             </xsl:otherwise>
355           </xsl:choose>
356         </xsl:if>
357       </xsl:for-each>
358     </xsl:when>
359     <xsl:otherwise>
360       <xsl:choose>
361         <xsl:when test="$presentation = 'list'">
362           <fo:list-block provisional-distance-between-starts="{$width}"
363                          provisional-label-separation="{$glossterm.separation}"
364                          xsl:use-attribute-sets="normal.para.spacing">
365             <xsl:for-each select="$collection//glossentry">
366               <xsl:variable name="cterm" select="glossterm"/>
367               <xsl:if test="$terms[@baseform = $cterm or . = $cterm]">
368                 <xsl:apply-templates select="." mode="auto-glossary-as-list"/>
369               </xsl:if>
370             </xsl:for-each>
371           </fo:list-block>
372         </xsl:when>
373         <xsl:when test="$presentation = 'blocks'">
374           <xsl:for-each select="$collection//glossentry">
375             <xsl:variable name="cterm" select="glossterm"/>
376             <xsl:if test="$terms[@baseform = $cterm or . = $cterm]">
377               <xsl:apply-templates select="." mode="auto-glossary-as-blocks"/>
378             </xsl:if>
379           </xsl:for-each>
380         </xsl:when>
381         <xsl:when test="$glossary.as.blocks != 0">
382           <xsl:for-each select="$collection//glossentry">
383             <xsl:variable name="cterm" select="glossterm"/>
384             <xsl:if test="$terms[@baseform = $cterm or . = $cterm]">
385               <xsl:apply-templates select="." mode="auto-glossary-as-blocks"/>
386             </xsl:if>
387           </xsl:for-each>
388         </xsl:when>
389         <xsl:otherwise>
390           <fo:list-block provisional-distance-between-starts="{$width}"
391                          provisional-label-separation="{$glossterm.separation}"
392                          xsl:use-attribute-sets="normal.para.spacing">
393             <xsl:for-each select="$collection//glossentry">
394               <xsl:variable name="cterm" select="glossterm"/>
395               <xsl:if test="$terms[@baseform = $cterm or . = $cterm]">
396                 <xsl:apply-templates select="." mode="auto-glossary-as-list"/>
397               </xsl:if>
398             </xsl:for-each>
399           </fo:list-block>
400         </xsl:otherwise>
401       </xsl:choose>
402     </xsl:otherwise>
403   </xsl:choose>
404 </xsl:template>
405
406 <xsl:template match="book/glossary[@role='auto']|/glossary[@role='auto']" priority="2.5">
407   <xsl:variable name="id"><xsl:call-template name="object.id"/></xsl:variable>
408
409   <xsl:variable name="master-reference">
410     <xsl:call-template name="select.pagemaster"/>
411   </xsl:variable>
412
413   <xsl:if test="$glossary.collection = ''">
414     <xsl:message>
415       <xsl:text>Warning: processing automatic glossary </xsl:text>
416       <xsl:text>without a glossary.collection file.</xsl:text>
417     </xsl:message>
418   </xsl:if>
419
420   <fo:page-sequence hyphenate="{$hyphenate}"
421                     master-reference="{$master-reference}">
422     <xsl:attribute name="language">
423       <xsl:call-template name="l10n.language"/>
424     </xsl:attribute>
425     <xsl:attribute name="format">
426       <xsl:call-template name="page.number.format">
427         <xsl:with-param name="master-reference" select="$master-reference"/>
428       </xsl:call-template>
429     </xsl:attribute>
430
431     <xsl:attribute name="initial-page-number">
432       <xsl:call-template name="initial.page.number">
433         <xsl:with-param name="master-reference" select="$master-reference"/>
434       </xsl:call-template>
435     </xsl:attribute>
436
437     <xsl:attribute name="force-page-count">
438       <xsl:call-template name="force.page.count">
439         <xsl:with-param name="master-reference" select="$master-reference"/>
440       </xsl:call-template>
441     </xsl:attribute>
442
443     <xsl:attribute name="hyphenation-character">
444       <xsl:call-template name="gentext">
445         <xsl:with-param name="key" select="'hyphenation-character'"/>
446       </xsl:call-template>
447     </xsl:attribute>
448     <xsl:attribute name="hyphenation-push-character-count">
449       <xsl:call-template name="gentext">
450         <xsl:with-param name="key" select="'hyphenation-push-character-count'"/>
451       </xsl:call-template>
452     </xsl:attribute>
453     <xsl:attribute name="hyphenation-remain-character-count">
454       <xsl:call-template name="gentext">
455         <xsl:with-param name="key" select="'hyphenation-remain-character-count'"/>
456       </xsl:call-template>
457     </xsl:attribute>
458
459     <xsl:apply-templates select="." mode="running.head.mode">
460       <xsl:with-param name="master-reference" select="$master-reference"/>
461     </xsl:apply-templates>
462     <xsl:apply-templates select="." mode="running.foot.mode">
463       <xsl:with-param name="master-reference" select="$master-reference"/>
464     </xsl:apply-templates>
465
466     <fo:flow flow-name="xsl-region-body">
467       <xsl:call-template name="set.flow.properties">
468         <xsl:with-param name="element" select="local-name(.)"/>
469         <xsl:with-param name="master-reference" select="$master-reference"/>
470       </xsl:call-template>
471
472       <xsl:call-template name="make-auto-glossary"/>
473     </fo:flow>
474   </fo:page-sequence>
475 </xsl:template>
476
477 <xsl:template match="glossdiv" mode="auto-glossary-as-list">
478   <xsl:param name="width" select="$glossterm.width"/>
479   <xsl:param name="terms" select="."/>
480
481   <xsl:variable name="preamble"
482                 select="*[not(self::title
483                             or self::subtitle
484                             or self::glossentry)]"/>
485
486   <xsl:call-template name="glossdiv.titlepage"/>
487
488   <xsl:apply-templates select="$preamble"/>
489
490   <fo:list-block provisional-distance-between-starts="{$width}"
491                  provisional-label-separation="{$glossterm.separation}"
492                  xsl:use-attribute-sets="normal.para.spacing">
493     <xsl:for-each select="glossentry">
494       <xsl:variable name="cterm" select="glossterm"/>
495       <xsl:if test="$terms[@baseform = $cterm or . = $cterm]">
496         <xsl:apply-templates select="." mode="auto-glossary-as-list"/>
497       </xsl:if>
498     </xsl:for-each>
499   </fo:list-block>
500 </xsl:template>
501
502 <xsl:template match="glossentry" mode="auto-glossary-as-list">
503   <xsl:apply-templates select="." mode="glossary.as.list"/>
504 </xsl:template>
505
506 <xsl:template match="glossdiv" mode="auto-glossary-as-blocks">
507   <xsl:param name="terms" select="."/>
508
509   <xsl:variable name="preamble"
510                 select="*[not(self::title
511                             or self::subtitle
512                             or self::glossentry)]"/>
513
514   <xsl:call-template name="glossdiv.titlepage"/>
515
516   <xsl:apply-templates select="$preamble"/>
517
518   <xsl:for-each select="glossentry">
519     <xsl:variable name="cterm" select="glossterm"/>
520     <xsl:if test="$terms[@baseform = $cterm or . = $cterm]">
521       <xsl:apply-templates select="." mode="auto-glossary-as-blocks"/>
522     </xsl:if>
523   </xsl:for-each>
524 </xsl:template>
525
526 <xsl:template match="glossentry" mode="auto-glossary-as-blocks">
527   <xsl:apply-templates select="." mode="glossary.as.blocks"/>
528 </xsl:template>
529
530 <!-- ==================================================================== -->
531 <!-- Format glossary as a list -->
532
533 <xsl:template match="glossdiv" mode="glossary.as.list">
534   <xsl:param name="width" select="$glossterm.width"/>
535
536   <xsl:variable name="entries" select="glossentry"/>
537   <xsl:variable name="preamble"
538                 select="*[not(self::title
539                             or self::subtitle
540                             or self::glossentry)]"/>
541
542   <xsl:call-template name="glossdiv.titlepage"/>
543
544   <xsl:apply-templates select="$preamble"/>
545
546   <fo:list-block provisional-distance-between-starts="{$width}"
547                  provisional-label-separation="{$glossterm.separation}"
548                  xsl:use-attribute-sets="normal.para.spacing">
549     <xsl:apply-templates select="$entries" mode="glossary.as.list"/>
550   </fo:list-block>
551 </xsl:template>
552
553 <!--
554 GlossEntry ::=
555   GlossTerm, Acronym?, Abbrev?,
556   (IndexTerm)*,
557   RevHistory?,
558   (GlossSee | GlossDef+)
559 -->
560
561 <xsl:template match="glossentry" mode="glossary.as.list">
562   <xsl:variable name="id">
563     <xsl:call-template name="object.id"/>
564   </xsl:variable>
565
566   <fo:list-item xsl:use-attribute-sets="normal.para.spacing">
567     <xsl:call-template name="anchor">
568       <xsl:with-param name="conditional">
569         <xsl:choose>
570           <xsl:when test="$glossterm.auto.link != 0
571                           or $glossary.collection != ''">0</xsl:when>
572           <xsl:otherwise>1</xsl:otherwise>
573         </xsl:choose>
574       </xsl:with-param>
575     </xsl:call-template>
576
577     <fo:list-item-label end-indent="label-end()">
578       <fo:block>
579         <xsl:choose>
580           <xsl:when test="$glossentry.show.acronym = 'primary'">
581             <xsl:choose>
582               <xsl:when test="acronym|abbrev">
583                 <xsl:apply-templates select="acronym|abbrev" mode="glossary.as.list"/>
584                 <xsl:text> (</xsl:text>
585                 <xsl:apply-templates select="glossterm" mode="glossary.as.list"/>
586                 <xsl:text>)</xsl:text>
587               </xsl:when>
588               <xsl:otherwise>
589                 <xsl:apply-templates select="glossterm" mode="glossary.as.list"/>
590               </xsl:otherwise>
591             </xsl:choose>
592           </xsl:when>
593
594           <xsl:when test="$glossentry.show.acronym = 'yes'">
595             <xsl:apply-templates select="glossterm" mode="glossary.as.list"/>
596
597             <xsl:if test="acronym|abbrev">
598               <xsl:text> (</xsl:text>
599               <xsl:apply-templates select="acronym|abbrev" mode="glossary.as.list"/>
600               <xsl:text>)</xsl:text>
601             </xsl:if>
602           </xsl:when>
603
604           <xsl:otherwise>
605             <xsl:apply-templates select="glossterm" mode="glossary.as.list"/>
606           </xsl:otherwise>
607         </xsl:choose>
608         <xsl:apply-templates select="indexterm"/>
609       </fo:block>
610     </fo:list-item-label>
611
612     <fo:list-item-body start-indent="body-start()">
613       <xsl:apply-templates select="glosssee|glossdef" mode="glossary.as.list"/>
614     </fo:list-item-body>
615   </fo:list-item>
616 </xsl:template>
617
618 <xsl:template match="glossentry/glossterm" mode="glossary.as.list">
619   <xsl:variable name="id">
620     <xsl:call-template name="object.id"/>
621   </xsl:variable>
622   <fo:inline id="{$id}">
623     <xsl:apply-templates/>
624   </fo:inline>
625   <xsl:if test="following-sibling::glossterm">, </xsl:if>
626 </xsl:template>
627
628 <xsl:template match="glossentry/acronym" mode="glossary.as.list">
629   <xsl:apply-templates/>
630   <xsl:if test="following-sibling::acronym|following-sibling::abbrev">, </xsl:if>
631 </xsl:template>
632
633 <xsl:template match="glossentry/abbrev" mode="glossary.as.list">
634   <xsl:apply-templates/>
635   <xsl:if test="following-sibling::acronym|following-sibling::abbrev">, </xsl:if>
636 </xsl:template>
637
638 <xsl:template match="glossentry/revhistory" mode="glossary.as.list">
639 </xsl:template>
640
641 <xsl:template match="glossentry/glosssee" mode="glossary.as.list">
642   <xsl:variable name="otherterm" select="@otherterm"/>
643   <xsl:variable name="targets" select="//node()[@id=$otherterm]"/>
644   <xsl:variable name="target" select="$targets[1]"/>
645
646   <fo:block>
647     <xsl:variable name="template">
648       <xsl:call-template name="gentext.template">
649         <xsl:with-param name="context" select="'glossary'"/>
650         <xsl:with-param name="name" select="'see'"/>
651       </xsl:call-template>
652     </xsl:variable>
653     <xsl:variable name="title">
654       <xsl:choose>
655         <xsl:when test="$target">
656           <fo:basic-link internal-destination="{$otherterm}"
657                          xsl:use-attribute-sets="xref.properties">
658             <xsl:apply-templates select="$target" mode="xref-to"/>
659           </fo:basic-link>
660         </xsl:when>
661         <xsl:when test="$otherterm != '' and not($target)">
662           <xsl:message>
663             <xsl:text>Warning: glosssee @otherterm reference not found: </xsl:text>
664             <xsl:value-of select="$otherterm"/>
665           </xsl:message>
666           <xsl:apply-templates mode="glossary.as.list"/>
667         </xsl:when>
668         <xsl:otherwise>
669           <xsl:apply-templates mode="glossary.as.list"/>
670         </xsl:otherwise>
671       </xsl:choose>
672     </xsl:variable>
673     <xsl:call-template name="substitute-markup">
674       <xsl:with-param name="template" select="$template"/>
675       <xsl:with-param name="title" select="$title"/>
676     </xsl:call-template>
677
678     <xsl:text>.</xsl:text>
679   </fo:block>
680 </xsl:template>
681
682 <xsl:template match="glossentry/glossdef" mode="glossary.as.list">
683   <xsl:apply-templates select="*[local-name(.) != 'glossseealso']"/>
684   <xsl:if test="glossseealso">
685     <fo:block>
686       <xsl:variable name="template">
687         <xsl:call-template name="gentext.template">
688           <xsl:with-param name="context" select="'glossary'"/>
689           <xsl:with-param name="name" select="'seealso'"/>
690         </xsl:call-template>
691       </xsl:variable>
692       <xsl:variable name="title">
693         <xsl:apply-templates select="glossseealso" mode="glossary.as.list"/>
694       </xsl:variable>
695       <xsl:call-template name="substitute-markup">
696         <xsl:with-param name="template" select="$template"/>
697         <xsl:with-param name="title" select="$title"/>
698       </xsl:call-template>
699     </fo:block>
700   </xsl:if>
701 </xsl:template>
702
703 <xsl:template match="glossentry/glossdef/para[1]|glossentry/glossdef/simpara[1]"
704               mode="glossary.as.list">
705   <fo:block>
706     <xsl:apply-templates/>
707   </fo:block>
708 </xsl:template>
709
710 <xsl:template match="glossseealso" mode="glossary.as.list">
711   <xsl:variable name="otherterm" select="@otherterm"/>
712   <xsl:variable name="targets" select="//node()[@id=$otherterm]"/>
713   <xsl:variable name="target" select="$targets[1]"/>
714
715   <xsl:choose>
716     <xsl:when test="$target">
717       <fo:basic-link internal-destination="{$otherterm}"
718                      xsl:use-attribute-sets="xref.properties">
719         <xsl:apply-templates select="$target" mode="xref-to"/>
720       </fo:basic-link>
721     </xsl:when>
722     <xsl:when test="$otherterm != '' and not($target)">
723       <xsl:message>
724         <xsl:text>Warning: glossseealso @otherterm reference not found: </xsl:text>
725         <xsl:value-of select="$otherterm"/>
726       </xsl:message>
727       <xsl:apply-templates mode="glossary.as.list"/>
728     </xsl:when>
729     <xsl:otherwise>
730       <xsl:apply-templates mode="glossary.as.list"/>
731     </xsl:otherwise>
732   </xsl:choose>
733
734   <xsl:choose>
735     <xsl:when test="position() = last()">
736       <xsl:text>.</xsl:text>
737     </xsl:when>
738     <xsl:otherwise>
739       <xsl:text>, </xsl:text>
740     </xsl:otherwise>
741   </xsl:choose>
742 </xsl:template>
743
744 <!-- ==================================================================== -->
745 <!-- Format glossary blocks -->
746
747 <xsl:template match="glossdiv" mode="glossary.as.blocks">
748   <xsl:variable name="entries" select="glossentry"/>
749   <xsl:variable name="preamble"
750                 select="*[not(self::title
751                             or self::subtitle
752                             or self::glossentry)]"/>
753
754   <xsl:call-template name="glossdiv.titlepage"/>
755
756   <xsl:apply-templates select="$preamble"/>
757
758   <xsl:apply-templates select="$entries" mode="glossary.as.blocks"/>
759 </xsl:template>
760
761 <!--
762 GlossEntry ::=
763   GlossTerm, Acronym?, Abbrev?,
764   (IndexTerm)*,
765   RevHistory?,
766   (GlossSee | GlossDef+)
767 -->
768
769 <xsl:template match="glossentry" mode="glossary.as.blocks">
770   <xsl:variable name="id">
771     <xsl:call-template name="object.id"/>
772   </xsl:variable>
773
774   <fo:block xsl:use-attribute-sets="list.item.spacing"
775            keep-with-next.within-column="always"
776            keep-together.within-column="always">
777     <xsl:call-template name="anchor">
778       <xsl:with-param name="conditional">
779         <xsl:choose>
780           <xsl:when test="$glossterm.auto.link != 0
781                           or $glossary.collection != ''">0</xsl:when>
782           <xsl:otherwise>1</xsl:otherwise>
783         </xsl:choose>
784       </xsl:with-param>
785     </xsl:call-template>
786
787     <xsl:choose>
788       <xsl:when test="$glossentry.show.acronym = 'primary'">
789         <xsl:choose>
790           <xsl:when test="acronym|abbrev">
791             <xsl:apply-templates select="acronym|abbrev" mode="glossary.as.blocks"/>
792             <xsl:text> (</xsl:text>
793             <xsl:apply-templates select="glossterm" mode="glossary.as.blocks"/>
794             <xsl:text>)</xsl:text>
795           </xsl:when>
796           <xsl:otherwise>
797             <xsl:apply-templates select="glossterm" mode="glossary.as.blocks"/>
798           </xsl:otherwise>
799         </xsl:choose>
800       </xsl:when>
801
802       <xsl:when test="$glossentry.show.acronym = 'yes'">
803         <xsl:apply-templates select="glossterm" mode="glossary.as.blocks"/>
804
805         <xsl:if test="acronym|abbrev">
806           <xsl:text> (</xsl:text>
807           <xsl:apply-templates select="acronym|abbrev" mode="glossary.as.blocks"/>
808           <xsl:text>)</xsl:text>
809         </xsl:if>
810       </xsl:when>
811
812       <xsl:otherwise>
813         <xsl:apply-templates select="glossterm" mode="glossary.as.blocks"/>
814       </xsl:otherwise>
815     </xsl:choose>
816
817     <xsl:apply-templates select="indexterm"/>
818   </fo:block>
819
820   <fo:block margin-left="0.25in">
821     <xsl:apply-templates select="glosssee|glossdef" mode="glossary.as.blocks"/>
822   </fo:block>
823 </xsl:template>
824
825 <xsl:template match="glossentry/glossterm" mode="glossary.as.blocks">
826   <xsl:variable name="id">
827     <xsl:call-template name="object.id"/>
828   </xsl:variable>
829   <fo:inline id="{$id}">
830     <xsl:apply-templates/>
831   </fo:inline>
832   <xsl:if test="following-sibling::glossterm">, </xsl:if>
833 </xsl:template>
834
835 <xsl:template match="glossentry/acronym" mode="glossary.as.blocks">
836   <xsl:apply-templates/>
837   <xsl:if test="following-sibling::acronym|following-sibling::abbrev">, </xsl:if>
838 </xsl:template>
839
840 <xsl:template match="glossentry/abbrev" mode="glossary.as.blocks">
841   <xsl:apply-templates/>
842   <xsl:if test="following-sibling::acronym|following-sibling::abbrev">, </xsl:if>
843 </xsl:template>
844
845 <xsl:template match="glossentry/glosssee" mode="glossary.as.blocks">
846   <xsl:variable name="otherterm" select="@otherterm"/>
847   <xsl:variable name="targets" select="//node()[@id=$otherterm]"/>
848   <xsl:variable name="target" select="$targets[1]"/>
849
850   <xsl:variable name="template">
851     <xsl:call-template name="gentext.template">
852       <xsl:with-param name="context" select="'glossary'"/>
853       <xsl:with-param name="name" select="'see'"/>
854     </xsl:call-template>
855   </xsl:variable>
856   <xsl:variable name="title">
857     <xsl:choose>
858       <xsl:when test="$target">
859         <fo:basic-link internal-destination="{$otherterm}"
860                        xsl:use-attribute-sets="xref.properties">
861           <xsl:apply-templates select="$target" mode="xref-to"/>
862         </fo:basic-link>
863       </xsl:when>
864       <xsl:when test="$otherterm != '' and not($target)">
865         <xsl:message>
866           <xsl:text>Warning: glosssee @otherterm reference not found: </xsl:text>
867           <xsl:value-of select="$otherterm"/>
868         </xsl:message>
869         <xsl:apply-templates mode="glossary.as.blocks"/>
870       </xsl:when>
871       <xsl:otherwise>
872         <xsl:apply-templates mode="glossary.as.blocks"/>
873       </xsl:otherwise>
874     </xsl:choose>
875   </xsl:variable>
876   <xsl:call-template name="substitute-markup">
877     <xsl:with-param name="template" select="$template"/>
878     <xsl:with-param name="title" select="$title"/>
879   </xsl:call-template>
880
881   <xsl:text>.</xsl:text>
882 </xsl:template>
883
884 <xsl:template match="glossentry/glossdef" mode="glossary.as.blocks">
885   <xsl:apply-templates select="*[local-name(.) != 'glossseealso']"
886                        mode="glossary.as.blocks"/>
887   <xsl:if test="glossseealso">
888     <fo:block>
889       <xsl:variable name="template">
890         <xsl:call-template name="gentext.template">
891           <xsl:with-param name="context" select="'glossary'"/>
892           <xsl:with-param name="name" select="'seealso'"/>
893         </xsl:call-template>
894       </xsl:variable>
895       <xsl:variable name="title">
896         <xsl:apply-templates select="glossseealso" mode="glossary.as.blocks"/>
897       </xsl:variable>
898       <xsl:call-template name="substitute-markup">
899         <xsl:with-param name="template" select="$template"/>
900         <xsl:with-param name="title" select="$title"/>
901       </xsl:call-template>
902     </fo:block>
903   </xsl:if>
904 </xsl:template>
905
906 <xsl:template match="glossentry/glossdef/para[1]|glossentry/glossdef/simpara[1]"
907               mode="glossary.as.blocks">
908   <fo:block>
909     <xsl:apply-templates/>
910   </fo:block>
911 </xsl:template>
912
913 <!-- Handle any other glossdef content normally -->
914 <xsl:template match="*" mode="glossary.as.blocks">
915   <xsl:apply-templates select="." />
916 </xsl:template>
917
918 <xsl:template match="glossseealso" mode="glossary.as.blocks">
919   <xsl:variable name="otherterm" select="@otherterm"/>
920   <xsl:variable name="targets" select="//node()[@id=$otherterm]"/>
921   <xsl:variable name="target" select="$targets[1]"/>
922
923   <xsl:choose>
924     <xsl:when test="$target">
925       <fo:basic-link internal-destination="{$otherterm}"
926                      xsl:use-attribute-sets="xref.properties">
927         <xsl:apply-templates select="$target" mode="xref-to"/>
928       </fo:basic-link>
929     </xsl:when>
930     <xsl:when test="$otherterm != '' and not($target)">
931       <xsl:message>
932         <xsl:text>Warning: glossseealso @otherterm reference not found: </xsl:text>
933         <xsl:value-of select="$otherterm"/>
934       </xsl:message>
935       <xsl:apply-templates mode="glossary.as.blocks"/>
936     </xsl:when>
937     <xsl:otherwise>
938       <xsl:apply-templates mode="glossary.as.blocks"/>
939     </xsl:otherwise>
940   </xsl:choose>
941
942   <xsl:choose>
943     <xsl:when test="position() = last()">
944       <xsl:text>.</xsl:text>
945     </xsl:when>
946     <xsl:otherwise>
947       <xsl:text>, </xsl:text>
948     </xsl:otherwise>
949   </xsl:choose>
950 </xsl:template>
951
952 <!-- ==================================================================== -->
953
954 </xsl:stylesheet>
Note: See TracBrowser for help on using the browser.