[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

[xsl] pagebreak between elements


Subject: [xsl] pagebreak between elements
From: jelmer <jkuperus@xxxxxxxxx>
Date: Thu, 21 Aug 2003 01:50:51 +0200

Hi , I am currently writing some html coversion xsl sheets for a TEI based
dialect
the layout should basicly look like this


<table>
    <tr>
        <td>
            page1 text
        </td>
        <td>
            footnotes page 1
        </td>
    </tr>
    <tr>
        <td>
            page 2 text
        </td>
        <td>
            footnotes page 2
        </td>
    </tr>
</table>


the problem is that TEI uses  <pb /> (pagebreak) elements to seperate pages
instead of heving something like

<page>
    yadayada
</page>

this brings a problem

linebreaks can occur in lists , blockquotes etc

this means i close the tr tag on the pb element when a blockquote witch is
matched by another template is
still open, resulting in faulty html like this :

      <tr>
        <blockquote>
          part1
          </tr>
          part2
        </blockquote>
        <tr>

while i need this :

      <tr>
        <blockquote>
        part 1
        </blockquote>
      </tr>
      <tr>
        <blockquote>
        part 2
        </blockquote>
      </tr>

the way this is solved right now is that we check for the ancestor and then
close it
with

<xsl:when test="ancestor::blockquote">
  <xsl:text disable-output-escaping="yes"><![CDATA[
</blockquote>]]></xsl:text>
</xsl:when>

then close the tr, open another tr and then reopen the tag like this

<xsl:when test="ancestor::blockquote">
  <xsl:text disable-output-escaping="yes"><![CDATA[
<blockquote>]]></xsl:text>
</xsl:when>


IMHO Is is a quite distastefull solution as it increases the chances of
nonvalid output, and you basicly have 3 blockquote templates

if for instance i where to change

<xsl:template match="bq">
    <blockquote>
        <xsl:apply-templates />
    </blockquote>
</xsl:template>

to

<xsl:template match="bq">
    <div class="bq">
        <xsl:apply-templates />
    </div>
</xsl:template>

i'd also have to change the pb template on 2 locations


I imagine this is a fairly common problem and I find it hard to believe that
this would be the best solution available
but looking on the web I couldn't turn up anything
Can anyone offer a cleaner solution ? or is this really the way it should be
done

thanks in advance

-- jelmer


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



Current Thread
Keywords