resetting manifest requested domain to floor
[platform/upstream/docbook-xsl-stylesheets.git] / fo / division.xsl
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                 xmlns:axf="http://www.antennahouse.com/names/XSL/Extensions"
5                 version='1.0'>
6
7 <!-- ********************************************************************
8      $Id: division.xsl 9730 2013-03-15 15:26:25Z bobstayton $
9      ********************************************************************
10
11      This file is part of the XSL DocBook Stylesheet distribution.
12      See ../README or http://docbook.sf.net/release/xsl/current/ for
13      copyright and other information.
14
15      ******************************************************************** -->
16
17 <!-- ==================================================================== -->
18
19 <xsl:template name="division.title">
20   <xsl:param name="node" select="."/>
21   <xsl:variable name="id">
22     <xsl:call-template name="object.id">
23       <xsl:with-param name="object" select="$node"/>
24     </xsl:call-template>
25   </xsl:variable>
26   <xsl:variable name="title">
27     <xsl:apply-templates select="$node" mode="object.title.markup">
28       <xsl:with-param name="allow-anchors" select="1"/>
29     </xsl:apply-templates>
30   </xsl:variable>
31
32   <fo:block keep-with-next.within-column="always"
33             hyphenate="false">
34     <xsl:if test="$axf.extensions != 0">
35       <xsl:attribute name="axf:outline-level">
36         <xsl:choose>
37           <xsl:when test="count($node/ancestor::*) > 0">
38             <xsl:value-of select="count($node/ancestor::*)"/>
39           </xsl:when>
40           <xsl:otherwise>1</xsl:otherwise>
41         </xsl:choose>
42       </xsl:attribute>
43       <xsl:attribute name="axf:outline-expand">false</xsl:attribute>
44       <xsl:attribute name="axf:outline-title">
45         <xsl:value-of select="normalize-space($title)"/>
46       </xsl:attribute>
47     </xsl:if>
48     <xsl:copy-of select="$title"/>
49   </fo:block>
50 </xsl:template>
51
52 <!-- ==================================================================== -->
53
54 <xsl:template match="set">
55   <xsl:variable name="id">
56     <xsl:call-template name="object.id"/>
57   </xsl:variable>
58
59   <xsl:variable name="preamble"
60                 select="*[not(self::book or self::set or self::setindex)]"/>
61
62   <xsl:variable name="content" select="book|set|setindex"/>
63
64   <xsl:variable name="titlepage-master-reference">
65     <xsl:call-template name="select.pagemaster">
66       <xsl:with-param name="pageclass" select="'titlepage'"/>
67     </xsl:call-template>
68   </xsl:variable>
69
70   <xsl:variable name="lot-master-reference">
71     <xsl:call-template name="select.pagemaster">
72       <xsl:with-param name="pageclass" select="'lot'"/>
73     </xsl:call-template>
74   </xsl:variable>
75
76   <xsl:if test="$preamble">
77     <fo:page-sequence hyphenate="{$hyphenate}"
78                       master-reference="{$titlepage-master-reference}">
79       <xsl:attribute name="language">
80         <xsl:call-template name="l10n.language"/>
81       </xsl:attribute>
82       <xsl:attribute name="format">
83         <xsl:call-template name="page.number.format">
84           <xsl:with-param name="master-reference" 
85                           select="$titlepage-master-reference"/>
86         </xsl:call-template>
87       </xsl:attribute>
88
89       <xsl:attribute name="initial-page-number">
90         <xsl:call-template name="initial.page.number">
91           <xsl:with-param name="master-reference" 
92                           select="$titlepage-master-reference"/>
93         </xsl:call-template>
94       </xsl:attribute>
95
96       <xsl:attribute name="force-page-count">
97         <xsl:call-template name="force.page.count">
98           <xsl:with-param name="master-reference" 
99                           select="$titlepage-master-reference"/>
100         </xsl:call-template>
101       </xsl:attribute>
102
103       <xsl:attribute name="hyphenation-character">
104         <xsl:call-template name="gentext">
105           <xsl:with-param name="key" select="'hyphenation-character'"/>
106         </xsl:call-template>
107       </xsl:attribute>
108       <xsl:attribute name="hyphenation-push-character-count">
109         <xsl:call-template name="gentext">
110           <xsl:with-param name="key" select="'hyphenation-push-character-count'"/>
111         </xsl:call-template>
112       </xsl:attribute>
113       <xsl:attribute name="hyphenation-remain-character-count">
114         <xsl:call-template name="gentext">
115           <xsl:with-param name="key" select="'hyphenation-remain-character-count'"/>
116         </xsl:call-template>
117       </xsl:attribute>
118
119       <xsl:apply-templates select="." mode="running.head.mode">
120         <xsl:with-param name="master-reference" select="$titlepage-master-reference"/>
121       </xsl:apply-templates>
122
123       <xsl:apply-templates select="." mode="running.foot.mode">
124         <xsl:with-param name="master-reference" select="$titlepage-master-reference"/>
125       </xsl:apply-templates>
126
127       <fo:flow flow-name="xsl-region-body">
128         <xsl:call-template name="set.flow.properties">
129           <xsl:with-param name="element" select="local-name(.)"/>
130           <xsl:with-param name="master-reference" 
131                           select="$titlepage-master-reference"/>
132         </xsl:call-template>
133
134         <fo:block id="{$id}">
135           <xsl:call-template name="set.titlepage"/>
136         </fo:block>
137       </fo:flow>
138     </fo:page-sequence>
139   </xsl:if>
140
141   <xsl:variable name="toc.params">
142     <xsl:call-template name="find.path.params">
143       <xsl:with-param name="table" select="normalize-space($generate.toc)"/>
144     </xsl:call-template>
145   </xsl:variable>
146
147   <xsl:if test="contains($toc.params, 'toc')">
148     <fo:page-sequence hyphenate="{$hyphenate}"
149                       master-reference="{$lot-master-reference}">
150       <xsl:attribute name="language">
151         <xsl:call-template name="l10n.language"/>
152       </xsl:attribute>
153       <xsl:attribute name="format">
154         <xsl:call-template name="page.number.format">
155           <xsl:with-param name="element" select="'toc'"/>
156           <xsl:with-param name="master-reference"
157                           select="$lot-master-reference"/>
158         </xsl:call-template>
159       </xsl:attribute>
160       <xsl:attribute name="initial-page-number">
161         <xsl:call-template name="initial.page.number">
162           <xsl:with-param name="master-reference"
163                           select="$lot-master-reference"/>
164         </xsl:call-template>
165       </xsl:attribute>
166       <xsl:attribute name="force-page-count">
167         <xsl:call-template name="force.page.count">
168           <xsl:with-param name="master-reference"
169                           select="$lot-master-reference"/>
170         </xsl:call-template>
171       </xsl:attribute>
172
173       <xsl:attribute name="hyphenation-character">
174         <xsl:call-template name="gentext">
175           <xsl:with-param name="key" select="'hyphenation-character'"/>
176         </xsl:call-template>
177       </xsl:attribute>
178       <xsl:attribute name="hyphenation-push-character-count">
179         <xsl:call-template name="gentext">
180           <xsl:with-param name="key" select="'hyphenation-push-character-count'"/>
181         </xsl:call-template>
182       </xsl:attribute>
183       <xsl:attribute name="hyphenation-remain-character-count">
184         <xsl:call-template name="gentext">
185           <xsl:with-param name="key" select="'hyphenation-remain-character-count'"/>
186         </xsl:call-template>
187       </xsl:attribute>
188
189       <xsl:apply-templates select="." mode="running.head.mode">
190         <xsl:with-param name="master-reference" select="$lot-master-reference"/>
191       </xsl:apply-templates>
192
193       <xsl:apply-templates select="." mode="running.foot.mode">
194         <xsl:with-param name="master-reference" select="$lot-master-reference"/>
195       </xsl:apply-templates>
196
197       <fo:flow flow-name="xsl-region-body">
198         <xsl:call-template name="set.flow.properties">
199           <xsl:with-param name="element" select="local-name(.)"/>
200           <xsl:with-param name="master-reference" 
201                           select="$lot-master-reference"/>
202         </xsl:call-template>
203
204         <xsl:call-template name="set.toc"/>
205       </fo:flow>
206     </fo:page-sequence>
207   </xsl:if>
208
209   <xsl:apply-templates select="$content"/>
210 </xsl:template>
211
212 <xsl:template match="set/setinfo"></xsl:template>
213 <xsl:template match="set/title"></xsl:template>
214 <xsl:template match="set/subtitle"></xsl:template>
215 <xsl:template match="set/titleabbrev"></xsl:template>
216
217 <!-- ==================================================================== -->
218
219 <xsl:template match="book">
220   <xsl:variable name="id">
221     <xsl:call-template name="object.id"/>
222   </xsl:variable>
223
224   <xsl:variable name="preamble"
225                 select="title|subtitle|titleabbrev|bookinfo|info"/>
226
227   <xsl:variable name="content"
228                 select="node()[not(self::title or self::subtitle
229                             or self::titleabbrev
230                             or self::info
231                             or self::bookinfo)]"/>
232
233   <xsl:variable name="titlepage-master-reference">
234     <xsl:call-template name="select.pagemaster">
235       <xsl:with-param name="pageclass" select="'titlepage'"/>
236     </xsl:call-template>
237   </xsl:variable>
238
239   <xsl:call-template name="front.cover"/>
240
241   <xsl:if test="$preamble">
242     <xsl:call-template name="page.sequence">
243       <xsl:with-param name="master-reference"
244                       select="$titlepage-master-reference"/>
245       <xsl:with-param name="content">
246         <fo:block id="{$id}">
247           <xsl:call-template name="book.titlepage"/>
248         </fo:block>
249       </xsl:with-param>
250     </xsl:call-template>
251   </xsl:if>
252
253   <xsl:apply-templates select="dedication" mode="dedication"/>
254   <xsl:apply-templates select="acknowledgements" mode="acknowledgements"/>
255
256   <xsl:call-template name="make.book.tocs"/>
257
258   <xsl:apply-templates select="$content"/>
259
260   <xsl:call-template name="back.cover"/>
261
262 </xsl:template>
263
264 <xsl:template match="book/bookinfo"></xsl:template>
265 <xsl:template match="book/info"></xsl:template>
266 <xsl:template match="book/title"></xsl:template>
267 <xsl:template match="book/subtitle"></xsl:template>
268 <xsl:template match="book/titleabbrev"></xsl:template>
269
270 <!-- Placeholder templates -->
271 <xsl:template name="front.cover"/>
272 <xsl:template name="back.cover"/>
273
274 <!-- ================================================================= -->
275 <xsl:template name="make.book.tocs">
276
277   <xsl:variable name="lot-master-reference">
278     <xsl:call-template name="select.pagemaster">
279       <xsl:with-param name="pageclass" select="'lot'"/>
280     </xsl:call-template>
281   </xsl:variable>
282
283   <xsl:variable name="toc.params">
284     <xsl:call-template name="find.path.params">
285       <xsl:with-param name="table" select="normalize-space($generate.toc)"/>
286     </xsl:call-template>
287   </xsl:variable>
288
289   <xsl:if test="contains($toc.params, 'toc')">
290     <xsl:call-template name="page.sequence">
291       <xsl:with-param name="master-reference"
292                       select="$lot-master-reference"/>
293       <xsl:with-param name="element" select="'toc'"/>
294       <xsl:with-param name="gentext-key" select="'TableofContents'"/>
295       <xsl:with-param name="content">
296         <xsl:call-template name="division.toc">
297           <xsl:with-param name="toc.title.p" 
298                           select="contains($toc.params, 'title')"/>
299         </xsl:call-template>
300       </xsl:with-param>
301     </xsl:call-template>
302   </xsl:if>
303
304   <xsl:if test="contains($toc.params,'figure') and .//figure">
305     <xsl:call-template name="page.sequence">
306       <xsl:with-param name="master-reference"
307                       select="$lot-master-reference"/>
308       <xsl:with-param name="element" select="'toc'"/>
309       <xsl:with-param name="gentext-key" select="'ListofFigures'"/>
310       <xsl:with-param name="content">
311         <xsl:call-template name="list.of.titles">
312           <xsl:with-param name="titles" select="'figure'"/>
313           <xsl:with-param name="nodes" select=".//figure"/>
314         </xsl:call-template>
315       </xsl:with-param>
316     </xsl:call-template>
317   </xsl:if>
318
319   <xsl:if test="contains($toc.params,'table') and .//table">
320     <xsl:call-template name="page.sequence">
321       <xsl:with-param name="master-reference"
322                       select="$lot-master-reference"/>
323       <xsl:with-param name="element" select="'toc'"/>
324       <xsl:with-param name="gentext-key" select="'ListofTables'"/>
325       <xsl:with-param name="content">
326         <xsl:call-template name="list.of.titles">
327           <xsl:with-param name="titles" select="'table'"/>
328           <xsl:with-param name="nodes" select=".//table[not(@tocentry = 0)]"/>
329         </xsl:call-template>
330       </xsl:with-param>
331     </xsl:call-template>
332   </xsl:if>
333
334   <xsl:if test="contains($toc.params,'example') and .//example">
335     <xsl:call-template name="page.sequence">
336       <xsl:with-param name="master-reference"
337                       select="$lot-master-reference"/>
338       <xsl:with-param name="element" select="'toc'"/>
339       <xsl:with-param name="gentext-key" select="'ListofExample'"/>
340       <xsl:with-param name="content">
341         <xsl:call-template name="list.of.titles">
342           <xsl:with-param name="titles" select="'example'"/>
343           <xsl:with-param name="nodes" select=".//example"/>
344         </xsl:call-template>
345       </xsl:with-param>
346     </xsl:call-template>
347   </xsl:if>
348
349   <xsl:if test="contains($toc.params,'equation') and 
350                  .//equation[title or info/title]">
351     <xsl:call-template name="page.sequence">
352       <xsl:with-param name="master-reference"
353                       select="$lot-master-reference"/>
354       <xsl:with-param name="element" select="'toc'"/>
355       <xsl:with-param name="gentext-key" select="'ListofEquations'"/>
356       <xsl:with-param name="content">
357         <xsl:call-template name="list.of.titles">
358           <xsl:with-param name="titles" select="'equation'"/>
359           <xsl:with-param name="nodes" 
360                           select=".//equation[title or info/title]"/>
361         </xsl:call-template>
362       </xsl:with-param>
363     </xsl:call-template>
364   </xsl:if>
365
366   <xsl:if test="contains($toc.params,'procedure') and 
367                  .//procedure[title or info/title]">
368     <xsl:call-template name="page.sequence">
369       <xsl:with-param name="master-reference"
370                       select="$lot-master-reference"/>
371       <xsl:with-param name="element" select="'toc'"/>
372       <xsl:with-param name="gentext-key" select="'ListofProcedures'"/>
373       <xsl:with-param name="content">
374         <xsl:call-template name="list.of.titles">
375           <xsl:with-param name="titles" select="'procedure'"/>
376           <xsl:with-param name="nodes" 
377                           select=".//procedure[title or info/title]"/>
378         </xsl:call-template>
379       </xsl:with-param>
380     </xsl:call-template>
381   </xsl:if>
382 </xsl:template>
383 <!-- ==================================================================== -->
384
385 <xsl:template match="part">
386   <xsl:if test="not(partintro)">
387     <xsl:apply-templates select="." mode="part.titlepage.mode"/>
388     <xsl:call-template name="generate.part.toc"/>
389   </xsl:if>
390   <xsl:apply-templates/>
391 </xsl:template>
392
393 <xsl:template match="part" mode="part.titlepage.mode">
394   <!-- done this way to force the context node to be the part -->
395   <xsl:param name="additional.content"/>
396
397   <xsl:variable name="id">
398     <xsl:call-template name="object.id"/>
399   </xsl:variable>
400
401   <xsl:variable name="titlepage-master-reference">
402     <xsl:call-template name="select.pagemaster">
403       <xsl:with-param name="pageclass" select="'titlepage'"/>
404     </xsl:call-template>
405   </xsl:variable>
406
407   <fo:page-sequence hyphenate="{$hyphenate}"
408                     master-reference="{$titlepage-master-reference}">
409     <xsl:attribute name="language">
410       <xsl:call-template name="l10n.language"/>
411     </xsl:attribute>
412     <xsl:attribute name="format">
413       <xsl:call-template name="page.number.format">
414         <xsl:with-param name="master-reference" 
415                         select="$titlepage-master-reference"/>
416       </xsl:call-template>
417     </xsl:attribute>
418
419     <xsl:attribute name="initial-page-number">
420       <xsl:call-template name="initial.page.number">
421         <xsl:with-param name="master-reference" 
422                         select="$titlepage-master-reference"/>
423       </xsl:call-template>
424     </xsl:attribute>
425
426     <xsl:attribute name="force-page-count">
427       <xsl:call-template name="force.page.count">
428         <xsl:with-param name="master-reference" 
429                         select="$titlepage-master-reference"/>
430       </xsl:call-template>
431     </xsl:attribute>
432
433     <xsl:attribute name="hyphenation-character">
434       <xsl:call-template name="gentext">
435         <xsl:with-param name="key" select="'hyphenation-character'"/>
436       </xsl:call-template>
437     </xsl:attribute>
438     <xsl:attribute name="hyphenation-push-character-count">
439       <xsl:call-template name="gentext">
440         <xsl:with-param name="key" select="'hyphenation-push-character-count'"/>
441       </xsl:call-template>
442     </xsl:attribute>
443     <xsl:attribute name="hyphenation-remain-character-count">
444       <xsl:call-template name="gentext">
445         <xsl:with-param name="key" select="'hyphenation-remain-character-count'"/>
446       </xsl:call-template>
447     </xsl:attribute>
448
449     <xsl:apply-templates select="." mode="running.head.mode">
450       <xsl:with-param name="master-reference" select="$titlepage-master-reference"/>
451     </xsl:apply-templates>
452
453     <xsl:apply-templates select="." mode="running.foot.mode">
454       <xsl:with-param name="master-reference" select="$titlepage-master-reference"/>
455     </xsl:apply-templates>
456
457     <fo:flow flow-name="xsl-region-body">
458       <xsl:call-template name="set.flow.properties">
459         <xsl:with-param name="element" select="local-name(.)"/>
460         <xsl:with-param name="master-reference" 
461                         select="$titlepage-master-reference"/>
462       </xsl:call-template>
463
464       <fo:block id="{$id}">
465         <xsl:call-template name="part.titlepage"/>
466       </fo:block>
467       <xsl:copy-of select="$additional.content"/>
468     </fo:flow>
469   </fo:page-sequence>
470 </xsl:template>
471
472 <xsl:template match="part/docinfo|partinfo"></xsl:template>
473 <xsl:template match="part/info"></xsl:template>
474 <xsl:template match="part/title"></xsl:template>
475 <xsl:template match="part/subtitle"></xsl:template>
476 <xsl:template match="part/titleabbrev"></xsl:template>
477
478 <!-- ==================================================================== -->
479
480 <xsl:template name="generate.part.toc">
481   <xsl:param name="part" select="."/>
482
483   <xsl:variable name="lot-master-reference">
484     <xsl:call-template name="select.pagemaster">
485       <xsl:with-param name="pageclass" select="'lot'"/>
486     </xsl:call-template>
487   </xsl:variable>
488
489   <xsl:variable name="toc.params">
490     <xsl:call-template name="find.path.params">
491       <xsl:with-param name="node" select="$part"/>
492       <xsl:with-param name="table" select="normalize-space($generate.toc)"/>
493     </xsl:call-template>
494   </xsl:variable>
495
496   <xsl:variable name="nodes" select="$part/reference|
497                                      $part/preface|
498                                      $part/chapter|
499                                      $part/appendix|
500                                      $part/article|
501                                      $part/bibliography|
502                                      $part/glossary|
503                                      $part/index"/>
504
505   <xsl:if test="count($nodes) &gt; 0 and contains($toc.params, 'toc')">
506     <fo:page-sequence hyphenate="{$hyphenate}"
507                       master-reference="{$lot-master-reference}">
508       <xsl:attribute name="language">
509         <xsl:call-template name="l10n.language"/>
510       </xsl:attribute>
511       <xsl:attribute name="format">
512         <xsl:call-template name="page.number.format">
513           <xsl:with-param name="element" select="'toc'"/>
514           <xsl:with-param name="master-reference" 
515                           select="$lot-master-reference"/>
516         </xsl:call-template>
517       </xsl:attribute>
518       <xsl:attribute name="initial-page-number">
519         <xsl:call-template name="initial.page.number">
520           <xsl:with-param name="element" select="'toc'"/>
521           <xsl:with-param name="master-reference" 
522                           select="$lot-master-reference"/>
523          </xsl:call-template>
524       </xsl:attribute>
525       <xsl:attribute name="force-page-count">
526         <xsl:call-template name="force.page.count">
527           <xsl:with-param name="master-reference" 
528                           select="$lot-master-reference"/>
529         </xsl:call-template>
530       </xsl:attribute>
531
532       <xsl:attribute name="hyphenation-character">
533         <xsl:call-template name="gentext">
534           <xsl:with-param name="key" select="'hyphenation-character'"/>
535         </xsl:call-template>
536       </xsl:attribute>
537       <xsl:attribute name="hyphenation-push-character-count">
538         <xsl:call-template name="gentext">
539           <xsl:with-param name="key" select="'hyphenation-push-character-count'"/>
540         </xsl:call-template>
541       </xsl:attribute>
542       <xsl:attribute name="hyphenation-remain-character-count">
543         <xsl:call-template name="gentext">
544           <xsl:with-param name="key" select="'hyphenation-remain-character-count'"/>
545         </xsl:call-template>
546       </xsl:attribute>
547
548       <xsl:apply-templates select="$part" mode="running.head.mode">
549         <xsl:with-param name="master-reference" select="$lot-master-reference"/>
550       </xsl:apply-templates>
551
552       <xsl:apply-templates select="$part" mode="running.foot.mode">
553         <xsl:with-param name="master-reference" select="$lot-master-reference"/>
554       </xsl:apply-templates>
555
556       <fo:flow flow-name="xsl-region-body">
557         <xsl:call-template name="set.flow.properties">
558           <xsl:with-param name="element" select="local-name(.)"/>
559           <xsl:with-param name="master-reference" 
560                           select="$lot-master-reference"/>
561         </xsl:call-template>
562
563         <xsl:call-template name="division.toc">
564           <xsl:with-param name="toc-context" select="$part"/>
565           <xsl:with-param name="toc.title.p" 
566                           select="contains($toc.params, 'title')"/>
567         </xsl:call-template>
568
569       </fo:flow>
570     </fo:page-sequence>
571   </xsl:if>
572 </xsl:template>
573
574 <!-- ==================================================================== -->
575
576 <xsl:template match="part/partintro">
577   <xsl:apply-templates select=".." mode="part.titlepage.mode">
578     <xsl:with-param name="additional.content">
579       <xsl:if test="title">
580         <xsl:call-template name="partintro.titlepage"/>
581       </xsl:if>
582       <xsl:apply-templates/>
583     </xsl:with-param>
584   </xsl:apply-templates>
585
586   <xsl:call-template name="generate.part.toc">
587     <xsl:with-param name="part" select=".."/>
588   </xsl:call-template>
589 </xsl:template>
590
591 <xsl:template match="partintro/title"></xsl:template>
592 <xsl:template match="partintro/subtitle"></xsl:template>
593 <xsl:template match="partintro/titleabbrev"></xsl:template>
594
595 <!-- ==================================================================== -->
596
597 <xsl:template match="book" mode="division.number">
598   <xsl:number from="set" count="book" format="1."/>
599 </xsl:template>
600
601 <xsl:template match="part" mode="division.number">
602   <xsl:number from="book" count="part" format="I."/>
603 </xsl:template>
604
605 </xsl:stylesheet>
606