<?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.&#160;%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>