source: BOOK/stylesheets/lfs-xsl/docbook-xsl-snapshot/fo/glossary.xsl @ f8c4e94

clfs-1.2clfs-2.1clfs-3.0.0-systemdclfs-3.0.0-sysvinitsystemdsysvinit
Last change on this file since f8c4e94 was f8c4e94, checked in by Manuel Canales Esparcia <manuel@…>, 17 years ago

Added LFS XSL Stylesheets.

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