<?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: lists.xsl 8436 2009-05-11 08:20:40Z bobstayton $ ******************************************************************** 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="keep.together"> <xsl:call-template name="pi.dbfo_keep-together"/> </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:if test="$keep.together != ''"> <xsl:attribute name="keep-together.within-column"><xsl:value-of select="$keep.together"/></xsl:attribute> </xsl:if> <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:if test="$keep.together != ''"> <xsl:attribute name="keep-together.within-column"><xsl:value-of select="$keep.together"/></xsl:attribute> </xsl:if> <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="keep.together"> <xsl:call-template name="pi.dbfo_keep-together"/> </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:if test="$keep.together != ''"> <xsl:attribute name="keep-together.within-column"><xsl:value-of select="$keep.together"/></xsl:attribute> </xsl:if> <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:if test="$keep.together != ''"> <xsl:attribute name="keep-together.within-column"><xsl:value-of select="$keep.together"/></xsl:attribute> </xsl:if> <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:variable name="keep.together"> <xsl:call-template name="pi.dbfo_keep-together"/> </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:if test="$keep.together != ''"> <xsl:attribute name="keep-together.within-column"><xsl:value-of select="$keep.together"/></xsl:attribute> </xsl:if> <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:if test="$keep.together != ''"> <xsl:attribute name="keep-together.within-column"><xsl:value-of select="$keep.together"/></xsl:attribute> </xsl:if> <xsl:copy-of select="$content"/> </fo:list-block> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template match="orderedlist/listitem"> <xsl:variable name="id"><xsl:call-template name="object.id"/></xsl:variable> <xsl:variable name="keep.together"> <xsl:call-template name="pi.dbfo_keep-together"/> </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:if test="$keep.together != ''"> <xsl:attribute name="keep-together.within-column"><xsl:value-of select="$keep.together"/></xsl:attribute> </xsl:if> <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:if test="$keep.together != ''"> <xsl:attribute name="keep-together.within-column"><xsl:value-of select="$keep.together"/></xsl:attribute> </xsl:if> <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="keep.together"> <xsl:call-template name="pi.dbfo_keep-together"/> </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:if test="$keep.together != ''"> <xsl:attribute name="keep-together.within-column"><xsl:value-of select="$keep.together"/></xsl:attribute> </xsl:if> <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:if test="$keep.together != ''"> <xsl:attribute name="keep-together.within-column"><xsl:value-of select="$keep.together"/></xsl:attribute> </xsl:if> <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="keep.together"> <xsl:call-template name="pi.dbfo_keep-together"/> </xsl:variable> <xsl:variable name="item.contents"> <fo:list-item-label end-indent="label-end()" text-align="start"> <fo:block xsl:use-attribute-sets="variablelist.term.properties"> <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:if test="$keep.together != ''"> <xsl:attribute name="keep-together.within-column"><xsl:value-of select="$keep.together"/></xsl:attribute> </xsl:if> <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:if test="$keep.together != ''"> <xsl:attribute name="keep-together.within-column"><xsl:value-of select="$keep.together"/></xsl:attribute> </xsl:if> <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="variablelist.term.properties list.item.spacing" keep-together.within-column="always" keep-with-next.within-column="always"> <xsl:apply-templates select="term"/> </fo:block> <fo:block> <xsl:attribute name="margin-{$direction.align.start}">0.25in</xsl:attribute> <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="id"> <xsl:call-template name="object.id"/> </xsl:variable> <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 id="{$id}" 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 --> <xsl:variable name="id"> <xsl:call-template name="object.id"/> </xsl:variable> <fo:inline id="{$id}"><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="id"> <xsl:call-template name="object.id"/> </xsl:variable> <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 id="{$id}" 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> <xsl:variable name="keep.together"> <xsl:call-template name="pi.dbfo_keep-together"/> </xsl:variable> <fo:list-item xsl:use-attribute-sets="list.item.spacing"> <xsl:if test="$keep.together != ''"> <xsl:attribute name="keep-together.within-column"><xsl:value-of select="$keep.together"/></xsl:attribute> </xsl:if> <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> <xsl:variable name="keep.together"> <xsl:call-template name="pi.dbfo_keep-together"/> </xsl:variable> <fo:list-item xsl:use-attribute-sets="list.item.spacing"> <xsl:if test="$keep.together != ''"> <xsl:attribute name="keep-together.within-column"><xsl:value-of select="$keep.together"/></xsl:attribute> </xsl:if> <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="keep.together"> <xsl:call-template name="pi.dbfo_keep-together"/> </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:if test="$keep.together != ''"> <xsl:attribute name="keep-together.within-column"><xsl:value-of select="$keep.together"/></xsl:attribute> </xsl:if> <xsl:apply-templates select="." mode="seglist-table"/> </fo:block> </xsl:when> <xsl:when test="$presentation = 'list'"> <fo:block id="{$id}"> <xsl:if test="$keep.together != ''"> <xsl:attribute name="keep-together.within-column"><xsl:value-of select="$keep.together"/></xsl:attribute> </xsl:if> <xsl:apply-templates/> </fo:block> </xsl:when> <xsl:when test="$segmentedlist.as.table != 0"> <fo:block id="{$id}"> <xsl:if test="$keep.together != ''"> <xsl:attribute name="keep-together.within-column"><xsl:value-of select="$keep.together"/></xsl:attribute> </xsl:if> <xsl:apply-templates select="." mode="seglist-table"/> </fo:block> </xsl:when> <xsl:otherwise> <fo:block id="{$id}"> <xsl:if test="$keep.together != ''"> <xsl:attribute name="keep-together.within-column"><xsl:value-of select="$keep.together"/></xsl:attribute> </xsl:if> <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> <xsl:variable name="pi-label-width"> <xsl:call-template name="pi.dbfo_label-width"/> </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:if test="$pi-label-width != ''"> <xsl:attribute name="provisional-distance-between-starts"> <xsl:value-of select="$pi-label-width"/> </xsl:attribute> </xsl:if> <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> <xsl:variable name="keep.together"> <xsl:call-template name="pi.dbfo_keep-together"/> </xsl:variable> <fo:list-item id="{$id}"> <xsl:if test="$keep.together != ''"> <xsl:attribute name="keep-together.within-column"><xsl:value-of select="$keep.together"/></xsl:attribute> </xsl:if> <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>