This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Column widths


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]