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 7 <!-- set indent = yes while debugging, then change to NO --> 8 <xsl:output method="xml" indent="no"/> 9 10 11 <!-- passivetex fo extensions: PDF bookmarks and index terms --> 12 <xsl:param name="use.extensions" select="'1'"/> 13 <xsl:param name="passivetex.extensions" select="1"/> 14 <!-- turn draft mode off --> 15 <xsl:param name="draft.mode" select="'no'"></xsl:param> 16 <!-- be extra sure we are using single sided --> 17 <xsl:param name="double.sided" select="'0'"/> 18 <!-- output in 'block' mode --> 19 <xsl:param name="variablelist.as.blocks" select="1"/> 20 <!-- don't show url separately in ulinks --> 21 <xsl:param name="ulink.show" select="0"/> 22 <!-- control generation of tocs --> 23 <xsl:param name="generate.toc"> 24 set toc,title 25 book toc,title 26 part toc,title 27 chapter nop,title 28 section nop 29 sect1 nop 30 sect2 nop 31 sect3 nop 32 sect4 nop 33 sect5 nop 34 article nop 35 book/article nop 36 article/sect1 nop 37 appendix toc,title 38 preface toc,title 39 reference toc,title 40 qandadiv toc 41 qandaset toc 42 </xsl:param> 43 44 <!-- properties common to html + fo ................................... --> 45 46 <!-- we like '1.2 Title' --> 47 <xsl:param name="section.autolabel" select="'1'"/> 48 <xsl:param name="section.label.includes.component.label" select="'1'"/> 49 50 <!-- Do not put 'Chapter' at the start of eg 'Chapter 1. Doing This' --> 51 <xsl:param name="local.l10n.xml" select="document('')"/> 52 <l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0"> 53 <l:l10n language="en"> 54 <l:context name="title-numbered"> 55 <l:template name="chapter" text="%n. %t"/> 56 </l:context> 57 </l:l10n> 58 </l:i18n> 59 60 <!-- per Bob Stayton: turn off xml:base processing pro tem --> 61 <!-- should hopefully be fixed in next docbook stylesheets release (1.70) --> 62 <!-- ensures correct source paths, eg. images/my_img.png --> 63 <xsl:template match="@fileref"> 64 <xsl:value-of select="."/> 65 </xsl:template> 66 67 <!-- end properties common to html + fo ............................... --> 68 69 70 <!-- Bug-fix for Suse 10 PassiveTex version --> 71 <!-- Precompute attribute values 'cos PassiveTex is too stupid: --> 72 <xsl:attribute-set name="component.title.properties"> 73 <xsl:attribute name="keep-with-next.within-column">always</xsl:attribute> 74 <xsl:attribute name="space-before.optimum"> 75 <xsl:value-of select="concat($body.font.master, 'pt')"/> 76 </xsl:attribute> 77 <xsl:attribute name="space-before.minimum"> 78 <xsl:value-of select="$body.font.master * 0.8"/> 79 <xsl:text>pt</xsl:text> 80 </xsl:attribute> 81 <xsl:attribute name="space-before.maximum"> 82 <xsl:value-of select="$body.font.master * 1.2"/> 83 <xsl:text>pt</xsl:text> 84 </xsl:attribute> 85 <xsl:attribute name="hyphenate">false</xsl:attribute> 86 </xsl:attribute-set> 87 88 <!-- show links in color --> 89 <xsl:attribute-set name="xref.properties"> 90 <xsl:attribute name="color">blue</xsl:attribute> 91 </xsl:attribute-set> 92 93 <!-- colored background for programlisting and screen --> 94 <!-- setting param shade.verbatim=1 screws up literallayout --> 95 <!-- something chronic, so have to go this route --> 96 <xsl:template match="programlisting|screen|synopsis"> 97 <xsl:param name="suppress-numbers" select="'0'"/> 98 <xsl:variable name="id"><xsl:call-template name="object.id"/></xsl:variable> 99 <xsl:variable name="content"> 100 <xsl:choose> 101 <xsl:when test="$suppress-numbers = '0' 102 and @linenumbering = 'numbered' 103 and $use.extensions != '0' 104 and $linenumbering.extension != '0'"> 105 <xsl:call-template name="number.rtf.lines"> 106 <xsl:with-param name="rtf"> 107 <xsl:apply-templates/> 108 </xsl:with-param> 109 </xsl:call-template> 110 </xsl:when> 111 <xsl:otherwise> 112 <xsl:apply-templates/> 113 </xsl:otherwise> 114 </xsl:choose> 115 </xsl:variable> 116 <fo:block id="{$id}" white-space-collapse='false' white-space-treatment='preserve' 117 linefeed-treatment="preserve" background-color="#f2f2f9" 118 xsl:use-attribute-sets="monospace.verbatim.properties"> 119 <xsl:choose> 120 <xsl:when test="$hyphenate.verbatim != 0 121 and function-available('exsl:node-set')"> 122 <xsl:apply-templates select="exsl:node-set($content)" 123 mode="hyphenate.verbatim"/> 124 </xsl:when> 125 <xsl:otherwise> 126 <xsl:copy-of select="$content"/> 127 </xsl:otherwise> 128 </xsl:choose> 129 </fo:block> 130 </xsl:template> 131 132 133 <!-- customised set title-page template --> 134 <xsl:template name="set.titlepage"> 135 <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"> 136 <xsl:variable name="recto.content"> 137 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" 138 select="setinfo/title"/> 139 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" 140 select="setinfo/releaseinfo"/> 141 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" 142 select="setinfo/copyright"/> 143 <xsl:apply-templates mode="set.titlepage.recto.auto.mode" 144 select="setinfo/legalnotice"/> 145 </xsl:variable> 146 <xsl:variable name="recto.elements.count" select="1"/> 147 <fo:block> 148 <xsl:copy-of select="$recto.content"/> 149 </fo:block> 150 <xsl:call-template name="set.titlepage.separator"/> 151 </fo:block> 152 </xsl:template> 153 154 <!-- put some extra space after the set title --> 155 <xsl:template match="title" mode="set.titlepage.recto.auto.mode"> 156 <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" 157 xsl:use-attribute-sets="set.titlepage.recto.style" 158 text-align="center" font-size="24.8832pt" space-before="18.6624pt" 159 space-after="18.6624pt" font-weight="bold" font-family="{$title.fontset}"> 160 <xsl:call-template name="division.title"> 161 <xsl:with-param name="node" select="ancestor-or-self::set[1]"/> 162 </xsl:call-template> 163 </fo:block> 164 </xsl:template> 165 166 <!-- put release-info + copyright centered and bold --> 167 <xsl:template match="releaseinfo" mode="set.titlepage.recto.auto.mode"> 168 <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" text-align="center" 169 font-size="14pt" font-weight="bold" font-family="{$title.fontset}"> 170 <xsl:apply-templates select="." mode="set.titlepage.recto.mode"/> 171 </fo:block> 172 </xsl:template> 173 174 <xsl:template match="copyright" mode="set.titlepage.recto.auto.mode"> 175 <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" text-align="center" 176 font-size="12pt" font-weight="bold" font-family="{$title.fontset}"> 177 <xsl:apply-templates select="." mode="set.titlepage.recto.mode"/> 178 </fo:block> 179 </xsl:template> 180 181 182 <!-- customised book title-page template --> 183 <xsl:template name="book.titlepage"> 184 <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"> 185 <xsl:variable name="recto.content"> 186 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" 187 select="bookinfo/title"/> 188 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" 189 select="bookinfo/subtitle"/> 190 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" 191 select="bookinfo/releaseinfo"/> 192 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" 193 select="bookinfo/copyright"/> 194 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" 195 select="bookinfo/author"/> 196 <xsl:apply-templates mode="book.titlepage.recto.auto.mode" 197 select="bookinfo/legalnotice"/> 198 </xsl:variable> 199 <xsl:variable name="recto.elements.count" select="1"/> 200 <fo:block> 201 <xsl:copy-of select="$recto.content"/> 202 </fo:block> 203 <xsl:call-template name="book.titlepage.separator"/> 204 </fo:block> 205 </xsl:template> 206 207 <!-- put some extra space after the book title --> 208 <xsl:template match="title" mode="book.titlepage.recto.auto.mode"> 209 <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" 210 xsl:use-attribute-sets="book.titlepage.recto.style" 211 text-align="center" font-size="24.8832pt" space-before="18.6624pt" 212 space-after="18.6624pt" font-weight="bold" font-family="{$title.fontset}"> 213 <xsl:call-template name="division.title"> 214 <xsl:with-param name="node" select="ancestor-or-self::book[1]"/> 215 </xsl:call-template> 216 </fo:block> 217 </xsl:template> 218 219 <!-- center subtitles --> 220 <xsl:template match="subtitle" mode="book.titlepage.recto.auto.mode"> 221 <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" text-align="center" 222 font-size="14pt" font-weight="bold" font-family="{$title.fontset}"> 223 <xsl:apply-templates select="." mode="book.titlepage.recto.mode"/> 224 </fo:block> 225 </xsl:template> 226 227 <!-- no docbook template for bookinfo/releaseinfo, so make one --> 228 <xsl:template match="releaseinfo" mode="book.titlepage.recto.auto.mode"> 229 <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" text-align="center" 230 font-size="12pt" font-weight="bold" font-family="{$title.fontset}"> 231 <xsl:apply-templates select="." mode="book.titlepage.recto.mode"/> 232 </fo:block> 233 </xsl:template> 234 235 <!-- no docbook recto template for bookinfo/copyright, so make one --> 236 <xsl:template match="copyright" mode="book.titlepage.recto.auto.mode"> 237 <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" text-align="center" 238 font-size="11pt" font-weight="bold" font-family="{$title.fontset}"> 239 <xsl:apply-templates select="." mode="book.titlepage.recto.mode"/> 240 </fo:block> 241 </xsl:template> 242 243 <!-- customised email for titlepages --> 244 <xsl:template match="author" mode="book.titlepage.recto.auto.mode"> 245 <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" text-align="center" 246 font-size="10pt" font-family="{$title.fontset}"> 247 <xsl:if test="email"> 248 <xsl:text>Email: </xsl:text> 249 <xsl:apply-templates select="(email)[1]"/> 250 </xsl:if> 251 </fo:block> 252 </xsl:template> 253 254 255 <!-- show only book titles in the top-level set toc --> 256 <xsl:template match="book|setindex" mode="toc"> 257 <xsl:param name="toc-context" select="."/> 258 <xsl:variable name="id"> 259 <xsl:call-template name="object.id"/> 260 </xsl:variable> 261 <xsl:variable name="cid"> 262 <xsl:call-template name="object.id"> 263 <xsl:with-param name="object" select="$toc-context"/> 264 </xsl:call-template> 265 </xsl:variable> 266 <xsl:call-template name="toc.line"/> 267 <xsl:variable name="nodes" select="glossary|bibliography|preface|chapter 268 |reference|part|article|appendix|index"/> 269 <xsl:variable name="depth.from.context" 270 select="count(ancestor::*)-count($toc-context/ancestor::*)"/> 271 <xsl:if test="$toc.section.depth > 0 and not($toc-context/self::set) 272 and $toc.max.depth > $depth.from.context and $nodes"> 273 <fo:block id="toc.{$cid}.{$id}"> 274 <xsl:attribute name="margin-left"> 275 <xsl:call-template name="set.toc.indent"/> 276 </xsl:attribute> 277 <xsl:apply-templates select="$nodes" mode="toc"> 278 <xsl:with-param name="toc-context" select="$toc-context"/> 279 </xsl:apply-templates> 280 </fo:block> 281 </xsl:if> 282 </xsl:template> 283 284 285 <!-- TODO: don`t generate a TOC at all for Quick-Start and FAQ --> 286 287 288 289 <!-- page headers: --> 290 <xsl:template name="header.table"> 291 <xsl:param name="pageclass" select="''"/> 292 <xsl:param name="sequence" select="''"/> 293 <xsl:param name="gentext-key" select="''"/> 294 <xsl:variable name="candidate"> 295 <fo:table table-layout="fixed" width="100%" border-bottom-width="0.5pt" border-bottom-style="solid" border-bottom-color="black"> 296 <fo:table-column column-number="1" column-width="100%"/> 297 <fo:table-body> 298 <fo:table-row height="14pt"> 299 <fo:table-cell text-align="right" display-align="before" relative-align="baseline"> 300 <fo:block> 301 <xsl:apply-templates select="." mode="titleabbrev.markup"/> 302 </fo:block> 303 </fo:table-cell> 304 </fo:table-row> 305 </fo:table-body> 306 </fo:table> 307 </xsl:variable> 308 <xsl:choose> 309 <xsl:when test="$pageclass='titlepage' or $sequence='blank' 310 or ($sequence='first' and $gentext-key='chapter')"> 311 <!-- noop on titlepages, first chapter page or blank pages --> 312 </xsl:when> 313 <xsl:otherwise> 314 <xsl:copy-of select="$candidate"/> 315 </xsl:otherwise> 316 </xsl:choose> 317 </xsl:template> 318 319 320 321 <!-- page footers: two 80|20 cols w/right-aligned page numbers --> 322 <xsl:template name="footer.table"> 323 <xsl:param name="pageclass" select="''"/> 324 <xsl:param name="sequence" select="''"/> 325 <xsl:param name="gentext-key" select="''"/> 326 <xsl:variable name="candidate"> 327 <fo:table table-layout="fixed" width="100%"> 328 <fo:table-column column-number="1" column-width="80%"/> 329 <fo:table-column column-number="2" column-width="20%"/> 330 <fo:table-body> 331 <fo:table-row height="14pt"> 332 <fo:table-cell text-align="left" display-align="after" 333 relative-align="baseline"> 334 <fo:block/> 335 <!-- 336 <fo:block> 337 <xsl:text>Pageclass: </xsl:text> 338 <xsl:value-of select="$pageclass"/> 339 <xsl:text> Sequence: </xsl:text> 340 <xsl:value-of select="$sequence"/> 341 <xsl:text> Gentext-Key: </xsl:text> 342 <xsl:value-of select="$gentext-key"/> 343 </fo:block> 344 --> 345 </fo:table-cell> 346 <fo:table-cell text-align="right" display-align="after" 347 relative-align="baseline"> 348 <fo:block> 349 <fo:page-number/> 350 </fo:block> 351 </fo:table-cell> 352 </fo:table-row> 353 </fo:table-body> 354 </fo:table> 355 </xsl:variable> 356 <xsl:choose> 357 <xsl:when test="$pageclass='titlepage' or $sequence='blank'"> 358 <!-- noop on titlepages or blank pages --> 359 </xsl:when> 360 <xsl:otherwise> 361 <xsl:copy-of select="$candidate"/> 362 </xsl:otherwise> 363 </xsl:choose> 364 </xsl:template> 365 366 367 <!-- workaround bug in passivetex fo output for itemizedlist --> 368 <xsl:template match="itemizedlist/listitem"> 369 <xsl:variable name="id"><xsl:call-template name="object.id"/></xsl:variable> 370 <xsl:variable name="item.contents"> 371 <fo:list-item-label end-indent="label-end()"> 372 <fo:block> 373 <xsl:call-template name="itemizedlist.label.markup"> 374 <xsl:with-param name="itemsymbol"> 375 <xsl:call-template name="list.itemsymbol"> 376 <xsl:with-param name="node" select="parent::itemizedlist"/> 377 </xsl:call-template> 378 </xsl:with-param> 379 </xsl:call-template> 380 </fo:block> 381 </fo:list-item-label> 382 <fo:list-item-body start-indent="body-start()"> 383 <xsl:apply-templates/> <!-- removed extra block wrapper --> 384 </fo:list-item-body> 385 </xsl:variable> 386 <xsl:choose> 387 <xsl:when test="parent::*/@spacing = 'compact'"> 388 <fo:list-item id="{$id}" xsl:use-attribute-sets="compact.list.item.spacing"> 389 <xsl:copy-of select="$item.contents"/> 390 </fo:list-item> 391 </xsl:when> 392 <xsl:otherwise> 393 <fo:list-item id="{$id}" xsl:use-attribute-sets="list.item.spacing"> 394 <xsl:copy-of select="$item.contents"/> 395 </fo:list-item> 396 </xsl:otherwise> 397 </xsl:choose> 398 </xsl:template> 399 400 <!-- workaround bug in passivetex fo output for orderedlist --> 401 <xsl:template match="orderedlist/listitem"> 402 <xsl:variable name="id"><xsl:call-template name="object.id"/></xsl:variable> 403 <xsl:variable name="item.contents"> 404 <fo:list-item-label end-indent="label-end()"> 405 <fo:block> 406 <xsl:apply-templates select="." mode="item-number"/> 407 </fo:block> 408 </fo:list-item-label> 409 <fo:list-item-body start-indent="body-start()"> 410 <xsl:apply-templates/> <!-- removed extra block wrapper --> 411 </fo:list-item-body> 412 </xsl:variable> 413 <xsl:choose> 414 <xsl:when test="parent::*/@spacing = 'compact'"> 415 <fo:list-item id="{$id}" xsl:use-attribute-sets="compact.list.item.spacing"> 416 <xsl:copy-of select="$item.contents"/> 417 </fo:list-item> 418 </xsl:when> 419 <xsl:otherwise> 420 <fo:list-item id="{$id}" xsl:use-attribute-sets="list.item.spacing"> 421 <xsl:copy-of select="$item.contents"/> 422 </fo:list-item> 423 </xsl:otherwise> 424 </xsl:choose> 425 </xsl:template> 426 427 428 </xsl:stylesheet> 429