Updated for eximstats 1.52
[exim.git] / doc / doc-docbook / MyStyle-fo.xsl
CommitLineData
3cb1b51e 1<!-- $Cambridge: exim/doc/doc-docbook/MyStyle-fo.xsl,v 1.5 2006/12/19 12:28:35 ph10 Exp $ -->
168e428f
PH
2
3<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
4 xmlns:fo="http://www.w3.org/1999/XSL/Format"
5 version="1.0">
6
7<!-- This stylesheet driver contains changes that I want to apply to the
8printed output form of both the filter document and the main Exim
9specification. It is imported by MyStyle-filter-fo.xsl and MyStyle-spec-fo.xsl.
10-->
11
12<xsl:import href="MyTitleStyle.xsl"/>
13
14
15
16<!-- Set A4 paper, double sided -->
17
18<xsl:param name="paper.type" select="'A4'"></xsl:param>
19
20<!-- This currently causes errors
21<xsl:param name="double.sided" select="1"></xsl:param>
22-->
23
9b371988
PH
24<!-- Let's have whatever fop extensions there are -->
25
26<xsl:param name="fop.extensions" select="1"></xsl:param>
27
4f578862
PH
28<!-- Arrange for the table of contents to be an even number of pages. The name
29"lot" includes all pages that contain a "list of titles", which in our case is
30only the TOC. -->
31
32<xsl:template name="force.page.count">
33 <xsl:param name="element" select="local-name(.)"/>
34 <xsl:param name="master-reference" select="''"/>
35 <xsl:choose>
36 <xsl:when test="$master-reference = 'lot'">end-on-even</xsl:when>
37 <xsl:otherwise>no-force</xsl:otherwise>
38 </xsl:choose>
39</xsl:template>
40
168e428f
PH
41<!-- Allow for typed index entries. The "role" setting works with DocBook
42version 4.2 or earlier. Later versions (which we are not currently using)
43need "type". -->
44
45<xsl:param name="index.on.type" select="1"></xsl:param>
46<xsl:param name="index.on.role" select="1"></xsl:param>
47
168e428f
PH
48<!-- The default uses short chapter titles in the TOC! I want them only for
49use in footer lines. So we have to modify this template. I changed
50"titleabbrev.markup" to "title.markup". While I'm here, I also made chapter
51entries print in bold. -->
52
53<xsl:template name="toc.line">
54 <xsl:variable name="id">
55 <xsl:call-template name="object.id"/>
56 </xsl:variable>
57
58 <xsl:variable name="label">
59 <xsl:apply-templates select="." mode="label.markup"/>
60 </xsl:variable>
61
62 <fo:block text-align-last="justify"
63 end-indent="{$toc.indent.width}pt"
64 last-line-end-indent="-{$toc.indent.width}pt">
65 <fo:inline keep-with-next.within-line="always">
66 <!-- Added lines for bold -->
67 <xsl:choose>
68 <xsl:when test="self::chapter">
69 <xsl:attribute name="font-weight">bold</xsl:attribute>
70 </xsl:when>
71 <xsl:when test="self::index">
72 <xsl:attribute name="font-weight">bold</xsl:attribute>
73 </xsl:when>
74 </xsl:choose>
75 <!-- .................. -->
76 <fo:basic-link internal-destination="{$id}">
77 <xsl:if test="$label != ''">
78 <xsl:copy-of select="$label"/>
79 <xsl:value-of select="$autotoc.label.separator"/>
80 </xsl:if>
81 <xsl:apply-templates select="." mode="title.markup"/>
82 </fo:basic-link>
83 </fo:inline>
84 <fo:inline keep-together.within-line="always">
85 <xsl:text> </xsl:text>
86 <fo:leader leader-pattern="dots"
87 leader-pattern-width="3pt"
88 leader-alignment="reference-area"
89 keep-with-next.within-line="always"/>
90 <xsl:text> </xsl:text>
91 <fo:basic-link internal-destination="{$id}">
92 <fo:page-number-citation ref-id="{$id}"/>
93 </fo:basic-link>
94 </fo:inline>
95 </fo:block>
96</xsl:template>
97
98
168e428f
PH
99<!--
100Adjust the sizes of the fonts for titles; the defaults are too gross.
101-->
102
103<!-- Level 1 is sect1 level -->
104
105<xsl:attribute-set name="section.title.level1.properties">
106 <xsl:attribute name="font-size">
107 <xsl:value-of select="$body.font.master * 1.2"></xsl:value-of>
108 <xsl:text>pt</xsl:text>
109 </xsl:attribute>
110</xsl:attribute-set>
111
112
113<!-- Fiddling with chapter titles is more messy -->
114
115<xsl:template match="title" mode="chapter.titlepage.recto.auto.mode">
116 <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"
117 xsl:use-attribute-sets="chapter.titlepage.recto.style"
118 margin-left="{$title.margin.left}"
119 font-size="17pt"
120 font-weight="bold"
121 font-family="{$title.font.family}">
122 <xsl:call-template name="component.title">
123 <xsl:with-param name="node" select="ancestor-or-self::chapter[1]"/>
124 </xsl:call-template>
125 </fo:block>
126</xsl:template>
127
128<xsl:template match="title" mode="chapter.titlepage.verso.auto.mode">
129 <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"
130 xsl:use-attribute-sets="chapter.titlepage.recto.style"
131 margin-left="{$title.margin.left}"
132 font-size="17pt"
133 font-weight="bold"
134 font-family="{$title.font.family}">
135 <xsl:call-template name="component.title">
136 <xsl:with-param name="node" select="ancestor-or-self::chapter[1]"/>
137 </xsl:call-template>
138 </fo:block>
139</xsl:template>
140
141
142<!-- This provides a hard pagebreak mechanism as a get-out -->
143
144<xsl:template match="processing-instruction('hard-pagebreak')">
145 <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" break-before='page'>
146 </fo:block>
147</xsl:template>
148
149
150<!-- Sort out the footer. Useful information is available at
151http://www.sagehill.net/docbookxsl/PrintHeaders.html
152-->
153
168e428f
PH
154<xsl:attribute-set name="footer.content.properties">
155 <!-- <xsl:attribute name="font-family">serif</xsl:attribute> -->
156 <!-- <xsl:attribute name="font-size">9pt</xsl:attribute> -->
157 <xsl:attribute name="font-style">italic</xsl:attribute>
158</xsl:attribute-set>
159
160
9b371988 161<!-- The default cell widths make the centre one too large -->
168e428f 162
9b371988 163<xsl:param name="footer.column.widths">4 1 4</xsl:param>
168e428f 164
168e428f 165
9b371988
PH
166<!-- Put the abbreviated chapter titles in running feet, and add the chapter
167number afterwards in parentheses. I changed title.markup to titleabbrev.markup,
168and added some lines.
168e428f
PH
169-->
170
168e428f
PH
171<xsl:template name="footer.content">
172 <xsl:param name="pageclass" select="''"/>
173 <xsl:param name="sequence" select="''"/>
174 <xsl:param name="position" select="''"/>
175 <xsl:param name="gentext-key" select="''"/>
176
177 <fo:block>
178 <!-- pageclass can be front, body, back -->
179 <!-- sequence can be odd, even, first, blank -->
180 <!-- position can be left, center, right -->
181 <xsl:choose>
182 <xsl:when test="$pageclass = 'titlepage'">
183 <!-- nop; no footer on title pages -->
184 </xsl:when>
185
186 <xsl:when test="$double.sided != 0 and $sequence = 'even'
187 and $position='left'">
188 <fo:page-number/>
189 </xsl:when>
190
191 <xsl:when test="$double.sided != 0 and ($sequence = 'odd' or $sequence = 'first')
192 and $position='right'">
193 <fo:page-number/>
194 </xsl:when>
195
196 <xsl:when test="$double.sided = 0 and $position='center'">
197 <fo:page-number/>
198 </xsl:when>
199
9b371988
PH
200 <!-- This clause added by PH -->
201 <xsl:when test="$double.sided = 0 and $position='right' and $pageclass='body'">
202 <xsl:apply-templates select="." mode="titleabbrev.markup"/>
203 <xsl:text> (</xsl:text>
204 <xsl:apply-templates select="." mode="label.markup"/>
205 <xsl:text>)</xsl:text>
206 </xsl:when>
207
208 <!-- Changed title.markup to titleabbrev.markup for TOC -->
168e428f
PH
209 <xsl:when test="$double.sided = 0 and $position='right'">
210 <xsl:apply-templates select="." mode="titleabbrev.markup"/>
211 </xsl:when>
212
213 <xsl:when test="$sequence='blank'">
214 <xsl:choose>
215 <xsl:when test="$double.sided != 0 and $position = 'left'">
216 <fo:page-number/>
217 </xsl:when>
218 <xsl:when test="$double.sided = 0 and $position = 'center'">
219 <fo:page-number/>
220 </xsl:when>
221 <xsl:otherwise>
222 <!-- nop -->
223 </xsl:otherwise>
224 </xsl:choose>
225 </xsl:when>
226
227 <xsl:otherwise>
228 <!-- nop -->
229 </xsl:otherwise>
230 </xsl:choose>
231 </fo:block>
232</xsl:template>
233
9b371988
PH
234
235<!-- Arrange for ordered list numbers to be in parentheses instead of just
236followed by a dot, which I don't like. Unfortunately, this styling is
237output-specific, so we have to do it separately for FO and HTML output. -->
238
3cb1b51e
PH
239<xsl:param name="orderedlist.label.width" select="'2.0em'"></xsl:param>
240
241<xsl:attribute-set name="orderedlist.label.properties">
242 <xsl:attribute name="text-align">left</xsl:attribute>
243</xsl:attribute-set>
244
9b371988
PH
245<xsl:template match="orderedlist/listitem" mode="item-number">
246 <xsl:variable name="numeration">
247 <xsl:call-template name="list.numeration">
248 <xsl:with-param name="node" select="parent::orderedlist"/>
249 </xsl:call-template>
250 </xsl:variable>
251
252 <xsl:variable name="type">
253 <xsl:choose>
254 <xsl:when test="$numeration='arabic'">(1)</xsl:when>
255 <xsl:when test="$numeration='loweralpha'">(a)</xsl:when>
256 <xsl:when test="$numeration='lowerroman'">(i)</xsl:when>
257 <xsl:when test="$numeration='upperalpha'">(A)</xsl:when>
258 <xsl:when test="$numeration='upperroman'">(I)</xsl:when>
259 <!-- What!? This should never happen -->
260 <xsl:otherwise>
261 <xsl:message>
262 <xsl:text>Unexpected numeration: </xsl:text>
263 <xsl:value-of select="$numeration"/>
264 </xsl:message>
265 <xsl:value-of select="1."/>
266 </xsl:otherwise>
267 </xsl:choose>
268 </xsl:variable>
269
270 <xsl:variable name="item-number">
271 <xsl:call-template name="orderedlist-item-number"/>
272 </xsl:variable>
273
274 <xsl:if test="parent::orderedlist/@inheritnum='inherit'
275 and ancestor::listitem[parent::orderedlist]">
276 <xsl:apply-templates select="ancestor::listitem[parent::orderedlist][1]"
277 mode="item-number"/>
278 </xsl:if>
279
280 <xsl:number value="$item-number" format="{$type}"/>
281</xsl:template>
282
168e428f 283</xsl:stylesheet>