This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: Column widths
- From: Gustaf Liljegren <gustafl at algonet dot se>
- To: xsl-list at lists dot mulberrytech dot com
- Date: Sun, 23 Jun 2002 02:26:55 +0200
- Subject: Re: [xsl] Column widths
- References: <3.0.6.32.20020622161714.007b6850@pop.algonet.se>
- Reply-to: xsl-list at lists dot mulberrytech dot com
Mike Brown wrote:
>Brackets indicate predicates. Think of them as filters, providing everything
>to the left of them, for which everything inside them is true.
Got it.
Okay, here's a sample table:
<table>
<colgroup>
<col width="30%"/>
</colgroup>
<colgroup>
<col width="60%"/>
<col width="10%"/>
</colgroup>
<tbody>
<tr>
<th>A header</th>
<td>Some content here.</td>
<td>Some more here.</td>
</tr>
</tbody>
</table>
For now, I assume there will always be equal amounts of table cells in a
row as there are <col> elements. The result will look like this:
<fo:table>
<fo:table-body>
<fo:table-row>
<fo:table-cell width="30%">...</fo:table-cell>
<fo:table-cell width="60%">...</fo:table-cell>
<fo:table-cell width="10%">...</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
Here's how the <td> template looks like. The problem is in the long XPath
expressions:
<xsl:template match="td">
<xsl:variable name="x" select="position()"/>
<fo:table-cell xsl:use-attribute-sets="table-padding">
...
<xsl:if test="ancestor::table//col[$x]/attribute::width">
<xsl:attribute name="width">
<xsl:value-of select="ancestor::table//col[$x]/attribute::width"/>
</xsl:attribute>
</xsl:if>
<fo:block>
<xsl:apply-templates/>
</fo:block>
</fo:table-cell>
</xsl:template>
Gustaf
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list