1
<?xml version='1.0' encoding='utf-8'?><!-- -*- indent-tabs-mode: nil -*- -->
3
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
4
xmlns:msg="http://www.gnome.org/~shaunm/gnome-doc-utils/xsl-format"
5
xmlns:doc="http://www.gnome.org/~shaunm/xsldoc"
6
xmlns:xslt="http://www.example.com/XSLT"
7
exclude-result-prefixes="doc"
10
<xsl:namespace-alias stylesheet-prefix="xslt" result-prefix="xsl"/>
12
<xsl:include href="gettext.xsl"/>
14
<xsl:output method="xml" encoding="UTF-8"/>
16
<!-- == format2xsl == -->
17
<xsl:template name="format2xsl" mode="format2xsl.mode" match="text()">
18
<xsl:param name="msgstr" select="."/>
19
<xsl:param name="msgstr_cur" select="$msgstr"/>
20
<xsl:param name="template"/>
21
<xsl:param name="lang"/>
23
<xsl:when test="contains($msgstr_cur, '%')">
25
<xsl:when test="starts-with(substring-after($msgstr_cur, '%'), '%')">
27
<xsl:value-of select="substring-before($msgstr_cur, '%')"/>
28
<xsl:text>%</xsl:text>
33
<xsl:value-of select="substring-before($msgstr_cur, '%')"/>
35
<xsl:variable name="type"
36
select="substring-before(
37
substring-after($msgstr_cur, '%'),
39
<xsl:variable name="name"
40
select="substring-before(
41
substring-after($msgstr_cur, '{'),
43
<xsl:variable name="msgstr_aft"
44
select="substring-after($msgstr_cur, '}')"/>
45
<xsl:variable name="arg"
46
select="$template/msg:arg[@name = $name]"/>
47
<xsl:if test="not($arg)">
48
<xsl:message terminate="yes">
49
<xsl:value-of select="concat(
50
'format2xsl: Error in template ', $template/@name,
51
', format string for ', $lang, ' references ', $name,
52
' but no such argument exists')"/>
56
<xsl:when test="$type = 't'">
57
<xsl:if test="namespace-uri($arg/*[1]) !=
58
'http://www.w3.org/1999/XSL/Transform'">
59
<xsl:message terminate="yes">
60
<xsl:value-of select="concat(
61
'format2xsl: Error in template ', $template/@name,
62
', format string for argument ', $name,
65
' but template calls ', local-name($arg/*[1])
69
<xsl:apply-templates select="$arg/*"/>
71
<xsl:when test="$type = 's'">
72
<xsl:if test="not($arg/xsl:value-of)">
73
<xsl:message terminate="yes">
74
<xsl:value-of select="concat(
75
'format2xsl: Error in template ', $template/@name,
76
', format string for argument ', $name,
78
' but template calls ', local-name($arg/*[1])
82
<xsl:apply-templates select="$arg/*"/>
84
<xsl:when test="$type = 'a' or $type = 'A' or
85
$type = 'i' or $type = 'I' or
87
<xsl:if test="not($arg/xsl:number)">
88
<xsl:message terminate="yes">
89
<xsl:value-of select="concat(
90
'format2xsl: Error in template ', $template/@name,
91
', format string for argument ', $name,
93
' but template calls ', local-name($arg/*[1])
97
<xsl:apply-templates select="$arg/*">
98
<xsl:with-param name="format" select="$type"/>
99
</xsl:apply-templates>
102
<xsl:call-template name="format2xsl">
103
<xsl:with-param name="msgstr" select="$msgstr"/>
104
<xsl:with-param name="msgstr_cur" select="$msgstr_aft"/>
105
<xsl:with-param name="template" select="$template"/>
106
<xsl:with-param name="lang" select="$lang"/>
113
<xsl:value-of select="$msgstr_cur"/>
119
<xsl:template mode="format2xsl.mode" match="msg:msgstr">
120
<xsl:param name="template"/>
121
<xsl:param name="lang"/>
123
<xsl:when test="xsl:template">
124
<xsl:apply-templates select="xsl:template/node()"/>
126
<xsl:when test="../self::msg:msg and (msg:msgstr[@role] or
127
($template/xsl:param[@name = 'role'] and (
128
$template/msg:arg[@name = 'title'] or
129
$template/msg:arg[@name = 'titleabbrev'] or
130
$template/msg:arg[@name = 'subtitle'] or
131
$template/msg:arg[@name = 'number'] )))">
133
<xsl:for-each select="msg:msgstr[@role]">
134
<xslt:when test="$role = '{@role}'">
135
<xsl:apply-templates mode="format2xsl.mode" select=".">
136
<xsl:with-param name="template" select="$template"/>
137
<xsl:with-param name="lang" select="$lang"/>
138
</xsl:apply-templates>
141
<xsl:if test="../self::msg:msg and
142
$template/xsl:param[@name = 'role']">
143
<xsl:if test="not(msg:msgstr[@role = 'title']) and
144
$template/msg:arg[@name = 'title'] ">
145
<xslt:when test="$role = 'title'">
147
select="$template/msg:arg[@name = 'title']/node()"/>
150
<xsl:if test="not(msg:msgstr[@role = 'titleabbrev']) and
151
$template/msg:arg[@name = 'titleabbrev'] ">
152
<xslt:when test="$role = 'titleabbrev'">
154
select="$template/msg:arg[@name = 'titleabbrev']/node()"/>
157
<xsl:if test="not(msg:msgstr[@role = 'subtitle']) and
158
$template/msg:arg[@name = 'subtitle'] ">
159
<xslt:when test="$role = 'subtitle'">
161
select="$template/msg:arg[@name = 'subtitle']/node()"/>
164
<xsl:if test="not(msg:msgstr[@role = 'number']) and
165
$template/msg:arg[@name = 'number'] ">
166
<xslt:when test="$role = 'number'">
168
select="$template/msg:arg[@name = 'number']/node()"/>
173
<xsl:when test="msg:msgstr[not(@role)]">
175
<xsl:apply-templates mode="format2xsl.mode"
176
select="msg:msgstr[not(@role)][1]">
177
<xsl:with-param name="template" select="$template"/>
178
<xsl:with-param name="lang" select="$lang"/>
179
</xsl:apply-templates>
182
<xsl:when test="not(msg:msgstr[@role])">
184
<xsl:for-each select="node()">
185
<xsl:apply-templates mode="format2xsl.mode" select=".">
186
<xsl:with-param name="template" select="$template"/>
187
<xsl:with-param name="lang" select="$lang"/>
188
</xsl:apply-templates>
195
<xslt:text>No translation for </xslt:text>
196
<xslt:text><xsl:value-of select="$template/@name"/></xslt:text>
197
<xslt:text> with role </xslt:text>
198
<xslt:value-of select="$role"/>
206
<xsl:for-each select="node()">
207
<xsl:apply-templates mode="format2xsl.mode" select=".">
208
<xsl:with-param name="template" select="$template"/>
209
<xsl:with-param name="lang" select="$lang"/>
210
</xsl:apply-templates>
216
<xsl:template mode="format2xsl.mode" match="*">
217
<xsl:param name="template"/>
218
<xsl:param name="lang"/>
219
<xslt:variable name="name">
220
<xslt:call-template name="format2xsl.element.name">
221
<xslt:with-param name="name" select="'{local-name(.)}'"/>
222
<xslt:with-param name="namespace" select="'{namespace-uri(.)}'"/>
223
</xslt:call-template>
225
<xslt:variable name="namespace">
226
<xslt:call-template name="format2xsl.element.namespace">
227
<xslt:with-param name="name" select="'{local-name(.)}'"/>
228
<xslt:with-param name="namespace" select="'{namespace-uri(.)}'"/>
229
</xslt:call-template>
232
<xsl:attribute name="name">
233
<xsl:text>{$name}</xsl:text>
235
<xsl:attribute name="namespace">
236
<xsl:text>{$namespace}</xsl:text>
238
<xsl:for-each select="* | text()">
239
<xsl:apply-templates mode="format2xsl.mode" select=".">
240
<xsl:with-param name="template" select="$template"/>
241
<xsl:with-param name="lang" select="$lang"/>
242
</xsl:apply-templates>
247
<!-- == msg:msg == -->
248
<xsl:template match="msg:msg">
249
<xsl:variable name="msg" select="."/>
251
<xsl:when test="(count(msg:msgstr[string(.) != $msg/@id]) != 1) and
252
not(count(msg:msgstr[string(.) != $msg/@id]) = 2 and
253
msg:msgstr[not(@xml:lang)] and
254
msg:msgstr[@xml:lang = 'C'] )">
256
<xsl:for-each select="msg:msgstr[string(.) != $msg/@id]">
257
<xsl:sort select="contains(@xml:lang, '@') and contains(@xml:lang, '.')"
259
<xsl:sort select="contains(@xml:lang, '.')" order="descending"/>
260
<xsl:sort select="contains(@xml:lang, '@')" order="descending"/>
261
<xsl:sort select="contains(@xml:lang, '_')" order="descending"/>
262
<xsl:sort select="string-length(@xml:lang)" order="descending"/>
263
<xsl:variable name="lang_language">
264
<xsl:call-template name="gettext.get.language">
265
<xsl:with-param name="lang" select="@xml:lang"/>
268
<xsl:variable name="lang_region">
269
<xsl:call-template name="gettext.get.region">
270
<xsl:with-param name="lang" select="@xml:lang"/>
273
<xsl:variable name="lang_variant">
274
<xsl:call-template name="gettext.get.variant">
275
<xsl:with-param name="lang" select="@xml:lang"/>
278
<xsl:variable name="lang_charset">
279
<xsl:call-template name="gettext.get.charset">
280
<xsl:with-param name="lang" select="@xml:lang"/>
283
<xsl:variable name="element">
285
<xsl:when test="@xml:lang and @xml:lang != 'C'">
286
<xsl:text>xslt:when</xsl:text>
289
<xsl:text>xslt:otherwise</xsl:text>
293
<xsl:if test="@xml:lang or not(../msg:msgstr[@xml:lang = 'C'])">
294
<xsl:element name="{$element}">
295
<xsl:if test="$element = 'xslt:when'">
296
<xsl:attribute name="test">
297
<xsl:text>$lang_language = '</xsl:text>
298
<xsl:value-of select="$lang_language"/>
299
<xsl:text>'</xsl:text>
300
<xsl:if test="$lang_region != ''">
301
<xsl:text> and $lang_region = '</xsl:text>
302
<xsl:value-of select="$lang_region"/>
303
<xsl:text>'</xsl:text>
305
<xsl:if test="$lang_variant != ''">
306
<xsl:text> and $lang_variant = '</xsl:text>
307
<xsl:value-of select="$lang_variant"/>
308
<xsl:text>'</xsl:text>
310
<xsl:if test="$lang_charset != ''">
311
<xsl:text> and $lang_charset = '</xsl:text>
312
<xsl:value-of select="$lang_charset"/>
313
<xsl:text>'</xsl:text>
317
<xsl:apply-templates mode="format2xsl.mode" select=".">
318
<xsl:with-param name="template" select="../.."/>
319
<xsl:with-param name="lang" select="@xml:lang"/>
320
</xsl:apply-templates>
328
<xsl:when test="msg:msgstr[@xml:lang = 'C']">
329
<xsl:for-each select="msg:msgstr[@xml:lang = 'C'][1]">
330
<xsl:apply-templates mode="format2xsl.mode" select=".">
331
<xsl:with-param name="template" select="../.."/>
332
<xsl:with-param name="lang" select="'C'"/>
333
</xsl:apply-templates>
337
<xsl:for-each select="msg:msgstr[1]">
338
<xsl:apply-templates mode="format2xsl.mode" select=".">
339
<xsl:with-param name="template" select="../.."/>
340
<xsl:with-param name="lang" select="'C'"/>
341
</xsl:apply-templates>
350
<xsl:template match="*">
352
<xsl:for-each select="attribute::*">
353
<xsl:copy-of select="."/>
355
<xsl:apply-templates select="node()"/>
359
<!-- == doc:template == -->
360
<xsl:template match="doc:template">
361
<xsl:variable name="doc_template" select="."/>
362
<xsl:variable name="xsl_template" select="following-sibling::xsl:template[1]"/>
364
<xsl:for-each select="node()">
365
<xsl:apply-templates select="."/>
366
<xsl:if test="self::doc:purpose">
367
<xsl:if test="not($doc_template/doc:parameter[doc:name='lang'])">
369
<doc:name>lang</doc:name>
371
The language to use for formatting
381
<xsl:template match="xsl:*">
383
<xsl:for-each select="attribute::*">
386
<xsl:apply-templates/>
390
<!-- == xsl:apply-templates == -->
391
<xsl:template match="xsl:apply-templates">
392
<xslt:apply-templates>
393
<xsl:for-each select="attribute::*">
396
<xsl:apply-templates/>
397
</xslt:apply-templates>
400
<!-- == xsl:number == -->
401
<xsl:template match="xsl:number">
402
<xsl:param name="format"/>
404
<xsl:if test="$format">
405
<xsl:attribute name="format">
406
<xsl:value-of select="$format"/>
409
<xsl:for-each select="attribute::*">
410
<xsl:if test="not(self::format and $format)">
417
<!-- == xsl:template == -->
418
<xsl:template match="xsl:template">
419
<xslt:template name="{@name}">
420
<xsl:apply-templates select="xsl:param"/>
421
<xslt:param name="lang" select="$node/ancestor-or-self::*[@lang][1]/@lang"/>
422
<xslt:variable name="lang_language">
423
<xslt:call-template name="gettext.get.language">
424
<xslt:with-param name="lang" select="$lang"/>
425
</xslt:call-template>
427
<xslt:variable name="lang_region">
428
<xslt:call-template name="gettext.get.region">
429
<xslt:with-param name="lang" select="$lang"/>
430
</xslt:call-template>
432
<xslt:variable name="lang_variant">
433
<xslt:call-template name="gettext.get.variant">
434
<xslt:with-param name="lang" select="$lang"/>
435
</xslt:call-template>
437
<xslt:variable name="lang_charset">
438
<xslt:call-template name="gettext.get.charset">
439
<xslt:with-param name="lang" select="$lang"/>
440
</xslt:call-template>
442
<xsl:apply-templates select="msg:msg"/>
446
<!-- == xsl:stylesheet == -->
447
<xsl:template match="xsl:stylesheet">
448
<xslt:stylesheet version="1.0">
449
<xsl:apply-templates/>