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[(_at_)level=$local]">
<div class="{$local}-footnotes">
<xsl:apply-templates
select="descendant::footnote[(_at_)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[(_at_)level='document']"
from="document" format="a"/>
</xsl:when>
<xsl:when test="@level='section'">
<xsl:number level="any"
count="footnote[(_at_)level='section']"
from="section" format="1"/>
</xsl:when>
<xsl:when test="@level='table'">
<xsl:number level="any"
count="footnote[(_at_)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
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--