<xsl:template match ="table">
<table border="1">
<tbody>
<xsl:for-each select="tgroup//row">
<tr>
<xsl:for-each select="entry">
<td>
<xsl:choose>
<xsl:when test="@colname">
<xsl:call-template name="widthtemplate"/>
</xsl:when>
<xsl:value-of select="."/>
<xsl:otherwise>
<xsl:attribute name="width">
<xsl:call-template name="cellwidth">
<xsl:with-param name="takenum" select="@namest"/>
<xsl:with-param name="sum" select="0"/>
</xsl:call-template>
</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="@namest">
<xsl:attribute name="colspan">
<xsl:value-of select="@namest"/>
</xsl:attribute>
</xsl:if>
<xsl:value-of select="."/>
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</tbody>
</table>
</xsl:template>
<!--cellwidthテンプレート--><!--このテンプレートがうまくいかない-->
<xsl:template name="cellwidth">
<xsl:param name="num"/>
<xsl:param name="sum"/>
<xsl:param name="takenum"/>
<xsl:variable name="w">
<xsl:call-template name="takeout">
<xsl:with-param name="str" select="ancestor::tgroup/@widths"/>
<xsl:with-param name="num" select="$num"/>
</xsl:call-template>
</xsl:variable>
<xsl:choose>
<xsl:when test="$takenum = 1">
<xsl:value-of select="$sum + $w"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="cellwidth">
<xsl:with-param name="num" select="@nameend - $takenum + 1"/>
<xsl:with-param name="sum" select="$sum + $w"/>
<xsl:with-param name="takenum" select="$takenum - 1"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!--width属性をつくるテンプレート(@colnameがある場合)--><!--OK-->
<xsl:template name="widthtemplate">
<xsl:attribute name="width">
<xsl:call-template name="takeout">
<xsl:with-param name="str" select="ancestor::tgroup/@widths"/>
<xsl:with-param name="num" select="@colname"/>
</xsl:call-template>
</xsl:attribute>
</xsl:template>
<!--inで区切って*72、四捨五入--><!--OK-->
<xsl:template name="takeout">
<xsl:param name="str"/>
<xsl:param name="num"/>
<xsl:variable name="kugiri" select="'in'"/>
<xsl:variable name="num1" select="$num - 1"/>
<xsl:variable name="car" select="substring-before($str, $kugiri)"/>
<xsl:variable name="cdr" select="substring-after($str, $kugiri)"/>
<xsl:choose>
<xsl:when test="$num1 = 0">
<xsl:value-of select="floor($car *72)"/><!--実数計算後、表示-->
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="takeout">
<xsl:with-param name="str" select="$cdr"/>
<xsl:with-param name="num" select="$num1"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
|