1<?xml version="1.0"?> 2<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 3 xmlns:fo="http://www.w3.org/1999/XSL/Format" 4 xmlns:exsl="http://exslt.org/common" 5 xmlns:set="http://exslt.org/sets" 6 exclude-result-prefixes="exsl set" 7 version="1.0"> 8 9<!-- ******************************************************************** 10 $Id: fo-rtf.xsl,v 1.4 2002/06/11 13:38:03 nwalsh Exp $ 11 ******************************************************************** 12 13 This file is part of the DocBook XSL Stylesheet distribution. 14 See ../README or http://docbook.sf.net/ for copyright 15 and other information. 16 17 ******************************************************************** --> 18 19<!-- This module contains templates that match against FO nodes. It is used 20 to post-process result tree fragments for some sorts of cleanup. 21 These templates can only ever be fired by a processor that supports 22 exslt:node-set(). --> 23 24<!-- ==================================================================== --> 25 26<!-- insert.fo.fnum mode templates insert a particular RTF at the beginning 27 of the first paragraph in the primary RTF. In fact, they are inserting 28 a footnote-number, so we tinker a few other things too, like spacing and 29 font-sizes. --> 30 31<xsl:template match="/" mode="insert.fo.fnum"> 32 <xsl:param name="mark" select="'?'"/> 33 <xsl:apply-templates mode="insert.fo.fnum"> 34 <xsl:with-param name="mark" select="$mark"/> 35 </xsl:apply-templates> 36</xsl:template> 37 38<xsl:template match="*" mode="insert.fo.fnum"> 39 <xsl:param name="mark" select="'?'"/> 40 <xsl:copy> 41 <xsl:copy-of select="@*"/> 42 <xsl:apply-templates mode="insert.fo.fnum"> 43 <xsl:with-param name="mark" select="$mark"/> 44 </xsl:apply-templates> 45 </xsl:copy> 46</xsl:template> 47 48<xsl:template match="fo:block" mode="insert.fo.fnum"> 49 <xsl:param name="mark" select="'?'"/> 50 <xsl:copy> 51 <xsl:for-each select="@*"> 52 <xsl:choose> 53 <xsl:when test="starts-with(name(.), 'space-before')"/> 54 <xsl:when test="starts-with(name(.), 'space-after')"/> 55 <xsl:when test="starts-with(name(.), 'font-size')"/> 56 <xsl:otherwise> 57 <xsl:copy-of select="."/> 58 </xsl:otherwise> 59 </xsl:choose> 60 </xsl:for-each> 61 <xsl:if test="not(preceding::fo:block)"> 62 <xsl:copy-of select="$mark"/> 63 </xsl:if> 64 <xsl:apply-templates mode="insert.fo.fnum"> 65 <xsl:with-param name="mark" select="$mark"/> 66 </xsl:apply-templates> 67 </xsl:copy> 68</xsl:template> 69 70<xsl:template match="text()|processing-instruction()|comment()" mode="insert.fo.fnum"> 71 <xsl:param name="mark" select="'?'"/> 72 <xsl:copy/> 73</xsl:template> 74 75<!-- ==================================================================== --> 76 77<!-- insert.fo.block mode templates insert a particular RTF at the beginning 78 of the first paragraph in the primary RTF. --> 79 80<xsl:template match="/" mode="insert.fo.block"> 81 <xsl:param name="mark" select="'?'"/> 82 <xsl:apply-templates mode="insert.fo.block"> 83 <xsl:with-param name="mark" select="$mark"/> 84 </xsl:apply-templates> 85</xsl:template> 86 87<xsl:template match="*" mode="insert.fo.block"> 88 <xsl:param name="mark" select="'?'"/> 89 <xsl:copy> 90 <xsl:copy-of select="@*"/> 91 <xsl:apply-templates mode="insert.fo.block"> 92 <xsl:with-param name="mark" select="$mark"/> 93 </xsl:apply-templates> 94 </xsl:copy> 95</xsl:template> 96 97<xsl:template match="fo:block" mode="insert.fo.block"> 98 <xsl:param name="mark" select="'?'"/> 99 <xsl:copy> 100 <xsl:copy-of select="@*"/> 101 <xsl:if test="not(preceding::fo:block)"> 102 <xsl:copy-of select="$mark"/> 103 </xsl:if> 104 <xsl:apply-templates mode="insert.fo.block"> 105 <xsl:with-param name="mark" select="$mark"/> 106 </xsl:apply-templates> 107 </xsl:copy> 108</xsl:template> 109 110<xsl:template match="text()|processing-instruction()|comment()" mode="insert.fo.block"> 111 <xsl:param name="mark" select="'?'"/> 112 <xsl:copy/> 113</xsl:template> 114 115<!-- ==================================================================== --> 116 117<!-- insert.fo.text mode templates insert a particular RTF at the beginning 118 of the first text-node in the primary RTF. --> 119 120<xsl:template match="/" mode="insert.fo.text"> 121 <xsl:param name="mark" select="'?'"/> 122 <xsl:apply-templates mode="insert.fo.text"> 123 <xsl:with-param name="mark" select="$mark"/> 124 </xsl:apply-templates> 125</xsl:template> 126 127<xsl:template match="*" mode="insert.fo.text"> 128 <xsl:param name="mark" select="'?'"/> 129 <xsl:copy> 130 <xsl:copy-of select="@*"/> 131 <xsl:apply-templates mode="insert.fo.text"> 132 <xsl:with-param name="mark" select="$mark"/> 133 </xsl:apply-templates> 134 </xsl:copy> 135</xsl:template> 136 137<xsl:template match="text()|processing-instruction()|comment()" mode="insert.fo.text"> 138 <xsl:param name="mark" select="'?'"/> 139 140 <xsl:if test="not(preceding::text())"> 141 <xsl:copy-of select="$mark"/> 142 </xsl:if> 143 144 <xsl:copy/> 145</xsl:template> 146 147<xsl:template match="processing-instruction()|comment()" mode="insert.fo.text"> 148 <xsl:param name="mark" select="'?'"/> 149 <xsl:copy/> 150</xsl:template> 151 152<!-- ==================================================================== --> 153 154</xsl:stylesheet> 155