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"> 24set toc,title 25book toc,title 26part toc,title 27chapter nop,title 28section nop 29sect1 nop 30sect2 nop 31sect3 nop 32sect4 nop 33sect5 nop 34article nop 35book/article nop 36article/sect1 nop 37appendix toc,title 38preface toc,title 39reference toc,title 40qandadiv toc 41qandaset 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