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