]> git.lyx.org Git - lyx.git/blob - lib/docbook/common/l10n.xsl
Release notes
[lyx.git] / lib / docbook / common / l10n.xsl
1 <?xml version='1.0'?>
2 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3                 xmlns:d="http://docbook.org/ns/docbook"
4                 xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0"
5                 exclude-result-prefixes="l d"
6                 version='1.0'>
7
8 <!-- ********************************************************************
9
10      This file is part of the XSL DocBook Stylesheet distribution.
11      See ../README or http://cdn.docbook.org/release/xsl/current/ for
12      copyright and other information.
13
14      This file contains localization templates (for internationalization)
15      ******************************************************************** -->
16
17 <xsl:param name="l10n.xml" select="document('../common/l10n.xml')"/>
18 <xsl:param name="local.l10n.xml" select="document('')"/>
19 <xsl:param name="empty.local.l10n.xml" select="not($local.l10n.xml//l:l10n)"/>
20
21 <xsl:key name="l10n-lang" match="l:l10n" use="@language"/>
22 <xsl:key name="l10n-gentext" match="l:l10n/l:gentext" use="@key"/>
23 <xsl:key name="l10n-dingbat" match="l:l10n/l:dingbat" use="@key"/>
24 <xsl:key name="l10n-context" match="l:l10n/l:context" use="@name"/>
25 <xsl:key name="l10n-template" match="l:l10n/l:context/l:template[not(@style)]" use="concat(../@name, '#', @name)"/>
26 <xsl:key name="l10n-template-style" match="l:l10n/l:context/l:template[@style]" use="concat(../@name, '#', @name, '#', @style)"/>
27
28 <xsl:template name="l10n.language">
29   <xsl:param name="target" select="."/>
30   <xsl:param name="xref-context" select="false()"/>
31
32   <xsl:variable name="mc-language">
33     <xsl:choose>
34       <xsl:when test="$l10n.gentext.language != ''">
35         <xsl:value-of select="$l10n.gentext.language"/>
36       </xsl:when>
37
38       <xsl:when test="$xref-context or $l10n.gentext.use.xref.language != 0">
39         <!-- can't do this one step: attributes are unordered! -->
40         <xsl:variable name="lang-scope"
41                       select="$target/ancestor-or-self::*
42                               [@lang or @xml:lang][1]"/>
43         <xsl:variable name="lang-attr"
44                       select="($lang-scope/@lang | $lang-scope/@xml:lang)[1]"/>
45         <xsl:choose>
46           <xsl:when test="string($lang-attr) = ''">
47             <xsl:value-of select="$l10n.gentext.default.language"/>
48           </xsl:when>
49           <xsl:otherwise>
50             <xsl:value-of select="$lang-attr"/>
51           </xsl:otherwise>
52         </xsl:choose>
53       </xsl:when>
54
55       <xsl:otherwise>
56         <!-- can't do this one step: attributes are unordered! -->
57         <xsl:variable name="lang-scope"
58                       select="$target/ancestor-or-self::*
59                               [@lang or @xml:lang][1]"/>
60         <xsl:variable name="lang-attr"
61                       select="($lang-scope/@lang | $lang-scope/@xml:lang)[1]"/>
62
63         <xsl:choose>
64           <xsl:when test="string($lang-attr) = ''">
65             <xsl:value-of select="$l10n.gentext.default.language"/>
66           </xsl:when>
67           <xsl:otherwise>
68             <xsl:value-of select="$lang-attr"/>
69           </xsl:otherwise>
70         </xsl:choose>
71       </xsl:otherwise>
72     </xsl:choose>
73   </xsl:variable>
74
75   <xsl:variable name="language" select="translate($mc-language,
76                                         'ABCDEFGHIJKLMNOPQRSTUVWXYZ-',
77                                         'abcdefghijklmnopqrstuvwxyz_')"/>
78
79   <xsl:for-each select="$l10n.xml">   <!-- We need to change context in order to get key work -->
80     <xsl:choose>
81       <xsl:when test="key('l10n-lang', $language)">
82         <xsl:value-of select="$language"/>
83       </xsl:when>
84       <!-- try just the lang code without country -->
85       <xsl:when test="key('l10n-lang', substring-before($language,'_'))">
86         <xsl:value-of select="substring-before($language,'_')"/>
87       </xsl:when>
88       <!-- or use the default -->
89       <xsl:otherwise>
90         <xsl:message>
91           <xsl:text>No localization exists for "</xsl:text>
92           <xsl:value-of select="$language"/>
93           <xsl:text>" or "</xsl:text>
94           <xsl:value-of select="substring-before($language,'_')"/>
95           <xsl:text>". Using default "</xsl:text>
96           <xsl:value-of select="$l10n.gentext.default.language"/>
97           <xsl:text>".</xsl:text>
98         </xsl:message>
99         <xsl:value-of select="$l10n.gentext.default.language"/>
100       </xsl:otherwise>
101     </xsl:choose>
102   </xsl:for-each>
103 </xsl:template>
104
105 <xsl:template name="l10n.language.name">
106   <xsl:param name="lang">
107     <xsl:call-template name="l10n.language"/>
108   </xsl:param>
109
110   <xsl:for-each select="$l10n.xml">
111     <xsl:value-of
112         select="document(key('l10n-lang', $lang)/@href)/l:l10n/@english-language-name"/>
113   </xsl:for-each>
114 </xsl:template>
115
116 <xsl:template name="language.attribute">
117   <xsl:param name="node" select="."/>
118
119   <xsl:variable name="language">
120     <xsl:choose>
121       <xsl:when test="$l10n.gentext.language != ''">
122         <xsl:value-of select="$l10n.gentext.language"/>
123       </xsl:when>
124
125       <xsl:otherwise>
126         <!-- can't do this one step: attributes are unordered! -->
127         <xsl:variable name="lang-scope"
128                       select="$node/ancestor-or-self::*
129                               [@lang or @xml:lang][1]"/>
130         <xsl:variable name="lang-attr"
131                       select="($lang-scope/@lang | $lang-scope/@xml:lang)[1]"/>
132
133         <xsl:choose>
134           <xsl:when test="string($lang-attr) = ''">
135             <xsl:value-of select="$l10n.gentext.default.language"/>
136           </xsl:when>
137           <xsl:otherwise>
138             <xsl:value-of select="$lang-attr"/>
139           </xsl:otherwise>
140         </xsl:choose>
141       </xsl:otherwise>
142     </xsl:choose>
143   </xsl:variable>
144
145   <xsl:if test="$language != ''">
146     <xsl:attribute name="lang">
147       <xsl:choose>
148         <xsl:when test="$l10n.lang.value.rfc.compliant != 0">
149           <xsl:value-of select="translate($language, '_', '-')"/>
150         </xsl:when>
151         <xsl:otherwise>
152           <xsl:value-of select="$language"/>
153         </xsl:otherwise>
154       </xsl:choose>
155     </xsl:attribute>
156   </xsl:if>
157
158   <!-- FIXME: This is sort of hack, but it was the easiest way to add at least partial support for dir attribute -->
159   <xsl:copy-of select="ancestor-or-self::*[@dir][1]/@dir"/>
160 </xsl:template>
161
162 <!-- Duplication of language.attribute template to allow for xml:lang attribute
163      creation for XHTML 1.1 and epub target -->
164 <xsl:template name="xml.language.attribute">
165   <xsl:param name="node" select="."/>
166
167   <xsl:variable name="language">
168     <xsl:choose>
169       <xsl:when test="$l10n.gentext.language != ''">
170         <xsl:value-of select="$l10n.gentext.language"/>
171       </xsl:when>
172
173       <xsl:otherwise>
174         <!-- can't do this one step: attributes are unordered! -->
175         <xsl:variable name="lang-scope"
176                       select="$node/ancestor-or-self::*
177                               [@lang or @xml:lang][1]"/>
178         <xsl:variable name="lang-attr"
179                       select="($lang-scope/@lang | $lang-scope/@xml:lang)[1]"/>
180
181         <xsl:choose>
182           <xsl:when test="string($lang-attr) = ''">
183             <xsl:value-of select="$l10n.gentext.default.language"/>
184           </xsl:when>
185           <xsl:otherwise>
186             <xsl:value-of select="$lang-attr"/>
187           </xsl:otherwise>
188         </xsl:choose>
189       </xsl:otherwise>
190     </xsl:choose>
191   </xsl:variable>
192
193   <xsl:if test="$language != ''">
194     <xsl:attribute name="xml:lang">
195       <xsl:choose>
196         <xsl:when test="$l10n.lang.value.rfc.compliant != 0">
197           <xsl:value-of select="translate($language, '_', '-')"/>
198         </xsl:when>
199         <xsl:otherwise>
200           <xsl:value-of select="$language"/>
201         </xsl:otherwise>
202       </xsl:choose>
203     </xsl:attribute>
204   </xsl:if>
205
206   <!-- FIXME: This is sort of hack, but it was the easiest way to add at least partial support for dir attribute -->
207   <xsl:copy-of select="ancestor-or-self::*[@dir][1]/@dir"/>
208 </xsl:template>
209
210 <xsl:template name="gentext">
211   <xsl:param name="key" select="local-name(.)"/>
212   <xsl:param name="lang">
213     <xsl:call-template name="l10n.language"/>
214   </xsl:param>
215
216   <xsl:for-each select="$l10n.xml">  <!-- We need to switch context in order to make key() work -->
217     <xsl:for-each select="document(key('l10n-lang', $lang)/@href)">
218       <xsl:variable name="local.l10n.gentext"
219                     select="($local.l10n.xml//l:i18n/l:l10n[@language=$lang]/l:gentext[@key=$key])[1]"/>
220
221       <xsl:variable name="l10n.gentext"
222                     select="key('l10n-gentext', $key)[1]"/>
223
224       <xsl:choose>
225         <xsl:when test="$local.l10n.gentext">
226           <xsl:value-of select="$local.l10n.gentext/@text"/>
227         </xsl:when>
228         <xsl:when test="$l10n.gentext">
229           <xsl:value-of select="$l10n.gentext/@text"/>
230         </xsl:when>
231         <xsl:otherwise>
232           <xsl:message>
233             <xsl:text>No "</xsl:text>
234             <xsl:value-of select="$lang"/>
235             <xsl:text>" localization of "</xsl:text>
236             <xsl:value-of select="$key"/>
237             <xsl:text>" exists</xsl:text>
238             <xsl:choose>
239               <xsl:when test="$lang = 'en'">
240                  <xsl:text>.</xsl:text>
241               </xsl:when>
242               <xsl:otherwise>
243                  <xsl:text>; using "en".</xsl:text>
244               </xsl:otherwise>
245             </xsl:choose>
246           </xsl:message>
247           
248           <xsl:for-each select="$l10n.xml">  <!-- We need to switch context in order to make key() work -->
249             <xsl:for-each select="document(key('l10n-lang', 'en')/@href)">
250               <xsl:value-of select="key('l10n-gentext', $key)[1]/@text"/>
251             </xsl:for-each>
252           </xsl:for-each>
253         </xsl:otherwise>
254       </xsl:choose>
255     </xsl:for-each>
256   </xsl:for-each>
257 </xsl:template>
258
259 <xsl:template name="gentext.element.name">
260   <xsl:param name="element.name" select="local-name(.)"/>
261   <xsl:param name="lang">
262     <xsl:call-template name="l10n.language"/>
263   </xsl:param>
264
265   <xsl:call-template name="gentext">
266     <xsl:with-param name="key" select="$element.name"/>
267     <xsl:with-param name="lang" select="$lang"/>
268   </xsl:call-template>
269 </xsl:template>
270
271 <xsl:template name="gentext.space">
272   <xsl:text> </xsl:text>
273 </xsl:template>
274
275 <xsl:template name="gentext.edited.by">
276   <xsl:call-template name="gentext">
277     <xsl:with-param name="key" select="'Editedby'"/>
278   </xsl:call-template>
279 </xsl:template>
280
281 <xsl:template name="gentext.by">
282   <xsl:call-template name="gentext">
283     <xsl:with-param name="key" select="'by'"/>
284   </xsl:call-template>
285 </xsl:template>
286
287 <xsl:template name="gentext.dingbat">
288   <xsl:param name="dingbat">bullet</xsl:param>
289   <xsl:param name="lang">
290     <xsl:call-template name="l10n.language"/>
291   </xsl:param>
292
293   <xsl:for-each select="$l10n.xml">  <!-- We need to switch context in order to make key() work -->
294     <xsl:for-each select="document(key('l10n-lang', $lang)/@href)">
295       <xsl:variable name="local.l10n.dingbat"
296                     select="($local.l10n.xml//l:i18n/l:l10n[@language=$lang]/l:dingbat[@key=$dingbat])[1]"/>
297
298       <xsl:variable name="l10n.dingbat"
299                     select="key('l10n-dingbat', $dingbat)[1]"/>
300
301       <xsl:choose>
302         <xsl:when test="$local.l10n.dingbat">
303           <xsl:value-of select="$local.l10n.dingbat/@text"/>
304         </xsl:when>
305         <xsl:when test="$l10n.dingbat">
306           <xsl:value-of select="$l10n.dingbat/@text"/>
307         </xsl:when>
308         <xsl:otherwise>
309           <xsl:message>
310             <xsl:text>No "</xsl:text>
311             <xsl:value-of select="$lang"/>
312             <xsl:text>" localization of dingbat </xsl:text>
313             <xsl:value-of select="$dingbat"/>
314             <xsl:text> exists; using "en".</xsl:text>
315           </xsl:message>
316
317           <xsl:for-each select="$l10n.xml">  <!-- We need to switch context in order to make key() work -->
318             <xsl:for-each select="document(key('l10n-lang', 'en')/@href)">  
319               <xsl:value-of select="key('l10n-dingbat', $dingbat)[1]/@text"/>
320             </xsl:for-each>
321           </xsl:for-each>
322         </xsl:otherwise>
323       </xsl:choose>
324     </xsl:for-each>
325   </xsl:for-each>
326 </xsl:template>
327
328 <xsl:template name="gentext.startquote">
329   <xsl:call-template name="gentext.dingbat">
330     <xsl:with-param name="dingbat">startquote</xsl:with-param>
331   </xsl:call-template>
332 </xsl:template>
333
334 <xsl:template name="gentext.endquote">
335   <xsl:call-template name="gentext.dingbat">
336     <xsl:with-param name="dingbat">endquote</xsl:with-param>
337   </xsl:call-template>
338 </xsl:template>
339
340 <xsl:template name="gentext.nestedstartquote">
341   <xsl:call-template name="gentext.dingbat">
342     <xsl:with-param name="dingbat">nestedstartquote</xsl:with-param>
343   </xsl:call-template>
344 </xsl:template>
345
346 <xsl:template name="gentext.nestedendquote">
347   <xsl:call-template name="gentext.dingbat">
348     <xsl:with-param name="dingbat">nestedendquote</xsl:with-param>
349   </xsl:call-template>
350 </xsl:template>
351
352 <xsl:template name="gentext.nav.prev">
353   <xsl:call-template name="gentext">
354     <xsl:with-param name="key" select="'nav-prev'"/>
355   </xsl:call-template>
356 </xsl:template>
357
358 <xsl:template name="gentext.nav.next">
359   <xsl:call-template name="gentext">
360     <xsl:with-param name="key" select="'nav-next'"/>
361   </xsl:call-template>
362 </xsl:template>
363
364 <xsl:template name="gentext.nav.home">
365   <xsl:call-template name="gentext">
366     <xsl:with-param name="key" select="'nav-home'"/>
367   </xsl:call-template>
368 </xsl:template>
369
370 <xsl:template name="gentext.nav.up">
371   <xsl:call-template name="gentext">
372     <xsl:with-param name="key" select="'nav-up'"/>
373   </xsl:call-template>
374 </xsl:template>
375
376 <!-- ============================================================ -->
377
378 <xsl:template name="gentext.template">
379   <xsl:param name="context" select="'default'"/>
380   <xsl:param name="name" select="'default'"/>
381   <xsl:param name="origname" select="$name"/>
382   <xsl:param name="purpose"/>
383   <xsl:param name="xrefstyle"/>
384   <xsl:param name="referrer"/>
385   <xsl:param name="lang">
386     <xsl:call-template name="l10n.language"/>
387   </xsl:param>
388   <xsl:param name="verbose" select="1"/>
389
390   <xsl:choose>
391     <xsl:when test="$empty.local.l10n.xml">
392       <xsl:for-each select="$l10n.xml">  <!-- We need to switch context in order to make key() work -->
393         <xsl:for-each select="document(key('l10n-lang', $lang)/@href)">
394
395           <xsl:variable name="localization.node"
396                         select="key('l10n-lang', $lang)[1]"/>
397
398           <xsl:if test="count($localization.node) = 0
399                         and $verbose != 0">
400             <xsl:message>
401               <xsl:text>No "</xsl:text>
402               <xsl:value-of select="$lang"/>
403               <xsl:text>" localization exists.</xsl:text>
404             </xsl:message>
405           </xsl:if>
406
407           <xsl:variable name="context.node"
408                         select="key('l10n-context', $context)[1]"/>
409
410           <xsl:if test="count($context.node) = 0
411                         and $verbose != 0">
412             <xsl:message>
413               <xsl:text>No context named "</xsl:text>
414               <xsl:value-of select="$context"/>
415               <xsl:text>" exists in the "</xsl:text>
416               <xsl:value-of select="$lang"/>
417               <xsl:text>" localization.</xsl:text>
418             </xsl:message>
419           </xsl:if>
420
421           <xsl:for-each select="$context.node">
422             <xsl:variable name="template.node"
423                           select="(key('l10n-template-style', concat($context, '#', $name, '#', $xrefstyle))
424                                    |key('l10n-template', concat($context, '#', $name)))[1]"/>
425
426             <xsl:choose>
427               <xsl:when test="$template.node/@text">
428                 <xsl:value-of select="$template.node/@text"/>
429               </xsl:when>
430               <xsl:otherwise>
431                 <xsl:choose>
432                   <xsl:when test="contains($name, '/')">
433                     <xsl:call-template name="gentext.template">
434                       <xsl:with-param name="context" select="$context"/>
435                       <xsl:with-param name="name" select="substring-after($name, '/')"/>
436                       <xsl:with-param name="origname" select="$origname"/>
437                       <xsl:with-param name="purpose" select="$purpose"/>
438                       <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
439                       <xsl:with-param name="referrer" select="$referrer"/>
440                       <xsl:with-param name="lang" select="$lang"/>
441                       <xsl:with-param name="verbose" select="$verbose"/>
442                     </xsl:call-template>
443                   </xsl:when>
444                   <xsl:when test="$verbose = 0">
445                     <!-- silence -->
446                   </xsl:when>
447                   <xsl:otherwise>
448                     <xsl:message>
449                       <xsl:text>No template for "</xsl:text>
450                       <xsl:value-of select="$origname"/>
451                       <xsl:text>" (or any of its leaves) exists in the context named "</xsl:text>
452                       <xsl:value-of select="$context"/>
453                       <xsl:text>" in the "</xsl:text>
454                       <xsl:value-of select="$lang"/>
455                       <xsl:text>" localization.</xsl:text>
456                     </xsl:message>
457                   </xsl:otherwise>
458                 </xsl:choose>
459               </xsl:otherwise>
460             </xsl:choose>
461           </xsl:for-each>
462         </xsl:for-each>
463       </xsl:for-each>
464     </xsl:when>
465     <xsl:otherwise>
466       <xsl:for-each select="$l10n.xml">  <!-- We need to switch context in order to make key() work -->
467         <xsl:for-each select="document(key('l10n-lang', $lang)/@href)">
468
469           <xsl:variable name="local.localization.node"
470                         select="($local.l10n.xml//l:i18n/l:l10n[@language=$lang])[1]"/>
471
472           <xsl:variable name="localization.node"
473                         select="key('l10n-lang', $lang)[1]"/>
474
475           <xsl:if test="count($localization.node) = 0
476                         and count($local.localization.node) = 0
477                         and $verbose != 0">
478             <xsl:message>
479               <xsl:text>No "</xsl:text>
480               <xsl:value-of select="$lang"/>
481               <xsl:text>" localization exists.</xsl:text>
482             </xsl:message>
483           </xsl:if>
484
485           <xsl:variable name="local.context.node"
486                         select="$local.localization.node/l:context[@name=$context]"/>
487
488           <xsl:variable name="context.node"
489                         select="key('l10n-context', $context)[1]"/>
490
491           <xsl:if test="count($context.node) = 0
492                         and count($local.context.node) = 0
493                         and $verbose != 0">
494             <xsl:message>
495               <xsl:text>No context named "</xsl:text>
496               <xsl:value-of select="$context"/>
497               <xsl:text>" exists in the "</xsl:text>
498               <xsl:value-of select="$lang"/>
499               <xsl:text>" localization.</xsl:text>
500             </xsl:message>
501           </xsl:if>
502
503           <xsl:variable name="local.template.node"
504                         select="($local.context.node/l:template[@name=$name
505                                                                 and @style
506                                                                 and @style=$xrefstyle]
507                                 |$local.context.node/l:template[@name=$name
508                                                                 and not(@style)])[1]"/>
509
510           <xsl:choose>
511             <xsl:when test="$local.template.node/@text">
512               <xsl:value-of select="$local.template.node/@text"/>
513             </xsl:when>
514             <xsl:otherwise>
515               <xsl:for-each select="$context.node">
516                 <xsl:variable name="template.node"
517                               select="(key('l10n-template-style', concat($context, '#', $name, '#', $xrefstyle))
518                                        |key('l10n-template', concat($context, '#', $name)))[1]"/>
519
520                 <xsl:choose>
521                   <xsl:when test="$template.node/@text">
522                     <xsl:value-of select="$template.node/@text"/>
523                   </xsl:when>
524                   <xsl:otherwise>
525                     <xsl:choose>
526                       <xsl:when test="contains($name, '/')">
527                         <xsl:call-template name="gentext.template">
528                           <xsl:with-param name="context" select="$context"/>
529                           <xsl:with-param name="name" select="substring-after($name, '/')"/>
530                           <xsl:with-param name="origname" select="$origname"/>
531                           <xsl:with-param name="purpose" select="$purpose"/>
532                           <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
533                           <xsl:with-param name="referrer" select="$referrer"/>
534                           <xsl:with-param name="lang" select="$lang"/>
535                           <xsl:with-param name="verbose" select="$verbose"/>
536                         </xsl:call-template>
537                       </xsl:when>
538                       <xsl:when test="$verbose = 0">
539                         <!-- silence -->
540                       </xsl:when>
541                       <xsl:otherwise>
542                         <xsl:message>
543                           <xsl:text>No template for "</xsl:text>
544                           <xsl:value-of select="$origname"/>
545                           <xsl:text>" (or any of its leaves) exists in the context named "</xsl:text>
546                           <xsl:value-of select="$context"/>
547                           <xsl:text>" in the "</xsl:text>
548                           <xsl:value-of select="$lang"/>
549                           <xsl:text>" localization.</xsl:text>
550                         </xsl:message>
551                       </xsl:otherwise>
552                     </xsl:choose>
553                   </xsl:otherwise>
554                 </xsl:choose>
555               </xsl:for-each>
556             </xsl:otherwise>
557           </xsl:choose>
558         </xsl:for-each>
559       </xsl:for-each>
560     </xsl:otherwise>
561   </xsl:choose>
562 </xsl:template>
563
564 <!-- silently test if a gentext template exists -->
565
566 <xsl:template name="gentext.template.exists">
567   <xsl:param name="context" select="'default'"/>
568   <xsl:param name="name" select="'default'"/>
569   <xsl:param name="origname" select="$name"/>
570   <xsl:param name="purpose"/>
571   <xsl:param name="xrefstyle"/>
572   <xsl:param name="referrer"/>
573   <xsl:param name="lang">
574     <xsl:call-template name="l10n.language"/>
575   </xsl:param>
576
577   <xsl:variable name="template">
578     <xsl:call-template name="gentext.template">
579       <xsl:with-param name="context" select="$context"/>
580       <xsl:with-param name="name" select="$name"/>
581       <xsl:with-param name="origname" select="$origname"/>
582       <xsl:with-param name="purpose" select="$purpose"/>
583       <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
584       <xsl:with-param name="referrer" select="$referrer"/>
585       <xsl:with-param name="lang" select="$lang"/>
586       <xsl:with-param name="verbose" select="0"/>
587     </xsl:call-template>
588   </xsl:variable>
589   
590   <xsl:choose>
591     <xsl:when test="string-length($template) != 0">1</xsl:when>
592     <xsl:otherwise>0</xsl:otherwise>
593   </xsl:choose>
594 </xsl:template>
595
596 </xsl:stylesheet>