2 <!--#############################################################################
3 | $Id: normalize-scape.mod.xsl,v 1.1.2.1 2003/05/01 14:06:15 jelmer Exp $
4 |- #############################################################################
8 | Escape LaTeX and normalize-space templates.
9 | < > # $ % & ~ _ ^ \ { }
10 + ############################################################################## -->
13 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
14 xmlns:doc="http://nwalsh.com/xsl/documentation/1.0"
15 exclude-result-prefixes="doc" version='1.0'>
18 <!--############################################################################# -->
19 <!-- DOCUMENTATION -->
20 <doc:reference id="normalize-scape" xmlns="">
22 <releaseinfo role="meta">
23 $Id: normalize-scape.mod.xsl,v 1.1.2.1 2003/05/01 14:06:15 jelmer Exp $
26 <author> <firstname>Ramon</firstname> <surname>Casellas</surname> </author>
27 <author> <firstname>James</firstname> <surname>Devenish</surname> </author>
29 <copyright><year>2000</year><year>2001</year><year>2002</year><year>2003</year>
30 <holder>Ramon Casellas</holder>
33 <title>Normalize and Scape strings.</title>
35 <section><title>Introduction</title>
40 <!--############################################################################# -->
42 <!--############################################################################# -->
43 <!-- DOCUMENTATION -->
44 <doc:template name="normalize-scape" xmlns="">
45 <refpurpose> Abstract XSL template. </refpurpose>
49 <!--############################################################################# -->
51 <xsl:template match="text()">
52 <xsl:call-template name="trim-outer">
53 <xsl:with-param name="string">
55 <xsl:when test="ancestor::literal|ancestor::email|ancestor::sgmltag">
56 <xsl:call-template name="scape-verbatim">
57 <xsl:with-param name="string" select="."/>
61 <xsl:call-template name="scape">
62 <xsl:with-param name="string" select="."/>
70 <xsl:template match="text()" mode="xref.text">
71 <xsl:call-template name="trim-outer">
72 <xsl:with-param name="string">
73 <xsl:call-template name="scape">
74 <xsl:with-param name="string" select="."/>
80 <xsl:template match="text()" mode="xref-to">
81 <xsl:call-template name="trim-outer">
82 <xsl:with-param name="string">
83 <xsl:call-template name="scape">
84 <xsl:with-param name="string" select="."/>
90 <xsl:template match="text()" mode="latex.verbatim">
92 <xsl:call-template name="trim-outer">
93 <xsl:with-param name="string">
95 <xsl:value-of select="."/>
102 <!-- this template is noly used by xref.mod.xsl and only when
103 $latex.hyphenation.tttricks != 1. -->
104 <xsl:template match="text()" mode="slash.hyphen">
105 <xsl:call-template name="trim-outer">
106 <xsl:with-param name="string">
107 <xsl:call-template name="scape.slash.hyphen">
108 <xsl:with-param name="string" select="." />
114 <xsl:template name="trim-outer">
115 <xsl:param name="string"/>
116 <xsl:variable name="trimleft" select="position()=1"/>
117 <xsl:variable name="trimright" select="position()=last()"/>
119 <xsl:when test="$trimleft and not($trimright)">
120 <xsl:value-of select="substring-before(normalize-space(concat($string,'$$')),'$$')"/>
122 <xsl:when test="$trimright and not($trimleft)">
123 <xsl:value-of select="substring-after(normalize-space(concat('$$',$string)),'$$')"/>
125 <xsl:when test="$trimleft and $trimright">
126 <xsl:value-of select="normalize-space($string)"/>
129 <xsl:value-of select="$string"/>
134 <xsl:template name="scape.slash.hyphen">
135 <xsl:param name="string" />
137 <xsl:when test="contains($string,'://')">
138 <xsl:call-template name="string-replace">
139 <xsl:with-param name="to">/\-</xsl:with-param>
140 <xsl:with-param name="from">/</xsl:with-param>
141 <xsl:with-param name="string">
142 <xsl:value-of select="substring-before($string,'://')"/>
143 <xsl:value-of select="'://'"/>
144 <xsl:call-template name="scape">
145 <xsl:with-param name="string" select="substring-after($string,'://')"/>
146 </xsl:call-template></xsl:with-param>
150 <xsl:call-template name="string-replace">
151 <xsl:with-param name="to">/\-</xsl:with-param>
152 <xsl:with-param name="from">/</xsl:with-param>
153 <xsl:with-param name="string">
154 <xsl:call-template name="scape">
155 <xsl:with-param name="string" select="$string"/>
156 </xsl:call-template></xsl:with-param>
162 <xsl:template name="normalize-scape" >
163 <xsl:param name="string"/>
164 <xsl:variable name="result">
165 <xsl:call-template name="scape"><xsl:with-param name="string" select="$string"/></xsl:call-template>
167 <xsl:value-of select="normalize-space($result)"/>
171 <xsl:template name="scape" >
172 <xsl:param name="string"/>
173 <xsl:call-template name="string-replace">
174 <xsl:with-param name="to">\textless{}</xsl:with-param>
175 <xsl:with-param name="from"><</xsl:with-param>
176 <xsl:with-param name="string">
177 <xsl:call-template name="string-replace">
178 <xsl:with-param name="to">\textgreater{}</xsl:with-param>
179 <xsl:with-param name="from">></xsl:with-param>
180 <xsl:with-param name="string">
181 <xsl:call-template name="string-replace">
182 <xsl:with-param name="to">\textasciitilde{}</xsl:with-param>
183 <xsl:with-param name="from">~</xsl:with-param>
184 <xsl:with-param name="string">
185 <xsl:call-template name="string-replace">
186 <xsl:with-param name="to">\^{}</xsl:with-param>
187 <xsl:with-param name="from">^</xsl:with-param>
188 <xsl:with-param name="string">
189 <xsl:call-template name="string-replace">
190 <xsl:with-param name="to">\&</xsl:with-param>
191 <xsl:with-param name="from">&</xsl:with-param>
192 <xsl:with-param name="string">
193 <xsl:call-template name="string-replace">
194 <xsl:with-param name="to">\#</xsl:with-param>
195 <xsl:with-param name="from">#</xsl:with-param>
196 <xsl:with-param name="string">
197 <xsl:call-template name="string-replace">
198 <xsl:with-param name="to">\_</xsl:with-param>
199 <xsl:with-param name="from">_</xsl:with-param>
200 <xsl:with-param name="string">
201 <xsl:call-template name="string-replace">
202 <xsl:with-param name="to">\$</xsl:with-param>
203 <xsl:with-param name="from">$</xsl:with-param>
204 <xsl:with-param name="string">
205 <xsl:call-template name="string-replace">
206 <xsl:with-param name="to">\%</xsl:with-param>
207 <xsl:with-param name="from">%</xsl:with-param>
208 <xsl:with-param name="string">
209 <xsl:call-template name="string-replace">
210 <xsl:with-param name="to">\{</xsl:with-param>
211 <xsl:with-param name="from">{</xsl:with-param>
212 <xsl:with-param name="string">
213 <xsl:call-template name="string-replace">
214 <xsl:with-param name="to">\}</xsl:with-param>
215 <xsl:with-param name="from">}</xsl:with-param>
216 <xsl:with-param name="string">
217 <xsl:call-template name="string-replace">
218 <xsl:with-param name="to">\textbackslash \ </xsl:with-param>
219 <xsl:with-param name="from">\textbackslash </xsl:with-param>
220 <xsl:with-param name="string">
221 <xsl:call-template name="string-replace">
222 <xsl:with-param name="to">\textbackslash </xsl:with-param>
223 <xsl:with-param name="from">\</xsl:with-param>
224 <xsl:with-param name="string" select="$string"></xsl:with-param>
227 </xsl:call-template></xsl:with-param>
228 </xsl:call-template></xsl:with-param>
229 </xsl:call-template></xsl:with-param>
230 </xsl:call-template></xsl:with-param>
231 </xsl:call-template></xsl:with-param>
232 </xsl:call-template></xsl:with-param>
233 </xsl:call-template></xsl:with-param>
234 </xsl:call-template></xsl:with-param>
235 </xsl:call-template></xsl:with-param>
236 </xsl:call-template></xsl:with-param>
237 </xsl:call-template></xsl:with-param>
241 <xsl:template name="scape-verbatim" >
242 <xsl:param name="string"/>
243 <xsl:call-template name="string-replace">
244 <xsl:with-param name="to">\textasciitilde{}</xsl:with-param>
245 <xsl:with-param name="from">~</xsl:with-param>
246 <xsl:with-param name="string">
247 <xsl:call-template name="string-replace">
248 <xsl:with-param name="to">\^{}</xsl:with-param>
249 <xsl:with-param name="from">^</xsl:with-param>
250 <xsl:with-param name="string">
251 <xsl:call-template name="string-replace">
252 <xsl:with-param name="to">\&</xsl:with-param>
253 <xsl:with-param name="from">&</xsl:with-param>
254 <xsl:with-param name="string">
255 <xsl:call-template name="string-replace">
256 <xsl:with-param name="to">\#</xsl:with-param>
257 <xsl:with-param name="from">#</xsl:with-param>
258 <xsl:with-param name="string">
259 <xsl:call-template name="string-replace">
260 <xsl:with-param name="to">\_</xsl:with-param>
261 <xsl:with-param name="from">_</xsl:with-param>
262 <xsl:with-param name="string">
263 <xsl:call-template name="string-replace">
264 <xsl:with-param name="to">\$</xsl:with-param>
265 <xsl:with-param name="from">$</xsl:with-param>
266 <xsl:with-param name="string">
267 <xsl:call-template name="string-replace">
268 <xsl:with-param name="to">\%</xsl:with-param>
269 <xsl:with-param name="from">%</xsl:with-param>
270 <xsl:with-param name="string">
271 <xsl:call-template name="string-replace">
272 <xsl:with-param name="to">\docbooktolatexgobble\string\{</xsl:with-param>
273 <xsl:with-param name="from">{</xsl:with-param>
274 <xsl:with-param name="string">
275 <xsl:call-template name="string-replace">
276 <xsl:with-param name="to">\docbooktolatexgobble\string\}</xsl:with-param>
277 <xsl:with-param name="from">}</xsl:with-param>
278 <xsl:with-param name="string">
279 <xsl:call-template name="string-replace">
280 <xsl:with-param name="to">\docbooktolatexgobble\string\\</xsl:with-param>
281 <xsl:with-param name="from">\</xsl:with-param>
282 <xsl:with-param name="string" select="$string"/>
285 </xsl:call-template></xsl:with-param>
286 </xsl:call-template></xsl:with-param>
287 </xsl:call-template></xsl:with-param>
288 </xsl:call-template></xsl:with-param>
289 </xsl:call-template></xsl:with-param>
290 </xsl:call-template></xsl:with-param>
291 </xsl:call-template></xsl:with-param>
292 </xsl:call-template></xsl:with-param>
296 <xsl:template name="scape-href" >
297 <xsl:param name="string"/>
298 <!-- maybe we should warn when there are invalid characters -->
299 <xsl:call-template name="string-replace">
300 <xsl:with-param name="to">\&</xsl:with-param>
301 <xsl:with-param name="from">&</xsl:with-param>
302 <xsl:with-param name="string">
303 <xsl:call-template name="string-replace">
304 <xsl:with-param name="to">\%</xsl:with-param>
305 <xsl:with-param name="from">%</xsl:with-param>
306 <xsl:with-param name="string">
307 <xsl:call-template name="string-replace">
308 <xsl:with-param name="to">\{</xsl:with-param>
309 <xsl:with-param name="from">{</xsl:with-param>
310 <xsl:with-param name="string">
311 <xsl:call-template name="string-replace">
312 <xsl:with-param name="to">\{</xsl:with-param>
313 <xsl:with-param name="from">{</xsl:with-param>
314 <xsl:with-param name="string">
315 <xsl:call-template name="string-replace">
316 <xsl:with-param name="to">\docbooktolatexgobble\string\\</xsl:with-param>
317 <xsl:with-param name="from">\</xsl:with-param>
318 <xsl:with-param name="string" select="$string"/>
330 <doc:template name="scape-optionalarg" xmlns="">
331 <refpurpose> Escape the ] character in LaTeX optional arguments (experimental) </refpurpose>
335 <xsl:template name="scape-optionalarg" >
336 <xsl:param name="string"/>
337 <xsl:call-template name="string-replace">
338 <xsl:with-param name="to">{\rbrack}</xsl:with-param>
339 <xsl:with-param name="from">]</xsl:with-param>
340 <xsl:with-param name="string" select="$string"/>
347 <xsl:template name="string-replace">
348 <xsl:param name="string"/>
349 <xsl:param name="from"/>
350 <xsl:param name="to"/>
353 <xsl:when test="contains($string, $from)">
355 <xsl:variable name="before" select="substring-before($string, $from)"/>
356 <xsl:variable name="after" select="substring-after($string, $from)"/>
357 <xsl:variable name="prefix" select="concat($before, $to)"/>
359 <xsl:value-of select="$before"/>
360 <xsl:value-of select="$to"/>
361 <xsl:call-template name="string-replace">
362 <xsl:with-param name="string" select="$after"/>
363 <xsl:with-param name="from" select="$from"/>
364 <xsl:with-param name="to" select="$to"/>
368 <xsl:value-of select="$string"/>
378 replace all occurences of the character(s) `from'
379 by the string `to' in the string `string'.
380 <xsl:template name="string-replace" >
381 <xsl:param name="string"/>
382 <xsl:param name="from"/>
383 <xsl:param name="to"/>
385 <xsl:when test="contains($string,$from)">
386 <xsl:value-of select="substring-before($string,$from)"/>
387 <xsl:value-of select="$to"/>
388 <xsl:call-template name="string-replace">
389 <xsl:with-param name="string" select="substring-after($string,$from)"/>
390 <xsl:with-param name="from" select="$from"/>
391 <xsl:with-param name="to" select="$to"/>
395 <xsl:value-of select="$string"/>