]>
Commit | Line | Data |
---|---|---|
c005fb28 MW |
1 | <?xml version="1.0" encoding="utf-8"?> |
2 | ||
3 | <!-- | |
4 | Name: embedded.xsl | |
8ab43d1b | 5 | Purpose: Used by check.sh for offline checking of the configuration. |
c005fb28 | 6 | Author: Mike Wetherell |
c005fb28 | 7 | Copyright: (c) 2007 Mike Wetherell |
526954c5 | 8 | Licence: wxWindows licence |
c005fb28 MW |
9 | --> |
10 | ||
11 | <transform xmlns="http://www.w3.org/1999/XSL/Transform" | |
12 | xmlns:xsl="http://www.w3.org/1999/XSL/Transform" | |
13 | xmlns:XSL="XSL" | |
14 | version="1.0"> | |
15 | ||
16 | <namespace-alias stylesheet-prefix="XSL" result-prefix="xsl"/> | |
17 | ||
18 | <output indent="yes"/> | |
19 | ||
20 | <variable | |
801be649 MW |
21 | name="root" |
22 | select="//*[not(ancestor-or-self::*[name() != name(/*)])]"/> | |
c005fb28 MW |
23 | |
24 | <variable | |
801be649 MW |
25 | name="includes" |
26 | select="$root[position() > 1]"/> | |
c005fb28 MW |
27 | |
28 | <variable | |
801be649 MW |
29 | xmlns:func="http://exslt.org/functions" |
30 | name="top-level" | |
31 | select="$root/xsl:import | | |
32 | $root/xsl:include | | |
33 | $root/xsl:attribute-set | | |
34 | $root/xsl:character-map | | |
35 | $root/xsl:decimal-format | | |
36 | $root/xsl:function | | |
37 | $root/xsl:import-schema | | |
38 | $root/xsl:key | | |
39 | $root/xsl:namespace-alias | | |
40 | $root/xsl:output | | |
41 | $root/xsl:param | | |
42 | $root/xsl:preserve-space | | |
43 | $root/xsl:strip-space | | |
44 | $root/xsl:template | | |
45 | $root/xsl:variable | | |
46 | $root/func:function"/> | |
c005fb28 MW |
47 | |
48 | <template match="/"> | |
49 | <XSL:transform> | |
801be649 | 50 | <copy-of select="$root/namespace::*"/> |
c005fb28 | 51 | |
801be649 | 52 | <for-each select="$root/@xsl:*"> |
c005fb28 MW |
53 | <attribute name="{local-name()}"> |
54 | <value-of select="."/> | |
55 | </attribute> | |
56 | </for-each> | |
57 | ||
801be649 MW |
58 | <for-each select="$top-level"> |
59 | <if test="not(../ancestor::*/*[name() = name(current()) and @name = current()/@name])"> | |
60 | <apply-templates mode="copy-xsl" select="."/> | |
61 | </if> | |
62 | </for-each> | |
63 | ||
c005fb28 MW |
64 | <apply-templates select="*"/> |
65 | </XSL:transform> | |
66 | </template> | |
67 | ||
68 | <template match="*"> | |
69 | <variable name="pattern"> | |
70 | <call-template name="coord-pattern"/> | |
71 | </variable> | |
72 | ||
801be649 MW |
73 | <variable name="is-xsl"> |
74 | <call-template name="is-xsl"/> | |
75 | </variable> | |
76 | ||
c005fb28 MW |
77 | <XSL:template match="*[generate-id() = generate-id(document('', /){$pattern})]"> |
78 | <copy-of select="namespace::*"/> | |
79 | <choose> | |
801be649 MW |
80 | <when test="$root/xsl:template[@name = name(current())]"> |
81 | <call-template name="expand"> | |
82 | <with-param name="inside-xsl" select="$is-xsl = 'true'"/> | |
83 | </call-template> | |
84 | </when> | |
85 | <when test="count($includes | .) = count($includes)"> | |
86 | <if test="node()"> | |
87 | <XSL:apply-templates select="node()"/> | |
88 | </if> | |
c005fb28 MW |
89 | </when> |
90 | <when test="count($top-level | .) != count($top-level)"> | |
91 | <call-template name="create-context"/> | |
92 | </when> | |
93 | </choose> | |
94 | </XSL:template> | |
95 | ||
801be649 | 96 | <if test="$is-xsl != 'true'"> |
c005fb28 MW |
97 | <apply-templates select="node()"/> |
98 | </if> | |
99 | </template> | |
100 | ||
101 | <template match="text()"/> | |
102 | ||
103 | <template match="@*"> | |
104 | <copy/> | |
105 | </template> | |
106 | ||
801be649 | 107 | <template mode="copy-xsl" match="*[//xsl:template[not(ancestor::*[name() != name(/*)])]/@name = name()]"> |
c005fb28 MW |
108 | <choose> |
109 | <when test="ancestor::xsl:template[@name = name(current())]"> | |
8ab43d1b MW |
110 | <copy> |
111 | <call-template name="copy-xsl-children"/> | |
112 | </copy> | |
c005fb28 MW |
113 | </when> |
114 | <otherwise> | |
801be649 MW |
115 | <call-template name="expand"> |
116 | <with-param name="inside-xsl" select="true()"/> | |
117 | </call-template> | |
c005fb28 MW |
118 | </otherwise> |
119 | </choose> | |
120 | </template> | |
121 | ||
122 | <template mode="copy-xsl" match="@*|node()"> | |
123 | <copy> | |
124 | <call-template name="copy-xsl-children"/> | |
125 | </copy> | |
126 | </template> | |
127 | ||
128 | <template name="copy-xsl-children"> | |
129 | <copy-of select="namespace::*"/> | |
130 | <apply-templates mode="copy-xsl" select="@*|node()"/> | |
131 | </template> | |
132 | ||
133 | <template name="coord-pattern"> | |
134 | <param name="element" select="."/> | |
135 | ||
136 | <for-each select="$element/ancestor-or-self::*"> | |
137 | <text>/*[</text> | |
138 | <value-of select="count(preceding-sibling::*) + 1"/> | |
139 | <text>]</text> | |
140 | </for-each> | |
141 | </template> | |
142 | ||
801be649 MW |
143 | <template name="is-xsl"> |
144 | <param name="element" select="."/> | |
145 | <choose> | |
146 | <when test="$element/self::xsl:*"> | |
147 | <value-of select="true()"/> | |
148 | </when> | |
149 | <otherwise> | |
150 | <variable name="namespace" select="namespace-uri($element)"/> | |
151 | <variable name="extension-namespaces"> | |
152 | <for-each select="$element/ancestor-or-self::*/@xsl:extension-element-prefixes"> | |
153 | <variable name="prefixes" | |
154 | select="concat(' ', normalize-space(.), ' ')"/> | |
155 | <variable name="namespaces" | |
156 | select="../namespace::*[contains($prefixes, concat(' ', name(), ' ')) or | |
157 | (name() = '' and contains($prefixes, ' #default '))]"/> | |
158 | <value-of select="$namespaces[. = $namespace]"/> | |
159 | </for-each> | |
160 | </variable> | |
161 | <value-of select="$extension-namespaces != ''"/> | |
162 | </otherwise> | |
163 | </choose> | |
164 | </template> | |
165 | ||
c005fb28 | 166 | <template name="expand"> |
801be649 MW |
167 | <param name="inside-xsl"/> |
168 | <variable name="params" select="$root/xsl:template[@name = name(current())]/xsl:param"/> | |
c005fb28 MW |
169 | |
170 | <XSL:call-template name="{name()}"> | |
801be649 | 171 | <if test="node() and $params"> |
c005fb28 MW |
172 | <XSL:with-param name="{$params[1]/@name}"> |
173 | <choose> | |
801be649 | 174 | <when test="$inside-xsl"> |
c005fb28 MW |
175 | <apply-templates mode="copy-xsl" select="node()"/> |
176 | </when> | |
177 | <otherwise> | |
178 | <variable name="pattern"> | |
179 | <call-template name="coord-pattern"/> | |
180 | </variable> | |
181 | <XSL:apply-templates select="{$pattern}/node()"/> | |
182 | </otherwise> | |
183 | </choose> | |
184 | </XSL:with-param> | |
185 | </if> | |
186 | ||
187 | <for-each select="@*"> | |
8ab43d1b | 188 | <variable name="len" select="string-length(.)"/> |
801be649 | 189 | <choose> |
8ab43d1b MW |
190 | <when test="substring(., 1, 1) = '{' and |
191 | substring(., $len, 1) = '}'"> | |
192 | <XSL:with-param name="{name()}" | |
193 | select="{substring(., 2, $len - 2)}"/> | |
801be649 MW |
194 | </when> |
195 | <otherwise> | |
196 | <XSL:with-param name="{name()}"> | |
8ab43d1b | 197 | <call-template name="avt"/> |
801be649 MW |
198 | </XSL:with-param> |
199 | </otherwise> | |
200 | </choose> | |
c005fb28 MW |
201 | </for-each> |
202 | </XSL:call-template> | |
203 | </template> | |
204 | ||
205 | <template name="create-context"> | |
206 | <param name="elements" select="ancestor-or-self::* | |
207 | [last() - 1 > position()] | |
208 | /preceding-sibling::xsl:variable | ."/> | |
209 | ||
210 | <variable name="pattern"> | |
211 | <call-template name="coord-pattern"> | |
212 | <with-param name="element" select="$elements[1]"/> | |
213 | </call-template> | |
214 | </variable> | |
215 | ||
216 | <variable name="parent-pattern"> | |
217 | <call-template name="coord-pattern"> | |
218 | <with-param name="element" select="$elements[1]/.."/> | |
219 | </call-template> | |
220 | </variable> | |
221 | ||
222 | <XSL:for-each select="{$parent-pattern}/*"> | |
223 | <XSL:if test="count({$pattern} | .) = 1"> | |
801be649 MW |
224 | <variable name="is-xsl"> |
225 | <call-template name="is-xsl"> | |
226 | <with-param name="element" select="$elements[1]"/> | |
227 | </call-template> | |
228 | </variable> | |
c005fb28 | 229 | <choose> |
801be649 | 230 | <when test="$is-xsl = 'true'"> |
c005fb28 MW |
231 | <apply-templates mode="copy-xsl" select="$elements[1]"/> |
232 | <if test="$elements[2]"> | |
233 | <call-template name="create-context"> | |
234 | <with-param name="elements" select="$elements[position() > 1]"/> | |
235 | </call-template> | |
236 | </if> | |
237 | </when> | |
238 | <otherwise> | |
239 | <copy> | |
240 | <apply-templates select="@*"/> | |
241 | <if test="node()"> | |
242 | <XSL:apply-templates select="node()"/> | |
243 | </if> | |
244 | </copy> | |
245 | </otherwise> | |
246 | </choose> | |
247 | </XSL:if> | |
248 | </XSL:for-each> | |
249 | </template> | |
250 | ||
251 | <template name="before"> | |
252 | <param name="string"/> | |
253 | <param name="target"/> | |
254 | ||
255 | <variable name="apos">'</variable> | |
256 | <variable name="quot">"</variable> | |
257 | ||
258 | <variable name="posapos" select="string-length(substring-before( | |
259 | concat($string, $apos), $apos))"/> | |
260 | <variable name="posquot" select="string-length(substring-before( | |
261 | concat($string, $quot), $quot))"/> | |
262 | <variable name="postarg" select="string-length(substring-before( | |
263 | concat($string, $target), $target))"/> | |
264 | ||
265 | <choose> | |
266 | <when test="$posapos = $postarg and $posquot = $postarg"> | |
267 | <value-of select="$string"/> | |
268 | </when> | |
269 | <when test="$posapos > $postarg and $posquot > $postarg"> | |
270 | <value-of select="substring($string, 1, $postarg)"/> | |
271 | </when> | |
272 | <otherwise> | |
273 | <variable name="delim"> | |
274 | <choose> | |
275 | <when test="$posquot > $posapos">'</when> | |
276 | <otherwise>"</otherwise> | |
277 | </choose> | |
278 | </variable> | |
279 | ||
280 | <value-of select="substring-before($string, $delim)"/> | |
281 | <value-of select="$delim"/> | |
282 | ||
283 | <variable name="mid" select="substring-after($string, $delim)"/> | |
284 | ||
285 | <choose> | |
286 | <when test="contains($mid, $delim)"> | |
287 | <value-of select="substring-before($mid, $delim)"/> | |
288 | <value-of select="$delim"/> | |
289 | ||
290 | <call-template name="before"> | |
291 | <with-param name="string" | |
292 | select="substring-after($mid, $delim)"/> | |
293 | <with-param name="target" | |
294 | select="$target"/> | |
295 | </call-template> | |
296 | </when> | |
297 | <otherwise> | |
298 | <value-of select="$mid"/> | |
299 | </otherwise> | |
300 | </choose> | |
301 | </otherwise> | |
302 | </choose> | |
303 | </template> | |
304 | ||
305 | <template name="avt"> | |
8ab43d1b | 306 | <param name="string" select="."/> |
c005fb28 MW |
307 | |
308 | <variable name="before1" select="substring-before(concat($string, '{'), '{')"/> | |
309 | <variable name="len1" select="string-length($before1)"/> | |
310 | ||
311 | <variable name="before2" select="substring-before(concat($string, '}}'), '}}')"/> | |
312 | <variable name="len2" select="string-length($before2)"/> | |
313 | ||
314 | <choose> | |
315 | <when test="$before1 = $string and $before2 = $string"> | |
316 | <value-of select="$string"/> | |
317 | </when> | |
318 | <when test="$len2 < $len1"> | |
319 | <value-of select="$before2"/> | |
320 | <text>}</text> | |
321 | <call-template name="avt"> | |
322 | <with-param name="string" select="substring($string, $len2 + 3)"/> | |
323 | </call-template> | |
324 | </when> | |
325 | <when test="substring($string, $len1 + 2, 1) = '{'"> | |
326 | <value-of select="$before1"/> | |
327 | <text>{</text> | |
328 | <call-template name="avt"> | |
329 | <with-param name="string" select="substring($string, $len1 + 3)"/> | |
330 | </call-template> | |
331 | </when> | |
332 | <otherwise> | |
333 | <variable name="mid" select="substring($string, $len1 + 2)"/> | |
334 | <variable name="expr"> | |
335 | <call-template name="before"> | |
336 | <with-param name="string" select="$mid"/> | |
337 | <with-param name="target">}</with-param> | |
338 | </call-template> | |
339 | </variable> | |
340 | <value-of select="$before1"/> | |
341 | <XSL:copy-of select="{$expr}"/> | |
342 | <call-template name="avt"> | |
343 | <with-param name="string" select="substring($mid, string-length($expr) + 2)"/> | |
344 | </call-template> | |
345 | </otherwise> | |
346 | </choose> | |
347 | </template> | |
348 | ||
349 | </transform> |