diff options
| author | William Harrington <kb0iic@berzerkula.org> | 2014-11-27 16:29:31 -0600 | 
|---|---|---|
| committer | William Harrington <kb0iic@berzerkula.org> | 2014-11-27 16:29:31 -0600 | 
| commit | 7df987a652b93d55dd8eca363706d3bacc469b55 (patch) | |
| tree | 17f84ce0fee76a3a0476b714eae09486ab2470e6 /stylesheets/lfs-xsl/docbook-xsl-snapshot/fo/.svn/text-base/lists.xsl.svn-base | |
Diffstat (limited to 'stylesheets/lfs-xsl/docbook-xsl-snapshot/fo/.svn/text-base/lists.xsl.svn-base')
| -rw-r--r-- | stylesheets/lfs-xsl/docbook-xsl-snapshot/fo/.svn/text-base/lists.xsl.svn-base | 1287 | 
1 files changed, 1287 insertions, 0 deletions
diff --git a/stylesheets/lfs-xsl/docbook-xsl-snapshot/fo/.svn/text-base/lists.xsl.svn-base b/stylesheets/lfs-xsl/docbook-xsl-snapshot/fo/.svn/text-base/lists.xsl.svn-base new file mode 100644 index 0000000..ffdfaec --- /dev/null +++ b/stylesheets/lfs-xsl/docbook-xsl-snapshot/fo/.svn/text-base/lists.xsl.svn-base @@ -0,0 +1,1287 @@ +<?xml version='1.0'?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" +                xmlns:fo="http://www.w3.org/1999/XSL/Format" +                version='1.0'> + +<!-- ******************************************************************** +     $Id$ +     ******************************************************************** + +     This file is part of the XSL DocBook Stylesheet distribution. +     See ../README or http://docbook.sf.net/release/xsl/current/ for +     copyright and other information. + +     ******************************************************************** --> + +<!-- ==================================================================== --> + +<xsl:template match="itemizedlist"> +  <xsl:variable name="id"> +    <xsl:call-template name="object.id"/> +  </xsl:variable> + +  <xsl:variable name="pi-label-width"> +    <xsl:call-template name="pi.dbfo_label-width"/> +  </xsl:variable> + +  <xsl:variable name="label-width"> +    <xsl:choose> +      <xsl:when test="$pi-label-width = ''"> +	<xsl:value-of select="$itemizedlist.label.width"/> +      </xsl:when> +      <xsl:otherwise> +	<xsl:value-of select="$pi-label-width"/> +      </xsl:otherwise> +    </xsl:choose> +  </xsl:variable> + +  <xsl:if test="title"> +    <xsl:apply-templates select="title" mode="list.title.mode"/> +  </xsl:if> + +  <!-- Preserve order of PIs and comments --> +  <xsl:apply-templates  +      select="*[not(self::listitem +                or self::title +                or self::titleabbrev)] +              |comment()[not(preceding-sibling::listitem)] +              |processing-instruction()[not(preceding-sibling::listitem)]"/> + +  <xsl:variable name="content"> +    <xsl:apply-templates  +          select="listitem +                  |comment()[preceding-sibling::listitem] +                  |processing-instruction()[preceding-sibling::listitem]"/> +  </xsl:variable> + +  <!-- nested lists don't add extra list-block spacing --> +  <xsl:choose> +    <xsl:when test="ancestor::listitem"> +      <fo:list-block id="{$id}" xsl:use-attribute-sets="itemizedlist.properties"> +	<xsl:attribute name="provisional-distance-between-starts"> +	  <xsl:value-of select="$label-width"/> +	</xsl:attribute> +        <xsl:copy-of select="$content"/> +      </fo:list-block> +    </xsl:when> +    <xsl:otherwise> +      <fo:list-block id="{$id}" xsl:use-attribute-sets="list.block.spacing itemizedlist.properties"> +	<xsl:attribute name="provisional-distance-between-starts"> +	  <xsl:value-of select="$label-width"/> +	</xsl:attribute> +	<xsl:copy-of select="$content"/> +      </fo:list-block> +    </xsl:otherwise> +  </xsl:choose> + +</xsl:template> + +<xsl:template match="itemizedlist/title|orderedlist/title"> +  <!--nop--> +</xsl:template> + +<xsl:template match="variablelist/title" mode="vl.as.list"> +  <!--nop--> +</xsl:template> + +<xsl:template match="variablelist/title" mode="vl.as.blocks"> +  <!--nop--> +</xsl:template> + +<xsl:template match="itemizedlist/titleabbrev|orderedlist/titleabbrev"> +  <!--nop--> +</xsl:template> + +<xsl:template match="procedure/titleabbrev"> +  <!--nop--> +</xsl:template> + +<xsl:template match="variablelist/titleabbrev" mode="vl.as.list"> +  <!--nop--> +</xsl:template> + +<xsl:template match="variablelist/titleabbrev" mode="vl.as.blocks"> +  <!--nop--> +</xsl:template> + +<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()" xsl:use-attribute-sets="itemizedlist.label.properties"> +      <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:choose> +        <!-- * work around broken passivetex list-item-body rendering --> +        <xsl:when test="$passivetex.extensions = '1'"> +          <xsl:apply-templates/> +        </xsl:when> +        <xsl:otherwise> +          <fo:block> +            <xsl:apply-templates/> +          </fo:block> +        </xsl:otherwise> +      </xsl:choose> +    </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:template name="itemizedlist.label.markup"> +  <xsl:param name="itemsymbol" select="'disc'"/> + +  <xsl:choose> +    <xsl:when test="$itemsymbol='none'"></xsl:when> +    <xsl:when test="$itemsymbol='disc'">•</xsl:when> +    <xsl:when test="$itemsymbol='bullet'">•</xsl:when> +    <xsl:when test="$itemsymbol='endash'">–</xsl:when> +    <xsl:when test="$itemsymbol='emdash'">—</xsl:when> +    <!-- Some of these may work in your XSL-FO processor and fonts --> +    <!-- +    <xsl:when test="$itemsymbol='square'">■</xsl:when> +    <xsl:when test="$itemsymbol='box'">■</xsl:when> +    <xsl:when test="$itemsymbol='smallblacksquare'">▪</xsl:when> +    <xsl:when test="$itemsymbol='circle'">○</xsl:when> +    <xsl:when test="$itemsymbol='opencircle'">○</xsl:when> +    <xsl:when test="$itemsymbol='whitesquare'">□</xsl:when> +    <xsl:when test="$itemsymbol='smallwhitesquare'">▫</xsl:when> +    <xsl:when test="$itemsymbol='round'">●</xsl:when> +    <xsl:when test="$itemsymbol='blackcircle'">●</xsl:when> +    <xsl:when test="$itemsymbol='whitebullet'">◦</xsl:when> +    <xsl:when test="$itemsymbol='triangle'">‣</xsl:when> +    <xsl:when test="$itemsymbol='point'">›</xsl:when> +    <xsl:when test="$itemsymbol='hand'"><fo:inline  +                         font-family="Wingdings 2">A</fo:inline></xsl:when> +    --> +    <xsl:otherwise>•</xsl:otherwise> +  </xsl:choose> +</xsl:template> + +<xsl:template match="orderedlist"> +  <xsl:variable name="id"> +    <xsl:call-template name="object.id"/> +  </xsl:variable> + +  <xsl:variable name="pi-label-width"> +    <xsl:call-template name="pi.dbfo_label-width"/> +  </xsl:variable> + +  <xsl:variable name="label-width"> +    <xsl:choose> +      <xsl:when test="$pi-label-width = ''"> +	<xsl:value-of select="$orderedlist.label.width"/> +      </xsl:when> +      <xsl:otherwise> +	<xsl:value-of select="$pi-label-width"/> +      </xsl:otherwise> +    </xsl:choose> +  </xsl:variable> + +  <xsl:if test="title"> +    <xsl:apply-templates select="title" mode="list.title.mode"/> +  </xsl:if> + +  <!-- Preserve order of PIs and comments --> +  <xsl:apply-templates  +      select="*[not(self::listitem +                or self::title +                or self::titleabbrev)] +              |comment()[not(preceding-sibling::listitem)] +              |processing-instruction()[not(preceding-sibling::listitem)]"/> + +  <xsl:variable name="content"> +    <xsl:apply-templates  +          select="listitem +                  |comment()[preceding-sibling::listitem] +                  |processing-instruction()[preceding-sibling::listitem]"/> +  </xsl:variable> + +  <!-- nested lists don't add extra list-block spacing --> +  <xsl:choose> +    <xsl:when test="ancestor::listitem"> +      <fo:list-block id="{$id}" xsl:use-attribute-sets="orderedlist.properties"> +	<xsl:attribute name="provisional-distance-between-starts"> +	  <xsl:value-of select="$label-width"/> +	</xsl:attribute> +        <xsl:copy-of select="$content"/> +      </fo:list-block> +    </xsl:when> +    <xsl:otherwise> +      <fo:list-block id="{$id}" xsl:use-attribute-sets="list.block.spacing orderedlist.properties"> +	<xsl:attribute name="provisional-distance-between-starts"> +	  <xsl:value-of select="$label-width"/> +	</xsl:attribute> +        <xsl:copy-of select="$content"/> +      </fo:list-block> +    </xsl:otherwise> +  </xsl:choose> +</xsl:template> + +<xsl:template match="orderedlist/listitem" mode="item-number"> +  <xsl:variable name="numeration"> +    <xsl:call-template name="list.numeration"> +      <xsl:with-param name="node" select="parent::orderedlist"/> +    </xsl:call-template> +  </xsl:variable> + +  <xsl:variable name="type"> +    <xsl:choose> +      <xsl:when test="$numeration='arabic'">1.</xsl:when> +      <xsl:when test="$numeration='loweralpha'">a.</xsl:when> +      <xsl:when test="$numeration='lowerroman'">i.</xsl:when> +      <xsl:when test="$numeration='upperalpha'">A.</xsl:when> +      <xsl:when test="$numeration='upperroman'">I.</xsl:when> +      <!-- What!? This should never happen --> +      <xsl:otherwise> +        <xsl:message> +          <xsl:text>Unexpected numeration: </xsl:text> +          <xsl:value-of select="$numeration"/> +        </xsl:message> +        <xsl:value-of select="1."/> +      </xsl:otherwise> +    </xsl:choose> +  </xsl:variable> + +  <xsl:variable name="item-number"> +    <xsl:call-template name="orderedlist-item-number"/> +  </xsl:variable> + +  <xsl:if test="parent::orderedlist/@inheritnum='inherit' +                and ancestor::listitem[parent::orderedlist]"> +    <xsl:apply-templates select="ancestor::listitem[parent::orderedlist][1]" +                         mode="item-number"/> +  </xsl:if> + +  <xsl:number value="$item-number" format="{$type}"/> +</xsl:template> + +<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()" xsl:use-attribute-sets="orderedlist.label.properties"> +      <fo:block> +        <xsl:apply-templates select="." mode="item-number"/> +      </fo:block> +    </fo:list-item-label> +    <fo:list-item-body start-indent="body-start()"> +      <fo:block> +        <xsl:apply-templates/> +      </fo:block> +    </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:template match="listitem/*[1][local-name()='para' or  +                                   local-name()='simpara' or  +                                   local-name()='formalpara'] +                     |glossdef/*[1][local-name()='para' or  +                                   local-name()='simpara' or  +                                   local-name()='formalpara'] +                     |step/*[1][local-name()='para' or  +                                   local-name()='simpara' or  +                                   local-name()='formalpara'] +                     |callout/*[1][local-name()='para' or  +                                   local-name()='simpara' or  +                                   local-name()='formalpara']" +              priority="2"> +  <fo:block> +    <xsl:call-template name="anchor"/> +    <xsl:apply-templates/> +  </fo:block> +</xsl:template> + +<xsl:template match="variablelist"> +  <xsl:variable name="presentation"> +    <xsl:call-template name="pi.dbfo_list-presentation"/> +  </xsl:variable> + +  <xsl:choose> +    <xsl:when test="$presentation = 'list'"> +      <xsl:apply-templates select="." mode="vl.as.list"/> +    </xsl:when> +    <xsl:when test="$presentation = 'blocks'"> +      <xsl:apply-templates select="." mode="vl.as.blocks"/> +    </xsl:when> +    <xsl:when test="$variablelist.as.blocks != 0"> +      <xsl:apply-templates select="." mode="vl.as.blocks"/> +    </xsl:when> +    <xsl:otherwise> +      <xsl:apply-templates select="." mode="vl.as.list"/> +    </xsl:otherwise> +  </xsl:choose> +</xsl:template> + +<xsl:template match="variablelist" mode="vl.as.list"> +  <xsl:variable name="id"> +    <xsl:call-template name="object.id"/> +  </xsl:variable> + +  <xsl:variable name="term-width"> +    <xsl:call-template name="pi.dbfo_term-width"/> +  </xsl:variable> + +  <xsl:variable name="termlength"> +    <xsl:choose> +      <xsl:when test="$term-width != ''"> +        <xsl:value-of select="$term-width"/> +      </xsl:when> +      <xsl:when test="@termlength"> +        <xsl:variable name="termlength.is.number"> +          <xsl:value-of select="@termlength + 0"/> +        </xsl:variable> +        <xsl:choose> +          <xsl:when test="string($termlength.is.number) = 'NaN'"> +            <!-- if the term length isn't just a number, assume it's a measurement --> +            <xsl:value-of select="@termlength"/> +          </xsl:when> +          <xsl:otherwise> +            <xsl:value-of select="@termlength"/> +            <xsl:choose> +              <!-- workaround for passivetex lack of support for non-constant expressions --> +              <xsl:when test="$passivetex.extensions != 0"> +                <xsl:text>em</xsl:text> +              </xsl:when> +              <xsl:otherwise> +                <xsl:text>em * 0.60</xsl:text> +              </xsl:otherwise> +            </xsl:choose> +          </xsl:otherwise> +        </xsl:choose> +      </xsl:when> +      <xsl:otherwise> +        <xsl:call-template name="longest.term"> +          <xsl:with-param name="terms" select="varlistentry/term"/> +          <xsl:with-param name="maxlength" select="$variablelist.max.termlength"/> +        </xsl:call-template> +        <xsl:choose> +          <!-- workaround for passivetex lack of support for non-constant expressions --> +          <xsl:when test="$passivetex.extensions != 0"> +            <xsl:text>em</xsl:text> +          </xsl:when> +          <xsl:otherwise> +            <xsl:text>em * 0.60</xsl:text> +          </xsl:otherwise> +        </xsl:choose> +      </xsl:otherwise> +    </xsl:choose> +  </xsl:variable> + +<!-- +  <xsl:message> +    <xsl:text>term width: </xsl:text> +    <xsl:value-of select="$termlength"/> +  </xsl:message> +--> + +  <xsl:variable name="label-separation">1em</xsl:variable> +  <xsl:variable name="distance-between-starts"> +    <xsl:choose> +      <!-- workaround for passivetex lack of support for non-constant expressions --> +      <xsl:when test="$passivetex.extensions != 0"> +        <xsl:value-of select="$termlength"/> +      </xsl:when> +      <xsl:otherwise> +        <xsl:value-of select="$termlength"/> +        <xsl:text>+</xsl:text> +        <xsl:value-of select="$label-separation"/> +      </xsl:otherwise> +    </xsl:choose> +  </xsl:variable> + +  <xsl:if test="title"> +    <xsl:apply-templates select="title" mode="list.title.mode"/> +  </xsl:if> + +  <!-- Preserve order of PIs and comments --> +  <xsl:apply-templates  +    select="*[not(self::varlistentry +              or self::title +              or self::titleabbrev)] +            |comment()[not(preceding-sibling::varlistentry)] +            |processing-instruction()[not(preceding-sibling::varlistentry)]"/> + +  <xsl:variable name="content"> +    <xsl:apply-templates mode="vl.as.list" +      select="varlistentry +              |comment()[preceding-sibling::varlistentry] +              |processing-instruction()[preceding-sibling::varlistentry]"/> +  </xsl:variable> + +  <!-- nested lists don't add extra list-block spacing --> +  <xsl:choose> +    <xsl:when test="ancestor::listitem"> +      <fo:list-block id="{$id}" +                     provisional-distance-between-starts= +                        "{$distance-between-starts}" +                     provisional-label-separation="{$label-separation}"> +        <xsl:copy-of select="$content"/> +      </fo:list-block> +    </xsl:when> +    <xsl:otherwise> +      <fo:list-block id="{$id}" +                     provisional-distance-between-starts= +                        "{$distance-between-starts}" +                     provisional-label-separation="{$label-separation}" +                     xsl:use-attribute-sets="list.block.spacing"> +        <xsl:copy-of select="$content"/> +      </fo:list-block> +    </xsl:otherwise> +  </xsl:choose> +</xsl:template> + +<xsl:template name="longest.term"> +  <xsl:param name="longest" select="0"/> +  <xsl:param name="terms" select="."/> +  <xsl:param name="maxlength" select="-1"/> + +  <!-- Process out any indexterms in the term --> +  <xsl:variable name="term.text"> +    <xsl:apply-templates select="$terms[1]"/> +  </xsl:variable> + +  <xsl:choose> +    <xsl:when test="$longest > $maxlength and $maxlength > 0"> +      <xsl:value-of select="$maxlength"/> +    </xsl:when> +    <xsl:when test="not($terms)"> +      <xsl:value-of select="$longest"/> +    </xsl:when> +    <xsl:when test="string-length($term.text) > $longest"> +      <xsl:call-template name="longest.term"> +        <xsl:with-param name="longest"  +            select="string-length($term.text)"/> +        <xsl:with-param name="maxlength" select="$maxlength"/> +        <xsl:with-param name="terms" select="$terms[position() > 1]"/> +      </xsl:call-template> +    </xsl:when> +    <xsl:otherwise> +      <xsl:call-template name="longest.term"> +        <xsl:with-param name="longest" select="$longest"/> +        <xsl:with-param name="maxlength" select="$maxlength"/> +        <xsl:with-param name="terms" select="$terms[position() > 1]"/> +      </xsl:call-template> +    </xsl:otherwise> +  </xsl:choose> +</xsl:template> + +<xsl:template match="varlistentry" mode="vl.as.list"> +  <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()" text-align="start"> +      <fo:block> +        <xsl:apply-templates select="term"/> +      </fo:block> +    </fo:list-item-label> +    <fo:list-item-body start-indent="body-start()"> +      <fo:block> +        <xsl:apply-templates select="listitem"/> +      </fo:block> +    </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:template match="variablelist" mode="vl.as.blocks"> +  <xsl:variable name="id"> +    <xsl:call-template name="object.id"/> +  </xsl:variable> + +  <!-- termlength is irrelevant --> + +  <xsl:if test="title"> +    <xsl:apply-templates select="title" mode="list.title.mode"/> +  </xsl:if> + +  <!-- Preserve order of PIs and comments --> +  <xsl:apply-templates  +    select="*[not(self::varlistentry +              or self::title +              or self::titleabbrev)] +            |comment()[not(preceding-sibling::varlistentry)] +            |processing-instruction()[not(preceding-sibling::varlistentry)]"/> + +  <xsl:variable name="content"> +    <xsl:apply-templates mode="vl.as.blocks" +      select="varlistentry +              |comment()[preceding-sibling::varlistentry] +              |processing-instruction()[preceding-sibling::varlistentry]"/> +  </xsl:variable> + +  <!-- nested lists don't add extra list-block spacing --> +  <xsl:choose> +    <xsl:when test="ancestor::listitem"> +      <fo:block id="{$id}"> +        <xsl:copy-of select="$content"/> +      </fo:block> +    </xsl:when> +    <xsl:otherwise> +      <fo:block id="{$id}" xsl:use-attribute-sets="list.block.spacing"> +        <xsl:copy-of select="$content"/> +      </fo:block> +    </xsl:otherwise> +  </xsl:choose> +</xsl:template> + +<xsl:template match="varlistentry" mode="vl.as.blocks"> +  <xsl:variable name="id"><xsl:call-template name="object.id"/></xsl:variable> + +  <fo:block id="{$id}" xsl:use-attribute-sets="list.item.spacing"   +      keep-together.within-column="always"  +      keep-with-next.within-column="always"> +    <xsl:apply-templates select="term"/> +  </fo:block> + +  <fo:block margin-left="0.25in"> +    <xsl:apply-templates select="listitem"/> +  </fo:block> +</xsl:template> + +<xsl:template match="varlistentry/term"> +  <fo:inline> +    <xsl:call-template name="simple.xlink"> +      <xsl:with-param name="content"> +        <xsl:apply-templates/> +      </xsl:with-param> +    </xsl:call-template> +  </fo:inline> +  <xsl:choose> +    <xsl:when test="not(following-sibling::term)"/> <!-- do nothing --> +    <xsl:otherwise> +      <!-- * if we have multiple terms in the same varlistentry, generate --> +      <!-- * a separator (", " by default) and/or an additional line --> +      <!-- * break after each one except the last --> +      <fo:inline><xsl:value-of select="$variablelist.term.separator"/></fo:inline> +      <xsl:if test="not($variablelist.term.break.after = '0')"> +        <fo:block/> +      </xsl:if> +    </xsl:otherwise> +  </xsl:choose> +</xsl:template> + +<xsl:template match="varlistentry/listitem"> +  <xsl:apply-templates/> +</xsl:template> + +<!-- ==================================================================== --> + +<xsl:template match="title" mode="list.title.mode"> +  <xsl:call-template name="formal.object.heading"> +    <xsl:with-param name="object" select=".."/> +  </xsl:call-template> +</xsl:template> + +<!-- ==================================================================== --> + +<xsl:template match="simplelist|simplelist[@type='vert']"> +  <!-- with no type specified, the default is 'vert' --> + +  <xsl:variable name="explicit.table.width"> +    <xsl:call-template name="dbfo-attribute"> +      <xsl:with-param name="pis" +		      select="processing-instruction('dbfo')"/> +      <xsl:with-param name="attribute" select="'list-width'"/> +    </xsl:call-template> +  </xsl:variable> + +  <xsl:variable name="table.width"> +    <xsl:choose> +      <xsl:when test="$explicit.table.width != ''"> +        <xsl:value-of select="$explicit.table.width"/> +      </xsl:when> +      <xsl:when test="$default.table.width = ''"> +        <xsl:text>100%</xsl:text> +      </xsl:when> +      <xsl:otherwise> +        <xsl:value-of select="$default.table.width"/> +      </xsl:otherwise> +    </xsl:choose> +  </xsl:variable> + +  <fo:table xsl:use-attribute-sets="normal.para.spacing"> + +    <xsl:choose> +      <xsl:when test="$axf.extensions != 0 or $xep.extensions != 0"> +	<xsl:attribute name="table-layout">auto</xsl:attribute> +        <xsl:if test="$explicit.table.width != ''"> +          <xsl:attribute name="width"><xsl:value-of  +	  select="$explicit.table.width"/></xsl:attribute> +        </xsl:if> +      </xsl:when> +      <xsl:otherwise> +        <xsl:attribute name="table-layout">fixed</xsl:attribute> +        <xsl:attribute name="width"><xsl:value-of  +                                      select="$table.width"/></xsl:attribute> +      </xsl:otherwise> +    </xsl:choose> + +    <xsl:call-template name="simplelist.table.columns"> +      <xsl:with-param name="cols"> +        <xsl:choose> +          <xsl:when test="@columns"> +            <xsl:value-of select="@columns"/> +          </xsl:when> +          <xsl:otherwise>1</xsl:otherwise> +        </xsl:choose> +      </xsl:with-param> +    </xsl:call-template> +    <fo:table-body start-indent="0pt" end-indent="0pt"> +      <xsl:call-template name="simplelist.vert"> +        <xsl:with-param name="cols"> +          <xsl:choose> +            <xsl:when test="@columns"> +              <xsl:value-of select="@columns"/> +            </xsl:when> +            <xsl:otherwise>1</xsl:otherwise> +          </xsl:choose> +        </xsl:with-param> +      </xsl:call-template> +    </fo:table-body> +  </fo:table> +</xsl:template> + +<xsl:template match="simplelist[@type='inline']"> +  <!-- if dbchoice PI exists, use that to determine the choice separator --> +  <!-- (that is, equivalent of "and" or "or" in current locale), or literal --> +  <!-- value of "choice" otherwise --> +  <fo:inline><xsl:variable name="localized-choice-separator"> +    <xsl:choose> +      <xsl:when test="processing-instruction('dbchoice')"> +        <xsl:call-template name="select.choice.separator"/> +      </xsl:when> +      <xsl:otherwise> +        <!-- empty --> +      </xsl:otherwise> +    </xsl:choose> +  </xsl:variable> + +  <xsl:for-each select="member"> +    <xsl:apply-templates/> +    <xsl:choose> +      <xsl:when test="position() = last()"/> <!-- do nothing --> +      <xsl:otherwise> +	<xsl:text>, </xsl:text> +	<xsl:if test="position() = last() - 1"> +	  <xsl:if test="$localized-choice-separator != ''"> +	    <xsl:value-of select="$localized-choice-separator"/> +	    <xsl:text> </xsl:text> +	  </xsl:if> +	</xsl:if> +      </xsl:otherwise> +    </xsl:choose> +  </xsl:for-each></fo:inline> +</xsl:template> + +<xsl:template match="simplelist[@type='horiz']"> + +  <xsl:variable name="explicit.table.width"> +    <xsl:call-template name="pi.dbfo_list-width"/> +  </xsl:variable> + +  <xsl:variable name="table.width"> +    <xsl:choose> +      <xsl:when test="$explicit.table.width != ''"> +        <xsl:value-of select="$explicit.table.width"/> +      </xsl:when> +      <xsl:when test="$default.table.width = ''"> +        <xsl:text>100%</xsl:text> +      </xsl:when> +      <xsl:otherwise> +        <xsl:value-of select="$default.table.width"/> +      </xsl:otherwise> +    </xsl:choose> +  </xsl:variable> + +  <fo:table xsl:use-attribute-sets="normal.para.spacing"> +    <xsl:choose> +      <xsl:when test="$axf.extensions != 0 or $xep.extensions != 0"> +        <xsl:attribute name="table-layout">auto</xsl:attribute> +        <xsl:if test="$explicit.table.width != ''"> +          <xsl:attribute name="width"><xsl:value-of  +                             select="$explicit.table.width"/></xsl:attribute> +        </xsl:if> +      </xsl:when> +      <xsl:otherwise> +        <xsl:attribute name="table-layout">fixed</xsl:attribute> +        <xsl:attribute name="width"><xsl:value-of  +                                      select="$table.width"/></xsl:attribute> +      </xsl:otherwise> +    </xsl:choose> +    <xsl:call-template name="simplelist.table.columns"> +      <xsl:with-param name="cols"> +        <xsl:choose> +          <xsl:when test="@columns"> +            <xsl:value-of select="@columns"/> +          </xsl:when> +          <xsl:otherwise>1</xsl:otherwise> +        </xsl:choose> +      </xsl:with-param> +    </xsl:call-template> +    <fo:table-body start-indent="0pt" end-indent="0pt"> +      <xsl:call-template name="simplelist.horiz"> +        <xsl:with-param name="cols"> +          <xsl:choose> +            <xsl:when test="@columns"> +              <xsl:value-of select="@columns"/> +            </xsl:when> +            <xsl:otherwise>1</xsl:otherwise> +          </xsl:choose> +        </xsl:with-param> +      </xsl:call-template> +    </fo:table-body> +  </fo:table> +</xsl:template> + +<xsl:template name="simplelist.table.columns"> +  <xsl:param name="cols" select="1"/> +  <xsl:param name="curcol" select="1"/> +  <fo:table-column column-number="{$curcol}" +                   column-width="proportional-column-width(1)"/> +  <xsl:if test="$curcol < $cols"> +    <xsl:call-template name="simplelist.table.columns"> +      <xsl:with-param name="cols" select="$cols"/> +      <xsl:with-param name="curcol" select="$curcol + 1"/> +    </xsl:call-template> +  </xsl:if> +</xsl:template> + +<xsl:template name="simplelist.horiz"> +  <xsl:param name="cols">1</xsl:param> +  <xsl:param name="cell">1</xsl:param> +  <xsl:param name="members" select="./member"/> + +  <xsl:if test="$cell <= count($members)"> +    <fo:table-row> +      <xsl:call-template name="simplelist.horiz.row"> +        <xsl:with-param name="cols" select="$cols"/> +        <xsl:with-param name="cell" select="$cell"/> +        <xsl:with-param name="members" select="$members"/> +      </xsl:call-template> +   </fo:table-row> +    <xsl:call-template name="simplelist.horiz"> +      <xsl:with-param name="cols" select="$cols"/> +      <xsl:with-param name="cell" select="$cell + $cols"/> +      <xsl:with-param name="members" select="$members"/> +    </xsl:call-template> +  </xsl:if> +</xsl:template> + +<xsl:template name="simplelist.horiz.row"> +  <xsl:param name="cols">1</xsl:param> +  <xsl:param name="cell">1</xsl:param> +  <xsl:param name="members" select="./member"/> +  <xsl:param name="curcol">1</xsl:param> + +  <xsl:if test="$curcol <= $cols"> +    <fo:table-cell> +      <fo:block> +        <xsl:if test="$members[position()=$cell]"> +          <xsl:apply-templates select="$members[position()=$cell]"/> +        </xsl:if> +      </fo:block> +    </fo:table-cell> +    <xsl:call-template name="simplelist.horiz.row"> +      <xsl:with-param name="cols" select="$cols"/> +      <xsl:with-param name="cell" select="$cell+1"/> +      <xsl:with-param name="members" select="$members"/> +      <xsl:with-param name="curcol" select="$curcol+1"/> +    </xsl:call-template> +  </xsl:if> +</xsl:template> + +<xsl:template name="simplelist.vert"> +  <xsl:param name="cols">1</xsl:param> +  <xsl:param name="cell">1</xsl:param> +  <xsl:param name="members" select="./member"/> +  <xsl:param name="rows" +             select="floor((count($members)+$cols - 1) div $cols)"/> + +  <xsl:if test="$cell <= $rows"> +    <fo:table-row> +      <xsl:call-template name="simplelist.vert.row"> +        <xsl:with-param name="cols" select="$cols"/> +        <xsl:with-param name="rows" select="$rows"/> +        <xsl:with-param name="cell" select="$cell"/> +        <xsl:with-param name="members" select="$members"/> +      </xsl:call-template> +   </fo:table-row> +    <xsl:call-template name="simplelist.vert"> +      <xsl:with-param name="cols" select="$cols"/> +      <xsl:with-param name="cell" select="$cell+1"/> +      <xsl:with-param name="members" select="$members"/> +      <xsl:with-param name="rows" select="$rows"/> +    </xsl:call-template> +  </xsl:if> +</xsl:template> + +<xsl:template name="simplelist.vert.row"> +  <xsl:param name="cols">1</xsl:param> +  <xsl:param name="rows">1</xsl:param> +  <xsl:param name="cell">1</xsl:param> +  <xsl:param name="members" select="./member"/> +  <xsl:param name="curcol">1</xsl:param> + +  <xsl:if test="$curcol <= $cols"> +    <fo:table-cell> +      <fo:block> +        <xsl:if test="$members[position()=$cell]"> +          <xsl:apply-templates select="$members[position()=$cell]"/> +        </xsl:if> +      </fo:block> +    </fo:table-cell> +    <xsl:call-template name="simplelist.vert.row"> +      <xsl:with-param name="cols" select="$cols"/> +      <xsl:with-param name="rows" select="$rows"/> +      <xsl:with-param name="cell" select="$cell+$rows"/> +      <xsl:with-param name="members" select="$members"/> +      <xsl:with-param name="curcol" select="$curcol+1"/> +    </xsl:call-template> +  </xsl:if> +</xsl:template> + +<xsl:template match="member"> +  <xsl:call-template name="simple.xlink"> +    <xsl:with-param name="content"> +      <xsl:apply-templates/> +    </xsl:with-param> +  </xsl:call-template> +</xsl:template> + +<!-- ==================================================================== --> + +<xsl:template match="procedure"> +  <xsl:variable name="id"> +    <xsl:call-template name="object.id"/> +  </xsl:variable> + +  <xsl:variable name="param.placement" +                select="substring-after(normalize-space($formal.title.placement), +                                        concat(local-name(.), ' '))"/> + +  <xsl:variable name="placement"> +    <xsl:choose> +      <xsl:when test="contains($param.placement, ' ')"> +        <xsl:value-of select="substring-before($param.placement, ' ')"/> +      </xsl:when> +      <xsl:when test="$param.placement = ''">before</xsl:when> +      <xsl:otherwise> +        <xsl:value-of select="$param.placement"/> +      </xsl:otherwise> +    </xsl:choose> +  </xsl:variable> + +  <!-- Preserve order of PIs and comments --> +  <xsl:variable name="preamble" +        select="*[not(self::step +                  or self::title +                  or self::titleabbrev)] +                |comment()[not(preceding-sibling::step)] +                |processing-instruction()[not(preceding-sibling::step)]"/> + +  <xsl:variable name="steps"  +                select="step +                        |comment()[preceding-sibling::step] +                        |processing-instruction()[preceding-sibling::step]"/> + +  <fo:block id="{$id}" xsl:use-attribute-sets="procedure.properties list.block.spacing"> +    <xsl:if test="./title and $placement = 'before'"> +      <!-- n.b. gentext code tests for $formal.procedures and may make an "informal" --> +      <!-- heading even though we called formal.object.heading. odd but true. --> +      <xsl:call-template name="formal.object.heading"/> +    </xsl:if> + +    <xsl:apply-templates select="$preamble"/> + +    <fo:list-block xsl:use-attribute-sets="list.block.spacing" +                   provisional-distance-between-starts="2em" +                   provisional-label-separation="0.2em"> +      <xsl:apply-templates select="$steps"/> +    </fo:list-block> + +    <xsl:if test="./title and $placement != 'before'"> +      <!-- n.b. gentext code tests for $formal.procedures and may make an "informal" --> +      <!-- heading even though we called formal.object.heading. odd but true. --> +      <xsl:call-template name="formal.object.heading"/> +    </xsl:if> +  </fo:block> +</xsl:template> + +<xsl:template match="procedure/title"> +</xsl:template> + +<xsl:template match="substeps"> +  <fo:list-block xsl:use-attribute-sets="list.block.spacing" +                 provisional-distance-between-starts="2em" +                 provisional-label-separation="0.2em"> +    <xsl:apply-templates/> +  </fo:list-block> +</xsl:template> + +<xsl:template match="procedure/step|substeps/step"> +  <xsl:variable name="id"> +    <xsl:call-template name="object.id"/> +  </xsl:variable> + +  <fo:list-item xsl:use-attribute-sets="list.item.spacing"> +    <fo:list-item-label end-indent="label-end()"> +      <fo:block id="{$id}"> +        <!-- dwc: fix for one step procedures. Use a bullet if there's no step 2 --> +        <xsl:choose> +          <xsl:when test="count(../step) = 1"> +            <xsl:text>•</xsl:text> +          </xsl:when> +          <xsl:otherwise> +            <xsl:apply-templates select="." mode="number"> +              <xsl:with-param name="recursive" select="0"/> +            </xsl:apply-templates>. +          </xsl:otherwise> +        </xsl:choose> +      </fo:block> +    </fo:list-item-label> +    <fo:list-item-body start-indent="body-start()"> +      <fo:block> +        <xsl:apply-templates/> +      </fo:block> +    </fo:list-item-body> +  </fo:list-item> +</xsl:template> + +<xsl:template match="stepalternatives"> +  <fo:list-block provisional-distance-between-starts="2em" +                 provisional-label-separation="0.2em"> +    <xsl:apply-templates select="step"/> +  </fo:list-block> +</xsl:template> + +<xsl:template match="stepalternatives/step"> +  <xsl:variable name="id"> +    <xsl:call-template name="object.id"/> +  </xsl:variable> + +  <fo:list-item xsl:use-attribute-sets="list.item.spacing"> +    <fo:list-item-label end-indent="label-end()"> +      <fo:block id="{$id}"> +        <xsl:text>•</xsl:text> +      </fo:block> +    </fo:list-item-label> +    <fo:list-item-body start-indent="body-start()"> +      <fo:block> +        <xsl:apply-templates/> +      </fo:block> +    </fo:list-item-body> +  </fo:list-item> +</xsl:template> + +<xsl:template match="step/title"> +  <fo:block font-weight="bold" +            keep-together.within-column="always"  +            keep-with-next.within-column="always"> +    <xsl:apply-templates/> +  </fo:block> +</xsl:template> + +<!-- ==================================================================== --> + +<xsl:template match="segmentedlist"> +  <xsl:variable name="presentation"> +    <xsl:call-template name="pi.dbfo_list-presentation"/> +  </xsl:variable> + +  <xsl:variable name="id"> +    <xsl:call-template name="object.id"/> +  </xsl:variable> + +  <xsl:choose> +    <xsl:when test="$presentation = 'table'"> +      <fo:block id="{$id}"> +        <xsl:apply-templates select="." mode="seglist-table"/> +      </fo:block> +    </xsl:when> +    <xsl:when test="$presentation = 'list'"> +      <fo:block id="{$id}"> +        <xsl:apply-templates/> +      </fo:block> +    </xsl:when> +    <xsl:when test="$segmentedlist.as.table != 0"> +      <fo:block id="{$id}"> +        <xsl:apply-templates select="." mode="seglist-table"/> +      </fo:block> +    </xsl:when> +    <xsl:otherwise> +      <fo:block id="{$id}"> +        <xsl:apply-templates/> +      </fo:block> +    </xsl:otherwise> +  </xsl:choose> +</xsl:template> + +<xsl:template match="segmentedlist/title"> +  <xsl:apply-templates select="." mode="list.title.mode" /> +</xsl:template> + +<xsl:template match="segtitle"> +</xsl:template> + +<xsl:template match="segtitle" mode="segtitle-in-seg"> +  <xsl:apply-templates/> +</xsl:template> + +<xsl:template match="seglistitem"> +  <xsl:variable name="id"> +    <xsl:call-template name="object.id"/> +  </xsl:variable> +  <fo:block id="{$id}"> +    <xsl:apply-templates/> +  </fo:block> +</xsl:template> + +<xsl:template match="seg"> +  <xsl:variable name="segnum" select="count(preceding-sibling::seg)+1"/> +  <xsl:variable name="seglist" select="ancestor::segmentedlist"/> +  <xsl:variable name="segtitles" select="$seglist/segtitle"/> + +  <!-- +     Note: segtitle is only going to be the right thing in a well formed +     SegmentedList.  If there are too many Segs or too few SegTitles, +     you'll get something odd...maybe an error +  --> + +  <fo:block> +    <fo:inline font-weight="bold"> +      <xsl:apply-templates select="$segtitles[$segnum=position()]" +                           mode="segtitle-in-seg"/> +      <xsl:text>: </xsl:text> +    </fo:inline> +    <xsl:apply-templates/> +  </fo:block> +</xsl:template> + +<xsl:template match="segmentedlist" mode="seglist-table"> +  <xsl:apply-templates select="title" mode="list.title.mode" /> +  <fo:table> +    <fo:table-column column-number="1" column-width="proportional-column-width(1)"/> +    <fo:table-column column-number="2" column-width="proportional-column-width(1)"/> +    <fo:table-header start-indent="0pt" end-indent="0pt"> +      <fo:table-row> +        <xsl:apply-templates select="segtitle" mode="seglist-table"/> +      </fo:table-row> +    </fo:table-header> +    <fo:table-body start-indent="0pt" end-indent="0pt"> +      <xsl:apply-templates select="seglistitem" mode="seglist-table"/> +    </fo:table-body> +  </fo:table> +</xsl:template> + +<xsl:template match="segtitle" mode="seglist-table"> +  <fo:table-cell> +    <fo:block font-weight="bold"> +      <xsl:apply-templates/> +    </fo:block> +  </fo:table-cell> +</xsl:template> + +<xsl:template match="seglistitem" mode="seglist-table"> +  <xsl:variable name="id"> +    <xsl:call-template name="object.id"/> +  </xsl:variable> +  <fo:table-row id="{$id}"> +    <xsl:apply-templates mode="seglist-table"/> +  </fo:table-row> +</xsl:template> + +<xsl:template match="seg" mode="seglist-table"> +  <fo:table-cell> +    <fo:block> +      <xsl:apply-templates/> +    </fo:block> +  </fo:table-cell> +</xsl:template> + +<!-- ==================================================================== --> + +<xsl:template match="calloutlist"> +  <xsl:variable name="id"> +  <xsl:call-template name="object.id"/> +  </xsl:variable> + +  <fo:block id="{$id}" +            text-align="{$alignment}"> +    <!-- The above restores alignment altered by image align attribute --> +    <xsl:if test="title|info/title"> +      <xsl:apply-templates select="(title|info/title)[1]"  +                           mode="list.title.mode"/> +    </xsl:if> + +    <!-- Preserve order of PIs and comments --> +    <xsl:apply-templates  +         select="*[not(self::callout or self::title or self::titleabbrev)] +                   |comment()[not(preceding-sibling::callout)] +                   |processing-instruction()[not(preceding-sibling::callout)]"/> + +    <fo:list-block space-before.optimum="1em" +                   space-before.minimum="0.8em" +                   space-before.maximum="1.2em" +                   provisional-distance-between-starts="2.2em" +                   provisional-label-separation="0.2em"> +      <xsl:apply-templates select="callout +                                |comment()[preceding-sibling::callout] +                                |processing-instruction()[preceding-sibling::callout]"/> +    </fo:list-block> +  </fo:block> +</xsl:template> + +<xsl:template match="calloutlist/title"> +</xsl:template> + +<xsl:template match="callout"> +  <xsl:variable name="id"><xsl:call-template name="object.id"/></xsl:variable> +  <fo:list-item id="{$id}"> +    <fo:list-item-label end-indent="label-end()"> +      <fo:block> +        <xsl:call-template name="callout.arearefs"> +          <xsl:with-param name="arearefs" select="@arearefs"/> +        </xsl:call-template> +      </fo:block> +    </fo:list-item-label> +    <fo:list-item-body start-indent="body-start()"> +      <fo:block> +        <xsl:apply-templates/> +      </fo:block> +    </fo:list-item-body> +  </fo:list-item> +</xsl:template> + +<xsl:template name="callout.arearefs"> +  <xsl:param name="arearefs"></xsl:param> +  <xsl:if test="$arearefs!=''"> +    <xsl:choose> +      <xsl:when test="substring-before($arearefs,' ')=''"> +        <xsl:call-template name="callout.arearef"> +          <xsl:with-param name="arearef" select="$arearefs"/> +        </xsl:call-template> +      </xsl:when> +      <xsl:otherwise> +        <xsl:call-template name="callout.arearef"> +          <xsl:with-param name="arearef" +                          select="substring-before($arearefs,' ')"/> +        </xsl:call-template> +      </xsl:otherwise> +    </xsl:choose> +    <xsl:call-template name="callout.arearefs"> +      <xsl:with-param name="arearefs" +                      select="substring-after($arearefs,' ')"/> +    </xsl:call-template> +  </xsl:if> +</xsl:template> + +<xsl:template name="callout.arearef"> +  <xsl:param name="arearef"></xsl:param> +  <xsl:variable name="targets" select="key('id',$arearef)"/> +  <xsl:variable name="target" select="$targets[1]"/> + +  <xsl:choose> +    <xsl:when test="count($target)=0"> +      <xsl:value-of select="$arearef"/> +      <xsl:text>: ???</xsl:text> +    </xsl:when> +    <xsl:when test="local-name($target)='co'"> +      <xsl:apply-templates select="$target" mode="callout-bug"/> +    </xsl:when> +    <xsl:when test="local-name($target)='areaset'"> +      <xsl:call-template name="callout-bug"> +        <xsl:with-param name="conum"> +          <xsl:apply-templates select="$target" mode="conumber"/> +        </xsl:with-param> +      </xsl:call-template> +    </xsl:when> +    <xsl:when test="local-name($target)='area'"> +      <xsl:choose> +        <xsl:when test="$target/parent::areaset"> +          <xsl:call-template name="callout-bug"> +            <xsl:with-param name="conum"> +              <xsl:apply-templates select="$target/parent::areaset" +                                   mode="conumber"/> +            </xsl:with-param> +          </xsl:call-template> +        </xsl:when> +        <xsl:otherwise> +          <xsl:call-template name="callout-bug"> +            <xsl:with-param name="conum"> +              <xsl:apply-templates select="$target" mode="conumber"/> +            </xsl:with-param> +          </xsl:call-template> +        </xsl:otherwise> +      </xsl:choose> +    </xsl:when> +    <xsl:otherwise> +      <xsl:text>???</xsl:text> +    </xsl:otherwise> +  </xsl:choose> +</xsl:template> + +<!-- ==================================================================== --> + +<xsl:template name="orderedlist-starting-number"> +  <xsl:param name="list" select="."/> +  <xsl:variable name="pi-start"> +    <xsl:call-template name="pi.dbfo_start"> +      <xsl:with-param name="node" select="$list"/> +    </xsl:call-template> +  </xsl:variable> +  <xsl:call-template name="output-orderedlist-starting-number"> +    <xsl:with-param name="list" select="$list"/> +    <xsl:with-param name="pi-start" select="$pi-start"/> +  </xsl:call-template> +</xsl:template> + +</xsl:stylesheet>  | 
