Subject: [xsl] managing footnotes in nested elements From: "Trevor Nicholls" <trevor@xxxxxxxxxxxxxxxxxx> Date: Sat, 22 Sep 2007 01:55:09 +1200 |
Hi Our documents can include footnotes almost anywhere, but on output (to HTML) the footnotes can only appear in certain places - at the foot of maybe half a dozen different elements (e.g. document, section, table). Footnote elements include a level attribute which determines where the footnote should appear. Currently this is achieved with the following XSL 1.0 fragments: <!-- ================================== --> <!-- Where appropriate, a template which matches one of these major elements concludes with a call to a "local_footnotes" template which formats any of the footnotes found within that element. --> <xsl:template match="..."> ... <xsl:call-template name="local_footnotes" /> </xsl:template> <!-- Only process footnotes within this element --> <xsl:template name="local_footnotes"> <xsl:variable name="local" select="name(.)" /> <xsl:if test="descendant::footnote[@level=$local]"> <div class="{$local}-footnotes"> <xsl:apply-templates select="descendant::footnote[@level=$local]" mode="footnote"/> </div> </xsl:if> </xsl:template> <!-- Note: Following assumes footnote content can be placed within a para - so no complex footnote structure please! --> <xsl:template match="footnote" mode="footnote"> <xsl:variable name="name"> <xsl:text>fn</xsl:text> <xsl:call-template name="getid" /> </xsl:variable> <a name="{$name}" /> <p> <sup class="footnote-number"> <xsl:apply-templates select="." mode="number" /> </sup> <xsl:apply-templates /> </p> </xsl:template> <!-- Footnotes follow a-1-i sequence --> <xsl:template match="footnote" mode="number"> <xsl:choose> <xsl:when test="@level='document'"> <xsl:number level="any" count="footnote[@level='document']" from="document" format="a"/> </xsl:when> <xsl:when test="@level='section'"> <xsl:number level="any" count="footnote[@level='section']" from="section" format="1"/> </xsl:when> <xsl:when test="@level='table'"> <xsl:number level="any" count="footnote[@level='table']" from="table" format="i"/> </xsl:when> </xsl:choose> </xsl:template> <!-- ================================== --> This is working wonderfully well provided that sections, tables, etc. are not self-nested. (Z within Y within X is fine, X within X or Y within Y is not). So if a (large) table contains within itself a second (small) table which contains a footnote, then the footnote appears twice: at the "foot" of the small table and again at the "foot" of the large table. How do I need to modify the above code in order to process these footnotes correctly, please? Thanks for any suggestions Cheers Trevor
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: RES: [xsl] Inserting an XSL var, David Carlisle | Thread | RE: [xsl] managing footnotes in nes, Trevor Nicholls |
Re: [xsl] variable outside a for-ea, Abel Braaksma | Date | [xsl] New user issue: use of Muenc, Dunk, Michael (Mike) |
Month |