Blame xsl/lists.xsl

Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
                xmlns:exsl="http://exslt.org/common"
Packit 0f19cf
                exclude-result-prefixes="exsl" version='1.0'>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
    XSLT Stylesheet DocBook -> LaTeX 
Packit 0f19cf
    ############################################################################ -->
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:param name="seg.item.separator">, </xsl:param>
Packit 0f19cf
<xsl:param name="variablelist.term.separator">, </xsl:param>
Packit 0f19cf
<xsl:param name="term.breakline">0</xsl:param>
Packit 0f19cf
<xsl:param name="segmentedlist.as.table" select="0"/>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
                     orderedlist/title | itemizedlist/title | simplelist/title">
Packit 0f19cf
  <xsl:text>
{\sc </xsl:text>
Packit 0f19cf
  <xsl:apply-templates/>
Packit 0f19cf
  <xsl:text>}
</xsl:text>
Packit 0f19cf
  <xsl:call-template name="label.id">
Packit 0f19cf
    <xsl:with-param name="object" select=".."/>
Packit 0f19cf
  </xsl:call-template>
Packit 0f19cf
  
Packit 0f19cf
  <xsl:text>\nopagebreak
</xsl:text>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
     order to prevent from compilation crash. If the depth is correct
Packit 0f19cf
     the templates that actually do the work are called.
Packit 0f19cf
 -->
Packit 0f19cf
<xsl:template match="itemizedlist|orderedlist|variablelist">
Packit 0f19cf
  <xsl:variable name="ditem" select="count(ancestor-or-self::itemizedlist)"/>
Packit 0f19cf
  <xsl:variable name="dorder" select="count(ancestor-or-self::orderedlist)"/>
Packit 0f19cf
  <xsl:variable name="dvar" select="count(ancestor-or-self::variablelist)"/>
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
  <xsl:when test="$ditem > 4">
Packit 0f19cf
    <xsl:message>*** Error: itemizedlist too deeply nested (> 4)</xsl:message>
Packit 0f19cf
    <xsl:text>[Error: itemizedlist too deeply nested]</xsl:text>
Packit 0f19cf
  </xsl:when>
Packit 0f19cf
  <xsl:when test="$dorder > 4">
Packit 0f19cf
    <xsl:message>*** Error: orderedlist too deeply nested (> 4)</xsl:message>
Packit 0f19cf
    <xsl:text>[Error: orderedlist too deeply nested]</xsl:text>
Packit 0f19cf
  </xsl:when>
Packit 0f19cf
  <xsl:when test="($ditem+$dorder+$dvar) > 6">
Packit 0f19cf
    <xsl:message>*** Error: lists too deeply nested (> 6)</xsl:message>
Packit 0f19cf
    <xsl:text>[Error: lists too deeply nested]</xsl:text>
Packit 0f19cf
  </xsl:when>
Packit 0f19cf
  <xsl:otherwise>
Packit 0f19cf
    
Packit 0f19cf
    <xsl:apply-templates select="." mode="print"/>
Packit 0f19cf
  </xsl:otherwise>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="itemizedlist" mode="print">
Packit 0f19cf
  <xsl:apply-templates select="title"/>
Packit 0f19cf
  
Packit 0f19cf
                                     self::titleabbrev or
Packit 0f19cf
                                     self::listitem)]"/>
Packit 0f19cf
  <xsl:text>\begin{itemize}</xsl:text>
Packit 0f19cf
  
Packit 0f19cf
  <xsl:call-template name="opt.group">
Packit 0f19cf
    <xsl:with-param name="opts" select="@spacing"/>
Packit 0f19cf
    <xsl:with-param name="mode" select="'enumitem'"/>
Packit 0f19cf
  </xsl:call-template>
Packit 0f19cf
  <xsl:text>
</xsl:text>
Packit 0f19cf
  <xsl:apply-templates select="listitem"/>
Packit 0f19cf
  <xsl:text>\end{itemize}
</xsl:text>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="orderedlist" mode="print">
Packit 0f19cf
  <xsl:apply-templates select="title"/>
Packit 0f19cf
  
Packit 0f19cf
                                     self::titleabbrev or
Packit 0f19cf
                                     self::listitem)]"/>
Packit 0f19cf
  <xsl:text>\begin{enumerate}</xsl:text>
Packit 0f19cf
  
Packit 0f19cf
  <xsl:call-template name="opt.group">
Packit 0f19cf
    <xsl:with-param name="opts" select="@numeration|@continuation|@spacing"/>
Packit 0f19cf
    <xsl:with-param name="mode" select="'enumitem'"/>
Packit 0f19cf
  </xsl:call-template>
Packit 0f19cf
  <xsl:text>
</xsl:text>
Packit 0f19cf
  <xsl:apply-templates select="listitem"/>
Packit 0f19cf
  <xsl:text>\end{enumerate}
</xsl:text>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="variablelist" mode="print">
Packit 0f19cf
  <xsl:apply-templates select="title"/>
Packit 0f19cf
  
Packit 0f19cf
                                     self::titleabbrev or
Packit 0f19cf
                                     self::varlistentry)]"/>
Packit 0f19cf
  <xsl:text>
\noindent
</xsl:text>
Packit 0f19cf
  <xsl:text>\begin{description}
</xsl:text>
Packit 0f19cf
  <xsl:apply-templates select="varlistentry"/>
Packit 0f19cf
  <xsl:text>\end{description}
</xsl:text>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="listitem">
Packit 0f19cf
  
Packit 0f19cf
  <xsl:text>
\item{}</xsl:text>
Packit 0f19cf
  <xsl:call-template name="label.id"/>
Packit 0f19cf
  <xsl:apply-templates/>
Packit 0f19cf
  <xsl:text>
</xsl:text>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="varlistentry">
Packit 0f19cf
  <xsl:text>\item[{</xsl:text>
Packit 0f19cf
  <xsl:apply-templates select="term"/>
Packit 0f19cf
  <xsl:text>}] </xsl:text>
Packit 0f19cf
  <xsl:call-template name="label.id">
Packit 0f19cf
    <xsl:with-param name="object" select="."/>
Packit 0f19cf
  </xsl:call-template>
Packit 0f19cf
  <xsl:call-template name="label.id">
Packit 0f19cf
    <xsl:with-param name="object" select="term"/>
Packit 0f19cf
  </xsl:call-template>
Packit 0f19cf
  <xsl:apply-templates select="term" mode="foottext"/>
Packit 0f19cf
  <xsl:apply-templates select="listitem"/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="varlistentry/term">
Packit 0f19cf
  <xsl:apply-templates/>
Packit 0f19cf
  <xsl:if test="position()!=last()">
Packit 0f19cf
    <xsl:value-of select="$variablelist.term.separator"/>
Packit 0f19cf
  </xsl:if>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="varlistentry/listitem">
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
  
Packit 0f19cf
  
Packit 0f19cf
                              self::orderedlist or
Packit 0f19cf
                              self::variablelist][not(child::title)]">
Packit 0f19cf
    <xsl:text>~</xsl:text>
Packit 0f19cf
  </xsl:when>
Packit 0f19cf
  
Packit 0f19cf
  <xsl:when test="child::*[1][self::programlisting][not(child::title)]">
Packit 0f19cf
    <xsl:text>~</xsl:text>
Packit 0f19cf
  </xsl:when>
Packit 0f19cf
  
Packit 0f19cf
  <xsl:when test="child::*[not(self::indexterm)][1][self::figure]">
Packit 0f19cf
    <xsl:text>~ </xsl:text>
Packit 0f19cf
  </xsl:when>
Packit 0f19cf
  
Packit 0f19cf
       with immediate following brackets [...]-->
Packit 0f19cf
  <xsl:when test="$term.breakline='1'">
Packit 0f19cf
    <xsl:text>\hspace{0em}\\~
</xsl:text>
Packit 0f19cf
  </xsl:when>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
  <xsl:apply-templates/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
     # List Options #
Packit 0f19cf
     ################ -->
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template name="opt.group">
Packit 0f19cf
  <xsl:param name="opts"/>
Packit 0f19cf
  <xsl:param name="mode" select="'opt'"/>
Packit 0f19cf
  <xsl:param name="left" select="'['"/>
Packit 0f19cf
  <xsl:param name="right" select="']'"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:variable name="result">
Packit 0f19cf
    <xsl:for-each select="$opts">
Packit 0f19cf
      <xsl:variable name="str">
Packit 0f19cf
        <xsl:apply-templates select="." mode="enumitem"/>
Packit 0f19cf
      </xsl:variable>
Packit 0f19cf
      
Packit 0f19cf
      <xsl:if test="$str!='' and position()!=1">
Packit 0f19cf
        <xsl:text>,</xsl:text>
Packit 0f19cf
      </xsl:if>
Packit 0f19cf
      <xsl:value-of select="$str"/>
Packit 0f19cf
    </xsl:for-each>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  <xsl:if test="$result != ''">
Packit 0f19cf
    <xsl:value-of select="$left"/>
Packit 0f19cf
    
Packit 0f19cf
    <xsl:choose>
Packit 0f19cf
      <xsl:when test="starts-with($result, ',')">
Packit 0f19cf
        <xsl:value-of select="substring-after($result, ',')"/>
Packit 0f19cf
      </xsl:when>
Packit 0f19cf
      <xsl:otherwise>
Packit 0f19cf
        <xsl:value-of select="$result"/>
Packit 0f19cf
      </xsl:otherwise>
Packit 0f19cf
    </xsl:choose>
Packit 0f19cf
    <xsl:value-of select="$right"/>
Packit 0f19cf
  </xsl:if>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="@numeration" mode="enumitem">
Packit 0f19cf
  <xsl:text>label=</xsl:text>
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
    <xsl:when test=".='arabic'">\arabic*.</xsl:when>
Packit 0f19cf
    <xsl:when test=".='upperalpha'">\Alph*.</xsl:when>
Packit 0f19cf
    <xsl:when test=".='loweralpha'">\alph*.</xsl:when>
Packit 0f19cf
    <xsl:when test=".='upperroman'">\Roman*.</xsl:when>
Packit 0f19cf
    <xsl:when test=".='lowerroman'">\roman*.</xsl:when>
Packit 0f19cf
    <xsl:otherwise>\arabic*.</xsl:otherwise>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="@continuation" mode="enumitem">
Packit 0f19cf
  <xsl:if test=". = 'continues'">
Packit 0f19cf
    <xsl:text>resume</xsl:text>
Packit 0f19cf
  </xsl:if>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="@spacing" mode="enumitem">
Packit 0f19cf
  <xsl:if test=". = 'compact'">
Packit 0f19cf
    <xsl:text>itemsep=0pt</xsl:text>
Packit 0f19cf
  </xsl:if>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
     # Simplelist #
Packit 0f19cf
     ############## -->
Packit 0f19cf
Packit 0f19cf
<xsl:template name="tabular.string">
Packit 0f19cf
  <xsl:param name="cols" select="1"/>
Packit 0f19cf
  <xsl:param name="i" select="1"/>
Packit 0f19cf
  <xsl:if test="$i <= $cols">
Packit 0f19cf
    <xsl:text>l</xsl:text>
Packit 0f19cf
    <xsl:call-template name="tabular.string">
Packit 0f19cf
      <xsl:with-param name="i" select="$i+1"/>
Packit 0f19cf
      <xsl:with-param name="cols" select="$cols"/>
Packit 0f19cf
    </xsl:call-template>
Packit 0f19cf
  </xsl:if>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="member">
Packit 0f19cf
  
Packit 0f19cf
  <xsl:text>{</xsl:text>
Packit 0f19cf
  <xsl:apply-templates/>
Packit 0f19cf
  <xsl:text>}</xsl:text>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="simplelist[@type='inline']">
Packit 0f19cf
  <xsl:apply-templates/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="simplelist[@type='inline']/member">
Packit 0f19cf
  <xsl:apply-templates/>
Packit 0f19cf
  <xsl:if test="position()!=last()">
Packit 0f19cf
    <xsl:text>, </xsl:text>
Packit 0f19cf
  </xsl:if>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="simplelist[@type='horiz']">
Packit 0f19cf
  <xsl:variable name="cols">
Packit 0f19cf
    <xsl:choose>
Packit 0f19cf
      <xsl:when test="@columns">
Packit 0f19cf
        <xsl:value-of select="@columns"/>
Packit 0f19cf
      </xsl:when>
Packit 0f19cf
      <xsl:otherwise>1</xsl:otherwise>
Packit 0f19cf
    </xsl:choose>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
  <xsl:text>
\begin{tabular*}{\linewidth}{</xsl:text>
Packit 0f19cf
  <xsl:call-template name="tabular.string">
Packit 0f19cf
    <xsl:with-param name="cols" select="$cols"/>
Packit 0f19cf
  </xsl:call-template>
Packit 0f19cf
  <xsl:text>}
</xsl:text>
Packit 0f19cf
  <xsl:for-each select="member">
Packit 0f19cf
    <xsl:apply-templates select="."/>
Packit 0f19cf
    <xsl:choose>
Packit 0f19cf
    <xsl:when test="position()=last()">
Packit 0f19cf
      <xsl:text> \\
</xsl:text>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:when test="position() mod $cols">
Packit 0f19cf
      <xsl:text> & </xsl:text>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:otherwise>
Packit 0f19cf
      <xsl:text> \\
</xsl:text>
Packit 0f19cf
    </xsl:otherwise>
Packit 0f19cf
    </xsl:choose>
Packit 0f19cf
  </xsl:for-each>
Packit 0f19cf
  <xsl:text>
\end{tabular*}
</xsl:text>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="simplelist|simplelist[@type='vert']">
Packit 0f19cf
  <xsl:variable name="cols">
Packit 0f19cf
    <xsl:choose>
Packit 0f19cf
      <xsl:when test="@columns">
Packit 0f19cf
        <xsl:value-of select="@columns"/>
Packit 0f19cf
      </xsl:when>
Packit 0f19cf
      <xsl:otherwise>1</xsl:otherwise>
Packit 0f19cf
    </xsl:choose>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
  <xsl:text>
\begin{tabular*}{\linewidth}{</xsl:text>
Packit 0f19cf
  <xsl:call-template name="tabular.string">
Packit 0f19cf
    <xsl:with-param name="cols" select="$cols"/>
Packit 0f19cf
  </xsl:call-template>
Packit 0f19cf
  <xsl:text>}
</xsl:text>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
  <xsl:call-template name="simplelist.vert.row">
Packit 0f19cf
    <xsl:with-param name="rows" select="floor((count(member)+$cols - 1) div $cols)"/>
Packit 0f19cf
  </xsl:call-template>
Packit 0f19cf
  <xsl:text>
\end{tabular*}
</xsl:text>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template name="simplelist.vert.row">
Packit 0f19cf
  <xsl:param name="cell">0</xsl:param>
Packit 0f19cf
  <xsl:param name="rows"/>
Packit 0f19cf
  <xsl:if test="$cell < $rows">
Packit 0f19cf
    <xsl:for-each select="member[((position()-1) mod $rows) = $cell]">
Packit 0f19cf
      <xsl:apply-templates select="."/>
Packit 0f19cf
      <xsl:if test="position()!=last()">
Packit 0f19cf
        <xsl:text> & </xsl:text>
Packit 0f19cf
      </xsl:if>
Packit 0f19cf
    </xsl:for-each>
Packit 0f19cf
    <xsl:text> \\
</xsl:text>
Packit 0f19cf
    <xsl:call-template name="simplelist.vert.row">
Packit 0f19cf
      <xsl:with-param name="cell" select="$cell+1"/>
Packit 0f19cf
      <xsl:with-param name="rows" select="$rows"/>
Packit 0f19cf
    </xsl:call-template>
Packit 0f19cf
  </xsl:if>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="segmentedlist">
Packit 0f19cf
  <xsl:variable name="presentation">
Packit 0f19cf
    <xsl:call-template name="pi.dblatex_list-presentation"/>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
    <xsl:when test="$presentation = 'table'">
Packit 0f19cf
      <xsl:apply-templates select="." mode="seglist-table"/>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:when test="$presentation = 'list'">
Packit 0f19cf
      <xsl:apply-templates select="." mode="seglist-inline"/>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:when test="$segmentedlist.as.table != 0">
Packit 0f19cf
      <xsl:apply-templates select="." mode="seglist-table"/>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:otherwise>
Packit 0f19cf
      <xsl:apply-templates select="." mode="seglist-inline"/>
Packit 0f19cf
    </xsl:otherwise>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="segmentedlist" mode="seglist-inline">
Packit 0f19cf
  <xsl:text>\noindent </xsl:text>
Packit 0f19cf
  <xsl:apply-templates/>
Packit 0f19cf
  <xsl:text>
</xsl:text>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="segmentedlist/title">
Packit 0f19cf
  <xsl:text>{\bf </xsl:text>
Packit 0f19cf
  <xsl:apply-templates/>
Packit 0f19cf
  <xsl:text>}\\
</xsl:text>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="segtitle">
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="segtitle" mode="segtitle-in-seg">
Packit 0f19cf
  <xsl:apply-templates/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="seglistitem">
Packit 0f19cf
  <xsl:apply-templates/>
Packit 0f19cf
  <xsl:if test="following-sibling::seglistitem">
Packit 0f19cf
    <xsl:text> \\</xsl:text>
Packit 0f19cf
  </xsl:if>
Packit 0f19cf
  <xsl:text>
</xsl:text>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="seg">
Packit 0f19cf
  <xsl:variable name="segnum" select="count(preceding-sibling::seg)+1"/>
Packit 0f19cf
  <xsl:variable name="seglist" select="ancestor::segmentedlist"/>
Packit 0f19cf
  <xsl:variable name="segtitles" select="$seglist/segtitle"/>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
     Note: segtitle is only going to be the right thing in a well formed
Packit 0f19cf
     SegmentedList.  If there are too many Segs or too few SegTitles,
Packit 0f19cf
     you'll get something odd...maybe an error
Packit 0f19cf
  -->
Packit 0f19cf
Packit 0f19cf
  <xsl:text>\emph{</xsl:text>
Packit 0f19cf
  
Packit 0f19cf
                       mode="segtitle-in-seg"/>
Packit 0f19cf
  <xsl:text>:} </xsl:text>
Packit 0f19cf
  <xsl:apply-templates/>
Packit 0f19cf
  <xsl:if test="following-sibling::seg">
Packit 0f19cf
    <xsl:value-of select="$seg.item.separator"/>
Packit 0f19cf
  </xsl:if>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
      To make a LaTeX table we want to know:
Packit 0f19cf
Packit 0f19cf
      A) How much overall columnar space there is so we can equally
Packit 0f19cf
      apportion any leftover space using the proportional space
Packit 0f19cf
      allocator, '*'.
Packit 0f19cf
Packit 0f19cf
      B) Whether to autosize columns, letting LaTeX base the width on
Packit 0f19cf
      content, and B.1) which ones to autosize.
Packit 0f19cf
Packit 0f19cf
      Unfortunately these 2 types of information may be transmitted to
Packit 0f19cf
      us via one value, either the default.table.width param or the
Packit 0f19cf
      dblatex table-width PI.  We operate on the principal that the
Packit 0f19cf
      dblatex table-width PI completely overrides the
Packit 0f19cf
      default.table.width param, so we've really only one value to
Packit 0f19cf
      work with at any one time.  Since we get a single value we
Packit 0f19cf
      receive only one of A or B and must assume the other.
Packit 0f19cf
Packit 0f19cf
      We may or may not receive additional information regards A or B
Packit 0f19cf
      via the newtbl.autowidth param or the dblatex newtbl-autowidth
Packit 0f19cf
      PI or the dblatex colwidth PI.
Packit 0f19cf
Packit 0f19cf
      This is resolved as follows:
Packit 0f19cf
       o When B is specified, assume page width for A.
Packit 0f19cf
       o When A is specified, assume every column is equally apportioned.
Packit 0f19cf
       o When nothing is specified, assume page width for A and
Packit 0f19cf
         autosizing of every column.
Packit 0f19cf
Packit 0f19cf
      Note that page width is not a universally good default for
Packit 0f19cf
      table width.  Proportionally spaced columns will "appropriately"
Packit 0f19cf
      fill the page, but adding any fixed width columns or
Packit 0f19cf
      autowidth columns will result in a table that's wider than
Packit 0f19cf
      a page.
Packit 0f19cf
Packit 0f19cf
      To gain complete control the user must specify A, the overall
Packit 0f19cf
      table width, using param or PI above.  Then specify the width of
Packit 0f19cf
      each column, whether fixed, proportional, proportional + fixed,
Packit 0f19cf
      or autosized, via other methods.
Packit 0f19cf
Packit 0f19cf
      This works because the PIs and params that otherwise control
Packit 0f19cf
      table layout have precedence over the table width controls.  The
Packit 0f19cf
      dblatex colwidth PI only occurs within a lexically "inner"
Packit 0f19cf
      portion of the document so it always has priority.
Packit 0f19cf
      newtbl.autowidth (and the newtbl-autowidth PI) is defined to
Packit 0f19cf
      have priority over table.width (and it's PI).
Packit 0f19cf
      -->
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template name="segtable.table-width">
Packit 0f19cf
  <xsl:variable name="table-width">
Packit 0f19cf
    <xsl:call-template name="pi.dblatex_table-width"/>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
    <xsl:when test="$table-width = ''">
Packit 0f19cf
      <xsl:value-of select="$default.table.width"/>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:otherwise>
Packit 0f19cf
      <xsl:value-of select="$table-width"/>
Packit 0f19cf
    </xsl:otherwise>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template name="segtable.autocols">
Packit 0f19cf
  <xsl:param name="autowidth-pi"/>  
Packit 0f19cf
  <xsl:param name="table-width"/>   
Packit 0f19cf
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
    <xsl:when test="contains($autowidth-pi, 'column:')">
Packit 0f19cf
      <xsl:value-of select="$autowidth-pi"/>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    
Packit 0f19cf
                    and contains($table-width, 'column:')">
Packit 0f19cf
      <xsl:value-of select="$table-width"/>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
  
Packit 0f19cf
  <xsl:text> </xsl:text>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template name="segtable.autowidth">
Packit 0f19cf
  <xsl:param name="autowidth.pi"/>  
Packit 0f19cf
  <xsl:param name="table-width"/>   
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
  <xsl:variable name="autowidth">
Packit 0f19cf
    <xsl:choose>
Packit 0f19cf
      <xsl:when test="$autowidth.pi = ''">
Packit 0f19cf
        <xsl:value-of select="$newtbl.autowidth"/>
Packit 0f19cf
      </xsl:when>
Packit 0f19cf
      <xsl:otherwise>
Packit 0f19cf
        <xsl:value-of select="$autowidth.pi"/>
Packit 0f19cf
      </xsl:otherwise>
Packit 0f19cf
    </xsl:choose>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
    <xsl:when test="$autowidth = ''">
Packit 0f19cf
      
Packit 0f19cf
      <xsl:choose>
Packit 0f19cf
        <xsl:when test="$table-width = ''">
Packit 0f19cf
          
Packit 0f19cf
          <xsl:text>1</xsl:text>
Packit 0f19cf
        </xsl:when>
Packit 0f19cf
        <xsl:when test="contains($table-width, 'auto')">
Packit 0f19cf
          <xsl:choose>
Packit 0f19cf
            
Packit 0f19cf
                            or contains($table-width, 'column:')">
Packit 0f19cf
              
Packit 0f19cf
              <xsl:text>none</xsl:text>
Packit 0f19cf
            </xsl:when>
Packit 0f19cf
            <xsl:otherwise>
Packit 0f19cf
              
Packit 0f19cf
              <xsl:text>1</xsl:text>
Packit 0f19cf
            </xsl:otherwise>
Packit 0f19cf
          </xsl:choose>
Packit 0f19cf
        </xsl:when>
Packit 0f19cf
        <xsl:otherwise>
Packit 0f19cf
          
Packit 0f19cf
          
Packit 0f19cf
          <xsl:text>0</xsl:text>
Packit 0f19cf
        </xsl:otherwise>
Packit 0f19cf
      </xsl:choose>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
Packit 0f19cf
    <xsl:otherwise>
Packit 0f19cf
      
Packit 0f19cf
      <xsl:choose>
Packit 0f19cf
        <xsl:when test="contains($autowidth, 'column:')">
Packit 0f19cf
          
Packit 0f19cf
          <xsl:text>0</xsl:text>
Packit 0f19cf
        </xsl:when>
Packit 0f19cf
        <xsl:otherwise>
Packit 0f19cf
          <xsl:choose>
Packit 0f19cf
            <xsl:when test="$autowidth = 'none'">
Packit 0f19cf
              <xsl:text>0</xsl:text>
Packit 0f19cf
            </xsl:when>
Packit 0f19cf
            <xsl:otherwise>
Packit 0f19cf
              <xsl:text>1</xsl:text>
Packit 0f19cf
            </xsl:otherwise>
Packit 0f19cf
          </xsl:choose>
Packit 0f19cf
        </xsl:otherwise>
Packit 0f19cf
      </xsl:choose>
Packit 0f19cf
    </xsl:otherwise>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template name="proportional.column">
Packit 0f19cf
  
Packit 0f19cf
      colwidth="\newtblstarfactor"
Packit 0f19cf
      star="1"/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template name="autowidth.column">
Packit 0f19cf
  
Packit 0f19cf
      autowidth="1"/>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template name="user.specified.column">
Packit 0f19cf
  <xsl:param name="colwidth.pi"/>  
Packit 0f19cf
Packit 0f19cf
  <xsl:variable name="fixed">
Packit 0f19cf
    <xsl:call-template name="colfixed.get">
Packit 0f19cf
      <xsl:with-param name="width" select="$colwidth.pi"/>
Packit 0f19cf
    </xsl:call-template>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  <colspec>
Packit 0f19cf
    <xsl:if test="$fixed != ''">
Packit 0f19cf
      <xsl:attribute name="fixedwidth">
Packit 0f19cf
        <xsl:value-of select="$fixed"/>
Packit 0f19cf
      </xsl:attribute>
Packit 0f19cf
    </xsl:if>
Packit 0f19cf
Packit 0f19cf
    <xsl:choose>
Packit 0f19cf
      <xsl:when test="contains($colwidth.pi, '*')">
Packit 0f19cf
        <xsl:attribute name="colwidth">
Packit 0f19cf
          
Packit 0f19cf
          <xsl:call-template name="replace-string">
Packit 0f19cf
            <xsl:with-param name="text" select="$colwidth.pi"/>
Packit 0f19cf
            <xsl:with-param name="replace">*</xsl:with-param>
Packit 0f19cf
            <xsl:with-param name="with">\newtblstarfactor</xsl:with-param>
Packit 0f19cf
          </xsl:call-template>
Packit 0f19cf
        </xsl:attribute>
Packit 0f19cf
Packit 0f19cf
        <xsl:attribute name="star">
Packit 0f19cf
          <xsl:call-template name="colstar.get">
Packit 0f19cf
            
Packit 0f19cf
            
Packit 0f19cf
                name="width"
Packit 0f19cf
                select="substring-before($colwidth.pi, '*')"/>
Packit 0f19cf
          </xsl:call-template>
Packit 0f19cf
        </xsl:attribute>
Packit 0f19cf
      </xsl:when>
Packit 0f19cf
Packit 0f19cf
      <xsl:otherwise>
Packit 0f19cf
        <xsl:attribute name="colwidth">
Packit 0f19cf
          <xsl:value-of select="$colwidth.pi"/>
Packit 0f19cf
        </xsl:attribute>
Packit 0f19cf
      </xsl:otherwise>
Packit 0f19cf
    </xsl:choose>
Packit 0f19cf
  </colspec>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
   - tbl.sizes wants colspecs so build a set of fake colspec elements.
Packit 0f19cf
   -
Packit 0f19cf
   - tbl.sizes takes a collection of colspec elements, each having
Packit 0f19cf
   - the following (optional) attributes:
Packit 0f19cf
   -
Packit 0f19cf
   - fixedwidth
Packit 0f19cf
   -   String.  The fixed part (from colfixed.get) of a specified
Packit 0f19cf
   -   column width.
Packit 0f19cf
   -
Packit 0f19cf
   - star
Packit 0f19cf
   -   String (that we know can be converted to a number).
Packit 0f19cf
   -   The "prefix count" of the * (from colstar.get).
Packit 0f19cf
   -
Packit 0f19cf
   - colwidth
Packit 0f19cf
   -   String.  The user-specified column width with * replaced with
Packit 0f19cf
   -   "\newtblstarfactor".
Packit 0f19cf
   -
Packit 0f19cf
   - The code in this file uses the (optional) attributes:
Packit 0f19cf
   -   colwidth
Packit 0f19cf
   -   autowidth
Packit 0f19cf
   -     String (always "1").  When present (regardless of value!)
Packit 0f19cf
   -     autowidth means the column is latex spaced.
Packit 0f19cf
-->
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template name="segtable.colspecs">
Packit 0f19cf
  <xsl:param name="table-width"/>   
Packit 0f19cf
Packit 0f19cf
  <xsl:variable name="autowidth.pi">
Packit 0f19cf
    <xsl:call-template name="pi.dblatex_autowidth"/>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
  <xsl:variable name="autowidth">
Packit 0f19cf
    <xsl:call-template name="segtable.autowidth">
Packit 0f19cf
      <xsl:with-param name="autowidth.pi" select="$autowidth.pi"/>
Packit 0f19cf
      <xsl:with-param name="table-width"  select="$table-width"/>
Packit 0f19cf
    </xsl:call-template>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
  <xsl:variable name="autocols">
Packit 0f19cf
    <xsl:call-template name="segtable.autocols">
Packit 0f19cf
      <xsl:with-param name="autowidth.pi" select="$autowidth.pi"/>
Packit 0f19cf
      <xsl:with-param name="table-width"  select="$table-width"/>
Packit 0f19cf
    </xsl:call-template>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
  <xsl:for-each select="segtitle">
Packit 0f19cf
    <xsl:variable name="colwidth.pi">
Packit 0f19cf
      <xsl:call-template name="pi.dblatex_colwidth"/>
Packit 0f19cf
    </xsl:variable>
Packit 0f19cf
    <xsl:choose>
Packit 0f19cf
      <xsl:when test="$colwidth.pi = ''">
Packit 0f19cf
        
Packit 0f19cf
        <xsl:choose>
Packit 0f19cf
          
Packit 0f19cf
                                   concat(' ', position(), ' '))
Packit 0f19cf
                          or $autowidth = '1'">
Packit 0f19cf
            <xsl:call-template name="autowidth.column"/>
Packit 0f19cf
          </xsl:when>
Packit 0f19cf
          <xsl:otherwise>
Packit 0f19cf
            <xsl:call-template name="proportional.column"/>
Packit 0f19cf
          </xsl:otherwise>
Packit 0f19cf
        </xsl:choose>
Packit 0f19cf
      </xsl:when>
Packit 0f19cf
Packit 0f19cf
      
Packit 0f19cf
                      or $colwidth.pi = 'autowidth.all'">
Packit 0f19cf
        <xsl:call-template name="autowidth.column"/>
Packit 0f19cf
      </xsl:when>
Packit 0f19cf
Packit 0f19cf
      <xsl:when test="$colwidth.pi = 'autowidth.none'">
Packit 0f19cf
        <xsl:call-template name="proportional.column"/>
Packit 0f19cf
      </xsl:when>
Packit 0f19cf
Packit 0f19cf
      <xsl:otherwise>
Packit 0f19cf
        
Packit 0f19cf
        <xsl:call-template name="user.specified.column">
Packit 0f19cf
          <xsl:with-param name="colwidth.pi" select="$colwidth.pi"/>
Packit 0f19cf
        </xsl:call-template>
Packit 0f19cf
      </xsl:otherwise>
Packit 0f19cf
    </xsl:choose>
Packit 0f19cf
  </xsl:for-each>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template name="segtable.length.setup">
Packit 0f19cf
  <xsl:param name="table-width"/>   
Packit 0f19cf
  <xsl:param name="colspecs"/>      
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
  <xsl:variable name="width">
Packit 0f19cf
    
Packit 0f19cf
    
Packit 0f19cf
    
Packit 0f19cf
    <xsl:variable name="fullwidth">\linewidth-2\tabcolsep</xsl:variable>
Packit 0f19cf
    <xsl:choose>
Packit 0f19cf
    
Packit 0f19cf
                    or contains($table-width, 'auto')">
Packit 0f19cf
      <xsl:value-of select="$fullwidth"/>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:when test="contains($table-width, '%')">
Packit 0f19cf
      
Packit 0f19cf
                            div 100"/>
Packit 0f19cf
      <xsl:value-of select="$fullwidth"/>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:otherwise>
Packit 0f19cf
      <xsl:value-of select="$table-width"/>
Packit 0f19cf
    </xsl:otherwise>
Packit 0f19cf
    </xsl:choose>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
  <xsl:call-template name="tbl.sizes">
Packit 0f19cf
    <xsl:with-param name="colspec" select="$colspecs"/>
Packit 0f19cf
    <xsl:with-param name="width" select="$width"/>
Packit 0f19cf
  </xsl:call-template>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
<xsl:template match="segmentedlist" mode="seglist-table">
Packit 0f19cf
  
Packit 0f19cf
  
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
  <xsl:variable name="table-width">
Packit 0f19cf
    <xsl:call-template name="segtable.table-width"/>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
  <xsl:variable name="colspecs-text">
Packit 0f19cf
    <xsl:call-template name="segtable.colspecs">
Packit 0f19cf
      <xsl:with-param name="table-width" select="$table-width"/>
Packit 0f19cf
    </xsl:call-template>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
  
Packit 0f19cf
  <xsl:variable name="colspecs" select="exsl:node-set($colspecs-text)"/>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
  <xsl:text>

{\raggedright\savetablecounter</xsl:text>
Packit 0f19cf
  <xsl:text>\begingroup%
</xsl:text>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
  <xsl:call-template name="segtable.length.setup">
Packit 0f19cf
    <xsl:with-param name="table-width" select="$table-width"/>
Packit 0f19cf
    <xsl:with-param name="colspecs"    select="$colspecs"/>
Packit 0f19cf
  </xsl:call-template>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
  
Packit 0f19cf
  
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
  
Packit 0f19cf
  
Packit 0f19cf
  
Packit 0f19cf
  
Packit 0f19cf
  <xsl:text>\setlength{\LTpre}{\parskip}</xsl:text>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
  
Packit 0f19cf
  
Packit 0f19cf
  
Packit 0f19cf
  
Packit 0f19cf
  <xsl:text>\setlength{\LTpost}{\parskip-\fontcharht\font`i}%
</xsl:text>
Packit 0f19cf
Packit 0f19cf
  <xsl:text>\begin{longtable}[l]{</xsl:text>
Packit 0f19cf
  <xsl:for-each select="$colspecs/colspec">
Packit 0f19cf
    <xsl:text>l</xsl:text>
Packit 0f19cf
  </xsl:for-each>
Packit 0f19cf
  <xsl:text>}
</xsl:text>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
  
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
                       select="title|info/title|titleabbrev|info/titleabbrev">
Packit 0f19cf
    <xsl:with-param name="colspecs" select="$colspecs"/>
Packit 0f19cf
  </xsl:apply-templates>
Packit 0f19cf
Packit 0f19cf
  <xsl:apply-templates mode="seg-table" select="segtitle">
Packit 0f19cf
    <xsl:with-param name="colspecs" select="$colspecs"/>
Packit 0f19cf
  </xsl:apply-templates>
Packit 0f19cf
Packit 0f19cf
  <xsl:apply-templates mode="seg-table" select="seglistitem">
Packit 0f19cf
    <xsl:with-param name="colspecs" select="$colspecs"/>
Packit 0f19cf
  </xsl:apply-templates>
Packit 0f19cf
Packit 0f19cf
  <xsl:text>\end{longtable}\endgroup%
</xsl:text>
Packit 0f19cf
  <xsl:text>\restoretablecounter%
</xsl:text>
Packit 0f19cf
Packit 0f19cf
  <xsl:text>}</xsl:text>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="title|titleabbrev" mode="seglist-title">
Packit 0f19cf
  <xsl:text>{\bf </xsl:text>
Packit 0f19cf
  <xsl:apply-templates/>
Packit 0f19cf
  <xsl:text>}</xsl:text>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
                     | segmentedlist/info/title
Packit 0f19cf
                     | segmentedlist/titleabbrev[not(../title)]
Packit 0f19cf
                     | segmentedlist/info/titleabbrev[not(../title)]"
Packit 0f19cf
              mode="seg-table">
Packit 0f19cf
  <xsl:param name="colspecs"/>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
  
Packit 0f19cf
Packit 0f19cf
  <xsl:text>\multicolumn{</xsl:text>
Packit 0f19cf
  <xsl:value-of select="count($colspecs/colspec)"/>
Packit 0f19cf
  <xsl:text>}{</xsl:text>
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
    <xsl:when test="$colspecs/colspec/@autowidth">
Packit 0f19cf
      <xsl:text>l</xsl:text>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:otherwise>
Packit 0f19cf
      <xsl:text>p{</xsl:text>
Packit 0f19cf
      <xsl:for-each select="$colspecs/colspec">
Packit 0f19cf
        <xsl:value-of select="@colwidth"/>
Packit 0f19cf
        <xsl:if test="following-sibling::colspec">
Packit 0f19cf
          <xsl:text>+\tabcolsep+</xsl:text>
Packit 0f19cf
        </xsl:if>
Packit 0f19cf
      </xsl:for-each>
Packit 0f19cf
      <xsl:text>}</xsl:text>
Packit 0f19cf
    </xsl:otherwise>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
  <xsl:text>}{\raggedright%
</xsl:text>
Packit 0f19cf
  <xsl:apply-templates select="." mode="seglist-title"/>
Packit 0f19cf
  <xsl:text>%
}\tabularnewline
</xsl:text>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template name="segmentedlist.col">
Packit 0f19cf
  
Packit 0f19cf
  <xsl:param name="colspecs"/>
Packit 0f19cf
  <xsl:param name="format"/>
Packit 0f19cf
  <xsl:param name="heading" select="0"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:variable name="position">
Packit 0f19cf
    <xsl:value-of select="position()"/>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
                select="$colspecs/colspec[position()=$position]"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:variable name="colwidth">
Packit 0f19cf
    <xsl:value-of select="$colspec/@colwidth"/>
Packit 0f19cf
  </xsl:variable>
Packit 0f19cf
Packit 0f19cf
  
Packit 0f19cf
       - but we want to know about the _existance_ of the attribute,
Packit 0f19cf
       - not it's content, and testing for "" is ugly.
Packit 0f19cf
       - So "select=..." in variable. -->
Packit 0f19cf
  
Packit 0f19cf
                select="$colspec/@autowidth"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:text>\multicolumn{1}{</xsl:text>
Packit 0f19cf
  
Packit 0f19cf
  
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
  <xsl:when test="$autowidth">
Packit 0f19cf
    <xsl:choose>
Packit 0f19cf
      <xsl:when test="$format = 'p'">
Packit 0f19cf
	<xsl:text>l</xsl:text>
Packit 0f19cf
      </xsl:when>
Packit 0f19cf
      <xsl:otherwise>
Packit 0f19cf
	<xsl:text>c</xsl:text>
Packit 0f19cf
      </xsl:otherwise>
Packit 0f19cf
    </xsl:choose>
Packit 0f19cf
    <xsl:text>}{%
</xsl:text>
Packit 0f19cf
  </xsl:when>
Packit 0f19cf
  <xsl:otherwise>
Packit 0f19cf
    <xsl:value-of select="$format"/>
Packit 0f19cf
    <xsl:text>{</xsl:text>
Packit 0f19cf
    <xsl:value-of select="$colwidth"/>
Packit 0f19cf
    <xsl:text>}}{</xsl:text>
Packit 0f19cf
    <xsl:choose>
Packit 0f19cf
      <xsl:when test="$format = 'p'">
Packit 0f19cf
	<xsl:text>\raggedright</xsl:text>
Packit 0f19cf
      </xsl:when>
Packit 0f19cf
      <xsl:otherwise>
Packit 0f19cf
	<xsl:text>\centering</xsl:text>
Packit 0f19cf
      </xsl:otherwise>
Packit 0f19cf
    </xsl:choose>
Packit 0f19cf
    <xsl:text>%
</xsl:text>
Packit 0f19cf
  </xsl:otherwise>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
  
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
    <xsl:when test="$heading">
Packit 0f19cf
      <xsl:text>\emph{</xsl:text>
Packit 0f19cf
      
Packit 0f19cf
			   mode="segtitle-in-seg"/>
Packit 0f19cf
      <xsl:text>}</xsl:text>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:otherwise>
Packit 0f19cf
      <xsl:apply-templates/>
Packit 0f19cf
    </xsl:otherwise>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
  <xsl:text>%
}</xsl:text>
Packit 0f19cf
  
Packit 0f19cf
  <xsl:choose>
Packit 0f19cf
    <xsl:when test="position() != last()">
Packit 0f19cf
      <xsl:text>&</xsl:text>
Packit 0f19cf
    </xsl:when>
Packit 0f19cf
    <xsl:otherwise>
Packit 0f19cf
      <xsl:choose>
Packit 0f19cf
        
Packit 0f19cf
            test="self::segtitle
Packit 0f19cf
                  or parent::seglistitem[following-sibling::seglistitem]">
Packit 0f19cf
          <xsl:text>\tabularnewline</xsl:text>
Packit 0f19cf
        </xsl:when>
Packit 0f19cf
        <xsl:otherwise>
Packit 0f19cf
          <xsl:text>%</xsl:text>
Packit 0f19cf
        </xsl:otherwise>
Packit 0f19cf
      </xsl:choose>
Packit 0f19cf
      <xsl:text>
</xsl:text>
Packit 0f19cf
    </xsl:otherwise>
Packit 0f19cf
  </xsl:choose>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="segtitle" mode="seg-table">
Packit 0f19cf
  <xsl:param name="colspecs"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:call-template name="segmentedlist.col">
Packit 0f19cf
    <xsl:with-param name="colspecs" select="$colspecs"/>
Packit 0f19cf
    <xsl:with-param name="format">m</xsl:with-param>
Packit 0f19cf
    <xsl:with-param name="heading" select="1"/>
Packit 0f19cf
  </xsl:call-template>
Packit 0f19cf
  <xsl:if test="not(following-sibling::segtitle)">
Packit 0f19cf
    <xsl:text>\endhead
</xsl:text>
Packit 0f19cf
  </xsl:if>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="seglistitem" mode="seg-table">
Packit 0f19cf
  <xsl:param name="colspecs"/>
Packit 0f19cf
  <xsl:apply-templates mode="seg-table">
Packit 0f19cf
    <xsl:with-param name="colspecs" select="$colspecs"/>
Packit 0f19cf
  </xsl:apply-templates>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
<xsl:template match="seg" mode="seg-table">
Packit 0f19cf
  <xsl:param name="colspecs"/>
Packit 0f19cf
Packit 0f19cf
  <xsl:call-template name="segmentedlist.col">
Packit 0f19cf
    <xsl:with-param name="colspecs" select="$colspecs"/>
Packit 0f19cf
    <xsl:with-param name="format">p</xsl:with-param>
Packit 0f19cf
  </xsl:call-template>
Packit 0f19cf
</xsl:template>
Packit 0f19cf
Packit 0f19cf
</xsl:stylesheet>
Packit 0f19cf