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: pagesetup.xsl,v 1.62 2006/05/14 20:31:04 bobstayton Exp $
8     ********************************************************************
9
10     This file is part of the DocBook XSL Stylesheet distribution.
11     See /README or http://docbook.sf.net/ for copyright
12     and other information.
13
14     ******************************************************************** -->
15
16<!-- ==================================================================== -->
17
18<xsl:param name="body.fontset">
19  <xsl:value-of select="$body.font.family"/>
20  <xsl:if test="$body.font.family != ''
21                and $symbol.font.family  != ''">,</xsl:if>
22    <xsl:value-of select="$symbol.font.family"/>
23</xsl:param>
24
25<xsl:param name="title.fontset">
26  <xsl:value-of select="$title.font.family"/>
27  <xsl:if test="$title.font.family != ''
28                and $symbol.font.family  != ''">,</xsl:if>
29    <xsl:value-of select="$symbol.font.family"/>
30</xsl:param>
31
32<!-- PassiveTeX can't handle the math expression for
33     title.margin.left being negative, so ignore it.
34     margin-left="{$page.margin.outer} - {$title.margin.left}"
35-->
36<xsl:param name="margin.left.outer">
37  <xsl:choose>
38    <xsl:when test="$passivetex.extensions != 0">
39      <xsl:value-of select="$page.margin.outer"/>
40    </xsl:when>
41    <xsl:otherwise>
42      <xsl:value-of select="$page.margin.outer"/>
43      <xsl:text> - </xsl:text>
44      <xsl:value-of select="$title.margin.left"/>
45    </xsl:otherwise>
46  </xsl:choose>
47</xsl:param>
48
49<xsl:param name="margin.left.inner">
50  <xsl:choose>
51    <xsl:when test="$passivetex.extensions != 0">
52      <xsl:value-of select="$page.margin.inner"/>
53    </xsl:when>
54    <xsl:otherwise>
55      <xsl:value-of select="$page.margin.inner"/>
56      <xsl:text> - </xsl:text>
57      <xsl:value-of select="$title.margin.left"/>
58    </xsl:otherwise>
59  </xsl:choose>
60</xsl:param>
61
62<xsl:template name="setup.pagemasters">
63  <fo:layout-master-set>
64    <!-- blank pages -->
65    <fo:simple-page-master master-name="blank"
66                           page-width="{$page.width}"
67                           page-height="{$page.height}"
68                           margin-top="{$page.margin.top}"
69                           margin-bottom="{$page.margin.bottom}"
70                           margin-left="{$margin.left.outer}"
71                           margin-right="{$page.margin.inner}">
72      <fo:region-body display-align="center"
73                      margin-bottom="{$body.margin.bottom}"
74                      margin-top="{$body.margin.top}">
75        <xsl:if test="$fop.extensions = 0">
76          <xsl:attribute name="region-name">blank-body</xsl:attribute>
77        </xsl:if>
78      </fo:region-body>
79      <fo:region-before region-name="xsl-region-before-blank"
80                        extent="{$region.before.extent}"
81                        display-align="before"/>
82      <fo:region-after region-name="xsl-region-after-blank"
83                       extent="{$region.after.extent}"
84                        display-align="after"/>
85    </fo:simple-page-master>
86
87    <!-- title pages -->
88    <fo:simple-page-master master-name="titlepage-first"
89                           page-width="{$page.width}"
90                           page-height="{$page.height}"
91                           margin-top="{$page.margin.top}"
92                           margin-bottom="{$page.margin.bottom}"
93                           margin-left="{$margin.left.inner}"
94                           margin-right="{$page.margin.outer}">
95      <fo:region-body margin-bottom="{$body.margin.bottom}"
96                      margin-top="{$body.margin.top}"
97                      column-gap="{$column.gap.titlepage}"
98                      column-count="{$column.count.titlepage}">
99      </fo:region-body>
100      <fo:region-before region-name="xsl-region-before-first"
101                        extent="{$region.before.extent}"
102                        display-align="before"/>
103      <fo:region-after region-name="xsl-region-after-first"
104                       extent="{$region.after.extent}"
105                        display-align="after"/>
106    </fo:simple-page-master>
107
108    <fo:simple-page-master master-name="titlepage-odd"
109                           page-width="{$page.width}"
110                           page-height="{$page.height}"
111                           margin-top="{$page.margin.top}"
112                           margin-bottom="{$page.margin.bottom}"
113                           margin-left="{$margin.left.inner}"
114                           margin-right="{$page.margin.outer}">
115      <fo:region-body margin-bottom="{$body.margin.bottom}"
116                      margin-top="{$body.margin.top}"
117                      column-gap="{$column.gap.titlepage}"
118                      column-count="{$column.count.titlepage}">
119      </fo:region-body>
120      <fo:region-before region-name="xsl-region-before-odd"
121                        extent="{$region.before.extent}"
122                        display-align="before"/>
123      <fo:region-after region-name="xsl-region-after-odd"
124                       extent="{$region.after.extent}"
125                        display-align="after"/>
126    </fo:simple-page-master>
127
128    <fo:simple-page-master master-name="titlepage-even"
129                           page-width="{$page.width}"
130                           page-height="{$page.height}"
131                           margin-top="{$page.margin.top}"
132                           margin-bottom="{$page.margin.bottom}"
133                           margin-left="{$margin.left.outer}"
134                           margin-right="{$page.margin.inner}">
135      <fo:region-body margin-bottom="{$body.margin.bottom}"
136                      margin-top="{$body.margin.top}"
137                      column-gap="{$column.gap.titlepage}"
138                      column-count="{$column.count.titlepage}">
139      </fo:region-body>
140      <fo:region-before region-name="xsl-region-before-even"
141                        extent="{$region.before.extent}"
142                        display-align="before"/>
143      <fo:region-after region-name="xsl-region-after-even"
144                       extent="{$region.after.extent}"
145                        display-align="after"/>
146    </fo:simple-page-master>
147
148    <!-- list-of-title pages -->
149    <fo:simple-page-master master-name="lot-first"
150                           page-width="{$page.width}"
151                           page-height="{$page.height}"
152                           margin-top="{$page.margin.top}"
153                           margin-bottom="{$page.margin.bottom}"
154                           margin-left="{$margin.left.inner}"
155                           margin-right="{$page.margin.outer}">
156      <fo:region-body margin-bottom="{$body.margin.bottom}"
157                      margin-top="{$body.margin.top}"
158                      column-gap="{$column.gap.lot}"
159                      column-count="{$column.count.lot}">
160      </fo:region-body>
161      <fo:region-before region-name="xsl-region-before-first"
162                        extent="{$region.before.extent}"
163                        display-align="before"/>
164      <fo:region-after region-name="xsl-region-after-first"
165                       extent="{$region.after.extent}"
166                       display-align="after"/>
167    </fo:simple-page-master>
168
169    <fo:simple-page-master master-name="lot-odd"
170                           page-width="{$page.width}"
171                           page-height="{$page.height}"
172                           margin-top="{$page.margin.top}"
173                           margin-bottom="{$page.margin.bottom}"
174                           margin-left="{$margin.left.inner}"
175                           margin-right="{$page.margin.outer}">
176      <fo:region-body margin-bottom="{$body.margin.bottom}"
177                      margin-top="{$body.margin.top}"
178                      column-gap="{$column.gap.lot}"
179                      column-count="{$column.count.lot}">
180      </fo:region-body>
181      <fo:region-before region-name="xsl-region-before-odd"
182                        extent="{$region.before.extent}"
183                        display-align="before"/>
184      <fo:region-after region-name="xsl-region-after-odd"
185                       extent="{$region.after.extent}"
186                        display-align="after"/>
187    </fo:simple-page-master>
188
189    <fo:simple-page-master master-name="lot-even"
190                           page-width="{$page.width}"
191                           page-height="{$page.height}"
192                           margin-top="{$page.margin.top}"
193                           margin-bottom="{$page.margin.bottom}"
194                           margin-left="{$margin.left.outer}"
195                           margin-right="{$page.margin.inner}">
196      <fo:region-body margin-bottom="{$body.margin.bottom}"
197                      margin-top="{$body.margin.top}"
198                      column-gap="{$column.gap.lot}"
199                      column-count="{$column.count.lot}">
200      </fo:region-body>
201      <fo:region-before region-name="xsl-region-before-even"
202                        extent="{$region.before.extent}"
203                        display-align="before"/>
204      <fo:region-after region-name="xsl-region-after-even"
205                       extent="{$region.after.extent}"
206                        display-align="after"/>
207    </fo:simple-page-master>
208
209    <!-- frontmatter pages -->
210    <fo:simple-page-master master-name="front-first"
211                           page-width="{$page.width}"
212                           page-height="{$page.height}"
213                           margin-top="{$page.margin.top}"
214                           margin-bottom="{$page.margin.bottom}"
215                           margin-left="{$margin.left.inner}"
216                           margin-right="{$page.margin.outer}">
217      <fo:region-body margin-bottom="{$body.margin.bottom}"
218                      margin-top="{$body.margin.top}"
219                      column-gap="{$column.gap.front}"
220                      column-count="{$column.count.front}">
221      </fo:region-body>
222      <fo:region-before region-name="xsl-region-before-first"
223                        extent="{$region.before.extent}"
224                        display-align="before"/>
225      <fo:region-after region-name="xsl-region-after-first"
226                       extent="{$region.after.extent}"
227                        display-align="after"/>
228    </fo:simple-page-master>
229
230    <fo:simple-page-master master-name="front-odd"
231                           page-width="{$page.width}"
232                           page-height="{$page.height}"
233                           margin-top="{$page.margin.top}"
234                           margin-bottom="{$page.margin.bottom}"
235                           margin-left="{$margin.left.inner}"
236                           margin-right="{$page.margin.outer}">
237      <fo:region-body margin-bottom="{$body.margin.bottom}"
238                      margin-top="{$body.margin.top}"
239                      column-gap="{$column.gap.front}"
240                      column-count="{$column.count.front}">
241      </fo:region-body>
242      <fo:region-before region-name="xsl-region-before-odd"
243                        extent="{$region.before.extent}"
244                        display-align="before"/>
245      <fo:region-after region-name="xsl-region-after-odd"
246                       extent="{$region.after.extent}"
247                        display-align="after"/>
248    </fo:simple-page-master>
249
250    <fo:simple-page-master master-name="front-even"
251                           page-width="{$page.width}"
252                           page-height="{$page.height}"
253                           margin-top="{$page.margin.top}"
254                           margin-bottom="{$page.margin.bottom}"
255                           margin-left="{$margin.left.outer}"
256                           margin-right="{$page.margin.inner}">
257      <fo:region-body margin-bottom="{$body.margin.bottom}"
258                      margin-top="{$body.margin.top}"
259                      column-gap="{$column.gap.front}"
260                      column-count="{$column.count.front}">
261      </fo:region-body>
262      <fo:region-before region-name="xsl-region-before-even"
263                        extent="{$region.before.extent}"
264                        display-align="before"/>
265      <fo:region-after region-name="xsl-region-after-even"
266                       extent="{$region.after.extent}"
267                        display-align="after"/>
268    </fo:simple-page-master>
269
270    <!-- body pages -->
271    <fo:simple-page-master master-name="body-first"
272                           page-width="{$page.width}"
273                           page-height="{$page.height}"
274                           margin-top="{$page.margin.top}"
275                           margin-bottom="{$page.margin.bottom}"
276                           margin-left="{$margin.left.inner}"
277                           margin-right="{$page.margin.outer}">
278      <fo:region-body margin-bottom="{$body.margin.bottom}"
279                      margin-top="{$body.margin.top}"
280                      column-gap="{$column.gap.body}"
281                      column-count="{$column.count.body}">
282      </fo:region-body>
283      <fo:region-before region-name="xsl-region-before-first"
284                        extent="{$region.before.extent}"
285                        display-align="before"/>
286      <fo:region-after region-name="xsl-region-after-first"
287                       extent="{$region.after.extent}"
288                       display-align="after"/>
289    </fo:simple-page-master>
290
291    <fo:simple-page-master master-name="body-odd"
292                           page-width="{$page.width}"
293                           page-height="{$page.height}"
294                           margin-top="{$page.margin.top}"
295                           margin-bottom="{$page.margin.bottom}"
296                           margin-left="{$margin.left.inner}"
297                           margin-right="{$page.margin.outer}">
298      <fo:region-body margin-bottom="{$body.margin.bottom}"
299                      margin-top="{$body.margin.top}"
300                      column-gap="{$column.gap.body}"
301                      column-count="{$column.count.body}">
302      </fo:region-body>
303      <fo:region-before region-name="xsl-region-before-odd"
304                        extent="{$region.before.extent}"
305                        display-align="before"/>
306      <fo:region-after region-name="xsl-region-after-odd"
307                       extent="{$region.after.extent}"
308                       display-align="after"/>
309    </fo:simple-page-master>
310
311    <fo:simple-page-master master-name="body-even"
312                           page-width="{$page.width}"
313                           page-height="{$page.height}"
314                           margin-top="{$page.margin.top}"
315                           margin-bottom="{$page.margin.bottom}"
316                           margin-left="{$margin.left.outer}"
317                           margin-right="{$page.margin.inner}">
318      <fo:region-body margin-bottom="{$body.margin.bottom}"
319                      margin-top="{$body.margin.top}"
320                      column-gap="{$column.gap.body}"
321                      column-count="{$column.count.body}">
322      </fo:region-body>
323      <fo:region-before region-name="xsl-region-before-even"
324                        extent="{$region.before.extent}"
325                        display-align="before"/>
326      <fo:region-after region-name="xsl-region-after-even"
327                       extent="{$region.after.extent}"
328                       display-align="after"/>
329    </fo:simple-page-master>
330
331    <!-- backmatter pages -->
332    <fo:simple-page-master master-name="back-first"
333                           page-width="{$page.width}"
334                           page-height="{$page.height}"
335                           margin-top="{$page.margin.top}"
336                           margin-bottom="{$page.margin.bottom}"
337                           margin-left="{$margin.left.inner}"
338                           margin-right="{$page.margin.outer}">
339      <fo:region-body margin-bottom="{$body.margin.bottom}"
340                      margin-top="{$body.margin.top}"
341                      column-gap="{$column.gap.back}"
342                      column-count="{$column.count.back}">
343      </fo:region-body>
344      <fo:region-before region-name="xsl-region-before-first"
345                        extent="{$region.before.extent}"
346                        display-align="before"/>
347      <fo:region-after region-name="xsl-region-after-first"
348                       extent="{$region.after.extent}"
349                       display-align="after"/>
350    </fo:simple-page-master>
351
352    <fo:simple-page-master master-name="back-odd"
353                           page-width="{$page.width}"
354                           page-height="{$page.height}"
355                           margin-top="{$page.margin.top}"
356                           margin-bottom="{$page.margin.bottom}"
357                           margin-left="{$margin.left.inner}"
358                           margin-right="{$page.margin.outer}">
359      <fo:region-body margin-bottom="{$body.margin.bottom}"
360                      margin-top="{$body.margin.top}"
361                      column-gap="{$column.gap.back}"
362                      column-count="{$column.count.back}">
363      </fo:region-body>
364      <fo:region-before region-name="xsl-region-before-odd"
365                        extent="{$region.before.extent}"
366                        display-align="before"/>
367      <fo:region-after region-name="xsl-region-after-odd"
368                       extent="{$region.after.extent}"
369                       display-align="after"/>
370    </fo:simple-page-master>
371
372    <fo:simple-page-master master-name="back-even"
373                           page-width="{$page.width}"
374                           page-height="{$page.height}"
375                           margin-top="{$page.margin.top}"
376                           margin-bottom="{$page.margin.bottom}"
377                           margin-left="{$margin.left.outer}"
378                           margin-right="{$page.margin.inner}">
379      <fo:region-body margin-bottom="{$body.margin.bottom}"
380                      margin-top="{$body.margin.top}"
381                      column-gap="{$column.gap.back}"
382                      column-count="{$column.count.back}">
383      </fo:region-body>
384      <fo:region-before region-name="xsl-region-before-even"
385                        extent="{$region.before.extent}"
386                        display-align="before"/>
387      <fo:region-after region-name="xsl-region-after-even"
388                       extent="{$region.after.extent}"
389                       display-align="after"/>
390    </fo:simple-page-master>
391
392    <!-- index pages -->
393    <fo:simple-page-master master-name="index-first"
394                           page-width="{$page.width}"
395                           page-height="{$page.height}"
396                           margin-top="{$page.margin.top}"
397                           margin-bottom="{$page.margin.bottom}"
398                           margin-left="{$page.margin.inner}"
399                           margin-right="{$page.margin.outer}">
400      <fo:region-body margin-bottom="{$body.margin.bottom}"
401                      margin-top="{$body.margin.top}"
402                      column-gap="{$column.gap.index}"
403                      column-count="{$column.count.index}">
404      </fo:region-body>
405      <fo:region-before region-name="xsl-region-before-first"
406                        extent="{$region.before.extent}"
407                        display-align="before"/>
408      <fo:region-after region-name="xsl-region-after-first"
409                       extent="{$region.after.extent}"
410                       display-align="after"/>
411    </fo:simple-page-master>
412
413    <fo:simple-page-master master-name="index-odd"
414                           page-width="{$page.width}"
415                           page-height="{$page.height}"
416                           margin-top="{$page.margin.top}"
417                           margin-bottom="{$page.margin.bottom}"
418                           margin-left="{$page.margin.inner}"
419                           margin-right="{$page.margin.outer}">
420      <fo:region-body margin-bottom="{$body.margin.bottom}"
421                      margin-top="{$body.margin.top}"
422                      column-gap="{$column.gap.index}"
423                      column-count="{$column.count.index}">
424      </fo:region-body>
425      <fo:region-before region-name="xsl-region-before-odd"
426                        extent="{$region.before.extent}"
427                        display-align="before"/>
428      <fo:region-after region-name="xsl-region-after-odd"
429                       extent="{$region.after.extent}"
430                       display-align="after"/>
431    </fo:simple-page-master>
432
433    <fo:simple-page-master master-name="index-even"
434                           page-width="{$page.width}"
435                           page-height="{$page.height}"
436                           margin-top="{$page.margin.top}"
437                           margin-bottom="{$page.margin.bottom}"
438                           margin-left="{$page.margin.outer}"
439                           margin-right="{$page.margin.inner}">
440      <fo:region-body margin-bottom="{$body.margin.bottom}"
441                      margin-top="{$body.margin.top}"
442                      column-gap="{$column.gap.index}"
443                      column-count="{$column.count.index}">
444      </fo:region-body>
445      <fo:region-before region-name="xsl-region-before-even"
446                        extent="{$region.before.extent}"
447                        display-align="before"/>
448      <fo:region-after region-name="xsl-region-after-even"
449                       extent="{$region.after.extent}"
450                       display-align="after"/>
451    </fo:simple-page-master>
452
453    <xsl:if test="$draft.mode != 'no'">
454      <!-- draft blank pages -->
455      <fo:simple-page-master master-name="blank-draft"
456                             page-width="{$page.width}"
457                             page-height="{$page.height}"
458                             margin-top="{$page.margin.top}"
459                             margin-bottom="{$page.margin.bottom}"
460                             margin-left="{$margin.left.outer}"
461                             margin-right="{$page.margin.inner}">
462        <fo:region-body margin-bottom="{$body.margin.bottom}"
463                        margin-top="{$body.margin.top}">
464          <xsl:if test="$draft.watermark.image != ''">
465            <xsl:attribute name="background-image">
466              <xsl:call-template name="fo-external-image">
467                <xsl:with-param name="filename" select="$draft.watermark.image"/>
468              </xsl:call-template>
469            </xsl:attribute>
470            <xsl:attribute name="background-attachment">fixed</xsl:attribute>
471            <xsl:attribute name="background-repeat">no-repeat</xsl:attribute>
472            <xsl:attribute name="background-position-horizontal">center</xsl:attribute>
473            <xsl:attribute name="background-position-vertical">center</xsl:attribute>
474          </xsl:if>
475        </fo:region-body>
476        <fo:region-before region-name="xsl-region-before-blank"
477                          extent="{$region.before.extent}"
478                          display-align="before"/>
479        <fo:region-after region-name="xsl-region-after-blank"
480                         extent="{$region.after.extent}"
481                         display-align="after"/>
482      </fo:simple-page-master>
483
484      <!-- draft title pages -->
485      <fo:simple-page-master master-name="titlepage-first-draft"
486                             page-width="{$page.width}"
487                             page-height="{$page.height}"
488                             margin-top="{$page.margin.top}"
489                             margin-bottom="{$page.margin.bottom}"
490                             margin-left="{$margin.left.inner}"
491                             margin-right="{$page.margin.outer}">
492        <fo:region-body margin-bottom="{$body.margin.bottom}"
493                        margin-top="{$body.margin.top}"
494                        column-gap="{$column.gap.titlepage}"
495                        column-count="{$column.count.titlepage}">
496          <xsl:if test="$draft.watermark.image != ''">
497            <xsl:attribute name="background-image">
498              <xsl:call-template name="fo-external-image">
499                <xsl:with-param name="filename" select="$draft.watermark.image"/>
500              </xsl:call-template>
501            </xsl:attribute>
502            <xsl:attribute name="background-attachment">fixed</xsl:attribute>
503            <xsl:attribute name="background-repeat">no-repeat</xsl:attribute>
504            <xsl:attribute name="background-position-horizontal">center</xsl:attribute>
505            <xsl:attribute name="background-position-vertical">center</xsl:attribute>
506          </xsl:if>
507        </fo:region-body>
508        <fo:region-before region-name="xsl-region-before-first"
509                          extent="{$region.before.extent}"
510                          display-align="before"/>
511        <fo:region-after region-name="xsl-region-after-first"
512                         extent="{$region.after.extent}"
513                         display-align="after"/>
514      </fo:simple-page-master>
515
516      <fo:simple-page-master master-name="titlepage-odd-draft"
517                             page-width="{$page.width}"
518                             page-height="{$page.height}"
519                             margin-top="{$page.margin.top}"
520                             margin-bottom="{$page.margin.bottom}"
521                             margin-left="{$margin.left.inner}"
522                             margin-right="{$page.margin.outer}">
523        <fo:region-body margin-bottom="{$body.margin.bottom}"
524                        margin-top="{$body.margin.top}"
525                        column-gap="{$column.gap.titlepage}"
526                        column-count="{$column.count.titlepage}">
527          <xsl:if test="$draft.watermark.image != ''">
528            <xsl:attribute name="background-image">
529              <xsl:call-template name="fo-external-image">
530                <xsl:with-param name="filename" select="$draft.watermark.image"/>
531              </xsl:call-template>
532            </xsl:attribute>
533            <xsl:attribute name="background-attachment">fixed</xsl:attribute>
534            <xsl:attribute name="background-repeat">no-repeat</xsl:attribute>
535            <xsl:attribute name="background-position-horizontal">center</xsl:attribute>
536            <xsl:attribute name="background-position-vertical">center</xsl:attribute>
537          </xsl:if>
538        </fo:region-body>
539        <fo:region-before region-name="xsl-region-before-odd"
540                          extent="{$region.before.extent}"
541                          display-align="before"/>
542        <fo:region-after region-name="xsl-region-after-odd"
543                         extent="{$region.after.extent}"
544                         display-align="after"/>
545      </fo:simple-page-master>
546
547      <fo:simple-page-master master-name="titlepage-even-draft"
548                             page-width="{$page.width}"
549                             page-height="{$page.height}"
550                             margin-top="{$page.margin.top}"
551                             margin-bottom="{$page.margin.bottom}"
552                             margin-left="{$margin.left.outer}"
553                             margin-right="{$page.margin.inner}">
554        <fo:region-body margin-bottom="{$body.margin.bottom}"
555                        margin-top="{$body.margin.top}"
556                        column-gap="{$column.gap.titlepage}"
557                        column-count="{$column.count.titlepage}">
558          <xsl:if test="$draft.watermark.image != ''">
559            <xsl:attribute name="background-image">
560              <xsl:call-template name="fo-external-image">
561                <xsl:with-param name="filename" select="$draft.watermark.image"/>
562              </xsl:call-template>
563            </xsl:attribute>
564            <xsl:attribute name="background-attachment">fixed</xsl:attribute>
565            <xsl:attribute name="background-repeat">no-repeat</xsl:attribute>
566            <xsl:attribute name="background-position-horizontal">center</xsl:attribute>
567            <xsl:attribute name="background-position-vertical">center</xsl:attribute>
568          </xsl:if>
569        </fo:region-body>
570        <fo:region-before region-name="xsl-region-before-even"
571                          extent="{$region.before.extent}"
572                          display-align="before"/>
573        <fo:region-after region-name="xsl-region-after-even"
574                         extent="{$region.after.extent}"
575                         display-align="after"/>
576      </fo:simple-page-master>
577
578      <!-- draft list-of-title pages -->
579      <fo:simple-page-master master-name="lot-first-draft"
580                             page-width="{$page.width}"
581                             page-height="{$page.height}"
582                             margin-top="{$page.margin.top}"
583                             margin-bottom="{$page.margin.bottom}"
584                             margin-left="{$margin.left.inner}"
585                             margin-right="{$page.margin.outer}">
586        <fo:region-body margin-bottom="{$body.margin.bottom}"
587                        margin-top="{$body.margin.top}"
588                        column-gap="{$column.gap.lot}"
589                        column-count="{$column.count.lot}">
590          <xsl:if test="$draft.watermark.image != ''">
591            <xsl:attribute name="background-image">
592              <xsl:call-template name="fo-external-image">
593                <xsl:with-param name="filename" select="$draft.watermark.image"/>
594              </xsl:call-template>
595            </xsl:attribute>
596            <xsl:attribute name="background-attachment">fixed</xsl:attribute>
597            <xsl:attribute name="background-repeat">no-repeat</xsl:attribute>
598            <xsl:attribute name="background-position-horizontal">center</xsl:attribute>
599            <xsl:attribute name="background-position-vertical">center</xsl:attribute>
600          </xsl:if>
601        </fo:region-body>
602        <fo:region-before region-name="xsl-region-before-first"
603                          extent="{$region.before.extent}"
604                          display-align="before"/>
605        <fo:region-after region-name="xsl-region-after-first"
606                         extent="{$region.after.extent}"
607                         display-align="after"/>
608      </fo:simple-page-master>
609
610      <fo:simple-page-master master-name="lot-odd-draft"
611                             page-width="{$page.width}"
612                             page-height="{$page.height}"
613                             margin-top="{$page.margin.top}"
614                             margin-bottom="{$page.margin.bottom}"
615                             margin-left="{$margin.left.inner}"
616                             margin-right="{$page.margin.outer}">
617        <fo:region-body margin-bottom="{$body.margin.bottom}"
618                        margin-top="{$body.margin.top}"
619                        column-gap="{$column.gap.lot}"
620                        column-count="{$column.count.lot}">
621          <xsl:if test="$draft.watermark.image != ''">
622            <xsl:attribute name="background-image">
623              <xsl:call-template name="fo-external-image">
624                <xsl:with-param name="filename" select="$draft.watermark.image"/>
625              </xsl:call-template>
626            </xsl:attribute>
627            <xsl:attribute name="background-attachment">fixed</xsl:attribute>
628            <xsl:attribute name="background-repeat">no-repeat</xsl:attribute>
629            <xsl:attribute name="background-position-horizontal">center</xsl:attribute>
630            <xsl:attribute name="background-position-vertical">center</xsl:attribute>
631          </xsl:if>
632        </fo:region-body>
633        <fo:region-before region-name="xsl-region-before-odd"
634                          extent="{$region.before.extent}"
635                          display-align="before"/>
636        <fo:region-after region-name="xsl-region-after-odd"
637                         extent="{$region.after.extent}"
638                         display-align="after"/>
639      </fo:simple-page-master>
640
641      <fo:simple-page-master master-name="lot-even-draft"
642                             page-width="{$page.width}"
643                             page-height="{$page.height}"
644                             margin-top="{$page.margin.top}"
645                             margin-bottom="{$page.margin.bottom}"
646                             margin-left="{$margin.left.outer}"
647                             margin-right="{$page.margin.inner}">
648        <fo:region-body margin-bottom="{$body.margin.bottom}"
649                        margin-top="{$body.margin.top}"
650                        column-gap="{$column.gap.lot}"
651                        column-count="{$column.count.lot}">
652          <xsl:if test="$draft.watermark.image != ''">
653            <xsl:attribute name="background-image">
654              <xsl:call-template name="fo-external-image">
655                <xsl:with-param name="filename" select="$draft.watermark.image"/>
656              </xsl:call-template>
657            </xsl:attribute>
658            <xsl:attribute name="background-attachment">fixed</xsl:attribute>
659            <xsl:attribute name="background-repeat">no-repeat</xsl:attribute>
660            <xsl:attribute name="background-position-horizontal">center</xsl:attribute>
661            <xsl:attribute name="background-position-vertical">center</xsl:attribute>
662          </xsl:if>
663        </fo:region-body>
664        <fo:region-before region-name="xsl-region-before-even"
665                          extent="{$region.before.extent}"
666                          display-align="before"/>
667        <fo:region-after region-name="xsl-region-after-even"
668                         extent="{$region.after.extent}"
669                         display-align="after"/>
670      </fo:simple-page-master>
671
672      <!-- draft frontmatter pages -->
673      <fo:simple-page-master master-name="front-first-draft"
674                             page-width="{$page.width}"
675                             page-height="{$page.height}"
676                             margin-top="{$page.margin.top}"
677                             margin-bottom="{$page.margin.bottom}"
678                             margin-left="{$margin.left.inner}"
679                             margin-right="{$page.margin.outer}">
680        <fo:region-body margin-bottom="{$body.margin.bottom}"
681                        margin-top="{$body.margin.top}"
682                        column-gap="{$column.gap.front}"
683                        column-count="{$column.count.front}">
684          <xsl:if test="$draft.watermark.image != ''">
685            <xsl:attribute name="background-image">
686              <xsl:call-template name="fo-external-image">
687                <xsl:with-param name="filename" select="$draft.watermark.image"/>
688              </xsl:call-template>
689            </xsl:attribute>
690            <xsl:attribute name="background-attachment">fixed</xsl:attribute>
691            <xsl:attribute name="background-repeat">no-repeat</xsl:attribute>
692            <xsl:attribute name="background-position-horizontal">center</xsl:attribute>
693            <xsl:attribute name="background-position-vertical">center</xsl:attribute>
694          </xsl:if>
695        </fo:region-body>
696        <fo:region-before region-name="xsl-region-before-first"
697                          extent="{$region.before.extent}"
698                          display-align="before"/>
699        <fo:region-after region-name="xsl-region-after-first"
700                         extent="{$region.after.extent}"
701                         display-align="after"/>
702      </fo:simple-page-master>
703
704      <fo:simple-page-master master-name="front-odd-draft"
705                             page-width="{$page.width}"
706                             page-height="{$page.height}"
707                             margin-top="{$page.margin.top}"
708                             margin-bottom="{$page.margin.bottom}"
709                             margin-left="{$margin.left.inner}"
710                             margin-right="{$page.margin.outer}">
711        <fo:region-body margin-bottom="{$body.margin.bottom}"
712                        margin-top="{$body.margin.top}"
713                        column-gap="{$column.gap.front}"
714                        column-count="{$column.count.front}">
715          <xsl:if test="$draft.watermark.image != ''">
716            <xsl:attribute name="background-image">
717              <xsl:call-template name="fo-external-image">
718                <xsl:with-param name="filename" select="$draft.watermark.image"/>
719              </xsl:call-template>
720            </xsl:attribute>
721            <xsl:attribute name="background-attachment">fixed</xsl:attribute>
722            <xsl:attribute name="background-repeat">no-repeat</xsl:attribute>
723            <xsl:attribute name="background-position-horizontal">center</xsl:attribute>
724            <xsl:attribute name="background-position-vertical">center</xsl:attribute>
725          </xsl:if>
726        </fo:region-body>
727        <fo:region-before region-name="xsl-region-before-odd"
728                          extent="{$region.before.extent}"
729                          display-align="before"/>
730        <fo:region-after region-name="xsl-region-after-odd"
731                         extent="{$region.after.extent}"
732                         display-align="after"/>
733      </fo:simple-page-master>
734
735      <fo:simple-page-master master-name="front-even-draft"
736                             page-width="{$page.width}"
737                             page-height="{$page.height}"
738                             margin-top="{$page.margin.top}"
739                             margin-bottom="{$page.margin.bottom}"
740                             margin-left="{$margin.left.outer}"
741                             margin-right="{$page.margin.inner}">
742        <fo:region-body margin-bottom="{$body.margin.bottom}"
743                        margin-top="{$body.margin.top}"
744                        column-gap="{$column.gap.front}"
745                        column-count="{$column.count.front}">
746          <xsl:if test="$draft.watermark.image != ''">
747            <xsl:attribute name="background-image">
748              <xsl:call-template name="fo-external-image">
749                <xsl:with-param name="filename" select="$draft.watermark.image"/>
750              </xsl:call-template>
751            </xsl:attribute>
752            <xsl:attribute name="background-attachment">fixed</xsl:attribute>
753            <xsl:attribute name="background-repeat">no-repeat</xsl:attribute>
754            <xsl:attribute name="background-position-horizontal">center</xsl:attribute>
755            <xsl:attribute name="background-position-vertical">center</xsl:attribute>
756          </xsl:if>
757        </fo:region-body>
758        <fo:region-before region-name="xsl-region-before-even"
759                          extent="{$region.before.extent}"
760                          display-align="before"/>
761        <fo:region-after region-name="xsl-region-after-even"
762                         extent="{$region.after.extent}"
763                         display-align="after"/>
764      </fo:simple-page-master>
765
766      <!-- draft body pages -->
767      <fo:simple-page-master master-name="body-first-draft"
768                             page-width="{$page.width}"
769                             page-height="{$page.height}"
770                             margin-top="{$page.margin.top}"
771                             margin-bottom="{$page.margin.bottom}"
772                             margin-left="{$margin.left.inner}"
773                             margin-right="{$page.margin.outer}">
774        <fo:region-body margin-bottom="{$body.margin.bottom}"
775                        margin-top="{$body.margin.top}"
776                        column-gap="{$column.gap.body}"
777                        column-count="{$column.count.body}">
778          <xsl:if test="$draft.watermark.image != ''">
779            <xsl:attribute name="background-image">
780              <xsl:call-template name="fo-external-image">
781                <xsl:with-param name="filename" select="$draft.watermark.image"/>
782              </xsl:call-template>
783            </xsl:attribute>
784            <xsl:attribute name="background-attachment">fixed</xsl:attribute>
785            <xsl:attribute name="background-repeat">no-repeat</xsl:attribute>
786            <xsl:attribute name="background-position-horizontal">center</xsl:attribute>
787            <xsl:attribute name="background-position-vertical">center</xsl:attribute>
788          </xsl:if>
789        </fo:region-body>
790        <fo:region-before region-name="xsl-region-before-first"
791                          extent="{$region.before.extent}"
792                          display-align="before"/>
793        <fo:region-after region-name="xsl-region-after-first"
794                         extent="{$region.after.extent}"
795                         display-align="after"/>
796      </fo:simple-page-master>
797
798      <fo:simple-page-master master-name="body-odd-draft"
799                             page-width="{$page.width}"
800                             page-height="{$page.height}"
801                             margin-top="{$page.margin.top}"
802                             margin-bottom="{$page.margin.bottom}"
803                             margin-left="{$margin.left.inner}"
804                             margin-right="{$page.margin.outer}">
805        <fo:region-body margin-bottom="{$body.margin.bottom}"
806                        margin-top="{$body.margin.top}"
807                        column-gap="{$column.gap.body}"
808                        column-count="{$column.count.body}">
809          <xsl:if test="$draft.watermark.image != ''">
810            <xsl:attribute name="background-image">
811              <xsl:call-template name="fo-external-image">
812                <xsl:with-param name="filename" select="$draft.watermark.image"/>
813              </xsl:call-template>
814            </xsl:attribute>
815            <xsl:attribute name="background-attachment">fixed</xsl:attribute>
816            <xsl:attribute name="background-repeat">no-repeat</xsl:attribute>
817            <xsl:attribute name="background-position-horizontal">center</xsl:attribute>
818            <xsl:attribute name="background-position-vertical">center</xsl:attribute>
819          </xsl:if>
820        </fo:region-body>
821        <fo:region-before region-name="xsl-region-before-odd"
822                          extent="{$region.before.extent}"
823                          display-align="before"/>
824        <fo:region-after region-name="xsl-region-after-odd"
825                         extent="{$region.after.extent}"
826                         display-align="after"/>
827      </fo:simple-page-master>
828
829      <fo:simple-page-master master-name="body-even-draft"
830                             page-width="{$page.width}"
831                             page-height="{$page.height}"
832                             margin-top="{$page.margin.top}"
833                             margin-bottom="{$page.margin.bottom}"
834                             margin-left="{$margin.left.outer}"
835                             margin-right="{$page.margin.inner}">
836        <fo:region-body margin-bottom="{$body.margin.bottom}"
837                        margin-top="{$body.margin.top}"
838                        column-gap="{$column.gap.body}"
839                        column-count="{$column.count.body}">
840          <xsl:if test="$draft.watermark.image != ''">
841            <xsl:attribute name="background-image">
842              <xsl:call-template name="fo-external-image">
843                <xsl:with-param name="filename" select="$draft.watermark.image"/>
844              </xsl:call-template>
845            </xsl:attribute>
846            <xsl:attribute name="background-attachment">fixed</xsl:attribute>
847            <xsl:attribute name="background-repeat">no-repeat</xsl:attribute>
848            <xsl:attribute name="background-position-horizontal">center</xsl:attribute>
849            <xsl:attribute name="background-position-vertical">center</xsl:attribute>
850          </xsl:if>
851        </fo:region-body>
852        <fo:region-before region-name="xsl-region-before-even"
853                          extent="{$region.before.extent}"
854                          display-align="before"/>
855        <fo:region-after region-name="xsl-region-after-even"
856                         extent="{$region.after.extent}"
857                         display-align="after"/>
858      </fo:simple-page-master>
859
860      <!-- draft backmatter pages -->
861      <fo:simple-page-master master-name="back-first-draft"
862                             page-width="{$page.width}"
863                             page-height="{$page.height}"
864                             margin-top="{$page.margin.top}"
865                             margin-bottom="{$page.margin.bottom}"
866                             margin-left="{$margin.left.inner}"
867                             margin-right="{$page.margin.outer}">
868        <fo:region-body margin-bottom="{$body.margin.bottom}"
869                        margin-top="{$body.margin.top}"
870                        column-gap="{$column.gap.back}"
871                        column-count="{$column.count.back}">
872          <xsl:if test="$draft.watermark.image != ''">
873            <xsl:attribute name="background-image">
874              <xsl:call-template name="fo-external-image">
875                <xsl:with-param name="filename" select="$draft.watermark.image"/>
876              </xsl:call-template>
877            </xsl:attribute>
878            <xsl:attribute name="background-attachment">fixed</xsl:attribute>
879            <xsl:attribute name="background-repeat">no-repeat</xsl:attribute>
880            <xsl:attribute name="background-position-horizontal">center</xsl:attribute>
881            <xsl:attribute name="background-position-vertical">center</xsl:attribute>
882          </xsl:if>
883        </fo:region-body>
884        <fo:region-before region-name="xsl-region-before-first"
885                          extent="{$region.before.extent}"
886                          display-align="before"/>
887        <fo:region-after region-name="xsl-region-after-first"
888                         extent="{$region.after.extent}"
889                         display-align="after"/>
890      </fo:simple-page-master>
891
892      <fo:simple-page-master master-name="back-odd-draft"
893                             page-width="{$page.width}"
894                             page-height="{$page.height}"
895                             margin-top="{$page.margin.top}"
896                             margin-bottom="{$page.margin.bottom}"
897                             margin-left="{$margin.left.inner}"
898                             margin-right="{$page.margin.outer}">
899        <fo:region-body margin-bottom="{$body.margin.bottom}"
900                        margin-top="{$body.margin.top}"
901                        column-gap="{$column.gap.back}"
902                        column-count="{$column.count.back}">
903          <xsl:if test="$draft.watermark.image != ''">
904            <xsl:attribute name="background-image">
905              <xsl:call-template name="fo-external-image">
906                <xsl:with-param name="filename" select="$draft.watermark.image"/>
907              </xsl:call-template>
908            </xsl:attribute>
909            <xsl:attribute name="background-attachment">fixed</xsl:attribute>
910            <xsl:attribute name="background-repeat">no-repeat</xsl:attribute>
911            <xsl:attribute name="background-position-horizontal">center</xsl:attribute>
912            <xsl:attribute name="background-position-vertical">center</xsl:attribute>
913          </xsl:if>
914        </fo:region-body>
915        <fo:region-before region-name="xsl-region-before-odd"
916                          extent="{$region.before.extent}"
917                          display-align="before"/>
918        <fo:region-after region-name="xsl-region-after-odd"
919                         extent="{$region.after.extent}"
920                         display-align="after"/>
921      </fo:simple-page-master>
922
923      <fo:simple-page-master master-name="back-even-draft"
924                             page-width="{$page.width}"
925                             page-height="{$page.height}"
926                             margin-top="{$page.margin.top}"
927                             margin-bottom="{$page.margin.bottom}"
928                             margin-left="{$margin.left.outer}"
929                             margin-right="{$page.margin.inner}">
930        <fo:region-body margin-bottom="{$body.margin.bottom}"
931                        margin-top="{$body.margin.top}"
932                        column-gap="{$column.gap.back}"
933                        column-count="{$column.count.back}">
934          <xsl:if test="$draft.watermark.image != ''">
935            <xsl:attribute name="background-image">
936              <xsl:call-template name="fo-external-image">
937                <xsl:with-param name="filename" select="$draft.watermark.image"/>
938              </xsl:call-template>
939            </xsl:attribute>
940            <xsl:attribute name="background-attachment">fixed</xsl:attribute>
941            <xsl:attribute name="background-repeat">no-repeat</xsl:attribute>
942            <xsl:attribute name="background-position-horizontal">center</xsl:attribute>
943            <xsl:attribute name="background-position-vertical">center</xsl:attribute>
944          </xsl:if>
945        </fo:region-body>
946        <fo:region-before region-name="xsl-region-before-even"
947                          extent="{$region.before.extent}"
948                          display-align="before"/>
949        <fo:region-after region-name="xsl-region-after-even"
950                         extent="{$region.after.extent}"
951                         display-align="after"/>
952      </fo:simple-page-master>
953
954      <!-- draft index pages -->
955      <fo:simple-page-master master-name="index-first-draft"
956                             page-width="{$page.width}"
957                             page-height="{$page.height}"
958                             margin-top="{$page.margin.top}"
959                             margin-bottom="{$page.margin.bottom}"
960                             margin-left="{$page.margin.inner}"
961                             margin-right="{$page.margin.outer}">
962        <fo:region-body margin-bottom="{$body.margin.bottom}"
963                        margin-top="{$body.margin.top}"
964                        column-gap="{$column.gap.index}"
965                        column-count="{$column.count.index}">
966          <xsl:if test="$draft.watermark.image != ''">
967            <xsl:attribute name="background-image">
968              <xsl:call-template name="fo-external-image">
969                <xsl:with-param name="filename" select="$draft.watermark.image"/>
970              </xsl:call-template>
971            </xsl:attribute>
972            <xsl:attribute name="background-attachment">fixed</xsl:attribute>
973            <xsl:attribute name="background-repeat">no-repeat</xsl:attribute>
974            <xsl:attribute name="background-position-horizontal">center</xsl:attribute>
975            <xsl:attribute name="background-position-vertical">center</xsl:attribute>
976          </xsl:if>
977        </fo:region-body>
978        <fo:region-before region-name="xsl-region-before-first"
979                          extent="{$region.before.extent}"
980                          display-align="before"/>
981        <fo:region-after region-name="xsl-region-after-first"
982                         extent="{$region.after.extent}"
983                         display-align="after"/>
984      </fo:simple-page-master>
985
986      <fo:simple-page-master master-name="index-odd-draft"
987                             page-width="{$page.width}"
988                             page-height="{$page.height}"
989                             margin-top="{$page.margin.top}"
990                             margin-bottom="{$page.margin.bottom}"
991                             margin-left="{$page.margin.inner}"
992                             margin-right="{$page.margin.outer}">
993        <fo:region-body margin-bottom="{$body.margin.bottom}"
994                        margin-top="{$body.margin.top}"
995                        column-gap="{$column.gap.index}"
996                        column-count="{$column.count.index}">
997          <xsl:if test="$draft.watermark.image != ''">
998            <xsl:attribute name="background-image">
999              <xsl:call-template name="fo-external-image">
1000                <xsl:with-param name="filename" select="$draft.watermark.image"/>
1001              </xsl:call-template>
1002            </xsl:attribute>
1003            <xsl:attribute name="background-attachment">fixed</xsl:attribute>
1004            <xsl:attribute name="background-repeat">no-repeat</xsl:attribute>
1005            <xsl:attribute name="background-position-horizontal">center</xsl:attribute>
1006            <xsl:attribute name="background-position-vertical">center</xsl:attribute>
1007          </xsl:if>
1008        </fo:region-body>
1009        <fo:region-before region-name="xsl-region-before-odd"
1010                          extent="{$region.before.extent}"
1011                          display-align="before"/>
1012        <fo:region-after region-name="xsl-region-after-odd"
1013                         extent="{$region.after.extent}"
1014                         display-align="after"/>
1015      </fo:simple-page-master>
1016
1017      <fo:simple-page-master master-name="index-even-draft"
1018                             page-width="{$page.width}"
1019                             page-height="{$page.height}"
1020                             margin-top="{$page.margin.top}"
1021                             margin-bottom="{$page.margin.bottom}"
1022                             margin-right="{$page.margin.inner}"
1023                             margin-left="{$page.margin.outer}">
1024        <fo:region-body margin-bottom="{$body.margin.bottom}"
1025                        margin-top="{$body.margin.top}"
1026                        column-gap="{$column.gap.index}"
1027                        column-count="{$column.count.index}">
1028          <xsl:if test="$draft.watermark.image != ''">
1029            <xsl:attribute name="background-image">
1030              <xsl:call-template name="fo-external-image">
1031                <xsl:with-param name="filename" select="$draft.watermark.image"/>
1032              </xsl:call-template>
1033            </xsl:attribute>
1034            <xsl:attribute name="background-attachment">fixed</xsl:attribute>
1035            <xsl:attribute name="background-repeat">no-repeat</xsl:attribute>
1036            <xsl:attribute name="background-position-horizontal">center</xsl:attribute>
1037            <xsl:attribute name="background-position-vertical">center</xsl:attribute>
1038          </xsl:if>
1039        </fo:region-body>
1040        <fo:region-before region-name="xsl-region-before-even"
1041                          extent="{$region.before.extent}"
1042                          display-align="before"/>
1043        <fo:region-after region-name="xsl-region-after-even"
1044                         extent="{$region.after.extent}"
1045                         display-align="after"/>
1046      </fo:simple-page-master>
1047    </xsl:if>
1048
1049    <!-- setup for title page(s) -->
1050    <fo:page-sequence-master master-name="titlepage">
1051      <fo:repeatable-page-master-alternatives>
1052        <fo:conditional-page-master-reference master-reference="blank"
1053                                              blank-or-not-blank="blank"/>
1054        <fo:conditional-page-master-reference master-reference="titlepage-first"
1055                                              page-position="first"/>
1056        <fo:conditional-page-master-reference master-reference="titlepage-odd"
1057                                              odd-or-even="odd"/>
1058        <fo:conditional-page-master-reference 
1059                                              odd-or-even="even">
1060          <xsl:attribute name="master-reference">
1061            <xsl:choose>
1062              <xsl:when test="$double.sided != 0">titlepage-even</xsl:when>
1063              <xsl:otherwise>titlepage-odd</xsl:otherwise>
1064            </xsl:choose>
1065          </xsl:attribute>
1066        </fo:conditional-page-master-reference>
1067      </fo:repeatable-page-master-alternatives>
1068    </fo:page-sequence-master>
1069
1070    <!-- setup for lots -->
1071    <fo:page-sequence-master master-name="lot">
1072      <fo:repeatable-page-master-alternatives>
1073        <fo:conditional-page-master-reference master-reference="blank"
1074                                              blank-or-not-blank="blank"/>
1075        <fo:conditional-page-master-reference master-reference="lot-first"
1076                                              page-position="first"/>
1077        <fo:conditional-page-master-reference master-reference="lot-odd"
1078                                              odd-or-even="odd"/>
1079        <fo:conditional-page-master-reference 
1080                                              odd-or-even="even">
1081          <xsl:attribute name="master-reference">
1082            <xsl:choose>
1083              <xsl:when test="$double.sided != 0">lot-even</xsl:when>
1084              <xsl:otherwise>lot-odd</xsl:otherwise>
1085            </xsl:choose>
1086          </xsl:attribute>
1087        </fo:conditional-page-master-reference>
1088      </fo:repeatable-page-master-alternatives>
1089    </fo:page-sequence-master>
1090
1091    <!-- setup front matter -->
1092    <fo:page-sequence-master master-name="front">
1093      <fo:repeatable-page-master-alternatives>
1094        <fo:conditional-page-master-reference master-reference="blank"
1095                                              blank-or-not-blank="blank"/>
1096        <fo:conditional-page-master-reference master-reference="front-first"
1097                                              page-position="first"/>
1098        <fo:conditional-page-master-reference master-reference="front-odd"
1099                                              odd-or-even="odd"/>
1100        <fo:conditional-page-master-reference 
1101                                              odd-or-even="even">
1102          <xsl:attribute name="master-reference">
1103            <xsl:choose>
1104              <xsl:when test="$double.sided != 0">front-even</xsl:when>
1105              <xsl:otherwise>front-odd</xsl:otherwise>
1106            </xsl:choose>
1107          </xsl:attribute>
1108        </fo:conditional-page-master-reference>
1109      </fo:repeatable-page-master-alternatives>
1110    </fo:page-sequence-master>
1111
1112    <!-- setup for body pages -->
1113    <fo:page-sequence-master master-name="body">
1114      <fo:repeatable-page-master-alternatives>
1115        <fo:conditional-page-master-reference master-reference="blank"
1116                                              blank-or-not-blank="blank"/>
1117        <fo:conditional-page-master-reference master-reference="body-first"
1118                                              page-position="first"/>
1119        <fo:conditional-page-master-reference master-reference="body-odd"
1120                                              odd-or-even="odd"/>
1121        <fo:conditional-page-master-reference 
1122                                              odd-or-even="even">
1123          <xsl:attribute name="master-reference">
1124            <xsl:choose>
1125              <xsl:when test="$double.sided != 0">body-even</xsl:when>
1126              <xsl:otherwise>body-odd</xsl:otherwise>
1127            </xsl:choose>
1128          </xsl:attribute>
1129        </fo:conditional-page-master-reference>
1130      </fo:repeatable-page-master-alternatives>
1131    </fo:page-sequence-master>
1132
1133    <!-- setup back matter -->
1134    <fo:page-sequence-master master-name="back">
1135      <fo:repeatable-page-master-alternatives>
1136        <fo:conditional-page-master-reference master-reference="blank"
1137                                              blank-or-not-blank="blank"/>
1138        <fo:conditional-page-master-reference master-reference="back-first"
1139                                              page-position="first"/>
1140        <fo:conditional-page-master-reference master-reference="back-odd"
1141                                              odd-or-even="odd"/>
1142        <fo:conditional-page-master-reference 
1143                                              odd-or-even="even">
1144          <xsl:attribute name="master-reference">
1145            <xsl:choose>
1146              <xsl:when test="$double.sided != 0">back-even</xsl:when>
1147              <xsl:otherwise>back-odd</xsl:otherwise>
1148            </xsl:choose>
1149          </xsl:attribute>
1150        </fo:conditional-page-master-reference>
1151      </fo:repeatable-page-master-alternatives>
1152    </fo:page-sequence-master>
1153
1154    <!-- setup back matter -->
1155    <fo:page-sequence-master master-name="index">
1156      <fo:repeatable-page-master-alternatives>
1157        <fo:conditional-page-master-reference master-reference="blank"
1158                                              blank-or-not-blank="blank"/>
1159        <fo:conditional-page-master-reference master-reference="index-first"
1160                                              page-position="first"/>
1161        <fo:conditional-page-master-reference master-reference="index-odd"
1162                                              odd-or-even="odd"/>
1163        <fo:conditional-page-master-reference 
1164                                              odd-or-even="even">
1165          <xsl:attribute name="master-reference">
1166            <xsl:choose>
1167              <xsl:when test="$double.sided != 0">index-even</xsl:when>
1168              <xsl:otherwise>index-odd</xsl:otherwise>
1169            </xsl:choose>
1170          </xsl:attribute>
1171        </fo:conditional-page-master-reference>
1172      </fo:repeatable-page-master-alternatives>
1173    </fo:page-sequence-master>
1174
1175    <xsl:if test="$draft.mode != 'no'">
1176      <!-- setup for draft title page(s) -->
1177      <fo:page-sequence-master master-name="titlepage-draft">
1178        <fo:repeatable-page-master-alternatives>
1179          <fo:conditional-page-master-reference master-reference="blank-draft"
1180                                                blank-or-not-blank="blank"/>
1181          <fo:conditional-page-master-reference master-reference="titlepage-first-draft"
1182                                                page-position="first"/>
1183          <fo:conditional-page-master-reference master-reference="titlepage-odd-draft"
1184                                                odd-or-even="odd"/>
1185          <fo:conditional-page-master-reference 
1186                                                odd-or-even="even">
1187            <xsl:attribute name="master-reference">
1188              <xsl:choose>
1189                <xsl:when test="$double.sided != 0">titlepage-even-draft</xsl:when>
1190                <xsl:otherwise>titlepage-odd-draft</xsl:otherwise>
1191              </xsl:choose>
1192            </xsl:attribute>
1193          </fo:conditional-page-master-reference>
1194        </fo:repeatable-page-master-alternatives>
1195      </fo:page-sequence-master>
1196
1197      <!-- setup for draft lots -->
1198      <fo:page-sequence-master master-name="lot-draft">
1199        <fo:repeatable-page-master-alternatives>
1200          <fo:conditional-page-master-reference master-reference="blank-draft"
1201                                                blank-or-not-blank="blank"/>
1202          <fo:conditional-page-master-reference master-reference="lot-first-draft"
1203                                                page-position="first"/>
1204          <fo:conditional-page-master-reference master-reference="lot-odd-draft"
1205                                                odd-or-even="odd"/>
1206          <fo:conditional-page-master-reference 
1207                                                odd-or-even="even">
1208            <xsl:attribute name="master-reference">
1209              <xsl:choose>
1210                <xsl:when test="$double.sided != 0">lot-even-draft</xsl:when>
1211                <xsl:otherwise>lot-odd-draft</xsl:otherwise>
1212              </xsl:choose>
1213            </xsl:attribute>
1214          </fo:conditional-page-master-reference>
1215        </fo:repeatable-page-master-alternatives>
1216      </fo:page-sequence-master>
1217
1218      <!-- setup draft front matter -->
1219      <fo:page-sequence-master master-name="front-draft">
1220        <fo:repeatable-page-master-alternatives>
1221          <fo:conditional-page-master-reference master-reference="blank-draft"
1222                                                blank-or-not-blank="blank"/>
1223          <fo:conditional-page-master-reference master-reference="front-first-draft"
1224                                                page-position="first"/>
1225          <fo:conditional-page-master-reference master-reference="front-odd-draft"
1226                                                odd-or-even="odd"/>
1227          <fo:conditional-page-master-reference 
1228                                                odd-or-even="even">
1229            <xsl:attribute name="master-reference">
1230              <xsl:choose>
1231                <xsl:when test="$double.sided != 0">front-even-draft</xsl:when>
1232                <xsl:otherwise>front-odd-draft</xsl:otherwise>
1233              </xsl:choose>
1234            </xsl:attribute>
1235          </fo:conditional-page-master-reference>
1236        </fo:repeatable-page-master-alternatives>
1237      </fo:page-sequence-master>
1238
1239      <!-- setup for draft body pages -->
1240      <fo:page-sequence-master master-name="body-draft">
1241        <fo:repeatable-page-master-alternatives>
1242          <fo:conditional-page-master-reference master-reference="blank-draft"
1243                                                blank-or-not-blank="blank"/>
1244          <fo:conditional-page-master-reference master-reference="body-first-draft"
1245                                                page-position="first"/>
1246          <fo:conditional-page-master-reference master-reference="body-odd-draft"
1247                                                odd-or-even="odd"/>
1248          <fo:conditional-page-master-reference 
1249                                                odd-or-even="even">
1250            <xsl:attribute name="master-reference">
1251              <xsl:choose>
1252                <xsl:when test="$double.sided != 0">body-even-draft</xsl:when>
1253                <xsl:otherwise>body-odd-draft</xsl:otherwise>
1254              </xsl:choose>
1255            </xsl:attribute>
1256          </fo:conditional-page-master-reference>
1257        </fo:repeatable-page-master-alternatives>
1258      </fo:page-sequence-master>
1259
1260      <!-- setup draft back matter -->
1261      <fo:page-sequence-master master-name="back-draft">
1262        <fo:repeatable-page-master-alternatives>
1263          <fo:conditional-page-master-reference master-reference="blank-draft"
1264                                                blank-or-not-blank="blank"/>
1265          <fo:conditional-page-master-reference master-reference="back-first-draft"
1266                                                page-position="first"/>
1267          <fo:conditional-page-master-reference master-reference="back-odd-draft"
1268                                                odd-or-even="odd"/>
1269          <fo:conditional-page-master-reference 
1270                                                odd-or-even="even">
1271            <xsl:attribute name="master-reference">
1272              <xsl:choose>
1273                <xsl:when test="$double.sided != 0">back-even-draft</xsl:when>
1274                <xsl:otherwise>back-odd-draft</xsl:otherwise>
1275              </xsl:choose>
1276            </xsl:attribute>
1277          </fo:conditional-page-master-reference>
1278        </fo:repeatable-page-master-alternatives>
1279      </fo:page-sequence-master>
1280
1281      <!-- setup draft index pages -->
1282      <fo:page-sequence-master master-name="index-draft">
1283        <fo:repeatable-page-master-alternatives>
1284          <fo:conditional-page-master-reference master-reference="blank-draft"
1285                                                blank-or-not-blank="blank"/>
1286          <fo:conditional-page-master-reference master-reference="index-first-draft"
1287                                                page-position="first"/>
1288          <fo:conditional-page-master-reference master-reference="index-odd-draft"
1289                                                odd-or-even="odd"/>
1290          <fo:conditional-page-master-reference 
1291                                                odd-or-even="even">
1292            <xsl:attribute name="master-reference">
1293              <xsl:choose>
1294                <xsl:when test="$double.sided != 0">index-even-draft</xsl:when>
1295                <xsl:otherwise>index-odd-draft</xsl:otherwise>
1296              </xsl:choose>
1297            </xsl:attribute>
1298          </fo:conditional-page-master-reference>
1299        </fo:repeatable-page-master-alternatives>
1300      </fo:page-sequence-master>
1301    </xsl:if>
1302
1303    <xsl:call-template name="user.pagemasters"/>
1304
1305    </fo:layout-master-set>
1306</xsl:template>
1307
1308<!-- ==================================================================== -->
1309
1310<xsl:template name="user.pagemasters"/> <!-- intentionally empty -->
1311
1312<!-- ==================================================================== -->
1313
1314<xsl:template name="select.pagemaster">
1315  <xsl:param name="element" select="local-name(.)"/>
1316  <xsl:param name="pageclass" select="''"/>
1317
1318  <xsl:variable name="pagemaster">
1319    <xsl:choose>
1320      <xsl:when test="$pageclass != ''">
1321        <xsl:value-of select="$pageclass"/>
1322      </xsl:when>
1323      <xsl:when test="$pageclass = 'lot'">lot</xsl:when>
1324      <xsl:when test="$element = 'dedication'">front</xsl:when>
1325      <xsl:when test="$element = 'preface'">front</xsl:when>
1326      <xsl:when test="$element = 'appendix'">back</xsl:when>
1327      <xsl:when test="$element = 'glossary'">back</xsl:when>
1328      <xsl:when test="$element = 'bibliography'">back</xsl:when>
1329      <xsl:when test="$element = 'index'">index</xsl:when>
1330      <xsl:when test="$element = 'colophon'">back</xsl:when>
1331      <xsl:otherwise>body</xsl:otherwise>
1332    </xsl:choose>
1333
1334    <xsl:choose>
1335      <xsl:when test="$draft.mode = 'yes'">
1336        <xsl:text>-draft</xsl:text>
1337      </xsl:when>
1338      <xsl:when test="$draft.mode = 'no'">
1339        <!-- nop -->
1340      </xsl:when>
1341      <xsl:when test="ancestor-or-self::*[@status][1]/@status = 'draft'">
1342        <xsl:text>-draft</xsl:text>
1343      </xsl:when>
1344      <xsl:otherwise>
1345        <!-- nop -->
1346      </xsl:otherwise>
1347    </xsl:choose>
1348  </xsl:variable>
1349
1350  <xsl:call-template name="select.user.pagemaster">
1351    <xsl:with-param name="element" select="$element"/>
1352    <xsl:with-param name="pageclass" select="$pageclass"/>
1353    <xsl:with-param name="default-pagemaster" select="$pagemaster"/>
1354  </xsl:call-template>
1355</xsl:template>
1356
1357<xsl:template name="select.user.pagemaster">
1358  <xsl:param name="element"/>
1359  <xsl:param name="pageclass"/>
1360  <xsl:param name="default-pagemaster"/>
1361
1362  <!-- by default, return the default. But if you've created your own
1363       pagemasters in user.pagemasters, you might want to select one here. -->
1364  <xsl:value-of select="$default-pagemaster"/>
1365</xsl:template>
1366
1367<!-- ==================================================================== -->
1368
1369<xsl:template name="head.sep.rule">
1370  <xsl:param name="pageclass"/>
1371  <xsl:param name="sequence"/>
1372  <xsl:param name="gentext-key"/>
1373
1374  <xsl:if test="$header.rule != 0">
1375    <xsl:attribute name="border-bottom-width">0.5pt</xsl:attribute>
1376    <xsl:attribute name="border-bottom-style">solid</xsl:attribute>
1377    <xsl:attribute name="border-bottom-color">black</xsl:attribute>
1378  </xsl:if>
1379</xsl:template>
1380
1381<xsl:template name="foot.sep.rule">
1382  <xsl:param name="pageclass"/>
1383  <xsl:param name="sequence"/>
1384  <xsl:param name="gentext-key"/>
1385
1386  <xsl:if test="$footer.rule != 0">
1387    <xsl:attribute name="border-top-width">0.5pt</xsl:attribute>
1388    <xsl:attribute name="border-top-style">solid</xsl:attribute>
1389    <xsl:attribute name="border-top-color">black</xsl:attribute>
1390  </xsl:if>
1391</xsl:template>
1392
1393<!-- ==================================================================== -->
1394
1395<xsl:template match="*" mode="running.head.mode">
1396  <xsl:param name="master-reference" select="'unknown'"/>
1397  <xsl:param name="gentext-key" select="name(.)"/>
1398
1399  <!-- remove -draft from reference -->
1400  <xsl:variable name="pageclass">
1401    <xsl:choose>
1402      <xsl:when test="contains($master-reference, '-draft')">
1403        <xsl:value-of select="substring-before($master-reference, '-draft')"/>
1404      </xsl:when>
1405      <xsl:otherwise>
1406        <xsl:value-of select="$master-reference"/>
1407      </xsl:otherwise>
1408    </xsl:choose>
1409  </xsl:variable>
1410
1411  <fo:static-content flow-name="xsl-region-before-first">
1412    <fo:block xsl:use-attribute-sets="header.content.properties">
1413      <xsl:call-template name="header.table">
1414        <xsl:with-param name="pageclass" select="$pageclass"/>
1415        <xsl:with-param name="sequence" select="'first'"/>
1416        <xsl:with-param name="gentext-key" select="$gentext-key"/>
1417      </xsl:call-template>
1418    </fo:block>
1419  </fo:static-content>
1420
1421  <fo:static-content flow-name="xsl-region-before-odd">
1422    <fo:block xsl:use-attribute-sets="header.content.properties">
1423      <xsl:call-template name="header.table">
1424        <xsl:with-param name="pageclass" select="$pageclass"/>
1425        <xsl:with-param name="sequence" select="'odd'"/>
1426        <xsl:with-param name="gentext-key" select="$gentext-key"/>
1427      </xsl:call-template>
1428    </fo:block>
1429  </fo:static-content>
1430
1431  <fo:static-content flow-name="xsl-region-before-even">
1432    <fo:block xsl:use-attribute-sets="header.content.properties">
1433      <xsl:call-template name="header.table">
1434        <xsl:with-param name="pageclass" select="$pageclass"/>
1435        <xsl:with-param name="sequence" select="'even'"/>
1436        <xsl:with-param name="gentext-key" select="$gentext-key"/>
1437      </xsl:call-template>
1438    </fo:block>
1439  </fo:static-content>
1440
1441  <fo:static-content flow-name="xsl-region-before-blank">
1442    <fo:block xsl:use-attribute-sets="header.content.properties">
1443      <xsl:call-template name="header.table">
1444        <xsl:with-param name="pageclass" select="$pageclass"/>
1445        <xsl:with-param name="sequence" select="'blank'"/>
1446        <xsl:with-param name="gentext-key" select="$gentext-key"/>
1447      </xsl:call-template>
1448    </fo:block>
1449  </fo:static-content>
1450
1451  <xsl:call-template name="footnote-separator"/>
1452
1453  <xsl:if test="$fop.extensions = 0">
1454    <xsl:call-template name="blank.page.content"/>
1455  </xsl:if>
1456</xsl:template>
1457
1458<xsl:template name="footnote-separator">
1459  <fo:static-content flow-name="xsl-footnote-separator">
1460    <fo:block>
1461      <fo:leader xsl:use-attribute-sets="footnote.sep.leader.properties"/>
1462    </fo:block>
1463  </fo:static-content>
1464</xsl:template>
1465
1466<xsl:template name="blank.page.content">
1467  <fo:static-content flow-name="blank-body">
1468    <fo:block text-align="center"/>
1469  </fo:static-content>
1470</xsl:template>
1471
1472<xsl:template name="header.table">
1473  <xsl:param name="pageclass" select="''"/>
1474  <xsl:param name="sequence" select="''"/>
1475  <xsl:param name="gentext-key" select="''"/>
1476
1477  <!-- default is a single table style for all headers -->
1478  <!-- Customize it for different page classes or sequence location -->
1479
1480  <xsl:choose>
1481      <xsl:when test="$pageclass = 'index'">
1482          <xsl:attribute name="margin-left">0pt</xsl:attribute>
1483      </xsl:when>
1484  </xsl:choose>
1485
1486  <xsl:variable name="column1">
1487    <xsl:choose>
1488      <xsl:when test="$double.sided = 0">1</xsl:when>
1489      <xsl:when test="$sequence = 'first' or $sequence = 'odd'">1</xsl:when>
1490      <xsl:otherwise>3</xsl:otherwise>
1491    </xsl:choose>
1492  </xsl:variable>
1493
1494  <xsl:variable name="column3">
1495    <xsl:choose>
1496      <xsl:when test="$double.sided = 0">3</xsl:when>
1497      <xsl:when test="$sequence = 'first' or $sequence = 'odd'">3</xsl:when>
1498      <xsl:otherwise>1</xsl:otherwise>
1499    </xsl:choose>
1500  </xsl:variable>
1501
1502  <xsl:variable name="candidate">
1503    <fo:table table-layout="fixed" width="100%">
1504      <xsl:call-template name="head.sep.rule">
1505        <xsl:with-param name="pageclass" select="$pageclass"/>
1506        <xsl:with-param name="sequence" select="$sequence"/>
1507        <xsl:with-param name="gentext-key" select="$gentext-key"/>
1508      </xsl:call-template>
1509
1510      <fo:table-column column-number="1">
1511        <xsl:attribute name="column-width">
1512          <xsl:text>proportional-column-width(</xsl:text>
1513          <xsl:call-template name="header.footer.width">
1514            <xsl:with-param name="location">header</xsl:with-param>
1515            <xsl:with-param name="position" select="$column1"/>
1516          </xsl:call-template>
1517          <xsl:text>)</xsl:text>
1518        </xsl:attribute>
1519      </fo:table-column>
1520      <fo:table-column column-number="2">
1521        <xsl:attribute name="column-width">
1522          <xsl:text>proportional-column-width(</xsl:text>
1523          <xsl:call-template name="header.footer.width">
1524            <xsl:with-param name="location">header</xsl:with-param>
1525            <xsl:with-param name="position" select="2"/>
1526          </xsl:call-template>
1527          <xsl:text>)</xsl:text>
1528        </xsl:attribute>
1529      </fo:table-column>
1530      <fo:table-column column-number="3">
1531        <xsl:attribute name="column-width">
1532          <xsl:text>proportional-column-width(</xsl:text>
1533          <xsl:call-template name="header.footer.width">
1534            <xsl:with-param name="location">header</xsl:with-param>
1535            <xsl:with-param name="position" select="$column3"/>
1536          </xsl:call-template>
1537          <xsl:text>)</xsl:text>
1538        </xsl:attribute>
1539      </fo:table-column>
1540
1541      <fo:table-body>
1542        <fo:table-row>
1543          <xsl:attribute name="block-progression-dimension.minimum">
1544            <xsl:value-of select="$header.table.height"/>
1545          </xsl:attribute>
1546          <fo:table-cell text-align="left"
1547                         display-align="before">
1548            <xsl:if test="$fop.extensions = 0">
1549              <xsl:attribute name="relative-align">baseline</xsl:attribute>
1550            </xsl:if>
1551            <fo:block>
1552              <xsl:call-template name="header.content">
1553                <xsl:with-param name="pageclass" select="$pageclass"/>
1554                <xsl:with-param name="sequence" select="$sequence"/>
1555                <xsl:with-param name="position" select="'left'"/>
1556                <xsl:with-param name="gentext-key" select="$gentext-key"/>
1557              </xsl:call-template>
1558            </fo:block>
1559          </fo:table-cell>
1560          <fo:table-cell text-align="center"
1561                         display-align="before">
1562            <xsl:if test="$fop.extensions = 0">
1563              <xsl:attribute name="relative-align">baseline</xsl:attribute>
1564            </xsl:if>
1565            <fo:block>
1566              <xsl:call-template name="header.content">
1567                <xsl:with-param name="pageclass" select="$pageclass"/>
1568                <xsl:with-param name="sequence" select="$sequence"/>
1569                <xsl:with-param name="position" select="'center'"/>
1570                <xsl:with-param name="gentext-key" select="$gentext-key"/>
1571              </xsl:call-template>
1572            </fo:block>
1573          </fo:table-cell>
1574          <fo:table-cell text-align="right"
1575                         display-align="before">
1576            <xsl:if test="$fop.extensions = 0">
1577              <xsl:attribute name="relative-align">baseline</xsl:attribute>
1578            </xsl:if>
1579            <fo:block>
1580              <xsl:call-template name="header.content">
1581                <xsl:with-param name="pageclass" select="$pageclass"/>
1582                <xsl:with-param name="sequence" select="$sequence"/>
1583                <xsl:with-param name="position" select="'right'"/>
1584                <xsl:with-param name="gentext-key" select="$gentext-key"/>
1585              </xsl:call-template>
1586            </fo:block>
1587          </fo:table-cell>
1588        </fo:table-row>
1589      </fo:table-body>
1590    </fo:table>
1591  </xsl:variable>
1592
1593  <!-- Really output a header? -->
1594  <xsl:choose>
1595    <xsl:when test="$pageclass = 'titlepage' and $gentext-key = 'book'
1596                    and $sequence='first'">
1597      <!-- no, book titlepages have no headers at all -->
1598    </xsl:when>
1599    <xsl:when test="$sequence = 'blank' and $headers.on.blank.pages = 0">
1600      <!-- no output -->
1601    </xsl:when>
1602    <xsl:otherwise>
1603      <xsl:copy-of select="$candidate"/>
1604    </xsl:otherwise>
1605  </xsl:choose>
1606</xsl:template>
1607
1608<xsl:template name="header.content">
1609  <xsl:param name="pageclass" select="''"/>
1610  <xsl:param name="sequence" select="''"/>
1611  <xsl:param name="position" select="''"/>
1612  <xsl:param name="gentext-key" select="''"/>
1613
1614<!--
1615  <fo:block>
1616    <xsl:value-of select="$pageclass"/>
1617    <xsl:text>, </xsl:text>
1618    <xsl:value-of select="$sequence"/>
1619    <xsl:text>, </xsl:text>
1620    <xsl:value-of select="$position"/>
1621    <xsl:text>, </xsl:text>
1622    <xsl:value-of select="$gentext-key"/>
1623  </fo:block>
1624-->
1625
1626  <fo:block>
1627
1628    <!-- sequence can be odd, even, first, blank -->
1629    <!-- position can be left, center, right -->
1630    <xsl:choose>
1631      <xsl:when test="$sequence = 'blank'">
1632        <!-- nothing -->
1633      </xsl:when>
1634
1635      <xsl:when test="$position='left'">
1636        <!-- Same for odd, even, empty, and blank sequences -->
1637        <xsl:call-template name="draft.text"/>
1638      </xsl:when>
1639
1640      <xsl:when test="($sequence='odd' or $sequence='even') and $position='center'">
1641        <xsl:if test="$pageclass != 'titlepage'">
1642          <xsl:choose>
1643            <xsl:when test="ancestor::book and ($double.sided != 0)">
1644              <fo:retrieve-marker retrieve-class-name="section.head.marker"
1645                                  retrieve-position="first-including-carryover"
1646                                  retrieve-boundary="page-sequence"/>
1647            </xsl:when>
1648            <xsl:otherwise>
1649              <xsl:apply-templates select="." mode="titleabbrev.markup"/>
1650            </xsl:otherwise>
1651          </xsl:choose>
1652        </xsl:if>
1653      </xsl:when>
1654
1655      <xsl:when test="$position='center'">
1656        <!-- nothing for empty and blank sequences -->
1657      </xsl:when>
1658
1659      <xsl:when test="$position='right'">
1660        <!-- Same for odd, even, empty, and blank sequences -->
1661        <xsl:call-template name="draft.text"/>
1662      </xsl:when>
1663
1664      <xsl:when test="$sequence = 'first'">
1665        <!-- nothing for first pages -->
1666      </xsl:when>
1667
1668      <xsl:when test="$sequence = 'blank'">
1669        <!-- nothing for blank pages -->
1670      </xsl:when>
1671    </xsl:choose>
1672  </fo:block>
1673</xsl:template>
1674
1675<xsl:template name="header.footer.width">
1676  <xsl:param name="location" select="'header'"/>
1677  <xsl:param name="position" select="1"/>
1678
1679  <xsl:variable name="width.set">
1680    <xsl:choose>
1681      <xsl:when test="$location = 'header'">
1682        <xsl:value-of select="normalize-space($header.column.widths)"/>
1683      </xsl:when>
1684      <xsl:otherwise>
1685        <xsl:value-of select="normalize-space($footer.column.widths)"/>
1686      </xsl:otherwise>
1687    </xsl:choose>
1688  </xsl:variable>
1689
1690
1691  <xsl:variable name="width">
1692    <xsl:choose>
1693      <xsl:when test="$position = 1">
1694        <xsl:value-of select="substring-before($width.set, ' ')"/>
1695      </xsl:when>
1696      <xsl:when test="$position = 2">
1697        <xsl:value-of select="substring-before(substring-after($width.set, ' '), ' ')"/>
1698      </xsl:when>
1699      <xsl:otherwise>
1700        <xsl:value-of select="substring-after(substring-after($width.set, ' '), ' ')"/>
1701      </xsl:otherwise>
1702    </xsl:choose>
1703  </xsl:variable>
1704
1705  <!-- Make sure it is a number -->
1706  <xsl:choose>
1707    <xsl:when test = "$width = number($width)">
1708      <xsl:value-of select="$width"/>
1709    </xsl:when>
1710    <xsl:otherwise>
1711      <xsl:message>Error: value in <xsl:value-of select="$location"/>.column.widths at position <xsl:value-of select="$position"/> is not a number.</xsl:message>
1712      <xsl:text>1</xsl:text>
1713    </xsl:otherwise>
1714  </xsl:choose>
1715</xsl:template>
1716
1717<xsl:template name="draft.text">
1718  <xsl:choose>
1719    <xsl:when test="$draft.mode = 'yes'">
1720      <xsl:call-template name="gentext">
1721        <xsl:with-param name="key" select="'Draft'"/>
1722      </xsl:call-template>
1723    </xsl:when>
1724    <xsl:when test="$draft.mode = 'no'">
1725      <!-- nop -->
1726    </xsl:when>
1727    <xsl:when test="ancestor-or-self::*[@status][1]/@status = 'draft'">
1728      <xsl:call-template name="gentext">
1729        <xsl:with-param name="key" select="'Draft'"/>
1730      </xsl:call-template>
1731    </xsl:when>
1732    <xsl:otherwise>
1733      <!-- nop -->
1734    </xsl:otherwise>
1735  </xsl:choose>
1736</xsl:template>
1737
1738<!-- ==================================================================== -->
1739
1740<xsl:template match="*" mode="running.foot.mode">
1741  <xsl:param name="master-reference" select="'unknown'"/>
1742  <xsl:param name="gentext-key" select="name(.)"/>
1743
1744  <!-- remove -draft from reference -->
1745  <xsl:variable name="pageclass">
1746    <xsl:choose>
1747      <xsl:when test="contains($master-reference, '-draft')">
1748        <xsl:value-of select="substring-before($master-reference, '-draft')"/>
1749      </xsl:when>
1750      <xsl:otherwise>
1751        <xsl:value-of select="$master-reference"/>
1752      </xsl:otherwise>
1753    </xsl:choose>
1754  </xsl:variable>
1755
1756  <fo:static-content flow-name="xsl-region-after-first">
1757    <fo:block xsl:use-attribute-sets="footer.content.properties">
1758      <xsl:call-template name="footer.table">
1759        <xsl:with-param name="pageclass" select="$pageclass"/>
1760        <xsl:with-param name="sequence" select="'first'"/>
1761        <xsl:with-param name="gentext-key" select="$gentext-key"/>
1762      </xsl:call-template>
1763    </fo:block>
1764  </fo:static-content>
1765
1766  <fo:static-content flow-name="xsl-region-after-odd">
1767    <fo:block xsl:use-attribute-sets="footer.content.properties">
1768      <xsl:call-template name="footer.table">
1769        <xsl:with-param name="pageclass" select="$pageclass"/>
1770        <xsl:with-param name="sequence" select="'odd'"/>
1771        <xsl:with-param name="gentext-key" select="$gentext-key"/>
1772      </xsl:call-template>
1773    </fo:block>
1774  </fo:static-content>
1775
1776  <fo:static-content flow-name="xsl-region-after-even">
1777    <fo:block xsl:use-attribute-sets="footer.content.properties">
1778      <xsl:call-template name="footer.table">
1779        <xsl:with-param name="pageclass" select="$pageclass"/>
1780        <xsl:with-param name="sequence" select="'even'"/>
1781        <xsl:with-param name="gentext-key" select="$gentext-key"/>
1782      </xsl:call-template>
1783    </fo:block>
1784  </fo:static-content>
1785
1786  <fo:static-content flow-name="xsl-region-after-blank">
1787    <fo:block xsl:use-attribute-sets="footer.content.properties">
1788      <xsl:call-template name="footer.table">
1789        <xsl:with-param name="pageclass" select="$pageclass"/>
1790        <xsl:with-param name="sequence" select="'blank'"/>
1791        <xsl:with-param name="gentext-key" select="$gentext-key"/>
1792      </xsl:call-template>
1793    </fo:block>
1794  </fo:static-content>
1795</xsl:template>
1796
1797<xsl:template name="footer.table">
1798  <xsl:param name="pageclass" select="''"/>
1799  <xsl:param name="sequence" select="''"/>
1800  <xsl:param name="gentext-key" select="''"/>
1801
1802  <!-- default is a single table style for all footers -->
1803  <!-- Customize it for different page classes or sequence location -->
1804
1805  <xsl:choose>
1806      <xsl:when test="$pageclass = 'index'">
1807          <xsl:attribute name="margin-left">0pt</xsl:attribute>
1808      </xsl:when>
1809  </xsl:choose>
1810
1811  <xsl:variable name="column1">
1812    <xsl:choose>
1813      <xsl:when test="$double.sided = 0">1</xsl:when>
1814      <xsl:when test="$sequence = 'first' or $sequence = 'odd'">1</xsl:when>
1815      <xsl:otherwise>3</xsl:otherwise>
1816    </xsl:choose>
1817  </xsl:variable>
1818
1819  <xsl:variable name="column3">
1820    <xsl:choose>
1821      <xsl:when test="$double.sided = 0">3</xsl:when>
1822      <xsl:when test="$sequence = 'first' or $sequence = 'odd'">3</xsl:when>
1823      <xsl:otherwise>1</xsl:otherwise>
1824    </xsl:choose>
1825  </xsl:variable>
1826
1827  <xsl:variable name="candidate">
1828    <fo:table table-layout="fixed" width="100%">
1829      <xsl:call-template name="foot.sep.rule">
1830        <xsl:with-param name="pageclass" select="$pageclass"/>
1831        <xsl:with-param name="sequence" select="$sequence"/>
1832        <xsl:with-param name="gentext-key" select="$gentext-key"/>
1833      </xsl:call-template>
1834      <fo:table-column column-number="1">
1835        <xsl:attribute name="column-width">
1836          <xsl:text>proportional-column-width(</xsl:text>
1837          <xsl:call-template name="header.footer.width">
1838            <xsl:with-param name="location">footer</xsl:with-param>
1839            <xsl:with-param name="position" select="$column1"/>
1840          </xsl:call-template>
1841          <xsl:text>)</xsl:text>
1842        </xsl:attribute>
1843      </fo:table-column>
1844      <fo:table-column column-number="2">
1845        <xsl:attribute name="column-width">
1846          <xsl:text>proportional-column-width(</xsl:text>
1847          <xsl:call-template name="header.footer.width">
1848            <xsl:with-param name="location">footer</xsl:with-param>
1849            <xsl:with-param name="position" select="2"/>
1850          </xsl:call-template>
1851          <xsl:text>)</xsl:text>
1852        </xsl:attribute>
1853      </fo:table-column>
1854      <fo:table-column column-number="3">
1855        <xsl:attribute name="column-width">
1856          <xsl:text>proportional-column-width(</xsl:text>
1857          <xsl:call-template name="header.footer.width">
1858            <xsl:with-param name="location">footer</xsl:with-param>
1859            <xsl:with-param name="position" select="$column3"/>
1860          </xsl:call-template>
1861          <xsl:text>)</xsl:text>
1862        </xsl:attribute>
1863      </fo:table-column>
1864
1865      <fo:table-body>
1866        <fo:table-row>
1867          <xsl:attribute name="block-progression-dimension.minimum">
1868            <xsl:value-of select="$footer.table.height"/>
1869          </xsl:attribute>
1870          <fo:table-cell text-align="left"
1871                         display-align="after">
1872            <xsl:if test="$fop.extensions = 0">
1873              <xsl:attribute name="relative-align">baseline</xsl:attribute>
1874            </xsl:if>
1875            <fo:block>
1876              <xsl:call-template name="footer.content">
1877                <xsl:with-param name="pageclass" select="$pageclass"/>
1878                <xsl:with-param name="sequence" select="$sequence"/>
1879                <xsl:with-param name="position" select="'left'"/>
1880                <xsl:with-param name="gentext-key" select="$gentext-key"/>
1881              </xsl:call-template>
1882            </fo:block>
1883          </fo:table-cell>
1884          <fo:table-cell text-align="center"
1885                         display-align="after">
1886            <xsl:if test="$fop.extensions = 0">
1887              <xsl:attribute name="relative-align">baseline</xsl:attribute>
1888            </xsl:if>
1889            <fo:block>
1890              <xsl:call-template name="footer.content">
1891                <xsl:with-param name="pageclass" select="$pageclass"/>
1892                <xsl:with-param name="sequence" select="$sequence"/>
1893                <xsl:with-param name="position" select="'center'"/>
1894                <xsl:with-param name="gentext-key" select="$gentext-key"/>
1895              </xsl:call-template>
1896            </fo:block>
1897          </fo:table-cell>
1898          <fo:table-cell text-align="right"
1899                         display-align="after">
1900            <xsl:if test="$fop.extensions = 0">
1901              <xsl:attribute name="relative-align">baseline</xsl:attribute>
1902            </xsl:if>
1903            <fo:block>
1904              <xsl:call-template name="footer.content">
1905                <xsl:with-param name="pageclass" select="$pageclass"/>
1906                <xsl:with-param name="sequence" select="$sequence"/>
1907                <xsl:with-param name="position" select="'right'"/>
1908                <xsl:with-param name="gentext-key" select="$gentext-key"/>
1909              </xsl:call-template>
1910            </fo:block>
1911          </fo:table-cell>
1912        </fo:table-row>
1913      </fo:table-body>
1914    </fo:table>
1915  </xsl:variable>
1916
1917  <!-- Really output a footer? -->
1918  <xsl:choose>
1919    <xsl:when test="$pageclass='titlepage' and $gentext-key='book'
1920                    and $sequence='first'">
1921      <!-- no, book titlepages have no footers at all -->
1922    </xsl:when>
1923    <xsl:when test="$sequence = 'blank' and $footers.on.blank.pages = 0">
1924      <!-- no output -->
1925    </xsl:when>
1926    <xsl:otherwise>
1927      <xsl:copy-of select="$candidate"/>
1928    </xsl:otherwise>
1929  </xsl:choose>
1930</xsl:template>
1931
1932<xsl:template name="footer.content">
1933  <xsl:param name="pageclass" select="''"/>
1934  <xsl:param name="sequence" select="''"/>
1935  <xsl:param name="position" select="''"/>
1936  <xsl:param name="gentext-key" select="''"/>
1937
1938<!--
1939  <fo:block>
1940    <xsl:value-of select="$pageclass"/>
1941    <xsl:text>, </xsl:text>
1942    <xsl:value-of select="$sequence"/>
1943    <xsl:text>, </xsl:text>
1944    <xsl:value-of select="$position"/>
1945    <xsl:text>, </xsl:text>
1946    <xsl:value-of select="$gentext-key"/>
1947  </fo:block>
1948-->
1949
1950  <fo:block>
1951    <!-- pageclass can be front, body, back -->
1952    <!-- sequence can be odd, even, first, blank -->
1953    <!-- position can be left, center, right -->
1954    <xsl:choose>
1955      <xsl:when test="$pageclass = 'titlepage'">
1956        <!-- nop; no footer on title pages -->
1957      </xsl:when>
1958
1959      <xsl:when test="$double.sided != 0 and $sequence = 'even'
1960                      and $position='left'">
1961        <fo:page-number/>
1962      </xsl:when>
1963
1964      <xsl:when test="$double.sided != 0 and ($sequence = 'odd' or $sequence = 'first')
1965                      and $position='right'">
1966        <fo:page-number/>
1967      </xsl:when>
1968
1969      <xsl:when test="$double.sided = 0 and $position='center'">
1970        <fo:page-number/>
1971      </xsl:when>
1972
1973      <xsl:when test="$sequence='blank'">
1974        <xsl:choose>
1975          <xsl:when test="$double.sided != 0 and $position = 'left'">
1976            <fo:page-number/>
1977          </xsl:when>
1978          <xsl:when test="$double.sided = 0 and $position = 'center'">
1979            <fo:page-number/>
1980          </xsl:when>
1981          <xsl:otherwise>
1982            <!-- nop -->
1983          </xsl:otherwise>
1984        </xsl:choose>
1985      </xsl:when>
1986
1987
1988      <xsl:otherwise>
1989        <!-- nop -->
1990      </xsl:otherwise>
1991    </xsl:choose>
1992  </fo:block>
1993</xsl:template>
1994
1995<!-- ==================================================================== -->
1996
1997<xsl:template name="page.number.format">
1998  <xsl:param name="element" select="local-name(.)"/>
1999  <xsl:param name="master-reference" select="''"/>
2000
2001  <xsl:choose>
2002    <xsl:when test="$element = 'toc' and self::book">i</xsl:when>
2003    <xsl:when test="$element = 'preface'">i</xsl:when>
2004    <xsl:when test="$element = 'dedication'">i</xsl:when>
2005    <xsl:otherwise>1</xsl:otherwise>
2006  </xsl:choose>
2007</xsl:template>
2008
2009<xsl:template name="initial.page.number">
2010  <xsl:param name="element" select="local-name(.)"/>
2011  <xsl:param name="master-reference" select="''"/>
2012
2013  <!-- Select the first content that the stylesheet places
2014       after the TOC -->
2015  <xsl:variable name="first.book.content" 
2016                select="ancestor::book/*[
2017                          not(self::title or
2018                              self::subtitle or
2019                              self::titleabbrev or
2020                              self::bookinfo or
2021                              self::info or
2022                              self::dedication or
2023                              self::toc or
2024                              self::lot)][1]"/>
2025  <xsl:choose>
2026    <!-- double-sided output -->
2027    <xsl:when test="$double.sided != 0">
2028      <xsl:choose>
2029        <xsl:when test="$element = 'toc'">auto-odd</xsl:when>
2030        <xsl:when test="$element = 'book'">1</xsl:when>
2031        <!-- preface typically continues TOC roman numerals -->
2032        <!-- Change page.number.format if not -->
2033        <xsl:when test="$element = 'preface'">auto-odd</xsl:when>
2034        <xsl:when test="($element = 'dedication' or $element = 'article') 
2035                    and not(preceding::chapter
2036                            or preceding::preface
2037                            or preceding::appendix
2038                            or preceding::article
2039                            or preceding::dedication
2040                            or parent::part
2041                            or parent::reference)">1</xsl:when>
2042        <xsl:when test="generate-id($first.book.content) =
2043                        generate-id(.)">1</xsl:when>
2044        <xsl:otherwise>auto-odd</xsl:otherwise>
2045      </xsl:choose>
2046    </xsl:when>
2047
2048    <!-- single-sided output -->
2049    <xsl:otherwise>
2050      <xsl:choose>
2051        <xsl:when test="$element = 'toc'">auto</xsl:when>
2052        <xsl:when test="$element = 'book'">1</xsl:when>
2053        <xsl:when test="$element = 'preface'">auto</xsl:when>
2054       <xsl:when test="($element = 'dedication' or $element = 'article') and
2055                        not(preceding::chapter
2056                            or preceding::preface
2057                            or preceding::appendix
2058                            or preceding::article
2059                            or preceding::dedication
2060                            or parent::part
2061                            or parent::reference)">1</xsl:when>
2062        <xsl:when test="generate-id($first.book.content) =
2063                        generate-id(.)">1</xsl:when>
2064        <xsl:otherwise>auto</xsl:otherwise>
2065      </xsl:choose>
2066    </xsl:otherwise>
2067  </xsl:choose>
2068</xsl:template>
2069
2070<xsl:template name="force.page.count">
2071  <xsl:param name="element" select="local-name(.)"/>
2072  <xsl:param name="master-reference" select="''"/>
2073
2074  <xsl:choose>
2075    <!-- double-sided output -->
2076    <xsl:when test="$double.sided != 0">end-on-even</xsl:when>
2077    <!-- single-sided output -->
2078    <xsl:otherwise>no-force</xsl:otherwise>
2079  </xsl:choose>
2080</xsl:template>
2081
2082<xsl:template name="set.flow.properties">
2083  <xsl:param name="element" select="local-name(.)"/>
2084  <xsl:param name="master-reference" select="''"/>
2085
2086  <!-- This template is called after each <fo:flow> starts. -->
2087  <!-- Customize this template to set attributes on fo:flow -->
2088
2089  <xsl:choose>
2090    <xsl:when test="$fop.extensions != 0 or $passivetex.extensions != 0">
2091      <!-- body.start.indent does not work well with these processors -->
2092    </xsl:when>
2093    <xsl:when test="starts-with($master-reference, 'body') or
2094                    starts-with($master-reference, 'lot') or
2095                    starts-with($master-reference, 'front') or
2096                    $element = 'preface' or
2097                    (starts-with($master-reference, 'back') and
2098                    $element = 'appendix')">
2099      <xsl:attribute name="start-indent">
2100        <xsl:value-of select="$body.start.indent"/>
2101      </xsl:attribute>
2102      <xsl:attribute name="end-indent">
2103        <xsl:value-of select="$body.end.indent"/>
2104      </xsl:attribute>
2105    </xsl:when>
2106  </xsl:choose>
2107
2108</xsl:template>
2109<!-- ==================================================================== -->
2110
2111</xsl:stylesheet>
2112