2007-07-07 18:25:55 +08:00
<?xml version="1.0" encoding="ASCII"?>
<!-- This file was created automatically by html2xhtml -->
<!-- from the HTML stylesheets. -->
<xsl:stylesheet xmlns:xsl= "http://www.w3.org/1999/XSL/Transform" xmlns:doc= "http://nwalsh.com/xsl/documentation/1.0" xmlns:stbl= "http://nwalsh.com/xslt/ext/com.nwalsh.saxon.Table" xmlns:xtbl= "xalan://com.nwalsh.xalan.Table" xmlns:lxslt= "http://xml.apache.org/xslt" xmlns:ptbl= "http://nwalsh.com/xslt/ext/xsltproc/python/Table" xmlns= "http://www.w3.org/1999/xhtml" exclude-result-prefixes= "doc stbl xtbl lxslt ptbl" version= "1.0" >
<xsl:include href= "../common/table.xsl" />
<!-- ********************************************************************
$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.
******************************************************************** -->
<lxslt:component prefix= "xtbl" functions= "adjustColumnWidths" />
<xsl:template name= "empty.table.cell" >
<xsl:param name= "colnum" select= "0" />
<xsl:variable name= "rowsep" >
<xsl:choose >
<!-- If this is the last row, rowsep never applies. -->
<xsl:when test= "not(ancestor-or-self::row[1]/following-sibling::row or ancestor-or-self::thead/following-sibling::tbody or ancestor-or-self::tbody/preceding-sibling::tfoot)" >
<xsl:value-of select= "0" />
</xsl:when>
<xsl:otherwise >
<xsl:call-template name= "inherited.table.attribute" >
<xsl:with-param name= "entry" select= "NOT-AN-ELEMENT-NAME" />
<xsl:with-param name= "row" select= "ancestor-or-self::row[1]" />
<xsl:with-param name= "colnum" select= "$colnum" />
<xsl:with-param name= "attribute" select= "'rowsep'" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name= "colsep" >
<xsl:choose >
<!-- If this is the last column, colsep never applies. -->
<xsl:when test= "number($colnum) >= ancestor::tgroup/@cols" > 0</xsl:when>
<xsl:otherwise >
<xsl:call-template name= "inherited.table.attribute" >
<xsl:with-param name= "entry" select= "NOT-AN-ELEMENT-NAME" />
<xsl:with-param name= "row" select= "ancestor-or-self::row[1]" />
<xsl:with-param name= "colnum" select= "$colnum" />
<xsl:with-param name= "attribute" select= "'colsep'" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<td class= "auto-generated" >
<xsl:if test= "$table.borders.with.css != 0" >
<xsl:attribute name= "style" >
<xsl:if test= "$colsep > 0" >
<xsl:call-template name= "border" >
<xsl:with-param name= "side" select= "'right'" />
</xsl:call-template>
</xsl:if>
<xsl:if test= "$rowsep > 0" >
<xsl:call-template name= "border" >
<xsl:with-param name= "side" select= "'bottom'" />
</xsl:call-template>
</xsl:if>
</xsl:attribute>
</xsl:if>
<xsl:text >   </xsl:text>
</td>
</xsl:template>
<!-- ==================================================================== -->
<xsl:template name= "border" >
<xsl:param name= "side" select= "'left'" />
<xsl:param name= "padding" select= "0" />
<xsl:param name= "style" select= "$table.cell.border.style" />
<xsl:param name= "color" select= "$table.cell.border.color" />
<xsl:param name= "thickness" select= "$table.cell.border.thickness" />
<!-- Note: Some browsers (mozilla) require at least a width and style. -->
<xsl:choose >
<xsl:when test= "($thickness != '' and $style != '' and $color != '') or ($thickness != '' and $style != '') or ($thickness != '')" >
<!-- use the compound property if we can: -->
<!-- it saves space and probably works more reliably -->
<xsl:text > border-</xsl:text>
<xsl:value-of select= "$side" />
<xsl:text > : </xsl:text>
<xsl:value-of select= "$thickness" />
<xsl:text > </xsl:text>
<xsl:value-of select= "$style" />
<xsl:text > </xsl:text>
<xsl:value-of select= "$color" />
<xsl:text > ; </xsl:text>
</xsl:when>
<xsl:otherwise >
<!-- we need to specify the styles individually -->
<xsl:if test= "$thickness != ''" >
<xsl:text > border-</xsl:text>
<xsl:value-of select= "$side" />
<xsl:text > -width: </xsl:text>
<xsl:value-of select= "$thickness" />
<xsl:text > ; </xsl:text>
</xsl:if>
<xsl:if test= "$style != ''" >
<xsl:text > border-</xsl:text>
<xsl:value-of select= "$side" />
<xsl:text > -style: </xsl:text>
<xsl:value-of select= "$style" />
<xsl:text > ; </xsl:text>
</xsl:if>
<xsl:if test= "$color != ''" >
<xsl:text > border-</xsl:text>
<xsl:value-of select= "$side" />
<xsl:text > -color: </xsl:text>
<xsl:value-of select= "$color" />
<xsl:text > ; </xsl:text>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- ==================================================================== -->
<xsl:template match= "tgroup" name= "tgroup" >
<xsl:if test= "not(@cols) or @cols = '' or string(number(@cols)) = 'NaN'" >
<xsl:message terminate= "yes" >
<xsl:text > Error: CALS tables must specify the number of columns.</xsl:text>
</xsl:message>
</xsl:if>
<xsl:variable name= "summary" >
2007-07-21 23:01:56 +08:00
<xsl:call-template name= "pi.dbhtml_table-summary" />
2007-07-07 18:25:55 +08:00
</xsl:variable>
<xsl:variable name= "cellspacing" >
2007-07-21 23:01:56 +08:00
<xsl:call-template name= "pi.dbhtml_cellspacing" />
2007-07-07 18:25:55 +08:00
</xsl:variable>
<xsl:variable name= "cellpadding" >
2007-07-21 23:01:56 +08:00
<xsl:call-template name= "pi.dbhtml_cellpadding" />
2007-07-07 18:25:55 +08:00
</xsl:variable>
<table >
<xsl:choose >
<!-- If there's a textobject/phrase for the table summary, use it -->
<xsl:when test= "../textobject/phrase" >
<xsl:attribute name= "summary" >
<xsl:value-of select= "../textobject/phrase" />
</xsl:attribute>
</xsl:when>
<!-- If there's a <?dbhtml table - summary="foo"?> PI, use it for
the HTML table summary attribute -->
<xsl:when test= "$summary != ''" >
<xsl:attribute name= "summary" >
<xsl:value-of select= "$summary" />
</xsl:attribute>
</xsl:when>
<!-- Otherwise, if there's a title, use that -->
<xsl:when test= "../title" >
<xsl:attribute name= "summary" >
<xsl:value-of select= "string(../title)" />
</xsl:attribute>
</xsl:when>
<!-- Otherwise, forget the whole idea -->
<xsl:otherwise > <!-- nevermind --> </xsl:otherwise>
</xsl:choose>
<xsl:if test= "$cellspacing != '' or $html.cellspacing != ''" >
<xsl:attribute name= "cellspacing" >
<xsl:choose >
<xsl:when test= "$cellspacing != ''" >
<xsl:value-of select= "$cellspacing" />
</xsl:when>
<xsl:otherwise >
<xsl:value-of select= "$html.cellspacing" />
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</xsl:if>
<xsl:if test= "$cellpadding != '' or $html.cellpadding != ''" >
<xsl:attribute name= "cellpadding" >
<xsl:choose >
<xsl:when test= "$cellpadding != ''" >
<xsl:value-of select= "$cellpadding" />
</xsl:when>
<xsl:otherwise >
<xsl:value-of select= "$html.cellpadding" />
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</xsl:if>
<xsl:if test= "../@pgwide=1 or local-name(.) = 'entrytbl'" >
<xsl:attribute name= "width" > 100%</xsl:attribute>
</xsl:if>
<xsl:choose >
<xsl:when test= "$table.borders.with.css != 0" >
<xsl:choose >
<xsl:when test= "../@frame='all' or (not(../@frame) and $default.table.frame='all')" >
<xsl:attribute name= "style" >
<xsl:text > border-collapse: collapse;</xsl:text>
<xsl:call-template name= "border" >
<xsl:with-param name= "side" select= "'top'" />
<xsl:with-param name= "style" select= "$table.frame.border.style" />
<xsl:with-param name= "color" select= "$table.frame.border.color" />
<xsl:with-param name= "thickness" select= "$table.frame.border.thickness" />
</xsl:call-template>
<xsl:call-template name= "border" >
<xsl:with-param name= "side" select= "'bottom'" />
<xsl:with-param name= "style" select= "$table.frame.border.style" />
<xsl:with-param name= "color" select= "$table.frame.border.color" />
<xsl:with-param name= "thickness" select= "$table.frame.border.thickness" />
</xsl:call-template>
<xsl:call-template name= "border" >
<xsl:with-param name= "side" select= "'left'" />
<xsl:with-param name= "style" select= "$table.frame.border.style" />
<xsl:with-param name= "color" select= "$table.frame.border.color" />
<xsl:with-param name= "thickness" select= "$table.frame.border.thickness" />
</xsl:call-template>
<xsl:call-template name= "border" >
<xsl:with-param name= "side" select= "'right'" />
<xsl:with-param name= "style" select= "$table.frame.border.style" />
<xsl:with-param name= "color" select= "$table.frame.border.color" />
<xsl:with-param name= "thickness" select= "$table.frame.border.thickness" />
</xsl:call-template>
</xsl:attribute>
</xsl:when>
<xsl:when test= "../@frame='topbot' or (not(../@frame) and $default.table.frame='topbot')" >
<xsl:attribute name= "style" >
<xsl:text > border-collapse: collapse;</xsl:text>
<xsl:call-template name= "border" >
<xsl:with-param name= "side" select= "'top'" />
<xsl:with-param name= "style" select= "$table.frame.border.style" />
<xsl:with-param name= "color" select= "$table.frame.border.color" />
<xsl:with-param name= "thickness" select= "$table.frame.border.thickness" />
</xsl:call-template>
<xsl:call-template name= "border" >
<xsl:with-param name= "side" select= "'bottom'" />
<xsl:with-param name= "style" select= "$table.frame.border.style" />
<xsl:with-param name= "color" select= "$table.frame.border.color" />
<xsl:with-param name= "thickness" select= "$table.frame.border.thickness" />
</xsl:call-template>
</xsl:attribute>
</xsl:when>
<xsl:when test= "../@frame='top' or (not(../@frame) and $default.table.frame='top')" >
<xsl:attribute name= "style" >
<xsl:text > border-collapse: collapse;</xsl:text>
<xsl:call-template name= "border" >
<xsl:with-param name= "side" select= "'top'" />
<xsl:with-param name= "style" select= "$table.frame.border.style" />
<xsl:with-param name= "color" select= "$table.frame.border.color" />
<xsl:with-param name= "thickness" select= "$table.frame.border.thickness" />
</xsl:call-template>
</xsl:attribute>
</xsl:when>
<xsl:when test= "../@frame='bottom' or (not(../@frame) and $default.table.frame='bottom')" >
<xsl:attribute name= "style" >
<xsl:text > border-collapse: collapse;</xsl:text>
<xsl:call-template name= "border" >
<xsl:with-param name= "side" select= "'bottom'" />
<xsl:with-param name= "style" select= "$table.frame.border.style" />
<xsl:with-param name= "color" select= "$table.frame.border.color" />
<xsl:with-param name= "thickness" select= "$table.frame.border.thickness" />
</xsl:call-template>
</xsl:attribute>
</xsl:when>
<xsl:when test= "../@frame='sides' or (not(../@frame) and $default.table.frame='sides')" >
<xsl:attribute name= "style" >
<xsl:text > border-collapse: collapse;</xsl:text>
<xsl:call-template name= "border" >
<xsl:with-param name= "side" select= "'left'" />
<xsl:with-param name= "style" select= "$table.frame.border.style" />
<xsl:with-param name= "color" select= "$table.frame.border.color" />
<xsl:with-param name= "thickness" select= "$table.frame.border.thickness" />
</xsl:call-template>
<xsl:call-template name= "border" >
<xsl:with-param name= "side" select= "'right'" />
<xsl:with-param name= "style" select= "$table.frame.border.style" />
<xsl:with-param name= "color" select= "$table.frame.border.color" />
<xsl:with-param name= "thickness" select= "$table.frame.border.thickness" />
</xsl:call-template>
</xsl:attribute>
</xsl:when>
2007-07-21 23:01:56 +08:00
<xsl:when test= "../@frame='none'" >
<xsl:attribute name= "style" >
<xsl:text > border: none;</xsl:text>
</xsl:attribute>
</xsl:when>
2007-07-07 18:25:55 +08:00
<xsl:otherwise >
<xsl:attribute name= "style" >
<xsl:text > border-collapse: collapse;</xsl:text>
</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
2007-07-21 23:01:56 +08:00
2007-07-07 18:25:55 +08:00
</xsl:when>
<xsl:when test= "../@frame='none' or (not(../@frame) and $default.table.frame='none') or local-name(.) = 'entrytbl'" >
<xsl:attribute name= "border" > 0</xsl:attribute>
</xsl:when>
<xsl:otherwise >
<xsl:attribute name= "border" > 1</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:variable name= "colgroup" >
<colgroup >
<xsl:call-template name= "generate.colgroup" >
<xsl:with-param name= "cols" select= "@cols" />
</xsl:call-template>
</colgroup>
</xsl:variable>
<xsl:variable name= "explicit.table.width" >
2007-07-21 23:01:56 +08:00
<xsl:call-template name= "pi.dbhtml_table-width" >
<xsl:with-param name= "node" select= ".." />
2007-07-07 18:25:55 +08:00
</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>
<xsl:if test= "$default.table.width != '' or $explicit.table.width != ''" >
<xsl:attribute name= "width" >
<xsl:choose >
<xsl:when test= "contains($table.width, '%')" >
<xsl:value-of select= "$table.width" />
</xsl:when>
<xsl:when test= "$use.extensions != 0 and $tablecolumns.extension != 0" >
<xsl:choose >
<xsl:when test= "function-available('stbl:convertLength')" >
<xsl:value-of select= "stbl:convertLength($table.width)" />
</xsl:when>
<xsl:when test= "function-available('xtbl:convertLength')" >
<xsl:value-of select= "xtbl:convertLength($table.width)" />
</xsl:when>
<xsl:otherwise >
<xsl:message terminate= "yes" >
<xsl:text > No convertLength function available.</xsl:text>
</xsl:message>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise >
<xsl:value-of select= "$table.width" />
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</xsl:if>
<xsl:choose >
<xsl:when test= "$use.extensions != 0 and $tablecolumns.extension != 0" >
<xsl:choose >
<xsl:when test= "function-available('stbl:adjustColumnWidths')" >
<xsl:copy-of select= "stbl:adjustColumnWidths($colgroup)" />
</xsl:when>
<xsl:when test= "function-available('xtbl:adjustColumnWidths')" >
<xsl:copy-of select= "xtbl:adjustColumnWidths($colgroup)" />
</xsl:when>
<xsl:when test= "function-available('ptbl:adjustColumnWidths')" >
<xsl:copy-of select= "ptbl:adjustColumnWidths($colgroup)" />
</xsl:when>
<xsl:otherwise >
<xsl:message terminate= "yes" >
<xsl:text > No adjustColumnWidths function available.</xsl:text>
</xsl:message>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise >
<xsl:copy-of select= "$colgroup" />
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates select= "thead" />
<xsl:apply-templates select= "tfoot" />
<xsl:apply-templates select= "tbody" />
<xsl:if test= ".//footnote" >
<tbody class= "footnotes" >
<tr >
<td colspan= "{@cols}" >
<xsl:apply-templates select= ".//footnote" mode= "table.footnote.mode" />
</td>
</tr>
</tbody>
</xsl:if>
</table>
</xsl:template>
<xsl:template match= "tgroup/processing-instruction('dbhtml')" >
<xsl:variable name= "summary" >
2007-07-21 23:01:56 +08:00
<xsl:call-template name= "pi.dbhtml_table-summary" />
2007-07-07 18:25:55 +08:00
</xsl:variable>
<!-- Suppress the table - summary PI -->
<xsl:if test= "$summary = ''" >
<xsl:processing-instruction name= "dbhtml" >
<xsl:value-of select= "." />
</xsl:processing-instruction>
</xsl:if>
</xsl:template>
<xsl:template match= "colspec" />
<xsl:template match= "spanspec" />
<xsl:template match= "thead|tfoot" >
<xsl:element name= "{local-name(.)}" namespace= "http://www.w3.org/1999/xhtml" >
<xsl:if test= "@align" >
<xsl:attribute name= "align" >
<xsl:value-of select= "@align" />
</xsl:attribute>
</xsl:if>
<xsl:if test= "@char" >
<xsl:attribute name= "char" >
<xsl:value-of select= "@char" />
</xsl:attribute>
</xsl:if>
<xsl:if test= "@charoff" >
<xsl:attribute name= "charoff" >
<xsl:value-of select= "@charoff" />
</xsl:attribute>
</xsl:if>
<xsl:if test= "@valign" >
<xsl:attribute name= "valign" >
<xsl:value-of select= "@valign" />
</xsl:attribute>
</xsl:if>
<xsl:apply-templates select= "row[1]" >
<xsl:with-param name= "spans" >
<xsl:call-template name= "blank.spans" >
<xsl:with-param name= "cols" select= "../@cols" />
</xsl:call-template>
</xsl:with-param>
</xsl:apply-templates>
</xsl:element>
</xsl:template>
<xsl:template match= "tbody" >
<tbody >
<xsl:if test= "@align" >
<xsl:attribute name= "align" >
<xsl:value-of select= "@align" />
</xsl:attribute>
</xsl:if>
<xsl:if test= "@char" >
<xsl:attribute name= "char" >
<xsl:value-of select= "@char" />
</xsl:attribute>
</xsl:if>
<xsl:if test= "@charoff" >
<xsl:attribute name= "charoff" >
<xsl:value-of select= "@charoff" />
</xsl:attribute>
</xsl:if>
<xsl:if test= "@valign" >
<xsl:attribute name= "valign" >
<xsl:value-of select= "@valign" />
</xsl:attribute>
</xsl:if>
<xsl:apply-templates select= "row[1]" >
<xsl:with-param name= "spans" >
<xsl:call-template name= "blank.spans" >
<xsl:with-param name= "cols" select= "../@cols" />
</xsl:call-template>
</xsl:with-param>
</xsl:apply-templates>
</tbody>
</xsl:template>
<xsl:template match= "row" >
<xsl:param name= "spans" />
<xsl:choose >
<xsl:when test= "contains($spans, '0')" >
<xsl:call-template name= "normal-row" >
<xsl:with-param name= "spans" select= "$spans" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise >
<!--
<xsl:message >
<xsl:text > Ignoring row: </xsl:text>
<xsl:value-of select= "$spans" />
<xsl:text > = </xsl:text>
<xsl:call-template name= "consume-row" >
<xsl:with-param name= "spans" select= "$spans" />
</xsl:call-template>
</xsl:message>
-->
<xsl:if test= "normalize-space(.//text()) != ''" >
<xsl:message > Warning: overlapped row contains content!</xsl:message>
</xsl:if>
<tr > <xsl:comment > This row intentionally left blank </xsl:comment> </tr>
<xsl:apply-templates select= "following-sibling::row[1]" >
<xsl:with-param name= "spans" >
<xsl:call-template name= "consume-row" >
<xsl:with-param name= "spans" select= "$spans" />
</xsl:call-template>
</xsl:with-param>
</xsl:apply-templates>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name= "normal-row" >
<xsl:param name= "spans" />
<xsl:variable name= "row-height" >
<xsl:if test= "processing-instruction('dbhtml')" >
2007-07-21 23:01:56 +08:00
<xsl:call-template name= "pi.dbhtml_row-height" />
2007-07-07 18:25:55 +08:00
</xsl:if>
</xsl:variable>
<xsl:variable name= "bgcolor" >
<xsl:if test= "processing-instruction('dbhtml')" >
2007-07-21 23:01:56 +08:00
<xsl:call-template name= "pi.dbhtml_bgcolor" />
2007-07-07 18:25:55 +08:00
</xsl:if>
</xsl:variable>
<xsl:variable name= "class" >
<xsl:if test= "processing-instruction('dbhtml')" >
2007-07-21 23:01:56 +08:00
<xsl:call-template name= "pi.dbhtml_class" />
2007-07-07 18:25:55 +08:00
</xsl:if>
</xsl:variable>
<tr >
<xsl:call-template name= "tr.attributes" >
<xsl:with-param name= "rownum" >
<xsl:number from= "tgroup" count= "row" />
</xsl:with-param>
</xsl:call-template>
<xsl:if test= "$row-height != ''" >
<xsl:attribute name= "height" >
<xsl:value-of select= "$row-height" />
</xsl:attribute>
</xsl:if>
<xsl:if test= "$bgcolor != ''" >
<xsl:attribute name= "bgcolor" >
<xsl:value-of select= "$bgcolor" />
</xsl:attribute>
</xsl:if>
<xsl:if test= "$class != ''" >
<xsl:attribute name= "class" >
<xsl:value-of select= "$class" />
</xsl:attribute>
</xsl:if>
<xsl:if test= "$table.borders.with.css != 0" >
<xsl:if test= "@rowsep = 1 and following-sibling::row" >
<xsl:attribute name= "style" >
<xsl:call-template name= "border" >
<xsl:with-param name= "side" select= "'bottom'" />
</xsl:call-template>
</xsl:attribute>
</xsl:if>
</xsl:if>
<xsl:if test= "@align" >
<xsl:attribute name= "align" >
<xsl:value-of select= "@align" />
</xsl:attribute>
</xsl:if>
<xsl:if test= "@char" >
<xsl:attribute name= "char" >
<xsl:value-of select= "@char" />
</xsl:attribute>
</xsl:if>
<xsl:if test= "@charoff" >
<xsl:attribute name= "charoff" >
<xsl:value-of select= "@charoff" />
</xsl:attribute>
</xsl:if>
<xsl:if test= "@valign" >
<xsl:attribute name= "valign" >
<xsl:value-of select= "@valign" />
</xsl:attribute>
</xsl:if>
<xsl:apply-templates select= "(entry|entrytbl)[1]" >
<xsl:with-param name= "spans" select= "$spans" />
</xsl:apply-templates>
</tr>
<xsl:if test= "following-sibling::row" >
<xsl:variable name= "nextspans" >
<xsl:apply-templates select= "(entry|entrytbl)[1]" mode= "span" >
<xsl:with-param name= "spans" select= "$spans" />
</xsl:apply-templates>
</xsl:variable>
<xsl:apply-templates select= "following-sibling::row[1]" >
<xsl:with-param name= "spans" select= "$nextspans" />
</xsl:apply-templates>
</xsl:if>
</xsl:template>
<xsl:template match= "entry|entrytbl" name= "entry" >
<xsl:param name= "col" select= "1" />
<xsl:param name= "spans" />
<xsl:variable name= "cellgi" >
<xsl:choose >
<xsl:when test= "ancestor::thead" > th</xsl:when>
<xsl:when test= "ancestor::tfoot" > th</xsl:when>
<xsl:otherwise > td</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name= "empty.cell" select= "count(node()) = 0" />
<xsl:variable name= "named.colnum" >
<xsl:call-template name= "entry.colnum" />
</xsl:variable>
<xsl:variable name= "entry.colnum" >
<xsl:choose >
<xsl:when test= "$named.colnum > 0" >
<xsl:value-of select= "$named.colnum" />
</xsl:when>
<xsl:otherwise >
<xsl:value-of select= "$col" />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name= "entry.colspan" >
<xsl:choose >
<xsl:when test= "@spanname or @namest" >
<xsl:call-template name= "calculate.colspan" />
</xsl:when>
<xsl:otherwise > 1</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name= "following.spans" >
<xsl:call-template name= "calculate.following.spans" >
<xsl:with-param name= "colspan" select= "$entry.colspan" />
<xsl:with-param name= "spans" select= "$spans" />
</xsl:call-template>
</xsl:variable>
<xsl:variable name= "rowsep" >
<xsl:choose >
<!-- If this is the last row, rowsep never applies. -->
<xsl:when test= "ancestor::entrytbl and not (ancestor-or-self::row[1]/following-sibling::row)" >
<xsl:value-of select= "0" />
</xsl:when>
<xsl:when test= "not(ancestor-or-self::row[1]/following-sibling::row or ancestor-or-self::thead/following-sibling::tbody or ancestor-or-self::tbody/preceding-sibling::tfoot)" >
<xsl:value-of select= "0" />
</xsl:when>
<xsl:when test= "@morerows and not(@morerows < count(ancestor-or-self::row[1]/following-sibling::row))" >
<xsl:value-of select= "0" />
</xsl:when>
<xsl:otherwise >
<xsl:call-template name= "inherited.table.attribute" >
<xsl:with-param name= "entry" select= "." />
<xsl:with-param name= "colnum" select= "$entry.colnum" />
<xsl:with-param name= "attribute" select= "'rowsep'" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name= "colsep" >
<xsl:choose >
<!-- If this is the last column, colsep never applies. -->
<xsl:when test= "$following.spans = ''" > 0</xsl:when>
<xsl:otherwise >
<xsl:call-template name= "inherited.table.attribute" >
<xsl:with-param name= "entry" select= "." />
<xsl:with-param name= "colnum" select= "$entry.colnum" />
<xsl:with-param name= "attribute" select= "'colsep'" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name= "valign" >
<xsl:call-template name= "inherited.table.attribute" >
<xsl:with-param name= "entry" select= "." />
<xsl:with-param name= "colnum" select= "$entry.colnum" />
<xsl:with-param name= "attribute" select= "'valign'" />
</xsl:call-template>
</xsl:variable>
<xsl:variable name= "align" >
<xsl:call-template name= "inherited.table.attribute" >
<xsl:with-param name= "entry" select= "." />
<xsl:with-param name= "colnum" select= "$entry.colnum" />
<xsl:with-param name= "attribute" select= "'align'" />
</xsl:call-template>
</xsl:variable>
<xsl:variable name= "char" >
<xsl:call-template name= "inherited.table.attribute" >
<xsl:with-param name= "entry" select= "." />
<xsl:with-param name= "colnum" select= "$entry.colnum" />
<xsl:with-param name= "attribute" select= "'char'" />
</xsl:call-template>
</xsl:variable>
<xsl:variable name= "charoff" >
<xsl:call-template name= "inherited.table.attribute" >
<xsl:with-param name= "entry" select= "." />
<xsl:with-param name= "colnum" select= "$entry.colnum" />
<xsl:with-param name= "attribute" select= "'charoff'" />
</xsl:call-template>
</xsl:variable>
<xsl:choose >
<xsl:when test= "$spans != '' and not(starts-with($spans,'0:'))" >
<xsl:call-template name= "entry" >
<xsl:with-param name= "col" select= "$col+1" />
<xsl:with-param name= "spans" select= "substring-after($spans,':')" />
</xsl:call-template>
</xsl:when>
<xsl:when test= "number($entry.colnum) > $col" >
<xsl:call-template name= "empty.table.cell" />
<xsl:call-template name= "entry" >
<xsl:with-param name= "col" select= "$col+1" />
<xsl:with-param name= "spans" select= "substring-after($spans,':')" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise >
<xsl:variable name= "bgcolor" >
<xsl:if test= "processing-instruction('dbhtml')" >
2007-07-21 23:01:56 +08:00
<xsl:call-template name= "pi.dbhtml_bgcolor" />
2007-07-07 18:25:55 +08:00
</xsl:if>
</xsl:variable>
<xsl:element name= "{$cellgi}" namespace= "http://www.w3.org/1999/xhtml" >
<xsl:if test= "$bgcolor != ''" >
<xsl:attribute name= "bgcolor" >
<xsl:value-of select= "$bgcolor" />
</xsl:attribute>
</xsl:if>
<xsl:if test= "$entry.propagates.style != 0 and @role" >
<xsl:apply-templates select= "." mode= "class.attribute" >
<xsl:with-param name= "class" select= "@role" />
</xsl:apply-templates>
</xsl:if>
<xsl:if test= "$show.revisionflag and @revisionflag" >
<xsl:attribute name= "class" >
<xsl:value-of select= "@revisionflag" />
</xsl:attribute>
</xsl:if>
<xsl:if test= "$table.borders.with.css != 0" >
<xsl:attribute name= "style" >
<xsl:if test= "$colsep > 0" >
<xsl:call-template name= "border" >
<xsl:with-param name= "side" select= "'right'" />
</xsl:call-template>
</xsl:if>
<xsl:if test= "$rowsep > 0" >
<xsl:call-template name= "border" >
<xsl:with-param name= "side" select= "'bottom'" />
</xsl:call-template>
</xsl:if>
</xsl:attribute>
</xsl:if>
<xsl:if test= "@morerows > 0" >
<xsl:attribute name= "rowspan" >
<xsl:value-of select= "1+@morerows" />
</xsl:attribute>
</xsl:if>
<xsl:if test= "$entry.colspan > 1" >
<xsl:attribute name= "colspan" >
<xsl:value-of select= "$entry.colspan" />
</xsl:attribute>
</xsl:if>
<xsl:if test= "$align != ''" >
<xsl:attribute name= "align" >
<xsl:value-of select= "$align" />
</xsl:attribute>
</xsl:if>
<xsl:if test= "$valign != ''" >
<xsl:attribute name= "valign" >
<xsl:value-of select= "$valign" />
</xsl:attribute>
</xsl:if>
<xsl:if test= "$char != ''" >
<xsl:attribute name= "char" >
<xsl:value-of select= "$char" />
</xsl:attribute>
</xsl:if>
<xsl:if test= "$charoff != ''" >
<xsl:attribute name= "charoff" >
<xsl:value-of select= "$charoff" />
</xsl:attribute>
</xsl:if>
<xsl:if test= "not(preceding-sibling::*) and (ancestor::row[1]/@id or ancestor::row[1]/@xml:id)" >
<xsl:call-template name= "anchor" >
<xsl:with-param name= "node" select= "ancestor::row[1]" />
</xsl:call-template>
</xsl:if>
<xsl:call-template name= "anchor" />
<xsl:choose >
<xsl:when test= "$empty.cell" >
<xsl:text >   </xsl:text>
</xsl:when>
<xsl:when test= "self::entrytbl" >
<xsl:call-template name= "tgroup" />
</xsl:when>
<xsl:otherwise >
<xsl:apply-templates />
</xsl:otherwise>
</xsl:choose>
</xsl:element>
<xsl:choose >
<xsl:when test= "following-sibling::entry|following-sibling::entrytbl" >
<xsl:apply-templates select= "(following-sibling::entry |following-sibling::entrytbl)[1]" >
<xsl:with-param name= "col" select= "$col+$entry.colspan" />
<xsl:with-param name= "spans" select= "$following.spans" />
</xsl:apply-templates>
</xsl:when>
<xsl:otherwise >
<xsl:call-template name= "finaltd" >
<xsl:with-param name= "spans" select= "$following.spans" />
<xsl:with-param name= "col" select= "$col+$entry.colspan" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match= "entry|entrytbl" name= "sentry" mode= "span" >
<xsl:param name= "col" select= "1" />
<xsl:param name= "spans" />
<xsl:variable name= "entry.colnum" >
<xsl:call-template name= "entry.colnum" />
</xsl:variable>
<xsl:variable name= "entry.colspan" >
<xsl:choose >
<xsl:when test= "@spanname or @namest" >
<xsl:call-template name= "calculate.colspan" />
</xsl:when>
<xsl:otherwise > 1</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name= "following.spans" >
<xsl:call-template name= "calculate.following.spans" >
<xsl:with-param name= "colspan" select= "$entry.colspan" />
<xsl:with-param name= "spans" select= "$spans" />
</xsl:call-template>
</xsl:variable>
<xsl:choose >
<xsl:when test= "$spans != '' and not(starts-with($spans,'0:'))" >
<xsl:value-of select= "substring-before($spans,':')-1" />
<xsl:text > :</xsl:text>
<xsl:call-template name= "sentry" >
<xsl:with-param name= "col" select= "$col+1" />
<xsl:with-param name= "spans" select= "substring-after($spans,':')" />
</xsl:call-template>
</xsl:when>
<xsl:when test= "number($entry.colnum) > $col" >
<xsl:text > 0:</xsl:text>
<xsl:call-template name= "sentry" >
<xsl:with-param name= "col" select= "$col+$entry.colspan" />
<xsl:with-param name= "spans" select= "$following.spans" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise >
<xsl:call-template name= "copy-string" >
<xsl:with-param name= "count" select= "$entry.colspan" />
<xsl:with-param name= "string" >
<xsl:choose >
<xsl:when test= "@morerows" >
<xsl:value-of select= "@morerows" />
</xsl:when>
<xsl:otherwise > 0</xsl:otherwise>
</xsl:choose>
<xsl:text > :</xsl:text>
</xsl:with-param>
</xsl:call-template>
<xsl:choose >
<xsl:when test= "following-sibling::entry|following-sibling::entrytbl" >
<xsl:apply-templates select= "(following-sibling::entry |following-sibling::entrytbl)[1]" mode= "span" >
<xsl:with-param name= "col" select= "$col+$entry.colspan" />
<xsl:with-param name= "spans" select= "$following.spans" />
</xsl:apply-templates>
</xsl:when>
<xsl:otherwise >
<xsl:call-template name= "sfinaltd" >
<xsl:with-param name= "spans" select= "$following.spans" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name= "generate.colgroup" >
<xsl:param name= "cols" select= "1" />
<xsl:param name= "count" select= "1" />
<xsl:choose >
<xsl:when test= "$count > $cols" />
<xsl:otherwise >
<xsl:call-template name= "generate.col" >
<xsl:with-param name= "countcol" select= "$count" />
</xsl:call-template>
<xsl:call-template name= "generate.colgroup" >
<xsl:with-param name= "cols" select= "$cols" />
<xsl:with-param name= "count" select= "$count+1" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name= "generate.col" >
<xsl:param name= "countcol" > 1</xsl:param>
<xsl:param name= "colspecs" select= "./colspec" />
<xsl:param name= "count" > 1</xsl:param>
<xsl:param name= "colnum" > 1</xsl:param>
<xsl:choose >
<xsl:when test= "$count>count($colspecs)" >
<col />
</xsl:when>
<xsl:otherwise >
<xsl:variable name= "colspec" select= "$colspecs[$count=position()]" />
<xsl:variable name= "colspec.colnum" >
<xsl:choose >
<xsl:when test= "$colspec/@colnum" >
<xsl:value-of select= "$colspec/@colnum" />
</xsl:when>
<xsl:otherwise >
<xsl:value-of select= "$colnum" />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:choose >
<xsl:when test= "$colspec.colnum=$countcol" >
<col >
<xsl:if test= "$colspec/@colwidth and $use.extensions != 0 and $tablecolumns.extension != 0" >
<xsl:attribute name= "width" >
<xsl:choose >
<xsl:when test= "normalize-space($colspec/@colwidth) = '*'" >
<xsl:value-of select= "'1*'" />
</xsl:when>
<xsl:otherwise >
<xsl:value-of select= "$colspec/@colwidth" />
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</xsl:if>
<xsl:choose >
<xsl:when test= "$colspec/@align" >
<xsl:attribute name= "align" >
<xsl:value-of select= "$colspec/@align" />
</xsl:attribute>
</xsl:when>
<!-- Suggested by Pavel ZAMPACH <zampach@nemcb.cz> -->
<xsl:when test= "$colspecs/ancestor::tgroup/@align" >
<xsl:attribute name= "align" >
<xsl:value-of select= "$colspecs/ancestor::tgroup/@align" />
</xsl:attribute>
</xsl:when>
</xsl:choose>
<xsl:if test= "$colspec/@char" >
<xsl:attribute name= "char" >
<xsl:value-of select= "$colspec/@char" />
</xsl:attribute>
</xsl:if>
<xsl:if test= "$colspec/@charoff" >
<xsl:attribute name= "charoff" >
<xsl:value-of select= "$colspec/@charoff" />
</xsl:attribute>
</xsl:if>
</col>
</xsl:when>
<xsl:otherwise >
<xsl:call-template name= "generate.col" >
<xsl:with-param name= "countcol" select= "$countcol" />
<xsl:with-param name= "colspecs" select= "$colspecs" />
<xsl:with-param name= "count" select= "$count+1" />
<xsl:with-param name= "colnum" >
<xsl:choose >
<xsl:when test= "$colspec/@colnum" >
<xsl:value-of select= "$colspec/@colnum + 1" />
</xsl:when>
<xsl:otherwise >
<xsl:value-of select= "$colnum + 1" />
</xsl:otherwise>
</xsl:choose>
</xsl:with-param>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name= "colspec.colwidth" >
<!-- when this macro is called, the current context must be an entry -->
<xsl:param name= "colname" />
<!-- .. = row, ../.. = thead|tbody, ../../.. = tgroup -->
<xsl:param name= "colspecs" select= "../../../../tgroup/colspec" />
<xsl:param name= "count" > 1</xsl:param>
<xsl:choose >
<xsl:when test= "$count>count($colspecs)" />
<xsl:otherwise >
<xsl:variable name= "colspec" select= "$colspecs[$count=position()]" />
<xsl:choose >
<xsl:when test= "$colspec/@colname=$colname" >
<xsl:value-of select= "$colspec/@colwidth" />
</xsl:when>
<xsl:otherwise >
<xsl:call-template name= "colspec.colwidth" >
<xsl:with-param name= "colname" select= "$colname" />
<xsl:with-param name= "colspecs" select= "$colspecs" />
<xsl:with-param name= "count" select= "$count+1" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- ====================================================================== -->
<xsl:template name= "tr.attributes" >
<xsl:param name= "row" select= "." />
<xsl:param name= "rownum" select= "0" />
<!-- by default, do nothing. But you might want to say:
<xsl:if test= "$rownum mod 2 = 0" >
<xsl:attribute name= "class" > oddrow</xsl:attribute>
</xsl:if>
-->
</xsl:template>
</xsl:stylesheet>