| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393 | <?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="qandaset" name="process.qandaset">  <xsl:variable name="id">    <xsl:call-template name="object.id"/>  </xsl:variable>  <xsl:variable name="label-width">    <xsl:call-template name="pi.dbfo_label-width"/>  </xsl:variable>  <xsl:variable name="label-length">    <xsl:choose>      <xsl:when test="$label-width != ''">        <xsl:value-of select="$label-width"/>      </xsl:when>      <xsl:when test="descendant::label">        <xsl:call-template name="longest.term">          <xsl:with-param name="terms" select="descendant::label"/>          <xsl:with-param name="maxlength" select="20"/>        </xsl:call-template>        <xsl:text>em * 0.50</xsl:text>      </xsl:when>      <xsl:otherwise>2.5em</xsl:otherwise>    </xsl:choose>  </xsl:variable>    <xsl:variable name="toc">    <xsl:call-template name="pi.dbfo_toc"/>  </xsl:variable>  <xsl:variable name="toc.params">    <xsl:call-template name="find.path.params">      <xsl:with-param name="table" select="normalize-space($generate.toc)"/>    </xsl:call-template>  </xsl:variable>  <xsl:variable name="content">    <fo:block id="{$id}">      <xsl:choose>        <xsl:when test="parent::*">          <xsl:if test="blockinfo/title|info/title|title">            <xsl:apply-templates select="(blockinfo/title|                                          info/title|title)[1]"/>          </xsl:if>        </xsl:when>        <!-- If it is the root element -->        <xsl:otherwise>          <xsl:call-template name="qandaset.titlepage"/>        </xsl:otherwise>      </xsl:choose>        <xsl:if test="(contains($toc.params, 'toc') and $toc != '0')                     or $toc = '1'">        <xsl:call-template name="qandaset.toc">          <xsl:with-param name="toc.title.p"                          select="contains($toc.params, 'title')"/>        </xsl:call-template>      </xsl:if>      <xsl:call-template name="qandaset.toc.separator"/>      <xsl:apply-templates select="*[local-name(.) != 'title'                                   and local-name(.) != 'titleabbrev'                                   and local-name(.) != 'qandadiv'                                   and local-name(.) != 'qandaentry']"/>      <xsl:apply-templates select="qandadiv"/>        <xsl:if test="qandaentry">        <fo:list-block xsl:use-attribute-sets="list.block.spacing"                       provisional-label-separation="0.2em">          <xsl:attribute name="provisional-distance-between-starts">            <xsl:choose>              <xsl:when test="$label-length != ''">                <xsl:value-of select="$label-length"/>              </xsl:when>              <xsl:otherwise>2.5em</xsl:otherwise>            </xsl:choose>          </xsl:attribute>          <xsl:apply-templates select="qandaentry"/>        </fo:list-block>      </xsl:if>    </fo:block>  </xsl:variable>  <xsl:choose>    <xsl:when test="parent::*">      <xsl:copy-of select="$content"/>    </xsl:when>    <!-- Otherwise create a page sequence -->    <xsl:otherwise>      <xsl:apply-templates select="." mode="page.sequence">        <xsl:with-param name="content" select="$content"/>        <xsl:with-param name="master-reference" select="'body'"/>      </xsl:apply-templates>    </xsl:otherwise>  </xsl:choose>  </xsl:template><xsl:template match="qandaset/blockinfo/title|qandset/info/title|qandaset/title">  <xsl:variable name="enclsect" select="(ancestor::section                                        | ancestor::simplesect                                        | ancestor::sect5                                        | ancestor::sect4                                        | ancestor::sect3                                        | ancestor::sect2                                        | ancestor::sect1                                        | ancestor::refsect3                                        | ancestor::refsect2                                        | ancestor::refsect1)[last()]"/>  <xsl:variable name="sectlvl">    <xsl:call-template name="section.level">      <xsl:with-param name="node" select="$enclsect"/>    </xsl:call-template>  </xsl:variable>  <xsl:call-template name="qanda.heading">    <xsl:with-param name="level" select="$sectlvl + 1"/>    <xsl:with-param name="marker" select="0"/>    <xsl:with-param name="title">      <xsl:apply-templates/>    </xsl:with-param>  </xsl:call-template></xsl:template><xsl:template match="qandaset/blockinfo|qandaset/info">  <!-- what should this template really do? -->  <xsl:apply-templates select="legalnotice" mode="titlepage.mode"/></xsl:template><xsl:template match="qandadiv">  <xsl:variable name="id"><xsl:call-template name="object.id"/></xsl:variable>  <xsl:variable name="label-width">    <xsl:call-template name="pi.dbfo_label-width"/>  </xsl:variable>  <xsl:variable name="label-length">    <xsl:choose>      <xsl:when test="$label-width != ''">        <xsl:value-of select="$label-width"/>      </xsl:when>      <xsl:when test="descendant::label">        <xsl:call-template name="longest.term">          <xsl:with-param name="terms" select="descendant::label"/>          <xsl:with-param name="maxlength" select="20"/>        </xsl:call-template>        <xsl:text>*0.6em</xsl:text>      </xsl:when>      <xsl:otherwise>2.5em</xsl:otherwise>    </xsl:choose>  </xsl:variable>  <fo:block id="{$id}">    <xsl:apply-templates select="(blockinfo/title|info/title|title)[1]"/>    <xsl:apply-templates select="*[local-name(.) != 'title'                                 and local-name(.) != 'titleabbrev'                                 and local-name(.) != 'qandadiv'                                 and local-name(.) != 'qandaentry']"/>    <fo:block>      <xsl:apply-templates select="qandadiv"/>      <xsl:if test="qandaentry">        <fo:list-block xsl:use-attribute-sets="list.block.spacing"                       provisional-label-separation="0.2em">          <xsl:attribute name="provisional-distance-between-starts">            <xsl:choose>              <xsl:when test="$label-length != ''">                <xsl:value-of select="$label-length"/>              </xsl:when>              <xsl:otherwise>2.5em</xsl:otherwise>            </xsl:choose>          </xsl:attribute>          <xsl:apply-templates select="qandaentry"/>        </fo:list-block>      </xsl:if>    </fo:block>  </fo:block></xsl:template><xsl:template match="qandadiv/blockinfo/title|qandadiv/info/title|qandadiv/title">  <xsl:variable name="enclsect" select="(ancestor::section                                        | ancestor::simplesect                                        | ancestor::sect5                                        | ancestor::sect4                                        | ancestor::sect3                                        | ancestor::sect2                                        | ancestor::sect1                                        | ancestor::refsect3                                        | ancestor::refsect2                                        | ancestor::refsect1)[last()]"/>  <xsl:variable name="sectlvl">    <xsl:call-template name="section.level">      <xsl:with-param name="node" select="$enclsect"/>    </xsl:call-template>  </xsl:variable>  <xsl:call-template name="qanda.heading">    <xsl:with-param name="level"  select="$sectlvl + 1 + count(ancestor::qandadiv)"/>    <xsl:with-param name="marker" select="0"/>    <xsl:with-param name="title">      <xsl:apply-templates select="parent::qandadiv" mode="label.markup"/>      <xsl:if test="$qandadiv.autolabel != 0">        <xsl:apply-templates select="." mode="intralabel.punctuation"/>        <xsl:text> </xsl:text>      </xsl:if>      <xsl:apply-templates/>    </xsl:with-param>  </xsl:call-template></xsl:template><xsl:template match="qandaentry">  <!-- Omit revhistory from fo:list-block because it is a table -->  <xsl:apply-templates select="question|answer"/></xsl:template><xsl:template match="question">  <xsl:variable name="id"><xsl:call-template name="object.id"/></xsl:variable>  <xsl:variable name="entry.id">    <xsl:call-template name="object.id">      <xsl:with-param name="object" select="parent::*"/>    </xsl:call-template>  </xsl:variable>  <xsl:variable name="deflabel">    <xsl:choose>      <xsl:when test="ancestor-or-self::*[@defaultlabel]">        <xsl:value-of select="(ancestor-or-self::*[@defaultlabel])[last()]                              /@defaultlabel"/>      </xsl:when>      <xsl:otherwise>        <xsl:value-of select="$qanda.defaultlabel"/>      </xsl:otherwise>    </xsl:choose>  </xsl:variable>      <xsl:variable name="label.content">        <xsl:apply-templates select="." mode="label.markup"/>        <xsl:if test="$deflabel = 'number' and not(label)">          <xsl:apply-templates select="." mode="intralabel.punctuation"/>        </xsl:if>      </xsl:variable>  <fo:list-item id="{$entry.id}" xsl:use-attribute-sets="list.item.spacing">    <fo:list-item-label id="{$id}" end-indent="label-end()">        <xsl:if test="string-length($label.content) > 0">			<fo:block font-weight="bold">			  <xsl:copy-of select="$label.content"/>          			</fo:block>        </xsl:if>    </fo:list-item-label>    <fo:list-item-body start-indent="body-start()">      <xsl:choose>        <xsl:when test="$deflabel = 'none' and not(label)">          <fo:block font-weight="bold">            <xsl:apply-templates select="*[local-name(.)!='label']"/>          </fo:block>        </xsl:when>        <xsl:otherwise>          <xsl:apply-templates select="*[local-name(.)!='label']"/>        </xsl:otherwise>      </xsl:choose>      <!-- Uncomment this line to get revhistory output in the question -->      <!-- <xsl:apply-templates select="preceding-sibling::revhistory"/> -->    </fo:list-item-body>  </fo:list-item></xsl:template><xsl:template match="answer">  <xsl:variable name="id"><xsl:call-template name="object.id"/></xsl:variable>  <xsl:variable name="entry.id">    <xsl:call-template name="object.id">      <xsl:with-param name="object" select="parent::*"/>    </xsl:call-template>  </xsl:variable>  <xsl:variable name="deflabel">    <xsl:choose>      <xsl:when test="ancestor-or-self::*[@defaultlabel]">        <xsl:value-of select="(ancestor-or-self::*[@defaultlabel])[last()]                              /@defaultlabel"/>      </xsl:when>      <xsl:otherwise>        <xsl:value-of select="$qanda.defaultlabel"/>      </xsl:otherwise>    </xsl:choose>  </xsl:variable>      <xsl:variable name="answer.label">        <xsl:apply-templates select="." mode="label.markup"/>      </xsl:variable>  <fo:list-item xsl:use-attribute-sets="list.item.spacing">    <fo:list-item-label id="{$id}" end-indent="label-end()">      <xsl:choose>        <xsl:when test="string-length($answer.label) > 0">			<fo:block font-weight="bold">			  <xsl:copy-of select="$answer.label"/>			</fo:block>        </xsl:when>        <xsl:otherwise>			<fo:block/>        </xsl:otherwise>      </xsl:choose>    </fo:list-item-label>    <fo:list-item-body start-indent="body-start()">      <xsl:apply-templates select="*[local-name(.)!='label' and local-name(.) != 'qandaentry']"/>      <!-- * handle nested answer/qandaentry instances -->      <!-- * (bug 1509043 from Daniel Leidert) -->      <xsl:if test="descendant::question">        <xsl:call-template name="process.qandaset"/>      </xsl:if>    </fo:list-item-body>  </fo:list-item></xsl:template><xsl:template match="label">  <xsl:apply-templates/></xsl:template><xsl:template name="qanda.heading">  <xsl:param name="level" select="1"/>  <xsl:param name="marker" select="0"/>  <xsl:param name="title"/>  <xsl:param name="titleabbrev"/>  <fo:block xsl:use-attribute-sets="qanda.title.properties">    <xsl:if test="$marker != 0">      <fo:marker marker-class-name="section.head.marker">        <xsl:choose>          <xsl:when test="$titleabbrev = ''">            <xsl:value-of select="$title"/>          </xsl:when>          <xsl:otherwise>            <xsl:value-of select="$titleabbrev"/>          </xsl:otherwise>        </xsl:choose>      </fo:marker>    </xsl:if>    <xsl:choose>      <xsl:when test="$level=1">        <fo:block xsl:use-attribute-sets="qanda.title.level1.properties">          <xsl:copy-of select="$title"/>        </fo:block>      </xsl:when>      <xsl:when test="$level=2">        <fo:block xsl:use-attribute-sets="qanda.title.level2.properties">          <xsl:copy-of select="$title"/>        </fo:block>      </xsl:when>      <xsl:when test="$level=3">        <fo:block xsl:use-attribute-sets="qanda.title.level3.properties">          <xsl:copy-of select="$title"/>        </fo:block>      </xsl:when>      <xsl:when test="$level=4">        <fo:block xsl:use-attribute-sets="qanda.title.level4.properties">          <xsl:copy-of select="$title"/>        </fo:block>      </xsl:when>      <xsl:when test="$level=5">        <fo:block xsl:use-attribute-sets="qanda.title.level5.properties">          <xsl:copy-of select="$title"/>        </fo:block>      </xsl:when>      <xsl:otherwise>        <fo:block xsl:use-attribute-sets="qanda.title.level6.properties">          <xsl:copy-of select="$title"/>        </fo:block>      </xsl:otherwise>    </xsl:choose>  </fo:block></xsl:template></xsl:stylesheet>
 |