| <?xml version="1.0" encoding="UTF-8"?> <!-- -*- sgml -*- --> |
| <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" |
| xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0"> |
| |
| <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl"/> |
| |
| <!-- set indent = yes while debugging, then change to NO --> |
| <xsl:output method="xml" indent="no"/> |
| |
| |
| <!-- passivetex fo extensions: PDF bookmarks and index terms --> |
| <xsl:param name="use.extensions" select="'1'"/> |
| <xsl:param name="passivetex.extensions" select="1"/> |
| <!-- turn draft mode off --> |
| <xsl:param name="draft.mode" select="'no'"></xsl:param> |
| <!-- be extra sure we are using single sided --> |
| <xsl:param name="double.sided" select="'0'"/> |
| <!-- output in 'block' mode --> |
| <xsl:param name="variablelist.as.blocks" select="1"/> |
| <!-- don't show url separately in ulinks --> |
| <xsl:param name="ulink.show" select="0"/> |
| <!-- control generation of tocs --> |
| <xsl:param name="generate.toc"> |
| set toc,title |
| book toc,title |
| part toc,title |
| chapter nop,title |
| section nop |
| sect1 nop |
| sect2 nop |
| sect3 nop |
| sect4 nop |
| sect5 nop |
| article nop |
| book/article nop |
| article/sect1 nop |
| appendix toc,title |
| preface toc,title |
| reference toc,title |
| qandadiv toc |
| qandaset toc |
| </xsl:param> |
| |
| <!-- properties common to html + fo ................................... --> |
| |
| <!-- we like '1.2 Title' --> |
| <xsl:param name="section.autolabel" select="'1'"/> |
| <xsl:param name="section.label.includes.component.label" select="'1'"/> |
| |
| <!-- Do not put 'Chapter' at the start of eg 'Chapter 1. Doing This' --> |
| <xsl:param name="local.l10n.xml" select="document('')"/> |
| <l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0"> |
| <l:l10n language="en"> |
| <l:context name="title-numbered"> |
| <l:template name="chapter" text="%n. %t"/> |
| </l:context> |
| </l:l10n> |
| </l:i18n> |
| |
| <!-- per Bob Stayton: turn off xml:base processing pro tem --> |
| <!-- should hopefully be fixed in next docbook stylesheets release (1.70) --> |
| <!-- ensures correct source paths, eg. images/my_img.png --> |
| <xsl:template match="@fileref"> |
| <xsl:value-of select="."/> |
| </xsl:template> |
| |
| <!-- end properties common to html + fo ............................... --> |
| |
| |
| <!-- Bug-fix for Suse 10 PassiveTex version --> |
| <!-- Precompute attribute values 'cos PassiveTex is too stupid: --> |
| <xsl:attribute-set name="component.title.properties"> |
| <xsl:attribute name="keep-with-next.within-column">always</xsl:attribute> |
| <xsl:attribute name="space-before.optimum"> |
| <xsl:value-of select="concat($body.font.master, 'pt')"/> |
| </xsl:attribute> |
| <xsl:attribute name="space-before.minimum"> |
| <xsl:value-of select="$body.font.master * 0.8"/> |
| <xsl:text>pt</xsl:text> |
| </xsl:attribute> |
| <xsl:attribute name="space-before.maximum"> |
| <xsl:value-of select="$body.font.master * 1.2"/> |
| <xsl:text>pt</xsl:text> |
| </xsl:attribute> |
| <xsl:attribute name="hyphenate">false</xsl:attribute> |
| </xsl:attribute-set> |
| |
| <!-- show links in color --> |
| <xsl:attribute-set name="xref.properties"> |
| <xsl:attribute name="color">blue</xsl:attribute> |
| </xsl:attribute-set> |
| |
| <!-- colored background for programlisting and screen --> |
| <!-- setting param shade.verbatim=1 screws up literallayout --> |
| <!-- something chronic, so have to go this route --> |
| <xsl:template match="programlisting|screen|synopsis"> |
| <xsl:param name="suppress-numbers" select="'0'"/> |
| <xsl:variable name="id"><xsl:call-template name="object.id"/></xsl:variable> |
| <xsl:variable name="content"> |
| <xsl:choose> |
| <xsl:when test="$suppress-numbers = '0' |
| and @linenumbering = 'numbered' |
| and $use.extensions != '0' |
| and $linenumbering.extension != '0'"> |
| <xsl:call-template name="number.rtf.lines"> |
| <xsl:with-param name="rtf"> |
| <xsl:apply-templates/> |
| </xsl:with-param> |
| </xsl:call-template> |
| </xsl:when> |
| <xsl:otherwise> |
| <xsl:apply-templates/> |
| </xsl:otherwise> |
| </xsl:choose> |
| </xsl:variable> |
| <fo:block id="{$id}" white-space-collapse='false' white-space-treatment='preserve' |
| linefeed-treatment="preserve" background-color="#f2f2f9" |
| xsl:use-attribute-sets="monospace.verbatim.properties"> |
| <xsl:choose> |
| <xsl:when test="$hyphenate.verbatim != 0 |
| and function-available('exsl:node-set')"> |
| <xsl:apply-templates select="exsl:node-set($content)" |
| mode="hyphenate.verbatim"/> |
| </xsl:when> |
| <xsl:otherwise> |
| <xsl:copy-of select="$content"/> |
| </xsl:otherwise> |
| </xsl:choose> |
| </fo:block> |
| </xsl:template> |
| |
| |
| <!-- customised set title-page template --> |
| <xsl:template name="set.titlepage"> |
| <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"> |
| <xsl:variable name="recto.content"> |
| <xsl:apply-templates mode="set.titlepage.recto.auto.mode" |
| select="setinfo/title"/> |
| <xsl:apply-templates mode="set.titlepage.recto.auto.mode" |
| select="setinfo/releaseinfo"/> |
| <xsl:apply-templates mode="set.titlepage.recto.auto.mode" |
| select="setinfo/copyright"/> |
| <xsl:apply-templates mode="set.titlepage.recto.auto.mode" |
| select="setinfo/legalnotice"/> |
| </xsl:variable> |
| <xsl:variable name="recto.elements.count" select="1"/> |
| <fo:block> |
| <xsl:copy-of select="$recto.content"/> |
| </fo:block> |
| <xsl:call-template name="set.titlepage.separator"/> |
| </fo:block> |
| </xsl:template> |
| |
| <!-- put some extra space after the set title --> |
| <xsl:template match="title" mode="set.titlepage.recto.auto.mode"> |
| <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" |
| xsl:use-attribute-sets="set.titlepage.recto.style" |
| text-align="center" font-size="24.8832pt" space-before="18.6624pt" |
| space-after="18.6624pt" font-weight="bold" font-family="{$title.fontset}"> |
| <xsl:call-template name="division.title"> |
| <xsl:with-param name="node" select="ancestor-or-self::set[1]"/> |
| </xsl:call-template> |
| </fo:block> |
| </xsl:template> |
| |
| <!-- put release-info + copyright centered and bold --> |
| <xsl:template match="releaseinfo" mode="set.titlepage.recto.auto.mode"> |
| <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" text-align="center" |
| font-size="14pt" font-weight="bold" font-family="{$title.fontset}"> |
| <xsl:apply-templates select="." mode="set.titlepage.recto.mode"/> |
| </fo:block> |
| </xsl:template> |
| |
| <xsl:template match="copyright" mode="set.titlepage.recto.auto.mode"> |
| <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" text-align="center" |
| font-size="12pt" font-weight="bold" font-family="{$title.fontset}"> |
| <xsl:apply-templates select="." mode="set.titlepage.recto.mode"/> |
| </fo:block> |
| </xsl:template> |
| |
| |
| <!-- customised book title-page template --> |
| <xsl:template name="book.titlepage"> |
| <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"> |
| <xsl:variable name="recto.content"> |
| <xsl:apply-templates mode="book.titlepage.recto.auto.mode" |
| select="bookinfo/title"/> |
| <xsl:apply-templates mode="book.titlepage.recto.auto.mode" |
| select="bookinfo/subtitle"/> |
| <xsl:apply-templates mode="book.titlepage.recto.auto.mode" |
| select="bookinfo/releaseinfo"/> |
| <xsl:apply-templates mode="book.titlepage.recto.auto.mode" |
| select="bookinfo/copyright"/> |
| <xsl:apply-templates mode="book.titlepage.recto.auto.mode" |
| select="bookinfo/author"/> |
| <xsl:apply-templates mode="book.titlepage.recto.auto.mode" |
| select="bookinfo/legalnotice"/> |
| </xsl:variable> |
| <xsl:variable name="recto.elements.count" select="1"/> |
| <fo:block> |
| <xsl:copy-of select="$recto.content"/> |
| </fo:block> |
| <xsl:call-template name="book.titlepage.separator"/> |
| </fo:block> |
| </xsl:template> |
| |
| <!-- put some extra space after the book title --> |
| <xsl:template match="title" mode="book.titlepage.recto.auto.mode"> |
| <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" |
| xsl:use-attribute-sets="book.titlepage.recto.style" |
| text-align="center" font-size="24.8832pt" space-before="18.6624pt" |
| space-after="18.6624pt" font-weight="bold" font-family="{$title.fontset}"> |
| <xsl:call-template name="division.title"> |
| <xsl:with-param name="node" select="ancestor-or-self::book[1]"/> |
| </xsl:call-template> |
| </fo:block> |
| </xsl:template> |
| |
| <!-- center subtitles --> |
| <xsl:template match="subtitle" mode="book.titlepage.recto.auto.mode"> |
| <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" text-align="center" |
| font-size="14pt" font-weight="bold" font-family="{$title.fontset}"> |
| <xsl:apply-templates select="." mode="book.titlepage.recto.mode"/> |
| </fo:block> |
| </xsl:template> |
| |
| <!-- no docbook template for bookinfo/releaseinfo, so make one --> |
| <xsl:template match="releaseinfo" mode="book.titlepage.recto.auto.mode"> |
| <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" text-align="center" |
| font-size="12pt" font-weight="bold" font-family="{$title.fontset}"> |
| <xsl:apply-templates select="." mode="book.titlepage.recto.mode"/> |
| </fo:block> |
| </xsl:template> |
| |
| <!-- no docbook recto template for bookinfo/copyright, so make one --> |
| <xsl:template match="copyright" mode="book.titlepage.recto.auto.mode"> |
| <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" text-align="center" |
| font-size="11pt" font-weight="bold" font-family="{$title.fontset}"> |
| <xsl:apply-templates select="." mode="book.titlepage.recto.mode"/> |
| </fo:block> |
| </xsl:template> |
| |
| <!-- customised email for titlepages --> |
| <xsl:template match="author" mode="book.titlepage.recto.auto.mode"> |
| <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" text-align="center" |
| font-size="10pt" font-family="{$title.fontset}"> |
| <xsl:if test="email"> |
| <xsl:text>Email: </xsl:text> |
| <xsl:apply-templates select="(email)[1]"/> |
| </xsl:if> |
| </fo:block> |
| </xsl:template> |
| |
| |
| <!-- show only book titles in the top-level set toc --> |
| <xsl:template match="book|setindex" mode="toc"> |
| <xsl:param name="toc-context" select="."/> |
| <xsl:variable name="id"> |
| <xsl:call-template name="object.id"/> |
| </xsl:variable> |
| <xsl:variable name="cid"> |
| <xsl:call-template name="object.id"> |
| <xsl:with-param name="object" select="$toc-context"/> |
| </xsl:call-template> |
| </xsl:variable> |
| <xsl:call-template name="toc.line"/> |
| <xsl:variable name="nodes" select="glossary|bibliography|preface|chapter |
| |reference|part|article|appendix|index"/> |
| <xsl:variable name="depth.from.context" |
| select="count(ancestor::*)-count($toc-context/ancestor::*)"/> |
| <xsl:if test="$toc.section.depth > 0 and not($toc-context/self::set) |
| and $toc.max.depth > $depth.from.context and $nodes"> |
| <fo:block id="toc.{$cid}.{$id}"> |
| <xsl:attribute name="margin-left"> |
| <xsl:call-template name="set.toc.indent"/> |
| </xsl:attribute> |
| <xsl:apply-templates select="$nodes" mode="toc"> |
| <xsl:with-param name="toc-context" select="$toc-context"/> |
| </xsl:apply-templates> |
| </fo:block> |
| </xsl:if> |
| </xsl:template> |
| |
| |
| <!-- TODO: don`t generate a TOC at all for Quick-Start and FAQ --> |
| |
| |
| |
| <!-- page headers: --> |
| <xsl:template name="header.table"> |
| <xsl:param name="pageclass" select="''"/> |
| <xsl:param name="sequence" select="''"/> |
| <xsl:param name="gentext-key" select="''"/> |
| <xsl:variable name="candidate"> |
| <fo:table table-layout="fixed" width="100%" border-bottom-width="0.5pt" border-bottom-style="solid" border-bottom-color="black"> |
| <fo:table-column column-number="1" column-width="100%"/> |
| <fo:table-body> |
| <fo:table-row height="14pt"> |
| <fo:table-cell text-align="right" display-align="before" relative-align="baseline"> |
| <fo:block> |
| <xsl:apply-templates select="." mode="titleabbrev.markup"/> |
| </fo:block> |
| </fo:table-cell> |
| </fo:table-row> |
| </fo:table-body> |
| </fo:table> |
| </xsl:variable> |
| <xsl:choose> |
| <xsl:when test="$pageclass='titlepage' or $sequence='blank' |
| or ($sequence='first' and $gentext-key='chapter')"> |
| <!-- noop on titlepages, first chapter page or blank pages --> |
| </xsl:when> |
| <xsl:otherwise> |
| <xsl:copy-of select="$candidate"/> |
| </xsl:otherwise> |
| </xsl:choose> |
| </xsl:template> |
| |
| |
| |
| <!-- page footers: two 80|20 cols w/right-aligned page numbers --> |
| <xsl:template name="footer.table"> |
| <xsl:param name="pageclass" select="''"/> |
| <xsl:param name="sequence" select="''"/> |
| <xsl:param name="gentext-key" select="''"/> |
| <xsl:variable name="candidate"> |
| <fo:table table-layout="fixed" width="100%"> |
| <fo:table-column column-number="1" column-width="80%"/> |
| <fo:table-column column-number="2" column-width="20%"/> |
| <fo:table-body> |
| <fo:table-row height="14pt"> |
| <fo:table-cell text-align="left" display-align="after" |
| relative-align="baseline"> |
| <fo:block/> |
| <!-- |
| <fo:block> |
| <xsl:text>Pageclass: </xsl:text> |
| <xsl:value-of select="$pageclass"/> |
| <xsl:text> Sequence: </xsl:text> |
| <xsl:value-of select="$sequence"/> |
| <xsl:text> Gentext-Key: </xsl:text> |
| <xsl:value-of select="$gentext-key"/> |
| </fo:block> |
| --> |
| </fo:table-cell> |
| <fo:table-cell text-align="right" display-align="after" |
| relative-align="baseline"> |
| <fo:block> |
| <fo:page-number/> |
| </fo:block> |
| </fo:table-cell> |
| </fo:table-row> |
| </fo:table-body> |
| </fo:table> |
| </xsl:variable> |
| <xsl:choose> |
| <xsl:when test="$pageclass='titlepage' or $sequence='blank'"> |
| <!-- noop on titlepages or blank pages --> |
| </xsl:when> |
| <xsl:otherwise> |
| <xsl:copy-of select="$candidate"/> |
| </xsl:otherwise> |
| </xsl:choose> |
| </xsl:template> |
| |
| |
| <!-- workaround bug in passivetex fo output for itemizedlist --> |
| <xsl:template match="itemizedlist/listitem"> |
| <xsl:variable name="id"><xsl:call-template name="object.id"/></xsl:variable> |
| <xsl:variable name="item.contents"> |
| <fo:list-item-label end-indent="label-end()"> |
| <fo:block> |
| <xsl:call-template name="itemizedlist.label.markup"> |
| <xsl:with-param name="itemsymbol"> |
| <xsl:call-template name="list.itemsymbol"> |
| <xsl:with-param name="node" select="parent::itemizedlist"/> |
| </xsl:call-template> |
| </xsl:with-param> |
| </xsl:call-template> |
| </fo:block> |
| </fo:list-item-label> |
| <fo:list-item-body start-indent="body-start()"> |
| <xsl:apply-templates/> <!-- removed extra block wrapper --> |
| </fo:list-item-body> |
| </xsl:variable> |
| <xsl:choose> |
| <xsl:when test="parent::*/@spacing = 'compact'"> |
| <fo:list-item id="{$id}" xsl:use-attribute-sets="compact.list.item.spacing"> |
| <xsl:copy-of select="$item.contents"/> |
| </fo:list-item> |
| </xsl:when> |
| <xsl:otherwise> |
| <fo:list-item id="{$id}" xsl:use-attribute-sets="list.item.spacing"> |
| <xsl:copy-of select="$item.contents"/> |
| </fo:list-item> |
| </xsl:otherwise> |
| </xsl:choose> |
| </xsl:template> |
| |
| <!-- workaround bug in passivetex fo output for orderedlist --> |
| <xsl:template match="orderedlist/listitem"> |
| <xsl:variable name="id"><xsl:call-template name="object.id"/></xsl:variable> |
| <xsl:variable name="item.contents"> |
| <fo:list-item-label end-indent="label-end()"> |
| <fo:block> |
| <xsl:apply-templates select="." mode="item-number"/> |
| </fo:block> |
| </fo:list-item-label> |
| <fo:list-item-body start-indent="body-start()"> |
| <xsl:apply-templates/> <!-- removed extra block wrapper --> |
| </fo:list-item-body> |
| </xsl:variable> |
| <xsl:choose> |
| <xsl:when test="parent::*/@spacing = 'compact'"> |
| <fo:list-item id="{$id}" xsl:use-attribute-sets="compact.list.item.spacing"> |
| <xsl:copy-of select="$item.contents"/> |
| </fo:list-item> |
| </xsl:when> |
| <xsl:otherwise> |
| <fo:list-item id="{$id}" xsl:use-attribute-sets="list.item.spacing"> |
| <xsl:copy-of select="$item.contents"/> |
| </fo:list-item> |
| </xsl:otherwise> |
| </xsl:choose> |
| </xsl:template> |
| |
| |
| </xsl:stylesheet> |