xsl-list
[Top] [All Lists]

Re: How to render TEI <div*>s with chapter-like pagination?

2003-04-10 12:39:21


I did have an idea of my own, though I'm not sure how
fragile it is. <div*>s are not allowed outside
<front>, <body>, or <back> tags. So, if those tags
always render as <fo:page-sequence> . . .
</fo:page-sequence>, then making it so that something
like "</fo:page-sequence><fo:page-sequence>" is output
at the beginning of every top-level <div> except the
first should do what I want. The main catch that I see
is that one has to do something ugly like <xsl:text
disable-output-escaping="yes">&lt;/fo:page-sequence&gt;</:xsl:text>,
etc., since XSLT doesn't allow ill-formed XML inside
templates.

It's not just fragile, it just simply won't work at all in many
situations as d-o-e is an optional feature. In particular it
almost certainly won't work if the result tree from XSLT is passed
straight as an in memory tree to the FO engine as d-o-e is about
writing out tags and tags don't have any meaning for an XML tree, only
its linearisation.

You really need to think in tree transformations when using XSLT
if you think in those terms then you can't even state a requirement to
create non-well formed markup, and XSLT's behaviour will seem far more
natural.

David


If I understand you correctly you want page-sequences that slurp up
a anything before the first div
b each div
c anything after the last div
which is something like

<xsl:variable name="x" select="div1|div2|div3"/>

<xsl:if test="$x[1]/preceding-sibling::*">
  <fo:page-sequence>
    <xsl:apply-templates select="$x[1]/preceding-sibling::*"/>
  </fo:page-sequence>
  </xsl:if>
  <xsl:apply-templates select="$x"/>

<xsl:if test="$x[last()]/following-sibling::*">
  <fo:page-sequence>
    <xsl:apply-templates select="$x[last()]/following-sibling::*"/>
  </fo:page-sequence>
  </xsl:if>

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