]>
Commit | Line | Data |
---|---|---|
92f5a8d4 TL |
1 | <?xml version="1.0" encoding="UTF-8"?> <!-- -*- sgml -*- --> |
2 | <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" | |
3 | xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0"> | |
4 | ||
5 | <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl"/> | |
6 | <xsl:import href="bz-common.xsl"/> | |
7 | ||
8 | <!-- set indent = yes while debugging, then change to NO --> | |
9 | <xsl:output method="xml" indent="yes"/> | |
10 | ||
11 | <!-- ensure only passivetex extensions are on --> | |
12 | <xsl:param name="stylesheet.result.type" select="'fo'"/> | |
13 | <!-- fo extensions: PDF bookmarks and index terms --> | |
14 | <xsl:param name="use.extensions" select="'1'"/> | |
15 | <xsl:param name="xep.extensions" select="0"/> | |
16 | <xsl:param name="fop.extensions" select="0"/> | |
17 | <xsl:param name="saxon.extensions" select="0"/> | |
18 | <xsl:param name="passivetex.extensions" select="1"/> | |
19 | <xsl:param name="tablecolumns.extension" select="'1'"/> | |
20 | ||
21 | <!-- ensure we are using single sided --> | |
22 | <xsl:param name="double.sided" select="'0'"/> | |
23 | ||
24 | <!-- insert cross references to page numbers --> | |
25 | <xsl:param name="insert.xref.page.number" select="1"/> | |
26 | ||
27 | <!-- <?custom-pagebreak?> inserts a page break at this point --> | |
28 | <xsl:template match="processing-instruction('custom-pagebreak')"> | |
29 | <fo:block break-before='page'/> | |
30 | </xsl:template> | |
31 | ||
32 | <!-- show links in color --> | |
33 | <xsl:attribute-set name="xref.properties"> | |
34 | <xsl:attribute name="color">blue</xsl:attribute> | |
35 | </xsl:attribute-set> | |
36 | ||
37 | <!-- make pre listings indented a bit + a bg colour --> | |
38 | <xsl:template match="programlisting | screen"> | |
39 | <fo:block start-indent="0.25in" wrap-option="no-wrap" | |
40 | white-space-collapse="false" text-align="start" | |
41 | font-family="monospace" background-color="#f2f2f9" | |
42 | linefeed-treatment="preserve" | |
43 | xsl:use-attribute-sets="normal.para.spacing"> | |
44 | <xsl:apply-templates/> | |
45 | </fo:block> | |
46 | </xsl:template> | |
47 | <!-- make verbatim output prettier --> | |
48 | <xsl:template match="literallayout"> | |
49 | <fo:block start-indent="0.25in" wrap-option="no-wrap" | |
50 | white-space-collapse="false" text-align="start" | |
51 | font-family="monospace" background-color="#edf7f4" | |
52 | linefeed-treatment="preserve" | |
53 | space-before="0em" space-after="0em"> | |
54 | <xsl:apply-templates/> | |
55 | </fo:block> | |
56 | </xsl:template> | |
57 | ||
58 | <!-- workaround bug in passivetex fo output for itemizedlist --> | |
59 | <xsl:template match="itemizedlist/listitem"> | |
60 | <xsl:variable name="id"> | |
61 | <xsl:call-template name="object.id"/></xsl:variable> | |
62 | <xsl:variable name="itemsymbol"> | |
63 | <xsl:call-template name="list.itemsymbol"> | |
64 | <xsl:with-param name="node" select="parent::itemizedlist"/> | |
65 | </xsl:call-template> | |
66 | </xsl:variable> | |
67 | <xsl:variable name="item.contents"> | |
68 | <fo:list-item-label end-indent="label-end()"> | |
69 | <fo:block> | |
70 | <xsl:choose> | |
71 | <xsl:when test="$itemsymbol='disc'">•</xsl:when> | |
72 | <xsl:when test="$itemsymbol='bullet'">•</xsl:when> | |
73 | <xsl:otherwise>•</xsl:otherwise> | |
74 | </xsl:choose> | |
75 | </fo:block> | |
76 | </fo:list-item-label> | |
77 | <fo:list-item-body start-indent="body-start()"> | |
78 | <xsl:apply-templates/> <!-- removed extra block wrapper --> | |
79 | </fo:list-item-body> | |
80 | </xsl:variable> | |
81 | <xsl:choose> | |
82 | <xsl:when test="parent::*/@spacing = 'compact'"> | |
83 | <fo:list-item id="{$id}" | |
84 | xsl:use-attribute-sets="compact.list.item.spacing"> | |
85 | <xsl:copy-of select="$item.contents"/> | |
86 | </fo:list-item> | |
87 | </xsl:when> | |
88 | <xsl:otherwise> | |
89 | <fo:list-item id="{$id}" xsl:use-attribute-sets="list.item.spacing"> | |
90 | <xsl:copy-of select="$item.contents"/> | |
91 | </fo:list-item> | |
92 | </xsl:otherwise> | |
93 | </xsl:choose> | |
94 | </xsl:template> | |
95 | ||
96 | <!-- workaround bug in passivetex fo output for orderedlist --> | |
97 | <xsl:template match="orderedlist/listitem"> | |
98 | <xsl:variable name="id"> | |
99 | <xsl:call-template name="object.id"/></xsl:variable> | |
100 | <xsl:variable name="item.contents"> | |
101 | <fo:list-item-label end-indent="label-end()"> | |
102 | <fo:block> | |
103 | <xsl:apply-templates select="." mode="item-number"/> | |
104 | </fo:block> | |
105 | </fo:list-item-label> | |
106 | <fo:list-item-body start-indent="body-start()"> | |
107 | <xsl:apply-templates/> <!-- removed extra block wrapper --> | |
108 | </fo:list-item-body> | |
109 | </xsl:variable> | |
110 | <xsl:choose> | |
111 | <xsl:when test="parent::*/@spacing = 'compact'"> | |
112 | <fo:list-item id="{$id}" | |
113 | xsl:use-attribute-sets="compact.list.item.spacing"> | |
114 | <xsl:copy-of select="$item.contents"/> | |
115 | </fo:list-item> | |
116 | </xsl:when> | |
117 | <xsl:otherwise> | |
118 | <fo:list-item id="{$id}" xsl:use-attribute-sets="list.item.spacing"> | |
119 | <xsl:copy-of select="$item.contents"/> | |
120 | </fo:list-item> | |
121 | </xsl:otherwise> | |
122 | </xsl:choose> | |
123 | </xsl:template> | |
124 | ||
125 | <!-- workaround bug in passivetex fo output for variablelist --> | |
126 | <xsl:param name="variablelist.as.blocks" select="1"/> | |
127 | <xsl:template match="varlistentry" mode="vl.as.blocks"> | |
128 | <xsl:variable name="id"> | |
129 | <xsl:call-template name="object.id"/></xsl:variable> | |
130 | <fo:block id="{$id}" xsl:use-attribute-sets="list.item.spacing" | |
131 | keep-together.within-column="always" | |
132 | keep-with-next.within-column="always"> | |
133 | <xsl:apply-templates select="term"/> | |
134 | </fo:block> | |
135 | <fo:block start-indent="0.5in" end-indent="0in" | |
136 | space-after.minimum="0.2em" | |
137 | space-after.optimum="0.4em" | |
138 | space-after.maximum="0.6em"> | |
139 | <fo:block> | |
140 | <xsl:apply-templates select="listitem"/> | |
141 | </fo:block> | |
142 | </fo:block> | |
143 | </xsl:template> | |
144 | ||
145 | ||
146 | <!-- workaround bug in footers: force right-align w/two 80|30 cols --> | |
147 | <xsl:template name="footer.table"> | |
148 | <xsl:param name="pageclass" select="''"/> | |
149 | <xsl:param name="sequence" select="''"/> | |
150 | <xsl:param name="gentext-key" select="''"/> | |
151 | <xsl:choose> | |
152 | <xsl:when test="$pageclass = 'index'"> | |
153 | <xsl:attribute name="margin-left">0pt</xsl:attribute> | |
154 | </xsl:when> | |
155 | </xsl:choose> | |
156 | <xsl:variable name="candidate"> | |
157 | <fo:table table-layout="fixed" width="100%"> | |
158 | <fo:table-column column-number="1" column-width="80%"/> | |
159 | <fo:table-column column-number="2" column-width="20%"/> | |
160 | <fo:table-body> | |
161 | <fo:table-row height="14pt"> | |
162 | <fo:table-cell text-align="left" display-align="after"> | |
163 | <xsl:attribute name="relative-align">baseline</xsl:attribute> | |
164 | <fo:block> | |
165 | <fo:block> </fo:block><!-- empty cell --> | |
166 | </fo:block> | |
167 | </fo:table-cell> | |
168 | <fo:table-cell text-align="center" display-align="after"> | |
169 | <xsl:attribute name="relative-align">baseline</xsl:attribute> | |
170 | <fo:block> | |
171 | <xsl:call-template name="footer.content"> | |
172 | <xsl:with-param name="pageclass" select="$pageclass"/> | |
173 | <xsl:with-param name="sequence" select="$sequence"/> | |
174 | <xsl:with-param name="position" select="'center'"/> | |
175 | <xsl:with-param name="gentext-key" select="$gentext-key"/> | |
176 | </xsl:call-template> | |
177 | </fo:block> | |
178 | </fo:table-cell> | |
179 | </fo:table-row> | |
180 | </fo:table-body> | |
181 | </fo:table> | |
182 | </xsl:variable> | |
183 | <!-- Really output a footer? --> | |
184 | <xsl:choose> | |
185 | <xsl:when test="$pageclass='titlepage' and $gentext-key='book' | |
186 | and $sequence='first'"> | |
187 | <!-- no, book titlepages have no footers at all --> | |
188 | </xsl:when> | |
189 | <xsl:when test="$sequence = 'blank' and $footers.on.blank.pages = 0"> | |
190 | <!-- no output --> | |
191 | </xsl:when> | |
192 | <xsl:otherwise> | |
193 | <xsl:copy-of select="$candidate"/> | |
194 | </xsl:otherwise> | |
195 | </xsl:choose> | |
196 | </xsl:template> | |
197 | ||
198 | ||
199 | <!-- fix bug in headers: force right-align w/two 40|60 cols --> | |
200 | <xsl:template name="header.table"> | |
201 | <xsl:param name="pageclass" select="''"/> | |
202 | <xsl:param name="sequence" select="''"/> | |
203 | <xsl:param name="gentext-key" select="''"/> | |
204 | <xsl:choose> | |
205 | <xsl:when test="$pageclass = 'index'"> | |
206 | <xsl:attribute name="margin-left">0pt</xsl:attribute> | |
207 | </xsl:when> | |
208 | </xsl:choose> | |
209 | <xsl:variable name="candidate"> | |
210 | <fo:table table-layout="fixed" width="100%"> | |
211 | <xsl:call-template name="head.sep.rule"> | |
212 | <xsl:with-param name="pageclass" select="$pageclass"/> | |
213 | <xsl:with-param name="sequence" select="$sequence"/> | |
214 | <xsl:with-param name="gentext-key" select="$gentext-key"/> | |
215 | </xsl:call-template> | |
216 | <fo:table-column column-number="1" column-width="40%"/> | |
217 | <fo:table-column column-number="2" column-width="60%"/> | |
218 | <fo:table-body> | |
219 | <fo:table-row height="14pt"> | |
220 | <fo:table-cell text-align="left" display-align="before"> | |
221 | <xsl:attribute name="relative-align">baseline</xsl:attribute> | |
222 | <fo:block> | |
223 | <fo:block> </fo:block><!-- empty cell --> | |
224 | </fo:block> | |
225 | </fo:table-cell> | |
226 | <fo:table-cell text-align="center" display-align="before"> | |
227 | <xsl:attribute name="relative-align">baseline</xsl:attribute> | |
228 | <fo:block> | |
229 | <xsl:call-template name="header.content"> | |
230 | <xsl:with-param name="pageclass" select="$pageclass"/> | |
231 | <xsl:with-param name="sequence" select="$sequence"/> | |
232 | <xsl:with-param name="position" select="'center'"/> | |
233 | <xsl:with-param name="gentext-key" select="$gentext-key"/> | |
234 | </xsl:call-template> | |
235 | </fo:block> | |
236 | </fo:table-cell> | |
237 | </fo:table-row> | |
238 | </fo:table-body> | |
239 | </fo:table> | |
240 | </xsl:variable> | |
241 | <!-- Really output a header? --> | |
242 | <xsl:choose> | |
243 | <xsl:when test="$pageclass = 'titlepage' and $gentext-key = 'book' | |
244 | and $sequence='first'"> | |
245 | <!-- no, book titlepages have no headers at all --> | |
246 | </xsl:when> | |
247 | <xsl:when test="$sequence = 'blank' and $headers.on.blank.pages = 0"> | |
248 | <!-- no output --> | |
249 | </xsl:when> | |
250 | <xsl:otherwise> | |
251 | <xsl:copy-of select="$candidate"/> | |
252 | </xsl:otherwise> | |
253 | </xsl:choose> | |
254 | </xsl:template> | |
255 | ||
256 | ||
257 | <!-- Bug-fix for Suse 10 PassiveTex version --> | |
258 | <!-- Precompute attribute values 'cos PassiveTex is too stupid: --> | |
259 | <xsl:attribute-set name="component.title.properties"> | |
260 | <xsl:attribute name="keep-with-next.within-column">always</xsl:attribute> | |
261 | <xsl:attribute name="space-before.optimum"> | |
262 | <xsl:value-of select="concat($body.font.master, 'pt')"/> | |
263 | </xsl:attribute> | |
264 | <xsl:attribute name="space-before.minimum"> | |
265 | <xsl:value-of select="$body.font.master * 0.8"/> | |
266 | <xsl:text>pt</xsl:text> | |
267 | </xsl:attribute> | |
268 | <xsl:attribute name="space-before.maximum"> | |
269 | <xsl:value-of select="$body.font.master * 1.2"/> | |
270 | <xsl:text>pt</xsl:text> | |
271 | </xsl:attribute> | |
272 | <xsl:attribute name="hyphenate">false</xsl:attribute> | |
273 | </xsl:attribute-set> | |
274 | ||
275 | ||
276 | </xsl:stylesheet> |