blob: 7458197aeb106910e3b120814c76054b58097d8f [file] [log] [blame]
<?xml version="1.0"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:prop="http://apache.org/forrest/properties/1.0"
version="1.0">
<xsl:variable
name="config"
select="//skinconfig" />
<xsl:variable
name="properties"
select="//prop:properties" />
<!-- left, justify, right -->
<xsl:variable
name="text-align"
select="string($config/pdf/page/@text-align)" />
<!-- prefix which turns relative URLs into absolute ones, empty by default -->
<xsl:variable
name="url-prefix"
select="string($config/pdf/url-prefix)" />
<!-- print URL of external links -->
<xsl:variable
name="show-external-urls"
select="$config/pdf/show-external-urls" />
<!-- disable the table of content (enabled by default) -->
<xsl:variable
name="disable-toc"
select="string($config/pdf/disable-toc)" />
<!-- Get the section depth to use when generating the minitoc (default is 2) -->
<xsl:variable
name="toc-max-depth"
select="number($config/toc/@max-depth)" />
<!-- The page size to be used -->
<xsl:variable
name="pagesize"
select="string($config/pdf/page/@size)" />
<!-- The page orientation ("portrait" or "landscape") -->
<xsl:variable
name="pageorientation"
select="string($config/pdf/page/@orientation)" />
<!-- Double-sided printing toggle -->
<xsl:variable
name="doublesided"
select="string($config/pdf/margins/@double-sided)" />
<!-- The top page margin -->
<xsl:variable
name="topmargin"
select="string($config/pdf/margins/top)" />
<!-- The bottom page margin -->
<xsl:variable
name="bottommargin"
select="string($config/pdf/margins/bottom)" />
<!-- The inner page margin (always the left margin if
double-sided printing is off, alternating between left and right if
it's on) -->
<xsl:variable
name="innermargin"
select="string($config/pdf/margins/inner)" />
<!-- The outer page margin (always the right margin if
double-sided printing is off, alternating between right and left if
it's on)-->
<xsl:variable
name="outermargin"
select="string($config/pdf/margins/outer)" />
<xsl:param
name="numbersections"
select="'true'" />
<!-- page breaks after TOC and each page if an aggregate document -->
<xsl:variable
name="page-break-top-sections"
select="'true'" />
<!-- page numbering format -->
<xsl:variable
name="page-numbering-format"
select="string($config/pdf/page-numbering-format)" />
<xsl:variable
name="background-color"
select="$config/colors/color[@name='body']/@value" />
<xsl:variable
name="heading-color"
select="$config/colors/color[@name='subheading']/@value" />
<xsl:variable
name="heading-type"
select="$config/headings/@type" />
<xsl:variable
name="path-language"
select="substring-before($path,'/')"/>
<!-- Section depth at which we stop numbering and just indent -->
<xsl:param
name="numbering-max-depth"
select="'3'" />
<!-- Generic font-family parameters defined here. Default values specified,
but usually the values should be passed in from the calling sitemap. -->
<xsl:param name="serif">
<xsl:choose>
<xsl:when test="$properties/*[@name=concat('output.pdf.fontFamily.serif.',$path-language)]">
<xsl:value-of select="$properties/*[@name=concat('output.pdf.fontFamily.serif.',$path-language)]/@value"/>
</xsl:when>
<xsl:when test="$properties/*[@name='output.pdf.fontFamily.serif']">
<xsl:value-of select="$properties/*[@name='output.pdf.fontFamily.serif']/@value"/>
</xsl:when>
<xsl:otherwise>serif</xsl:otherwise>
</xsl:choose>
</xsl:param>
<xsl:param name="sans-serif">
<xsl:choose>
<xsl:when test="$properties/*[@name=concat('output.pdf.fontFamily.sansSerif.',$path-language)]">
<xsl:value-of select="$properties/*[@name=concat('output.pdf.fontFamily.sansSerif.',$path-language)]/@value"/>
</xsl:when>
<xsl:when test="$properties/*[@name='output.pdf.fontFamily.sansSerif']">
<xsl:value-of select="$properties/*[@name='output.pdf.fontFamily.sansSerif']/@value"/>
</xsl:when>
<xsl:otherwise>sans-serif</xsl:otherwise>
</xsl:choose>
</xsl:param>
<xsl:param name="monospace">
<xsl:choose>
<xsl:when test="$properties/*[@name=concat('output.pdf.fontFamily.monospace.',$path-language)]">
<xsl:value-of select="$properties/*[@name=concat('output.pdf.fontFamily.monospace.',$path-language)]/@value"/>
</xsl:when>
<xsl:when test="$properties/*[@name='output.pdf.fontFamily.monospace']">
<xsl:value-of select="$properties/*[@name='output.pdf.fontFamily.monospace']/@value"/>
</xsl:when>
<xsl:otherwise>monospace</xsl:otherwise>
</xsl:choose>
</xsl:param>
<!-- Classes of text types that typically go together, and share font family
properties; this can be used to specify the font family for all related
text types at once: -->
<xsl:param name="headerFooterFontFamily">
<xsl:choose>
<xsl:when test="$properties/*[@name='output.pdf.fontFamily.headerFooterFontFamily']">
<xsl:value-of select="$properties/*[@name='output.pdf.fontFamily.headerFooterFontFamily']/@value"/>
</xsl:when>
<xsl:otherwise><xsl:value-of select="$sans-serif"/></xsl:otherwise>
</xsl:choose>
</xsl:param>
<!-- Specific font-family parameters defined here, to allow overrides of
specific content elements; default values taken from the generic ones
above: -->
<xsl:param name="rootFontFamily">
<xsl:choose>
<xsl:when test="$properties/*[@name='output.pdf.fontFamily.rootFontFamily']">
<xsl:value-of select="$properties/*[@name='output.pdf.fontFamily.rootFontFamily']/@value"/>
</xsl:when>
<xsl:otherwise><xsl:value-of select="$serif"/></xsl:otherwise>
</xsl:choose>
</xsl:param>
<xsl:param name="firstFooterFontFamily">
<xsl:choose>
<xsl:when test="$properties/*[@name='output.pdf.fontFamily.firstFooterFontFamily']">
<xsl:value-of select="$properties/*[@name='output.pdf.fontFamily.firstFooterFontFamily']/@value"/>
</xsl:when>
<xsl:otherwise><xsl:value-of select="$headerFooterFontFamily"/></xsl:otherwise>
</xsl:choose>
</xsl:param>
<xsl:param name="evenHeaderFontFamily">
<xsl:choose>
<xsl:when test="$properties/*[@name='output.pdf.fontFamily.evenHeaderFontFamily']">
<xsl:value-of select="$properties/*[@name='output.pdf.fontFamily.evenHeaderFontFamily']/@value"/>
</xsl:when>
<xsl:otherwise><xsl:value-of select="$headerFooterFontFamily"/></xsl:otherwise>
</xsl:choose>
</xsl:param>
<xsl:param name="evenFooterFontFamily">
<xsl:choose>
<xsl:when test="$properties/*[@name='output.pdf.fontFamily.evenFooterFontFamily']">
<xsl:value-of select="$properties/*[@name='output.pdf.fontFamily.evenFooterFontFamily']/@value"/>
</xsl:when>
<xsl:otherwise><xsl:value-of select="$headerFooterFontFamily"/></xsl:otherwise>
</xsl:choose>
</xsl:param>
<xsl:param name="oddHeaderFontFamily">
<xsl:choose>
<xsl:when test="$properties/*[@name='output.pdf.fontFamily.oddHeaderFontFamily']">
<xsl:value-of select="$properties/*[@name='output.pdf.fontFamily.oddHeaderFontFamily']/@value"/>
</xsl:when>
<xsl:otherwise><xsl:value-of select="$headerFooterFontFamily"/></xsl:otherwise>
</xsl:choose>
</xsl:param>
<xsl:param name="oddFooterFontFamily">
<xsl:choose>
<xsl:when test="$properties/*[@name='output.pdf.fontFamily.oddFooterFontFamily']">
<xsl:value-of select="$properties/*[@name='output.pdf.fontFamily.oddFooterFontFamily']/@value"/>
</xsl:when>
<xsl:otherwise><xsl:value-of select="$headerFooterFontFamily"/></xsl:otherwise>
</xsl:choose>
</xsl:param>
<xsl:param name="documentTitleFontFamily">
<xsl:choose>
<xsl:when test="$properties/*[@name='output.pdf.fontFamily.documentTitleFontFamily']">
<xsl:value-of select="$properties/*[@name='output.pdf.fontFamily.documentTitleFontFamily']/@value"/>
</xsl:when>
<xsl:otherwise><xsl:value-of select="$sans-serif"/></xsl:otherwise>
</xsl:choose>
</xsl:param>
<xsl:param name="versionFontFamily">
<xsl:choose>
<xsl:when test="$properties/*[@name='output.pdf.fontFamily.versionFontFamily']">
<xsl:value-of select="$properties/*[@name='output.pdf.fontFamily.versionFontFamily']/@value"/>
</xsl:when>
<xsl:otherwise><xsl:value-of select="$sans-serif"/></xsl:otherwise>
</xsl:choose>
</xsl:param>
<xsl:param name="authorsFontFamily">
<xsl:choose>
<xsl:when test="$properties/*[@name='output.pdf.fontFamily.authorsFontFamily']">
<xsl:value-of select="$properties/*[@name='output.pdf.fontFamily.authorsFontFamily']/@value"/>
</xsl:when>
<xsl:otherwise><xsl:value-of select="$sans-serif"/></xsl:otherwise>
</xsl:choose>
</xsl:param>
<xsl:param name="abstractFontFamily">
<xsl:choose>
<xsl:when test="$properties/*[@name='output.pdf.fontFamily.abstractFontFamily']">
<xsl:value-of select="$properties/*[@name='output.pdf.fontFamily.abstractFontFamily']/@value"/>
</xsl:when>
<xsl:otherwise><xsl:value-of select="$serif"/></xsl:otherwise>
</xsl:choose>
</xsl:param>
<xsl:param name="noticeFontFamily">
<xsl:choose>
<xsl:when test="$properties/*[@name='output.pdf.fontFamily.noticeFontFamily']">
<xsl:value-of select="$properties/*[@name='output.pdf.fontFamily.noticeFontFamily']/@value"/>
</xsl:when>
<xsl:otherwise><xsl:value-of select="$serif"/></xsl:otherwise>
</xsl:choose>
</xsl:param>
<xsl:param name="TOCTitleFontFamily">
<xsl:choose>
<xsl:when test="$properties/*[@name='output.pdf.fontFamily.TOCTitleFontFamily']">
<xsl:value-of select="$properties/*[@name='output.pdf.fontFamily.TOCTitleFontFamily']/@value"/>
</xsl:when>
<xsl:otherwise><xsl:value-of select="$sans-serif"/></xsl:otherwise>
</xsl:choose>
</xsl:param>
<xsl:param name="TOCFontFamily">
<xsl:choose>
<xsl:when test="$properties/*[@name='output.pdf.fontFamily.TOCFontFamily']">
<xsl:value-of select="$properties/*[@name='output.pdf.fontFamily.TOCFontFamily']/@value"/>
</xsl:when>
<xsl:otherwise><xsl:value-of select="$serif"/></xsl:otherwise>
</xsl:choose>
</xsl:param>
<!-- helper-commonElements.xsl font-family definitions: -->
<xsl:param name="sectionTitleFontFamily">
<xsl:choose>
<xsl:when test="$properties/*[@name='output.pdf.fontFamily.sectionTitleFontFamily']">
<xsl:value-of select="$properties/*[@name='output.pdf.fontFamily.sectionTitleFontFamily']/@value"/>
</xsl:when>
<xsl:otherwise><xsl:value-of select="$sans-serif"/></xsl:otherwise>
</xsl:choose>
</xsl:param>
<xsl:param name="sourceFontFamily">
<xsl:choose>
<xsl:when test="$properties/*[@name='output.pdf.fontFamily.sourceFontFamily']">
<xsl:value-of select="$properties/*[@name='output.pdf.fontFamily.sourceFontFamily']/@value"/>
</xsl:when>
<xsl:otherwise><xsl:value-of select="$monospace"/></xsl:otherwise>
</xsl:choose>
</xsl:param>
<xsl:param name="codeFontFamily">
<xsl:choose>
<xsl:when test="$properties/*[@name='output.pdf.fontFamily.codeFontFamily']">
<xsl:value-of select="$properties/*[@name='output.pdf.fontFamily.codeFontFamily']/@value"/>
</xsl:when>
<xsl:otherwise><xsl:value-of select="$monospace"/></xsl:otherwise>
</xsl:choose>
</xsl:param>
<xsl:param name="warningTitleFontFamily">
<xsl:choose>
<xsl:when test="$properties/*[@name='output.pdf.fontFamily.warningTitleFontFamily']">
<xsl:value-of select="$properties/*[@name='output.pdf.fontFamily.warningTitleFontFamily']/@value"/>
</xsl:when>
<xsl:otherwise><xsl:value-of select="$sans-serif"/></xsl:otherwise>
</xsl:choose>
</xsl:param>
<xsl:param name="noteTitleFontFamily">
<xsl:choose>
<xsl:when test="$properties/*[@name='output.pdf.fontFamily.noteTitleFontFamily']">
<xsl:value-of select="$properties/*[@name='output.pdf.fontFamily.noteTitleFontFamily']/@value"/>
</xsl:when>
<xsl:otherwise><xsl:value-of select="$sans-serif"/></xsl:otherwise>
</xsl:choose>
</xsl:param>
<xsl:param name="fixmeTitleFontFamily">
<xsl:choose>
<xsl:when test="$properties/*[@name='output.pdf.fontFamily.fixmeTitleFontFamily']">
<xsl:value-of select="$properties/*[@name='output.pdf.fontFamily.fixmeTitleFontFamily']/@value"/>
</xsl:when>
<xsl:otherwise><xsl:value-of select="$sans-serif"/></xsl:otherwise>
</xsl:choose>
</xsl:param>
<!-- Other external parameters: -->
<xsl:param
name="imagesdir"
select="." />
<xsl:param
name="xmlbasedir" />
<xsl:param
name="path"
select="." />
<!-- Included stylesheets: -->
<xsl:include
href="lm://pdf.transform.helper.pdfoutline" />
<xsl:include
href="lm://pdf.transform.helper.footerinfo" />
<xsl:include
href="lm://pdf.transform.helper.pageBreaks" />
<xsl:include
href="lm://pdf.transform.helper.pageNumber" />
<xsl:include
href="lm://pdf.transform.helper.commonElements" />
<xsl:include
href="lm://pdf.transform.helper.layout" />
<xsl:include
href="lm://pdf.transform.helper.xmpMetadata" />
<xsl:template
match="/">
<fo:root
xmlns:fo="http://www.w3.org/1999/XSL/Format"
font-family="{$rootFontFamily}"
font-size="12pt">
<fo:layout-master-set>
<fo:simple-page-master
master-name="first-page"
page-height="{$pageheight}"
page-width="{$pagewidth}"
margin-top="{$topmargin}"
margin-bottom="{$bottommargin}"
margin-left="{$innermargin}"
margin-right="{$outermargin}">
<fo:region-body
margin-top="0.5in"
margin-bottom=".5in" />
<fo:region-after
region-name="first-footer"
extent=".5in"
display-align="before" />
</fo:simple-page-master>
<fo:simple-page-master
master-name="even-page"
page-height="{$pageheight}"
page-width="{$pagewidth}"
margin-top="{$topmargin}"
margin-bottom="{$bottommargin}">
<xsl:choose>
<xsl:when
test="$doublesided = 'true'">
<xsl:attribute
name="margin-left">
<xsl:value-of
select="$outermargin" />
</xsl:attribute>
<xsl:attribute
name="margin-right">
<xsl:value-of
select="$innermargin" />
</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute
name="margin-left">
<xsl:value-of
select="$innermargin" />
</xsl:attribute>
<xsl:attribute
name="margin-right">
<xsl:value-of
select="$outermargin" />
</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<fo:region-body
margin-top="0.5in"
margin-bottom=".5in" />
<fo:region-before
region-name="even-header"
extent="0.5in" />
<!-- commented out from region-body
because it is not standard conforming
border-bottom="0.5pt solid" -->
<fo:region-after
region-name="even-footer"
extent=".5in"
display-align="before" />
</fo:simple-page-master>
<fo:simple-page-master
master-name="odd-page"
page-height="{$pageheight}"
page-width="{$pagewidth}"
margin-top="{$topmargin}"
margin-bottom="{$bottommargin}"
margin-left="{$innermargin}"
margin-right="{$outermargin}">
<fo:region-body
margin-top="0.5in"
margin-bottom=".5in" />
<fo:region-before
region-name="odd-header"
extent="0.5in" />
<!-- commented out from region-body
because it is not standard conforming
border-bottom="0.5pt solid" -->
<fo:region-after
region-name="odd-footer"
extent=".5in"
display-align="before" />
</fo:simple-page-master>
<fo:page-sequence-master
master-name="book">
<fo:repeatable-page-master-alternatives>
<fo:conditional-page-master-reference
page-position="first"
master-reference="first-page" />
<fo:conditional-page-master-reference
odd-or-even="odd"
master-reference="odd-page" />
<fo:conditional-page-master-reference
odd-or-even="even"
master-reference="even-page" />
</fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>
</fo:layout-master-set>
<xsl:call-template name="createXMPMetadata"/>
<xsl:apply-templates
select="/site/document"
mode="outline" />
<fo:page-sequence
master-reference="book">
<xsl:apply-templates
select="/site/document" />
</fo:page-sequence>
</fo:root>
</xsl:template>
<xsl:template match="document">
<fo:title>
<xsl:value-of select="header/title" />
</fo:title>
<fo:static-content
flow-name="first-footer"
font-family="{$firstFooterFontFamily}">
<fo:block
border-top="0.25pt solid"
padding-before="6pt"
text-align="center">
<xsl:apply-templates
select="footer" />
</fo:block>
<!-- don't list page number on first page if its content is just the TOC -->
<xsl:if
test="$disable-toc = 'true' or not($toc-max-depth > 0 and $page-break-top-sections)">
<xsl:call-template
name="insertPageNumber">
<xsl:with-param
name="text-align">end</xsl:with-param>
</xsl:call-template>
</xsl:if>
<xsl:call-template
name="info" />
</fo:static-content>
<fo:static-content
flow-name="even-header"
font-family="{$evenHeaderFontFamily}">
<fo:block
font-size="70%"
text-align="end"
font-style="italic">
<xsl:value-of
select="header/title" />
</fo:block>
</fo:static-content>
<fo:static-content
flow-name="even-footer"
font-family="{$evenFooterFontFamily}">
<fo:block
border-top="0.25pt solid"
padding-before="6pt"
text-align="center">
<xsl:apply-templates
select="footer" />
</fo:block>
<xsl:choose>
<xsl:when test="$doublesided = 'true'">
<xsl:call-template name="insertPageNumber">
<xsl:with-param name="text-align">start</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="insertPageNumber">
<xsl:with-param name="text-align">end</xsl:with-param>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
<xsl:call-template
name="info" />
</fo:static-content>
<fo:static-content
flow-name="odd-header"
font-family="{$oddHeaderFontFamily}">
<fo:block
font-size="70%"
font-style="italic">
<xsl:choose>
<xsl:when test="$doublesided = 'true'">
<xsl:attribute name="text-align">start</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="text-align">end</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:value-of
select="header/title" />
</fo:block>
</fo:static-content>
<fo:static-content
flow-name="odd-footer"
font-family="{$oddFooterFontFamily}">
<fo:block
border-top="0.25pt solid"
padding-before="6pt"
text-align="center">
<xsl:apply-templates
select="footer" />
</fo:block>
<xsl:call-template
name="insertPageNumber">
<xsl:with-param
name="text-align">end</xsl:with-param>
</xsl:call-template>
<xsl:call-template
name="info" />
</fo:static-content>
<fo:flow
flow-name="xsl-region-body">
<fo:block
padding-before="24pt"
padding-after="24pt"
font-family="{$documentTitleFontFamily}"
font-size="24pt"
font-weight="bold"
id="{generate-id()}">
<xsl:value-of
select="header/title" />
</fo:block>
<fo:block
text-align="{$text-align}"
padding-before="18pt"
padding-after="18pt">
<xsl:apply-templates />
</fo:block>
<!-- Total number of pages calculation... -->
<fo:block
id="term" />
</fo:flow>
</xsl:template>
<xsl:template
match="abstract">
<fo:block
font-size="12pt"
text-align="center"
space-before="20pt"
space-after="25pt"
width="7.5in"
font-family="{$abstractFontFamily}"
font-style="italic">
<xsl:call-template
name="insertPageBreaks" />
<xsl:apply-templates />
</fo:block>
</xsl:template>
<xsl:template
match="notice">
<fo:block
font-size="10pt"
font-family="{$noticeFontFamily}"
text-align="left"
space-before="20pt"
width="7.5in"
border-top="0.25pt solid"
border-bottom="0.25pt solid"
padding-before="6pt"
padding-after="6pt">
<xsl:copy-of
select="@id" />
<xsl:call-template
name="insertPageBreaks" />
<!-- insert i18n stuff here --> NOTICE: <xsl:apply-templates />
</fo:block>
</xsl:template>
<xsl:template
match="anchor">
<fo:block>
<xsl:copy-of
select="@id" />
</fo:block>
<xsl:apply-templates />
</xsl:template>
<xsl:template match="version">
<fo:block
font-family="{$versionFontFamily}"
font-weight="bold"
font-size="smaller">
<xsl:call-template name="insertPageBreaks"/>
<xsl:apply-templates select="@major"/>
<xsl:apply-templates select="@minor"/>
<xsl:apply-templates select="@fix"/>
<xsl:apply-templates select="@tag"/>
<xsl:choose>
<xsl:when test="starts-with(., '$Revision: ')">
<!-- insert i18n stuff here --> Version <xsl:value-of select="substring(., 12, string-length(.) -11-2)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
</xsl:otherwise>
</xsl:choose>
</fo:block>
</xsl:template>
<xsl:template match="authors">
<fo:block
space-before="2em"
font-family="{$authorsFontFamily}"
font-weight="bold"
font-size="smaller">
<xsl:call-template
name="insertPageBreaks" />
<!-- insert i18n stuff here --> by <xsl:for-each
select="person">
<xsl:value-of
select="@name" />
<xsl:if
test="not(position() = last())">, </xsl:if>
</xsl:for-each>
</fo:block>
</xsl:template>
<xsl:template match="body[count(//section) != 0]">
<xsl:if test="$disable-toc != 'true' and $toc-max-depth > 0">
<fo:block
font-family="{$TOCTitleFontFamily}"
font-size="12pt"
font-weight="bold"
space-after="0.5em"
space-before="1em"
text-align="justify"
width="7.5in"
id="__toc__">
<xsl:call-template name="insertPageBreaks"/>
<!-- insert i18n stuff here -->
<xsl:text>Table of contents</xsl:text>
</fo:block>
<fo:block
font-family="{$TOCFontFamily}"
font-size="12pt"
space-after="5pt"
space-before="0pt"
text-align="justify"
width="7.5in">
<xsl:if test="$page-break-top-sections">
<xsl:attribute name="break-after">page</xsl:attribute>
</xsl:if>
<xsl:apply-templates select="section" mode="toc"/>
</fo:block>
</xsl:if>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="section" mode="toc">
<!-- FIXME: see bug FOR-640 -->
<xsl:param name="depth" select="'1'"/>
<fo:block space-before="5pt" text-align-last="justify" start-indent=".5em"
text-indent=".5em">
<fo:inline>
<xsl:variable name="id">
<xsl:choose>
<xsl:when test="normalize-space(@id)!=''">
<xsl:value-of select="@id"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="generate-id()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<fo:basic-link internal-destination="{$id}">
<xsl:value-of
select="substring('&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;', 0, 2 * $depth - 1)"/>
<xsl:variable name="section-nr">
<xsl:number count="section" format="1.1.1.1.1.1.1" level="multiple"/>
</xsl:variable>
<xsl:if test="not(starts-with(title, $section-nr))">
<fo:inline font-size="11pt">
<xsl:value-of select="$section-nr"/>
</fo:inline>
<xsl:text> </xsl:text>
</xsl:if>
<xsl:value-of select="title"/>
<fo:leader leader-pattern="dots"/>
<fo:page-number-citation ref-id="{$id}"/>
</fo:basic-link>
</fo:inline>
<xsl:if test="$toc-max-depth > $depth">
<xsl:apply-templates select="section" mode="toc">
<xsl:with-param name="depth" select="$depth + 1"/>
</xsl:apply-templates>
</xsl:if>
</fo:block>
</xsl:template>
</xsl:stylesheet>