root / trunk / buildscripts / cldrCalendar.xsl

Revision 7204, 26.4 kB (checked in by peller, 22 months ago)

Add script to mixin array values with parent locales. Includes patch from Evan Huang, IBM (CCLA) References #2327

Line 
1<?xml version="1.0" encoding="UTF-8"?>
2<xsl:stylesheet xmlns:saxon="http://saxon.sf.net/" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" extension-element-prefixes="saxon" version="2.0">
3<xsl:output method="text" indent="yes"/>
4<!-- list the data elements whose spaces should be preserved
5   it seems listing only the parent node doesn't work -->
6<xsl:preserve-space elements="month day quarter am pm era pattern dateFormatItem appendItem displayName"/>
7<xsl:strip-space elements="*"/> 
8
9<xsl:variable name="first" select="true()" saxon:assignable="yes"/>
10   
11<xsl:template match="/">
12     <xsl:apply-templates/>
13</xsl:template>
14 
15<!-- process ldml,dates,calendars-->
16<xsl:template name="top" match="/ldml">
17    <xsl:choose>
18        <xsl:when test="count(./alias)>0">
19            <!-- Handle Alias -->
20            <xsl:for-each select="./alias">
21                <xsl:call-template name="alias_template">
22                    <xsl:with-param name="templateToCall">top</xsl:with-param>
23                    <xsl:with-param name="source" select="@source"></xsl:with-param>
24                    <xsl:with-param name="xpath" select="@path"></xsl:with-param>
25                </xsl:call-template>     
26                </xsl:for-each>
27        </xsl:when>
28        <xsl:otherwise>
29            <xsl:choose>
30                <xsl:when test="name()='calendars'">
31                    <!-- calendars -->
32                    <xsl:for-each select="calendar">
33                        <saxon:assign name="first" select="true()"/>
34                        <xsl:result-document href="{concat(@type,'.js')}" encoding="UTF-8"><!--<xsl:value-of select="codepoints-to-string(65279)"/>-->// generated from cldr/ldml/main/*.xml, xpath: ldml/calendars/calendar-<xsl:value-of select="./@type"/>
35({<xsl:call-template name="calendar"></xsl:call-template>
36})
37                        </xsl:result-document>
38                    </xsl:for-each>
39                </xsl:when>
40                <xsl:otherwise>                   
41                    <xsl:if test="name()='ldml'">
42                        <!-- ldml -->
43                        <xsl:for-each select="dates">
44                            <xsl:call-template name="top"></xsl:call-template>
45                        </xsl:for-each>
46                    </xsl:if>
47                    <xsl:if test="name()='dates'">
48                        <!-- dates -->
49                        <xsl:for-each select="calendars">
50                            <xsl:call-template name="top"></xsl:call-template>
51                        </xsl:for-each>
52                    </xsl:if>                 
53                </xsl:otherwise>
54            </xsl:choose>
55         </xsl:otherwise>
56    </xsl:choose>       
57</xsl:template>
58
59    <!-- process calendar-->
60<xsl:template name="calendar" match="calendar">
61    <xsl:choose>
62        <xsl:when test="count(./alias)>0">
63            <!-- Handle Alias -->
64            <xsl:for-each select="./alias">
65                <xsl:call-template name="alias_template">
66                    <xsl:with-param name="templateToCall">calendar</xsl:with-param>
67                    <xsl:with-param name="source" select="@source"></xsl:with-param>
68                    <xsl:with-param name="xpath" select="@path"></xsl:with-param>
69                </xsl:call-template>     
70            </xsl:for-each>
71        </xsl:when>
72        <xsl:otherwise>
73            <xsl:apply-templates/>
74        </xsl:otherwise>
75    </xsl:choose>
76</xsl:template>
77   
78<!-- process months -->
79    <xsl:template name="months_days_quarters" match="months | days | quarters">
80    <xsl:param name="width" select="@type"/>
81    <xsl:variable name="ctx" select="../@type"/>
82    <xsl:choose>       
83        <xsl:when test="count(./alias)>0">
84            <!-- Handle Alias -->
85            <xsl:for-each select="./alias">
86                <xsl:call-template name="alias_template">
87                    <xsl:with-param name="templateToCall">months_days_quarters</xsl:with-param>
88                    <xsl:with-param name="source" select="@source"></xsl:with-param>
89                    <xsl:with-param name="xpath" select="@path"></xsl:with-param>
90                </xsl:call-template>
91            </xsl:for-each>           
92        </xsl:when>
93        <xsl:otherwise>
94            <xsl:if test="name()='months' or name()='monthContext'
95                       or name()='days' or name()='dayContext'
96                       or name()='quarters' or name()='quarterContext'">
97                <xsl:for-each select="*">
98                    <xsl:call-template name="months_days_quarters"></xsl:call-template>
99                </xsl:for-each>
100            </xsl:if>
101            <xsl:if test="name()='monthWidth' or name()='dayWidth'">
102                <xsl:variable name="item" select="substring-before(name(), 'Width')"/>
103                <xsl:if test="count(*[not(@draft)])>0 or count(*[@draft!='provisional' and @draft!='unconfirmed'])>0">
104                    <xsl:call-template name="insert_comma"/>
105        '<xsl:value-of select="$item"/>
106                <xsl:text>s-</xsl:text>
107                <xsl:call-template name="camel_case">
108                    <xsl:with-param name="name"><xsl:value-of select="$ctx"></xsl:value-of></xsl:with-param>
109                </xsl:call-template>
110                <xsl:choose>
111                        <xsl:when test="$width='abbreviated'"><xsl:text>-abbr</xsl:text></xsl:when>
112                        <xsl:otherwise>
113                       <xsl:value-of select="concat('-',$width)"></xsl:value-of>
114                    </xsl:otherwise>
115                </xsl:choose>
116                <xsl:text>':</xsl:text>
117                <!--xsl:call-template name="subSelect"><xsl:with-param name="name" select="./*[name()=$item]"></xsl:with-param></xsl:call-template-->
118                <xsl:call-template name="subSelect_in_place"><xsl:with-param name="name" select="$item"></xsl:with-param></xsl:call-template>
119                </xsl:if>
120                </xsl:if>
121            <xsl:if test="name()='quarterWidth'">
122             <xsl:if test="count(*[not(@draft)])>0 or count(*[@draft!='provisional' and @draft!='unconfirmed'])>0">
123                 <xsl:call-template name="insert_comma"/>
124        'quarters-<xsl:value-of select="concat($ctx,'-',$width)"></xsl:value-of> <xsl:text>':</xsl:text>
125                <xsl:call-template name="subSelect_in_place"><xsl:with-param name="name" select="'quarter'"></xsl:with-param></xsl:call-template>           
126             </xsl:if>
127             </xsl:if>
128        </xsl:otherwise>
129    </xsl:choose>   
130</xsl:template>
131   
132<!--process am & pm -->
133<xsl:template name="apm" match="am|pm">
134    <xsl:choose>
135        <xsl:when test="alias">
136            <!-- Handle Alias -->
137            <xsl:for-each select="alias">
138                <xsl:call-template name="alias_template">
139                    <xsl:with-param name="templateToCall">apm</xsl:with-param>
140                    <xsl:with-param name="source" select="@source"></xsl:with-param>
141                    <xsl:with-param name="xpath" select="@path"></xsl:with-param>
142                </xsl:call-template>
143            </xsl:for-each>           
144        </xsl:when>
145        <xsl:otherwise>           
146        <xsl:if test="not(@draft) or @draft!='provisional' and @draft!='unconfirmed'">
147            <xsl:call-template name="insert_comma"/>
148        <xsl:if test="name()='am'">
149        'am</xsl:if>
150            <xsl:if test="name()='pm'">
151        'pm</xsl:if>
152            <xsl:text>':"</xsl:text>
153            <xsl:value-of select="."/><xsl:text>"</xsl:text>
154        </xsl:if>
155        </xsl:otherwise>
156    </xsl:choose>
157</xsl:template>   
158   
159<!-- process eras -->
160<xsl:template match="eras" name="eras">
161        <xsl:param name="name" select="name()"></xsl:param>
162        <xsl:choose>
163                <xsl:when test="count(./alias)>0">
164                        <!-- Handle Alias --> 
165                        <xsl:for-each select="./alias">
166                                <xsl:call-template name="alias_template">
167                                        <xsl:with-param name="templateToCall">eras</xsl:with-param>
168                                        <xsl:with-param name="source" select="@source"></xsl:with-param>
169                                        <xsl:with-param name="xpath" select="@path"></xsl:with-param>
170                                </xsl:call-template>
171                        </xsl:for-each>   
172                </xsl:when>
173                <xsl:otherwise>
174                        <xsl:choose>
175                                <xsl:when test="name()='eras'">
176                                        <xsl:for-each select="*">
177                                                <xsl:call-template name="eras"></xsl:call-template>
178                                        </xsl:for-each>
179                                </xsl:when>
180                                <xsl:otherwise>
181                                        <xsl:for-each select=".">
182                                            <xsl:if test="count(*[not(@draft)])>0
183                                                or count(*[@draft!='provisional' and @draft!='unconfirmed'])>0">
184                                                <xsl:call-template name="insert_comma"/>
185        '<xsl:value-of select="$name"></xsl:value-of>
186                                                <xsl:text>':</xsl:text>
187                                                   <xsl:choose>
188                                                       <xsl:when test="name()='eraNarrow'">
189                                                           <!-- only one special case for eraNarrow in root.xml - japanese
190                                                                 index starts from 232,not 0-->
191                                                           <xsl:call-template name="subSelect">
192                                                               <xsl:with-param name="name" select="era"></xsl:with-param>
193                                                           </xsl:call-template>
194                                                       </xsl:when>
195                                                       <xsl:otherwise>
196                                                           <xsl:call-template name="subSelect_in_place">
197                                                               <xsl:with-param name="name" select="'era'"></xsl:with-param>
198                                                           </xsl:call-template>
199                                                       </xsl:otherwise>
200                                                   </xsl:choose>
201                                                </xsl:if>
202                                        </xsl:for-each>
203                                </xsl:otherwise>
204                                </xsl:choose>     
205                </xsl:otherwise>
206        </xsl:choose>
207</xsl:template>
208 
209<!-- process dateFormat & timeFormat -->   
210 <xsl:template match="dateFormats | timeFormats" name="date_time_Formats">
211     <xsl:param name="width" select="@type"></xsl:param>
212     <xsl:choose>
213         <xsl:when test="count(./alias)>0">
214             <!-- Handle Alias --> 
215             <xsl:for-each select="./alias">
216                 <xsl:call-template name="alias_template">
217                     <xsl:with-param name="templateToCall">date_time_Formats</xsl:with-param>
218                     <xsl:with-param name="source" select="@source"></xsl:with-param>
219                     <xsl:with-param name="xpath" select="@path"></xsl:with-param>
220                 </xsl:call-template>
221             </xsl:for-each>       
222         </xsl:when>
223         <xsl:otherwise>
224             <xsl:choose>
225                 <xsl:when test="name()='dateFormats' or name()='timeFormats'">
226                     <xsl:for-each select="*">
227                         <xsl:call-template name="date_time_Formats"></xsl:call-template>
228                     </xsl:for-each>
229                 </xsl:when>
230                 <xsl:otherwise>
231                     <xsl:if test="name()!='default'">                         
232                         <xsl:for-each select=".//pattern[not(@draft)] |
233                          .//pattern[@draft!='provisional' and @draft!='unconfirmed']">
234                             <xsl:call-template name="insert_comma"/>
235        '<xsl:value-of select="name(..)"></xsl:value-of>
236                         <xsl:text>-</xsl:text>
237                         <xsl:value-of select='$width'/>': "<xsl:value-of select="replace(.,'&quot;', '\\&quot;')"/>
238                         <xsl:text>"</xsl:text>
239                     </xsl:for-each>
240                     </xsl:if>
241                 </xsl:otherwise>
242             </xsl:choose>
243                </xsl:otherwise>
244     </xsl:choose>
245</xsl:template>
246 
247<!-- process dateTimeFormat -->
248<xsl:template name="dateTimeFormats" match="dateTimeFormats">
249    <xsl:param name="width" select="@type"></xsl:param>
250    <xsl:choose>
251    <xsl:when test="./alias">
252        <!-- Handle Alias -->
253        <xsl:for-each select="./alias">
254            <xsl:call-template name="alias_template">
255                <xsl:with-param name="templateToCall">dateTimeFormats</xsl:with-param>
256                <xsl:with-param name="source" select="@source"></xsl:with-param>
257                <xsl:with-param name="xpath" select="@path"></xsl:with-param>
258            </xsl:call-template>
259        </xsl:for-each>
260    </xsl:when>
261    <xsl:otherwise>
262       <xsl:choose>
263            <xsl:when test="name()='dateTimeFormats'">
264                <xsl:for-each select="*">
265                    <xsl:call-template name="dateTimeFormats"></xsl:call-template>
266                </xsl:for-each>
267            </xsl:when>
268            <xsl:otherwise>
269        <xsl:if test="name()!='default'">
270        <!-- patterns -->
271        <xsl:for-each select=".//pattern[not(@draft)] |
272            .//pattern[@draft!='provisional' and @draft!='unconfirmed']">
273            <xsl:call-template name="insert_comma"/>
274        '<xsl:value-of select="name(..)"></xsl:value-of>
275         <xsl:if test="string-length($width) > 0">
276                <xsl:text>-</xsl:text>
277                      <xsl:value-of select='$width'/>
278          </xsl:if>
279           <xsl:text>': "</xsl:text>
280           <xsl:value-of select="."/><xsl:text>" </xsl:text>         
281        </xsl:for-each>
282        <!-- availableFormats -->
283        <xsl:if test="name()='availableFormats'">
284         <xsl:if test="count(*[not(@draft)])>0 or
285                count(*[@draft!='provisional' and @draft!='unconfirmed'])>0">
286             <xsl:call-template name="insert_comma"/>
287        'dateTimeAvailableFormats':<xsl:call-template name="subSelect"><xsl:with-param name="name" select="dateFormatItem"></xsl:with-param></xsl:call-template>
288        </xsl:if>
289        </xsl:if>
290        <!-- appendItems -->
291            <xsl:for-each select=".//appendItem[not(@draft)] |
292                .//appendItem[@draft!='provisional' and @draft!='unconfirmed']">
293                <xsl:call-template name="insert_comma"/>
294        'dateTimeFormats-appendItem-<xsl:value-of select="@request"></xsl:value-of>
295            <xsl:text>':"</xsl:text>
296            <xsl:value-of select="."></xsl:value-of>
297            <xsl:text>"</xsl:text>
298        </xsl:for-each>
299     </xsl:if>
300    </xsl:otherwise>
301    </xsl:choose>
302    </xsl:otherwise>
303    </xsl:choose>
304</xsl:template>
305   
306 <!-- process fields-->
307<xsl:template name="fields" match="fields">
308    <xsl:param name="width" select="@type"></xsl:param>
309    <xsl:choose>
310        <xsl:when test="count(./alias)>0">
311            <!-- Handle Alias -->
312            <xsl:for-each select="./alias">
313                <xsl:call-template name="alias_template">
314                    <xsl:with-param name="templateToCall">fields</xsl:with-param>
315                    <xsl:with-param name="source" select="@source"></xsl:with-param>
316                    <xsl:with-param name="xpath" select="@path"></xsl:with-param>
317                </xsl:call-template>
318            </xsl:for-each>
319        </xsl:when>
320        <xsl:otherwise>
321            <xsl:choose>
322                <xsl:when test="name()='fields'">
323                    <xsl:for-each select="*">
324                        <xsl:call-template name="fields"></xsl:call-template>
325                    </xsl:for-each>
326                </xsl:when>
327                <xsl:otherwise>
328            <xsl:for-each select=".//displayName[not(@draft)] |
329                .//displayName[@draft!='provisional' and @draft!='unconfirmed']">
330                <xsl:call-template name="insert_comma"/>
331        'field-<xsl:value-of select="$width"></xsl:value-of>
332               <xsl:text>':"</xsl:text>
333               <xsl:value-of select="."/>
334                <xsl:text>"</xsl:text>
335            </xsl:for-each>                   
336                </xsl:otherwise>
337            </xsl:choose>
338         </xsl:otherwise>
339    </xsl:choose>   
340</xsl:template>
341
342<!-- Sub output routine-->
343<xsl:template name="subSelect">
344    <xsl:param name="name"></xsl:param>
345    <xsl:variable name="num" select="count(./$name[not(@draft)])+count(./$name[@draft!='provisional' and @draft!='unconfirmed'])"></xsl:variable>
346    <xsl:if test="$num>1">
347        <xsl:text>[</xsl:text>
348        <xsl:for-each select="$name[not(@draft)] | $name[@draft!='provisional' and @draft!='unconfirmed']">
349            <xsl:text>"</xsl:text>
350            <xsl:value-of select="replace(.,'&quot;', '\\&quot;')"/>
351            <xsl:text>"</xsl:text>
352            <xsl:if test="$num>position()">
353                <xsl:text>,</xsl:text>
354            </xsl:if>           
355        </xsl:for-each>
356        <xsl:text>]</xsl:text>
357    </xsl:if>
358    <xsl:if test="$num=1">
359        <xsl:text>"</xsl:text><xsl:value-of select="replace($name[not(@draft)]
360            | $name[@draft!='provisional' and @draft!='unconfirmed'],'&quot;', '\\&quot;')"/><xsl:text>"</xsl:text>
361    </xsl:if>
362</xsl:template>
363   
364   
365 <!-- Special sub output routine, only for month, day,quarter,and era, each none
366        "provisional/unconfirmed" draft item should be output in its corresponding place
367        (according to its @type)
368
369        e.g. <month type="5">5</month> should be in the 5th position in the output array,
370        undefined is stuffed for preceding elements-->
371
372<xsl:variable name="last_sibling_type" select="-1" saxon:assignable="yes"/>
373<xsl:variable name="type_value" select="-1" saxon:assignable="yes"/>
374<xsl:variable name="num_expect_preceding_sibling" select="-1" saxon:assignable="yes"/>
375   
376<xsl:template name="subSelect_in_place">
377    <xsl:param name="name"></xsl:param>
378    <!--xsl:variable name="num" select="count(./$name[not(@draft)])+count(./$name[@draft!='provisional' and @draft!='unconfirmed'])"></xsl:variable-->
379    <xsl:variable name="num" select="count(./*[name()=$name and  (not(@draft) or @draft!='provisional' and @draft!='unconfirmed')])"></xsl:variable>
380    <xsl:text>[</xsl:text>
381    <!--xsl:for-each select="$name[not(@draft)] | $name[@draft!='provisional' and @draft!='unconfirmed']"-->
382    <xsl:for-each select="./*[name()=$name and  (not(@draft) or @draft!='provisional' and @draft!='unconfirmed')]">       
383        <xsl:choose>
384            <xsl:when test="$name='day'">
385                <!--TODO: too bad that assign name can not be variable -->
386                <xsl:if test="@type='sun'"><saxon:assign name="type_value" select="1"/> </xsl:if>
387                <xsl:if test="@type='mon'"><saxon:assign name="type_value" select="2"/> </xsl:if>
388                <xsl:if test="@type='tue'"><saxon:assign name="type_value" select="3"/> </xsl:if>
389                <xsl:if test="@type='wed'"><saxon:assign name="type_value" select="4"/> </xsl:if>
390                <xsl:if test="@type='thu'"><saxon:assign name="type_value" select="5"/> </xsl:if>
391                <xsl:if test="@type='fri'"><saxon:assign name="type_value" select="6"/> </xsl:if>
392                <xsl:if test="@type='sat'"><saxon:assign name="type_value" select="7"/> </xsl:if>
393            </xsl:when>
394            <xsl:otherwise><saxon:assign name="type_value" select="@type"/></xsl:otherwise>
395        </xsl:choose>
396       
397        <xsl:choose>
398            <xsl:when test="$name='era'">
399                <!-- index of era starts from  0 -->
400                <saxon:assign name="num_expect_preceding_sibling" select="number($type_value)"/>
401            </xsl:when>
402            <xsl:otherwise><saxon:assign name="num_expect_preceding_sibling" select="number($type_value)-1"/></xsl:otherwise>
403        </xsl:choose>
404       
405        <!--xsl:variable name="num_preceding_sibling" select="count(preceding-sibling::node()[name()=$name and  (not(@draft))])
406            + count(preceding-sibling::node()[name()=$name and @draft!='provisional' and @draft!='unconfirmed'])"></xsl:variable-->
407        <xsl:variable name="num_preceding_sibling"
408         select="count(preceding-sibling::node()[name()=$name and  (not(@draft) or @draft!='provisional' and @draft!='unconfirmed')])"></xsl:variable>
409       
410        <xsl:if test=" $num_expect_preceding_sibling > $num_preceding_sibling">
411            <xsl:if test="$num_preceding_sibling > 0">
412                <xsl:for-each select="(preceding-sibling::node()[name()=$name and  (not(@draft) or @draft!='provisional' and @draft!='unconfirmed')])[last()]">
413                    <xsl:choose>
414                        <xsl:when test="$name='day'">
415                            <!--TODO: too bad that assign name can not be variable -->
416                            <xsl:if test="@type='sun'"><saxon:assign name="last_sibling_type" select="1"/> </xsl:if>
417                            <xsl:if test="@type='mon'"><saxon:assign name="last_sibling_type" select="2"/> </xsl:if>
418                            <xsl:if test="@type='tue'"><saxon:assign name="last_sibling_type" select="3"/> </xsl:if>
419                            <xsl:if test="@type='wed'"><saxon:assign name="last_sibling_type" select="4"/> </xsl:if>
420                            <xsl:if test="@type='thu'"><saxon:assign name="last_sibling_type" select="5"/> </xsl:if>
421                            <xsl:if test="@type='fri'"><saxon:assign name="last_sibling_type" select="6"/> </xsl:if>
422                            <xsl:if test="@type='sat'"><saxon:assign name="last_sibling_type" select="7"/> </xsl:if>
423                        </xsl:when>
424                        <xsl:otherwise><saxon:assign name="last_sibling_type" select="@type"/></xsl:otherwise>
425                    </xsl:choose>
426                </xsl:for-each>
427                <xsl:call-template name="retain_preceding_positions">
428                    <xsl:with-param name="num" select="number($type_value)-number($last_sibling_type)-1"></xsl:with-param>
429                </xsl:call-template>
430            </xsl:if>
431            <xsl:if test="$num_preceding_sibling = 0"> 
432                <xsl:call-template name="retain_preceding_positions">
433                    <xsl:with-param name="num" select="$num_expect_preceding_sibling"></xsl:with-param>
434                </xsl:call-template>
435            </xsl:if>
436        </xsl:if>
437        <xsl:text>"</xsl:text><xsl:value-of select="replace(.,'&quot;', '\\&quot;')"/><xsl:text>"</xsl:text>
438        <xsl:if test="$num>position()">
439            <xsl:text>,</xsl:text>
440        </xsl:if>           
441    </xsl:for-each>
442    <xsl:text>]</xsl:text>
443</xsl:template>   
444   
445<xsl:variable name="i" select="0" saxon:assignable="yes"/>    
446<xsl:template name="retain_preceding_positions">
447    <xsl:param name="num"></xsl:param>
448    <saxon:assign name="i" select="0"/>
449    <saxon:while test="$num > $i">
450        <xsl:text>undefined,</xsl:text>
451        <saxon:assign name="i" select="$i+1"/>
452    </saxon:while>   
453</xsl:template>
454   
455<!-- Sub output routine-->
456<xsl:variable name="vLowercaseChars_CONST" select="'abcdefghijklmnopqrstuvwxyz'"/> 
457<xsl:variable name="vUppercaseChars_CONST" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
458<xsl:template name="camel_case">
459    <xsl:param name="name"></xsl:param>
460    <xsl:variable name="words" select="tokenize($name, '-')"></xsl:variable>
461    <xsl:for-each select="$words">
462        <xsl:choose>
463            <xsl:when test="position()=1">
464                <xsl:value-of select="."/>
465            </xsl:when>
466            <xsl:otherwise>
467                <xsl:value-of select="translate(substring(., 1, 1), $vLowercaseChars_CONST, $vUppercaseChars_CONST)"/><xsl:value-of select="substring(., 2)"/>
468            </xsl:otherwise>
469        </xsl:choose>
470    </xsl:for-each>
471</xsl:template>
472
473<!-- recursive process for alias -->
474<xsl:template name="alias_template">
475    <xsl:param name="templateToCall"></xsl:param>
476    <xsl:param name="source"></xsl:param>
477    <xsl:param name="xpath"></xsl:param>
478   
479    <xsl:variable name="cur_name" select="../name()"></xsl:variable>
480    <xsl:variable name="cur_width" select="../@type"></xsl:variable>
481   
482    <xsl:choose>
483        <!-- source="locale" -->
484        <xsl:when test="$source='locale'">
485            <xsl:for-each select="saxon:evaluate(concat('../',$xpath))">   
486                <xsl:call-template name="invoke_template_by_name">
487                    <xsl:with-param name="templateName" select="$templateToCall"></xsl:with-param>
488                    <xsl:with-param name="name" select="$cur_name"></xsl:with-param>
489                    <xsl:with-param name="width" select="$cur_width"></xsl:with-param>
490                </xsl:call-template>
491            </xsl:for-each>
492        </xsl:when>
493        <xsl:otherwise>
494            <!-- source is an external xml file -->
495            <xsl:if test="string-length($xpath)>0">
496                <xsl:for-each select="doc(concat($source,'.xml'))">
497                    <xsl:for-each select="saxon:evaluate($xpath)">
498                       <xsl:call-template name="invoke_template_by_name">
499                           <xsl:with-param name="templateName" select="$templateToCall"></xsl:with-param>
500                           <xsl:with-param name="name" select="$cur_name"></xsl:with-param>
501                           <xsl:with-param name="width" select="$cur_width"></xsl:with-param>
502                       </xsl:call-template>
503                  </xsl:for-each>
504                </xsl:for-each>
505            </xsl:if>           
506        </xsl:otherwise>
507    </xsl:choose>
508</xsl:template>   
509   
510  <!-- too bad that can only use standard xsl:call-template(name can not be variable)
511         error occurs if use <saxson:call-templates($templateToCall)  /> -->
512 <xsl:template name="invoke_template_by_name">
513     <xsl:param name="templateName"></xsl:param>
514     <xsl:param name="name"></xsl:param>
515     <xsl:param name="width"></xsl:param>
516     <xsl:if test="$templateName='top'">
517         <xsl:call-template name="top"></xsl:call-template>
518     </xsl:if>
519     <xsl:if test="$templateName='calendar'">
520         <xsl:call-template name="calendar"></xsl:call-template>
521     </xsl:if>
522     <xsl:if test="$templateName='months_days_quarters'">
523         <xsl:call-template name="months_days_quarters">
524              <xsl:with-param name="width" select="$width"></xsl:with-param>
525          </xsl:call-template>
526      </xsl:if>
527     <xsl:if test="$templateName='apm'">
528         <xsl:call-template name="apm"></xsl:call-template>
529     </xsl:if>
530     <xsl:if test="$templateName='eras'">
531         <xsl:call-template name="eras">
532             <xsl:with-param name="name" select="$name"></xsl:with-param>
533         </xsl:call-template>
534     </xsl:if>
535     <xsl:if test="$templateName='date_time_Formats'">
536         <xsl:call-template name="date_time_Formats">
537             <xsl:with-param name="width" select="$width"></xsl:with-param>
538         </xsl:call-template>
539     </xsl:if>
540     <xsl:if test="$templateName='dateTimeFormats'">
541         <xsl:call-template name="dateTimeFormats">
542             <xsl:with-param name="width" select="$width"></xsl:with-param>
543         </xsl:call-template>
544     </xsl:if>
545     <xsl:if test="$templateName='fields'">
546         <xsl:call-template name="fields">
547             <xsl:with-param name="width" select="$width"></xsl:with-param>
548         </xsl:call-template>
549     </xsl:if>     
550 </xsl:template>
551   
552<xsl:template name="insert_comma">
553    <xsl:choose>
554        <xsl:when test="$first">
555            <saxon:assign name="first" select="false()"/>
556        </xsl:when>
557        <xsl:otherwise>
558            <xsl:text>,</xsl:text>
559        </xsl:otherwise>
560    </xsl:choose>
561</xsl:template>
562   
563</xsl:stylesheet>
Note: See TracBrowser for help on using the browser.