68b2ad801c570041bdea11b65017aa2bca50253a
[samba.git] / docs / docbook / xslt / db2latex / normalize-scape.mod.xsl
1 <?xml version='1.0'?>
2 <!--############################################################################# 
3 |       $Id: normalize-scape.mod.xsl,v 1.1.2.1 2003/05/01 14:06:15 jelmer Exp $
4 |- #############################################################################
5 |       $Author: jelmer $
6 |                                                                                                               
7 |   PURPOSE:
8 |       Escape LaTeX and normalize-space templates.
9 |    < > # $ % & ~ _ ^ \ { }
10 + ############################################################################## -->
11
12 <xsl:stylesheet 
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'>
16
17
18     <!--############################################################################# -->
19     <!-- DOCUMENTATION                                                                -->
20     <doc:reference id="normalize-scape" xmlns="">
21         <referenceinfo>
22             <releaseinfo role="meta">
23                 $Id: normalize-scape.mod.xsl,v 1.1.2.1 2003/05/01 14:06:15 jelmer Exp $
24             </releaseinfo>
25         <authorgroup>
26             <author> <firstname>Ramon</firstname> <surname>Casellas</surname> </author>
27             <author> <firstname>James</firstname> <surname>Devenish</surname> </author>
28         </authorgroup>
29             <copyright><year>2000</year><year>2001</year><year>2002</year><year>2003</year>
30                 <holder>Ramon Casellas</holder>
31             </copyright>
32         </referenceinfo>
33         <title>Normalize and Scape strings.</title>
34         <partintro>
35             <section><title>Introduction</title>
36                 <para></para>
37             </section>
38         </partintro>
39     </doc:reference>
40     <!--############################################################################# -->
41
42     <!--############################################################################# -->
43     <!-- DOCUMENTATION                                                                -->
44     <doc:template name="normalize-scape" xmlns="">
45         <refpurpose> Abstract XSL template.  </refpurpose>
46         <refdescription>
47         </refdescription>
48     </doc:template>
49     <!--############################################################################# -->
50
51     <xsl:template match="text()">
52                 <xsl:call-template name="trim-outer">
53                         <xsl:with-param name="string">
54                                 <xsl:choose>
55                                         <xsl:when test="ancestor::literal|ancestor::email|ancestor::sgmltag">
56                                                 <xsl:call-template name="scape-verbatim">
57                                                         <xsl:with-param name="string" select="."/>
58                                                 </xsl:call-template>
59                                         </xsl:when>
60                                         <xsl:otherwise>
61                                                 <xsl:call-template name="scape">
62                                                         <xsl:with-param name="string" select="."/>
63                                                 </xsl:call-template>
64                                         </xsl:otherwise>
65                                 </xsl:choose>
66                         </xsl:with-param>
67                 </xsl:call-template>
68     </xsl:template>
69
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="."/>
75                                 </xsl:call-template>
76                         </xsl:with-param>
77                 </xsl:call-template>
78     </xsl:template>
79
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="."/>
85                                 </xsl:call-template>
86                         </xsl:with-param>
87                 </xsl:call-template>
88     </xsl:template>
89
90     <xsl:template match="text()" mode="latex.verbatim">
91                 <!--
92                 <xsl:call-template name="trim-outer">
93                         <xsl:with-param name="string">
94                         -->
95                                 <xsl:value-of select="."/> 
96                         <!--
97                         </xsl:with-param>
98                 </xsl:call-template>
99                 -->
100     </xsl:template>
101
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="." />
109                                 </xsl:call-template>
110                         </xsl:with-param>
111                 </xsl:call-template>
112         </xsl:template>
113
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()"/>
118                 <xsl:choose>
119                         <xsl:when test="$trimleft and not($trimright)">
120                                 <xsl:value-of select="substring-before(normalize-space(concat($string,'$$')),'$$')"/>
121                         </xsl:when>
122                         <xsl:when test="$trimright and not($trimleft)">
123                                 <xsl:value-of select="substring-after(normalize-space(concat('$$',$string)),'$$')"/>
124                         </xsl:when>
125                         <xsl:when test="$trimleft and $trimright">
126                                 <xsl:value-of select="normalize-space($string)"/>
127                         </xsl:when>
128                         <xsl:otherwise>
129                                 <xsl:value-of select="$string"/>
130                         </xsl:otherwise>
131                 </xsl:choose>
132         </xsl:template>
133
134         <xsl:template name="scape.slash.hyphen">
135         <xsl:param name="string" />
136         <xsl:choose>
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>
147                 </xsl:call-template>
148             </xsl:when>
149             <xsl:otherwise>
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>
157                 </xsl:call-template>
158             </xsl:otherwise>
159         </xsl:choose>
160     </xsl:template>
161
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>
166         </xsl:variable>
167         <xsl:value-of select="normalize-space($result)"/>
168     </xsl:template>
169
170
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">&lt;</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">&gt;</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">\&amp;</xsl:with-param>
191                                                     <xsl:with-param name="from">&amp;</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>
225                                                                                                                 </xsl:call-template>
226                                                                                                         </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>
238         </xsl:call-template>
239     </xsl:template>
240
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">\&amp;</xsl:with-param>
253                                         <xsl:with-param name="from">&amp;</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"/>
283                                                                                         </xsl:call-template>
284                                                                                 </xsl:with-param>
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>
293         </xsl:call-template>
294     </xsl:template>
295
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">\&amp;</xsl:with-param>
301                 <xsl:with-param name="from">&amp;</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"/>
319                                                                         </xsl:call-template>
320                                                                 </xsl:with-param>
321                                                         </xsl:call-template>
322                                                 </xsl:with-param>
323                                         </xsl:call-template>
324                                 </xsl:with-param>
325                         </xsl:call-template>
326                 </xsl:with-param>
327         </xsl:call-template>
328     </xsl:template>
329
330     <doc:template name="scape-optionalarg" xmlns="">
331         <refpurpose> Escape the ] character in LaTeX optional arguments (experimental)  </refpurpose>
332         <refdescription>
333         </refdescription>
334     </doc:template>
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"/>
341         </xsl:call-template>
342     </xsl:template>
343
344
345
346
347     <xsl:template name="string-replace">
348         <xsl:param name="string"/>
349         <xsl:param name="from"/>
350         <xsl:param name="to"/>
351
352         <xsl:choose>
353             <xsl:when test="contains($string, $from)">
354
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)"/>
358
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"/>
365                 </xsl:call-template>
366             </xsl:when> 
367             <xsl:otherwise>
368                 <xsl:value-of select="$string"/>  
369             </xsl:otherwise>
370         </xsl:choose>            
371     </xsl:template>
372
373
374
375
376     <!--  
377     (c) David Carlisle
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"/>
384         <xsl:choose>
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"/>
392                 </xsl:call-template>
393             </xsl:when>
394             <xsl:otherwise>
395                 <xsl:value-of select="$string"/>
396             </xsl:otherwise>
397         </xsl:choose>
398     </xsl:template>
399     -->
400
401 </xsl:stylesheet>