2007-07-07 18:25:55 +08:00
|
|
|
<?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:attribute-set name="th.style">
|
|
|
|
<xsl:attribute name="font-weight">bold</xsl:attribute>
|
|
|
|
</xsl:attribute-set>
|
|
|
|
|
|
|
|
<!-- Outputs an fo:table only, not the caption -->
|
|
|
|
<xsl:template match="table|informaltable" mode="htmlTable">
|
|
|
|
|
|
|
|
<xsl:variable name="numcols">
|
|
|
|
<xsl:call-template name="widest-html-row">
|
|
|
|
<xsl:with-param name="rows" select=".//tr"/>
|
|
|
|
</xsl:call-template>
|
|
|
|
</xsl:variable>
|
|
|
|
|
|
|
|
<xsl:variable name="prop-columns"
|
|
|
|
select=".//col[contains(@width, '%')] |
|
|
|
|
.//colgroup[contains(@width, '%')]"/>
|
|
|
|
|
|
|
|
<xsl:variable name="table.width">
|
|
|
|
<xsl:call-template name="table.width"/>
|
|
|
|
</xsl:variable>
|
|
|
|
|
|
|
|
<fo:table xsl:use-attribute-sets="table.table.properties">
|
|
|
|
<xsl:choose>
|
|
|
|
<xsl:when test="$fop.extensions != 0 or
|
|
|
|
$passivetex.extensions != 0">
|
|
|
|
<xsl:attribute name="table-layout">fixed</xsl:attribute>
|
|
|
|
</xsl:when>
|
|
|
|
</xsl:choose>
|
|
|
|
<xsl:attribute name="width">
|
|
|
|
<xsl:choose>
|
|
|
|
<xsl:when test="@width">
|
|
|
|
<xsl:value-of select="@width"/>
|
|
|
|
</xsl:when>
|
|
|
|
<xsl:when test="$table.width">
|
|
|
|
<xsl:value-of select="$table.width"/>
|
|
|
|
</xsl:when>
|
|
|
|
<xsl:otherwise>100%</xsl:otherwise>
|
|
|
|
</xsl:choose>
|
|
|
|
</xsl:attribute>
|
|
|
|
<xsl:call-template name="make-html-table-columns">
|
|
|
|
<xsl:with-param name="count" select="$numcols"/>
|
|
|
|
</xsl:call-template>
|
|
|
|
<xsl:apply-templates select="thead" mode="htmlTable"/>
|
|
|
|
<xsl:apply-templates select="tfoot" mode="htmlTable"/>
|
|
|
|
<xsl:choose>
|
|
|
|
<xsl:when test="tbody">
|
|
|
|
<xsl:apply-templates select="tbody" mode="htmlTable"/>
|
|
|
|
</xsl:when>
|
|
|
|
<xsl:otherwise>
|
|
|
|
<fo:table-body start-indent="0pt" end-indent="0pt">
|
|
|
|
<xsl:apply-templates select="tr" mode="htmlTable"/>
|
|
|
|
</fo:table-body>
|
|
|
|
</xsl:otherwise>
|
|
|
|
</xsl:choose>
|
|
|
|
</fo:table>
|
|
|
|
|
|
|
|
</xsl:template>
|
|
|
|
|
|
|
|
<xsl:template match="caption" mode="htmlTable">
|
|
|
|
<!-- Handled by formal.object.heading -->
|
|
|
|
</xsl:template>
|
|
|
|
|
|
|
|
<xsl:template name="widest-html-row">
|
|
|
|
<xsl:param name="rows" select="''"/>
|
|
|
|
<xsl:param name="count" select="0"/>
|
|
|
|
<xsl:choose>
|
|
|
|
<xsl:when test="count($rows) = 0">
|
|
|
|
<xsl:value-of select="$count"/>
|
|
|
|
</xsl:when>
|
|
|
|
<xsl:otherwise>
|
|
|
|
<xsl:choose>
|
|
|
|
<xsl:when test="$count > count($rows[1]/*)">
|
|
|
|
<xsl:call-template name="widest-html-row">
|
|
|
|
<xsl:with-param name="rows" select="$rows[position() > 1]"/>
|
|
|
|
<xsl:with-param name="count" select="$count"/>
|
|
|
|
</xsl:call-template>
|
|
|
|
</xsl:when>
|
|
|
|
<xsl:otherwise>
|
|
|
|
<xsl:call-template name="widest-html-row">
|
|
|
|
<xsl:with-param name="rows" select="$rows[position() > 1]"/>
|
|
|
|
<xsl:with-param name="count" select="count($rows[1]/*)"/>
|
|
|
|
</xsl:call-template>
|
|
|
|
</xsl:otherwise>
|
|
|
|
</xsl:choose>
|
|
|
|
</xsl:otherwise>
|
|
|
|
</xsl:choose>
|
|
|
|
</xsl:template>
|
|
|
|
|
|
|
|
<xsl:template name="make-html-table-columns">
|
|
|
|
<xsl:param name="count" select="0"/>
|
|
|
|
<xsl:param name="number" select="1"/>
|
|
|
|
|
|
|
|
<xsl:choose>
|
|
|
|
<xsl:when test="col|colgroup/col">
|
|
|
|
<xsl:for-each select="col|colgroup/col">
|
|
|
|
<fo:table-column>
|
|
|
|
<xsl:attribute name="column-number">
|
|
|
|
<xsl:number from="table|informaltable" level="any" format="1"/>
|
|
|
|
</xsl:attribute>
|
|
|
|
<xsl:if test="@width">
|
|
|
|
<xsl:attribute name="column-width">
|
|
|
|
<xsl:choose>
|
2008-05-09 21:00:42 +08:00
|
|
|
<xsl:when test="$fop.extensions != 0 and
|
2007-07-07 18:25:55 +08:00
|
|
|
contains(@width, '%')">
|
|
|
|
<xsl:value-of select="concat('proportional-column-width(',
|
|
|
|
substring-before(@width, '%'),
|
|
|
|
')')"/>
|
|
|
|
</xsl:when>
|
|
|
|
<xsl:otherwise>
|
|
|
|
<xsl:value-of select="@width"/>
|
|
|
|
</xsl:otherwise>
|
|
|
|
</xsl:choose>
|
|
|
|
</xsl:attribute>
|
|
|
|
</xsl:if>
|
|
|
|
</fo:table-column>
|
|
|
|
</xsl:for-each>
|
|
|
|
</xsl:when>
|
|
|
|
<xsl:when test="$fop.extensions != 0">
|
|
|
|
<xsl:if test="$number <= $count">
|
|
|
|
<fo:table-column column-number="{$number}"
|
|
|
|
column-width="{6.5 div $count}in"/>
|
|
|
|
<xsl:call-template name="make-html-table-columns">
|
|
|
|
<xsl:with-param name="count" select="$count"/>
|
|
|
|
<xsl:with-param name="number" select="$number + 1"/>
|
|
|
|
</xsl:call-template>
|
|
|
|
</xsl:if>
|
|
|
|
</xsl:when>
|
|
|
|
</xsl:choose>
|
|
|
|
</xsl:template>
|
|
|
|
|
|
|
|
<xsl:template match="tbody" mode="htmlTable">
|
|
|
|
<fo:table-body border-bottom-width="0.25pt"
|
|
|
|
border-bottom-style="solid"
|
|
|
|
border-bottom-color="black"
|
|
|
|
start-indent="0pt"
|
|
|
|
end-indent="0pt">
|
|
|
|
<xsl:apply-templates mode="htmlTable"/>
|
|
|
|
</fo:table-body>
|
|
|
|
</xsl:template>
|
|
|
|
|
|
|
|
<xsl:template match="td" mode="htmlTable">
|
|
|
|
<xsl:variable name="bgcolor">
|
|
|
|
<xsl:call-template name="pi.dbfo_bgcolor"/>
|
|
|
|
</xsl:variable>
|
|
|
|
<fo:table-cell xsl:use-attribute-sets="table.cell.padding">
|
|
|
|
<xsl:call-template name="table.cell.properties">
|
|
|
|
<xsl:with-param name="bgcolor.pi" select="$bgcolor"/>
|
|
|
|
<xsl:with-param name="rowsep.inherit" select="0"/>
|
|
|
|
<xsl:with-param name="colsep.inherit" select="0"/>
|
|
|
|
</xsl:call-template>
|
|
|
|
<fo:block>
|
|
|
|
<xsl:call-template name="table.cell.block.properties"/>
|
|
|
|
<xsl:apply-templates/>
|
|
|
|
</fo:block>
|
|
|
|
</fo:table-cell>
|
|
|
|
</xsl:template>
|
|
|
|
|
|
|
|
<xsl:template match="tfoot" mode="htmlTable">
|
|
|
|
<fo:table-footer start-indent="0pt"
|
|
|
|
end-indent="0pt">
|
|
|
|
<xsl:apply-templates mode="htmlTable"/>
|
|
|
|
</fo:table-footer>
|
|
|
|
</xsl:template>
|
|
|
|
|
|
|
|
<xsl:template match="th" mode="htmlTable">
|
|
|
|
<xsl:variable name="bgcolor">
|
|
|
|
<xsl:call-template name="pi.dbfo_bgcolor"/>
|
|
|
|
</xsl:variable>
|
|
|
|
<fo:table-cell xsl:use-attribute-sets="th.style table.cell.padding">
|
|
|
|
<xsl:call-template name="table.cell.properties">
|
|
|
|
<xsl:with-param name="bgcolor.pi" select="$bgcolor"/>
|
|
|
|
<xsl:with-param name="rowsep.inherit" select="0"/>
|
|
|
|
<xsl:with-param name="colsep.inherit" select="0"/>
|
|
|
|
</xsl:call-template>
|
|
|
|
<fo:block>
|
|
|
|
<xsl:call-template name="table.cell.block.properties"/>
|
|
|
|
<xsl:apply-templates/>
|
|
|
|
</fo:block>
|
|
|
|
</fo:table-cell>
|
|
|
|
</xsl:template>
|
|
|
|
|
|
|
|
<xsl:template match="thead" mode="htmlTable">
|
|
|
|
<fo:table-header border-bottom-width="0.25pt"
|
|
|
|
border-bottom-style="solid"
|
|
|
|
border-bottom-color="black"
|
|
|
|
start-indent="0pt"
|
|
|
|
end-indent="0pt"
|
|
|
|
font-weight="bold">
|
|
|
|
<xsl:apply-templates mode="htmlTable"/>
|
|
|
|
</fo:table-header>
|
|
|
|
</xsl:template>
|
|
|
|
|
|
|
|
<xsl:template match="tr" mode="htmlTable">
|
|
|
|
<fo:table-row>
|
|
|
|
<xsl:call-template name="table.row.properties"/>
|
|
|
|
<xsl:apply-templates mode="htmlTable"/>
|
|
|
|
</fo:table-row>
|
|
|
|
</xsl:template>
|
|
|
|
|
|
|
|
</xsl:stylesheet>
|