source: Dev/trunk/src/client/util/buildscripts/cldr/calendar.xsl @ 483

Last change on this file since 483 was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

File size: 35.6 KB
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:import href="util.xsl"/>
4<xsl:output method="text" indent="yes" saxon:byte-order-mark="yes"/>
5<!-- list the data elements whose spaces should be preserved
6   it seems listing only the parent node doesn't work -->
7    <xsl:preserve-space elements="month day quarter dayPeriod era pattern dateFormatItem appendItem displayName"/>
8<xsl:strip-space elements="*"/> 
9<xsl:variable name="index" select="number(1)" 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 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    <!-- will be overridden with 'true' if from 'locale' alias, see 'invoke_template_by_name' -->   
62    <xsl:param name="fromLocaleAlias" select="false()"/>
63
64    <!-- insert 'locale' alias information  start -->
65    <xsl:if test="$fromLocaleAlias">
66        <xsl:call-template name="insert_alias_info">
67                        <xsl:with-param name="sourceName">*</xsl:with-param>
68            <xsl:with-param name="bundle" select="@type"/>
69        </xsl:call-template>
70    </xsl:if>
71    <!-- insert 'locale' alias information  start -->
72    <xsl:choose>
73        <xsl:when test="count(./alias)>0">
74            <!-- Handle Alias -->
75            <xsl:for-each select="./alias">
76                <xsl:call-template name="alias_template">
77                    <xsl:with-param name="templateToCall">calendar</xsl:with-param>
78                    <xsl:with-param name="source" select="@source"></xsl:with-param>
79                    <xsl:with-param name="xpath" select="@path"></xsl:with-param>
80                </xsl:call-template>     
81            </xsl:for-each>
82        </xsl:when>
83        <xsl:otherwise>
84            <xsl:apply-templates/>
85
86                        <!-- <fields> used to be under <calendar> but now it's a sibling of <calendars> -->
87                        <xsl:for-each select="../../fields">
88                                <xsl:call-template name="fields">
89                                        <xsl:with-param name="width" select="@type"></xsl:with-param>
90                                </xsl:call-template>
91                        </xsl:for-each>
92                </xsl:otherwise>
93    </xsl:choose>
94</xsl:template>
95
96<!-- process months | days | quarters | dayPeriods -->
97<xsl:template name="months_days_quarters_dayPeriods" match="months | days | quarters | dayPeriods">
98    <xsl:param name="name" select="name()"/>
99    <xsl:param name="width" select="@type"/>
100    <xsl:param name="ctx" select="../@type"/>
101     <!-- will be overridden with 'true' if from 'locale' alias, see 'invoke_template_by_name' -->   
102     <xsl:param name="fromLocaleAlias" select="false()"/>
103
104        <xsl:variable name="item" select="substring-before(name(), 'Width')"/>
105        <!-- insert 'locale' alias information start -->
106    <xsl:if test="$fromLocaleAlias">
107        <xsl:if test="name()='months' or name()='days' or name()='quarters' or name()='dayPeriods'">
108                <xsl:call-template name="insert_alias_info"/>
109         </xsl:if>
110        <xsl:if test="name()='monthWidth' or name()='dayWidth' or name()='quarterWidth' or name()='dayPeriodWidth'">
111            <!-- e.g.  for <monthContext type="format">
112                        <monthWidth type="abbreviated">
113                                <alias source="locale" path="../monthWidth[@type='wide']"/>
114                        </monthWidth>
115                          ......                   
116                    alias info will be recorded as 'months-format-abbr@localeAlias' : {'target' : "months-format-wide"}                       
117                    TBD: Seems the following section cann't be extracted out as a reusable template       
118                    insert 'locale' alias information end -->
119                    <xsl:call-template name="insert_comma"/>
120        '<xsl:value-of select="$item"/><xsl:text>s-</xsl:text>
121                    <xsl:call-template name="camel_case">
122                        <xsl:with-param name="name"><xsl:value-of select="$ctx"></xsl:value-of></xsl:with-param>
123                    </xsl:call-template>
124                    <xsl:choose>
125                        <xsl:when test="$width='abbreviated'"><xsl:text>-abbr</xsl:text></xsl:when>
126                        <xsl:otherwise><xsl:value-of select="concat('-',$width)"></xsl:value-of></xsl:otherwise>
127                    </xsl:choose>
128                    <xsl:text>@localeAlias</xsl:text>
129                                <xsl:value-of select="$index"/><saxon:assign name="index" select="sum($index + 1)"/>
130                                <xsl:text>':{'target':"</xsl:text><xsl:value-of select="$item"/><xsl:text>s-</xsl:text>
131                    <xsl:call-template name="camel_case">
132                        <xsl:with-param name="name"><xsl:value-of select="../@type"/></xsl:with-param>
133                    </xsl:call-template>
134                    <xsl:choose>
135                        <xsl:when test="@type='abbreviated'"><xsl:text>-abbr</xsl:text></xsl:when>
136                        <xsl:otherwise><xsl:value-of select="concat('-',@type)"/></xsl:otherwise>
137                    </xsl:choose>
138                    <xsl:text>",'bundle':"</xsl:text><xsl:value-of select="../../../@type"/><xsl:text>"}</xsl:text>
139                </xsl:if> 
140    </xsl:if>
141        <!-- insert 'locale' alias information end -->       
142         
143    <xsl:choose>       
144        <xsl:when test="count(./alias)>0">
145            <!-- Handle Alias -->
146            <xsl:for-each select="./alias">
147                <xsl:call-template name="alias_template">
148                    <xsl:with-param name="templateToCall">months_days_quarters_dayPeriods</xsl:with-param>
149                    <xsl:with-param name="source" select="@source"></xsl:with-param>
150                    <xsl:with-param name="xpath" select="@path"></xsl:with-param>
151                    <xsl:with-param name="name" select="$name"></xsl:with-param>
152                                        <xsl:with-param name="width" select="$width"></xsl:with-param>
153                    <xsl:with-param name="ctx" select="$ctx"></xsl:with-param>
154                </xsl:call-template>
155            </xsl:for-each>           
156        </xsl:when>
157        <xsl:otherwise>
158            <xsl:if test="name()='months' or name()='monthContext' or name()='days' or name()='dayContext'
159                or name()='quarters' or name()='quarterContext' or name()='dayPeriods' or name()='dayPeriodContext'">
160                <xsl:for-each select="*">
161                    <xsl:call-template name="months_days_quarters_dayPeriods"></xsl:call-template>
162                </xsl:for-each>
163            </xsl:if>
164            <xsl:if test="name()='monthWidth' or name()='dayWidth' or name()='quarterWidth' or name()='dayPeriodWidth' ">
165                <!--xsl:variable name="item" select="substring-before(name(), 'Width')"/-->
166                <xsl:if test="count(*[not(@draft)])>0 or count(*[@draft!='provisional' and @draft!='unconfirmed'])>0">
167                                        <xsl:choose>
168                                                <!-- special format for dayPeriodWidth e.g.'dayPeriods-am-format-wide':"AM"-->
169                                                <xsl:when test="name()='dayPeriodWidth'">
170                                                <xsl:call-template name="apm">
171                                                <xsl:with-param name="item" select="$item"></xsl:with-param>
172                                                                <xsl:with-param name="width" select="$width"></xsl:with-param>
173                                                                <xsl:with-param name="ctx" select="$ctx"></xsl:with-param>
174                                                </xsl:call-template>                           
175                                                </xsl:when>
176                                                <!--monthWidth, dayWidth and quarterWidth-->
177                                                <xsl:otherwise>                                 
178                                        <xsl:call-template name="insert_comma"/>
179        '<xsl:value-of select="$item"/>
180                                        <xsl:text>s-</xsl:text>
181                                        <xsl:call-template name="camel_case">
182                                            <xsl:with-param name="name"><xsl:value-of select="$ctx"></xsl:value-of></xsl:with-param>
183                                        </xsl:call-template>
184                                        <xsl:choose>
185                                                <xsl:when test="$width='abbreviated'"><xsl:text>-abbr</xsl:text></xsl:when>
186                                                <xsl:otherwise>
187                                               <xsl:value-of select="concat('-',$width)"></xsl:value-of>
188                                            </xsl:otherwise>
189                                        </xsl:choose>
190                                        <xsl:text>':</xsl:text>
191                                        <!--xsl:call-template name="subSelect"><xsl:with-param name="name" select="./*[name()=$item]"></xsl:with-param></xsl:call-template-->
192                                        <xsl:call-template name="subSelect_in_place"><xsl:with-param name="name" select="$item"></xsl:with-param></xsl:call-template>
193                                                        <!-- for leap month -->
194                                                        <xsl:for-each select="*[@yeartype='leap']">
195                                                        <xsl:call-template name="insert_comma"/>
196        '<xsl:value-of select="$item"/><xsl:text>s-</xsl:text>
197                                                        <xsl:call-template name="camel_case">
198                                                                <xsl:with-param name="name"><xsl:value-of select="$ctx"></xsl:value-of></xsl:with-param>
199                                                            </xsl:call-template>
200                                                            <xsl:choose>
201                                                                <xsl:when test="$width='abbreviated'"><xsl:text>-abbr</xsl:text></xsl:when>
202                                                                <xsl:otherwise>
203                                                                   <xsl:value-of select="concat('-',$width)"></xsl:value-of>
204                                                                </xsl:otherwise>
205                                                            </xsl:choose>
206                                                                <xsl:text>-</xsl:text><xsl:value-of select="@yeartype"/><xsl:text>':"</xsl:text>
207                                                            <xsl:value-of select="replace(.,'&quot;', '\\&quot;')"/><xsl:text>"</xsl:text>
208                                                        </xsl:for-each>                                         
209                                                </xsl:otherwise>
210                                        </xsl:choose>
211                </xsl:if>               
212                </xsl:if>
213         </xsl:otherwise>
214    </xsl:choose>
215</xsl:template>
216 
217<!-- template for inserting 'locale' alias information,
218           e.g. for     <calendar type="buddhist">
219                                                        <months>
220                                                                <alias source="locale" path="../../calendar[@type='gregorian']/months"/>
221                                                        </months>
222                                                                  ......
223         alias info will be recorded as 'months@localeAlias' : {'target':"months", 'bundle' : 'gregorian'}    -->
224<xsl:template name="insert_alias_info">
225        <!-- alias source node name-->
226        <xsl:param name="sourceName" select="name()"></xsl:param>
227        <!-- alias target node name, same as source node by default-->
228        <xsl:param name="targetName" select="$sourceName"></xsl:param>
229        <!-- alias target bundle-->
230        <xsl:param name="bundle" select="../@type"></xsl:param>
231        <xsl:call-template name="insert_comma"/>
232'<xsl:value-of select="$sourceName"/><xsl:text>@localeAlias</xsl:text>
233        <xsl:value-of select="$index"/><saxon:assign name="index" select="sum($index + 1)"/>
234        <xsl:text>':{'target':"</xsl:text><xsl:value-of select="$targetName"/><xsl:text>", 'bundle':"</xsl:text>
235        <xsl:value-of select="$bundle"/><xsl:text>"}</xsl:text>
236</xsl:template>
237   
238       
239<!--process am & noon & pm for <dayPeriod> -->
240<xsl:template name="apm">
241        <xsl:param name="item"></xsl:param>
242        <xsl:param name="ctx"></xsl:param>
243        <xsl:param name="width"></xsl:param>
244       
245    <xsl:for-each select="*[not(@alt) and (not(@draft) or @draft!='provisional' and @draft!='unconfirmed')]">
246            <xsl:call-template name="insert_comma"/>
247        '<xsl:value-of select="$item"/><xsl:text>s-</xsl:text>
248            <xsl:call-template name="camel_case">
249                <xsl:with-param name="name"><xsl:value-of select="$ctx"></xsl:value-of></xsl:with-param>
250            </xsl:call-template>
251            <xsl:choose>
252                <xsl:when test="$width='abbreviated'"><xsl:text>-abbr</xsl:text></xsl:when>
253                <xsl:otherwise>
254                   <xsl:value-of select="concat('-',$width)"></xsl:value-of>
255                </xsl:otherwise>
256            </xsl:choose>
257            <xsl:text>-</xsl:text><xsl:value-of select="@type"/><xsl:text>':"</xsl:text>
258            <xsl:value-of select="replace(.,'&quot;', '\\&quot;')"/><xsl:text>"</xsl:text>
259    </xsl:for-each>
260 </xsl:template>
261
262
263<!-- process eras -->
264<xsl:template match="eras" name="eras">
265        <xsl:param name="name" select="name()"></xsl:param>
266    <!-- will be overridden with 'true' if from alias, see 'invoke_template_by_name' -->   
267    <xsl:param name="fromLocaleAlias" select="false()"/>
268                       
269   <!-- insert 'locale' alias information start -->
270   <xsl:if test="$fromLocaleAlias">
271                <xsl:choose>
272                        <xsl:when test="name()='eras'">
273                        <xsl:call-template name="insert_alias_info">
274                                <xsl:with-param name="sourceName">era</xsl:with-param>
275                        </xsl:call-template>                           
276                        </xsl:when>
277                        <xsl:otherwise>
278                        <xsl:call-template name="insert_alias_info">
279                            <xsl:with-param name="sourceName" select="$name"></xsl:with-param>
280                            <xsl:with-param name="targetName" select="name()"></xsl:with-param>
281                            <xsl:with-param name="bundle" select="../../@type"></xsl:with-param>
282                        </xsl:call-template>
283                        </xsl:otherwise>
284                </xsl:choose>   
285    </xsl:if>
286    <!-- insert 'locale' alias information end -->
287
288        <xsl:choose>
289                <xsl:when test="count(./alias)>0">
290                        <!-- Handle Alias --> 
291                        <xsl:for-each select="./alias">
292                                <xsl:call-template name="alias_template">
293                                        <xsl:with-param name="templateToCall">eras</xsl:with-param>
294                                        <xsl:with-param name="source" select="@source"></xsl:with-param>
295                                        <xsl:with-param name="xpath" select="@path"></xsl:with-param>
296                                        <xsl:with-param name="name" select="$name"></xsl:with-param>
297                                </xsl:call-template>
298                        </xsl:for-each>   
299                </xsl:when>
300                <xsl:otherwise>
301                        <xsl:choose>
302                                <xsl:when test="name()='eras'">
303                                        <xsl:for-each select="*">
304                                                <xsl:call-template name="eras"></xsl:call-template>
305                                        </xsl:for-each>
306                                </xsl:when>
307                                <xsl:otherwise>
308                                        <xsl:for-each select=".">
309                                            <xsl:if test="count(*[not(@draft)])>0
310                                                or count(*[@draft!='provisional' and @draft!='unconfirmed'])>0">
311                                                <xsl:call-template name="insert_comma"/>
312        '<xsl:value-of select="$name"></xsl:value-of>
313                                                <xsl:text>':</xsl:text>
314                                                   <xsl:choose>
315                                                       <xsl:when test="name()='eraNarrow'">
316                                                           <!-- only one special case for eraNarrow in root.xml - japanese
317                                                                 index starts from 232,not 0-->
318                                                           <xsl:call-template name="subSelect">
319                                                               <xsl:with-param name="name" select="era"></xsl:with-param>
320                                                           </xsl:call-template>
321                                                       </xsl:when>
322                                                       <xsl:otherwise>
323                                                           <xsl:call-template name="subSelect_in_place">
324                                                               <xsl:with-param name="name" select="'era'"></xsl:with-param>
325                                                           </xsl:call-template>
326                                                       </xsl:otherwise>
327                                                   </xsl:choose>
328                                                </xsl:if>
329                                        </xsl:for-each>
330                                </xsl:otherwise>
331                                </xsl:choose>     
332                </xsl:otherwise>
333        </xsl:choose>
334</xsl:template>
335
336
337<!-- process dateFormat & timeFormat -->   
338 <xsl:template match="dateFormats | timeFormats" name="date_time_Formats">
339     <xsl:param name="width" select="@type"></xsl:param>
340     <!-- will be overridden with 'true' if from alias, see 'invoke_template_by_name' -->   
341     <xsl:param name="fromLocaleAlias" select="false()"/>
342         
343   <!-- insert 'locale' alias information start -->
344   <xsl:if test="$fromLocaleAlias">
345                <xsl:if test="name()='dateFormats' or name()='timeFormats'">
346             <xsl:call-template name="insert_alias_info">
347                 <xsl:with-param name="sourceName" select="substring-before(name(), 's')"/>
348             </xsl:call-template>
349                </xsl:if>
350        <xsl:if test="name()!='default' and (name()='dateFormatLength' or name()='timeFormatLength')">
351             <xsl:call-template name="insert_alias_info">
352                 <xsl:with-param name="sourceName" select="concat(substring-before(name(), 'Length'), '-',  $width)"/>
353                 <xsl:with-param name="targetName" select="concat(substring-before(name(), 'Length'), '-',  @type)"/>
354                 <xsl:with-param name="bundle" select="../../@type"/>
355             </xsl:call-template>
356         </xsl:if>
357    </xsl:if>
358    <!-- insert 'locale' alias information end -->
359         
360     <xsl:choose>
361         <xsl:when test="count(./alias)>0">
362             <!-- Handle Alias --> 
363             <xsl:for-each select="./alias">
364                 <xsl:call-template name="alias_template">
365                     <xsl:with-param name="templateToCall">date_time_Formats</xsl:with-param>
366                     <xsl:with-param name="source" select="@source"></xsl:with-param>
367                     <xsl:with-param name="xpath" select="@path"></xsl:with-param>
368                                         <xsl:with-param name="width" select="$width"></xsl:with-param>
369                 </xsl:call-template>
370             </xsl:for-each>       
371         </xsl:when>
372         <xsl:otherwise>
373             <xsl:choose>
374                 <xsl:when test="name()='dateFormats' or name()='timeFormats'">
375                     <xsl:for-each select="*">
376                         <xsl:call-template name="date_time_Formats"></xsl:call-template>
377                     </xsl:for-each>
378                 </xsl:when>
379                 <xsl:otherwise>
380                     <xsl:if test="name()!='default'">
381                         <xsl:for-each select=".//pattern[not(@draft)] |
382                          .//pattern[@draft!='provisional' and @draft!='unconfirmed']">
383                             <xsl:call-template name="insert_comma"/>
384        '<xsl:value-of select="name(..)"></xsl:value-of>
385                         <xsl:text>-</xsl:text>
386                         <xsl:value-of select='$width'/>': "<xsl:value-of select="replace(.,'&quot;', '\\&quot;')"/>
387                         <xsl:text>"</xsl:text>
388                     </xsl:for-each>
389                     </xsl:if>
390                 </xsl:otherwise>
391             </xsl:choose>
392                </xsl:otherwise>
393     </xsl:choose>
394</xsl:template>
395 
396<!-- process dateTimeFormat -->
397<xsl:template name="dateTimeFormats" match="dateTimeFormats">
398    <xsl:param name="width" select="@type"></xsl:param>
399    <!-- will be overridden with 'true' if from alias, see 'invoke_template_by_name' -->   
400    <xsl:param name="fromLocaleAlias" select="false()"/>
401
402   <!-- insert 'locale' alias information start -->
403   <xsl:if test="$fromLocaleAlias">
404                        <xsl:if test="name()='dateTimeFormats'">
405                <xsl:call-template name="insert_alias_info">
406                    <xsl:with-param name="sourceName">dateTime</xsl:with-param>
407                </xsl:call-template>
408                        </xsl:if>
409            <xsl:if test="name()='dateTimeFormatLength'">
410                <xsl:call-template name="insert_alias_info">
411                    <xsl:with-param name="sourceName">dateTimeFormat</xsl:with-param>
412                    <xsl:with-param name="bundle" select="../../@type"/>
413                </xsl:call-template>
414            </xsl:if>
415            <xsl:if test="name()='availableFormats'">
416                 <xsl:call-template name="insert_alias_info">
417                     <xsl:with-param name="sourceName">dateTimeAvailableFormats</xsl:with-param>
418                     <xsl:with-param name="bundle" select="../../@type"/>
419                 </xsl:call-template>
420            </xsl:if>
421            <xsl:if test="name()='appendItems'">
422                <xsl:call-template name="insert_alias_info">
423                    <xsl:with-param name="sourceName">dateTimeFormats-appendItem-</xsl:with-param>
424                    <xsl:with-param name="bundle" select="../../@type"/>
425                </xsl:call-template>
426            </xsl:if>
427    </xsl:if>
428        <!-- insert 'locale' alias information start -->
429       
430    <xsl:choose>
431    <xsl:when test="./alias">
432        <!-- Handle Alias -->
433        <xsl:for-each select="./alias">
434            <xsl:call-template name="alias_template">
435                <xsl:with-param name="templateToCall">dateTimeFormats</xsl:with-param>
436                <xsl:with-param name="source" select="@source"></xsl:with-param>
437                <xsl:with-param name="xpath" select="@path"></xsl:with-param>
438                                <xsl:with-param name="width" select="$width"></xsl:with-param>
439            </xsl:call-template>
440        </xsl:for-each>
441    </xsl:when>
442    <xsl:otherwise>
443       <xsl:choose>
444            <xsl:when test="name()='dateTimeFormats'">
445                <xsl:for-each select="*">
446                    <xsl:call-template name="dateTimeFormats"></xsl:call-template>
447                </xsl:for-each>
448            </xsl:when>
449            <xsl:otherwise>
450        <xsl:if test="name()!='default'">
451        <!-- patterns -->
452        <xsl:if test="name()='dateTimeFormatLength'">
453            <xsl:for-each select=".//pattern[not(@draft)] |
454                .//pattern[@draft!='provisional' and @draft!='unconfirmed']">
455                <xsl:call-template name="insert_comma"/>
456        '<xsl:value-of select="name(..)"></xsl:value-of>
457             <xsl:if test="string-length($width) > 0">
458                <xsl:text>-</xsl:text>
459                          <xsl:value-of select='$width'/>
460              </xsl:if>
461               <xsl:text>': "</xsl:text>
462               <xsl:value-of select="replace(.,'&quot;', '\\&quot;')"/><xsl:text>" </xsl:text>         
463            </xsl:for-each>
464         </xsl:if>
465        <!-- availableFormats -->
466            <xsl:if test="name()='availableFormats'">
467                <xsl:for-each select=".//dateFormatItem[not(@draft)] |
468                    .//dateFormatItem[@draft!='provisional' and @draft!='unconfirmed']">
469                    <xsl:call-template name="insert_comma"/>
470        'dateFormatItem-<xsl:value-of select="@id"></xsl:value-of>
471                <xsl:text>':"</xsl:text>
472                <xsl:value-of select="replace(.,'&quot;', '\\&quot;')"></xsl:value-of>
473                <xsl:text>"</xsl:text>
474                </xsl:for-each>
475            </xsl:if>
476        <!-- appendItems -->
477            <xsl:if test="name()='appendItems'">
478                <xsl:for-each select=".//appendItem[not(@draft)] |
479                    .//appendItem[@draft!='provisional' and @draft!='unconfirmed']">
480                    <xsl:call-template name="insert_comma"/>
481        'dateTimeFormats-appendItem-<xsl:value-of select="@request"></xsl:value-of>
482                <xsl:text>':"</xsl:text>
483                <xsl:value-of select="replace(.,'&quot;', '\\&quot;')"></xsl:value-of>
484                <xsl:text>"</xsl:text>
485                </xsl:for-each>
486            </xsl:if>
487     </xsl:if>
488    </xsl:otherwise>
489    </xsl:choose>
490    </xsl:otherwise>
491    </xsl:choose>
492</xsl:template>
493   
494 <!-- process fields-->
495<xsl:template name="fields" match="fields">
496    <xsl:param name="width" select="@type"></xsl:param>
497    <!-- will be overridden with 'true' if from alias, see 'invoke_template_by_name' -->   
498    <xsl:param name="fromLocaleAlias" select="false()"/>
499
500   <!-- insert 'locale' alias information start -->
501   <xsl:if test="$fromLocaleAlias">
502                <xsl:if test="name()='fields'">
503            <xsl:call-template name="insert_alias_info">
504                <xsl:with-param name="sourceName">field</xsl:with-param>
505            </xsl:call-template>                               
506                </xsl:if>
507        <xsl:if test="name() = 'field'">
508            <xsl:call-template name="insert_alias_info">
509                <xsl:with-param name="sourceName" select="concat(name(), '-', $width)"/>
510                <xsl:with-param name="targetName" select="concat(name(), '-', @type)"/>
511                <xsl:with-param name="bundle" select="../../@type"/>
512            </xsl:call-template>
513        </xsl:if>
514    </xsl:if>
515    <!-- insert 'locale' alias information end -->     
516       
517    <xsl:choose>
518        <xsl:when test="count(./alias)>0">
519            <!-- Handle Alias -->
520            <xsl:for-each select="./alias">
521                <xsl:call-template name="alias_template">
522                    <xsl:with-param name="templateToCall">fields</xsl:with-param>
523                    <xsl:with-param name="source" select="@source"></xsl:with-param>
524                    <xsl:with-param name="xpath" select="@path"></xsl:with-param>
525                                        <xsl:with-param name="width" select="$width"></xsl:with-param>
526                </xsl:call-template>
527            </xsl:for-each>
528        </xsl:when>
529        <xsl:otherwise>
530            <xsl:choose>
531                <xsl:when test="name()='fields'">
532                    <xsl:for-each select="*">
533                        <xsl:call-template name="fields"></xsl:call-template>
534                    </xsl:for-each>
535                </xsl:when>
536                <xsl:otherwise>
537                    <xsl:for-each select=".//displayName[not(@draft)] |
538                        .//displayName[@draft!='provisional' and @draft!='unconfirmed']">
539                        <xsl:call-template name="insert_comma"/>
540        'field-<xsl:value-of select="$width"></xsl:value-of>
541                        <xsl:text>':"</xsl:text>
542                        <xsl:value-of select="replace(.,'&quot;', '\\&quot;')"/>
543                        <xsl:text>"</xsl:text>
544                    </xsl:for-each>                   
545                    <xsl:for-each select=".//relative">
546                        <xsl:call-template name="insert_comma"/>
547        'field-<xsl:value-of select="$width"></xsl:value-of>
548                        <xsl:text>-relative+</xsl:text>
549                        <xsl:value-of select="@type"/>
550                        <xsl:text>':"</xsl:text>
551                        <xsl:value-of select="replace(.,'&quot;', '\\&quot;')"/>
552                        <xsl:text>"</xsl:text>
553                    </xsl:for-each>                   
554                </xsl:otherwise>
555            </xsl:choose>
556         </xsl:otherwise>
557    </xsl:choose>   
558</xsl:template>
559
560<!-- Sub output routine-->
561<xsl:template name="subSelect">
562    <xsl:param name="name"></xsl:param>
563    <xsl:variable name="num" select="count(./$name[not(@draft)])+count(./$name[@draft!='provisional' and @draft!='unconfirmed'])"></xsl:variable>
564    <xsl:if test="$num>1">
565        <xsl:text>[</xsl:text>
566        <xsl:for-each select="$name[not(@draft)] | $name[@draft!='provisional' and @draft!='unconfirmed']">
567            <xsl:text>"</xsl:text>
568            <xsl:value-of select="replace(.,'&quot;', '\\&quot;')"/>
569            <xsl:text>"</xsl:text>
570            <xsl:if test="$num>position()">
571                <xsl:text>,</xsl:text>
572            </xsl:if>           
573        </xsl:for-each>
574        <xsl:text>]</xsl:text>
575    </xsl:if>
576    <xsl:if test="$num=1">
577        <xsl:text>"</xsl:text><xsl:value-of select="replace($name[not(@draft)]
578            | $name[@draft!='provisional' and @draft!='unconfirmed'],'&quot;', '\\&quot;')"/><xsl:text>"</xsl:text>
579    </xsl:if>
580</xsl:template>
581   
582   
583 <!-- Special sub output routine, only for month, day,quarter,and era, each none
584        "provisional/unconfirmed" draft item should be output in its corresponding place
585        (according to its @type)
586
587        e.g. <month type="5">5</month> should be in the 5th position in the output array,
588        undefined is stuffed for preceding elements-->
589
590<xsl:variable name="last_sibling_type" select="-1" saxon:assignable="yes"/>
591<xsl:variable name="type_value" select="-1" saxon:assignable="yes"/>
592<xsl:variable name="num_expect_preceding_sibling" select="-1" saxon:assignable="yes"/>
593   
594<xsl:template name="subSelect_in_place">
595    <xsl:param name="name"></xsl:param>
596    <!--xsl:variable name="num" select="count(./$name[not(@draft)])+count(./$name[@draft!='provisional' and @draft!='unconfirmed'])"></xsl:variable-->
597    <xsl:variable name="num" select="count(./*[name()=$name and (not(@draft) or @draft!='provisional' and @draft!='unconfirmed') and not(@yeartype)])"></xsl:variable>
598    <xsl:text>[</xsl:text>
599    <!--xsl:for-each select="$name[not(@draft)] | $name[@draft!='provisional' and @draft!='unconfirmed']"-->
600    <xsl:for-each select="./*[name()=$name and (not(@draft) or @draft!='provisional' and @draft!='unconfirmed') and not(@yeartype)]">       
601        <xsl:choose>
602            <xsl:when test="$name='day'">
603                <!--TODO: too bad that assign name can not be variable -->
604                <xsl:if test="@type='sun'"><saxon:assign name="type_value" select="1"/> </xsl:if>
605                <xsl:if test="@type='mon'"><saxon:assign name="type_value" select="2"/> </xsl:if>
606                <xsl:if test="@type='tue'"><saxon:assign name="type_value" select="3"/> </xsl:if>
607                <xsl:if test="@type='wed'"><saxon:assign name="type_value" select="4"/> </xsl:if>
608                <xsl:if test="@type='thu'"><saxon:assign name="type_value" select="5"/> </xsl:if>
609                <xsl:if test="@type='fri'"><saxon:assign name="type_value" select="6"/> </xsl:if>
610                <xsl:if test="@type='sat'"><saxon:assign name="type_value" select="7"/> </xsl:if>
611            </xsl:when>
612            <xsl:otherwise><saxon:assign name="type_value" select="@type"/></xsl:otherwise>
613        </xsl:choose>
614       
615        <xsl:choose>
616            <xsl:when test="$name='era'">
617                <!-- index of era starts from  0 -->
618                <saxon:assign name="num_expect_preceding_sibling" select="number($type_value)"/>
619            </xsl:when>
620            <xsl:otherwise><saxon:assign name="num_expect_preceding_sibling" select="number($type_value)-1"/></xsl:otherwise>
621        </xsl:choose>
622       
623        <!--xsl:variable name="num_preceding_sibling" select="count(preceding-sibling::node()[name()=$name and  (not(@draft))])
624            + count(preceding-sibling::node()[name()=$name and @draft!='provisional' and @draft!='unconfirmed'])"></xsl:variable-->
625        <xsl:variable name="num_preceding_sibling"
626         select="count(preceding-sibling::node()[name()=$name and (not(@draft) or @draft!='provisional' and @draft!='unconfirmed') and not(@yeartype)])"></xsl:variable>
627       
628        <xsl:if test=" $num_expect_preceding_sibling > $num_preceding_sibling">
629            <xsl:if test="$num_preceding_sibling > 0">
630                <xsl:for-each select="(preceding-sibling::node()[name()=$name and (not(@draft) or @draft!='provisional' and @draft!='unconfirmed') and not(@yeartype)])[last()]">
631                    <xsl:choose>
632                        <xsl:when test="$name='day'">
633                            <!--TODO: too bad that assign name can not be variable -->
634                            <xsl:if test="@type='sun'"><saxon:assign name="last_sibling_type" select="1"/> </xsl:if>
635                            <xsl:if test="@type='mon'"><saxon:assign name="last_sibling_type" select="2"/> </xsl:if>
636                            <xsl:if test="@type='tue'"><saxon:assign name="last_sibling_type" select="3"/> </xsl:if>
637                            <xsl:if test="@type='wed'"><saxon:assign name="last_sibling_type" select="4"/> </xsl:if>
638                            <xsl:if test="@type='thu'"><saxon:assign name="last_sibling_type" select="5"/> </xsl:if>
639                            <xsl:if test="@type='fri'"><saxon:assign name="last_sibling_type" select="6"/> </xsl:if>
640                            <xsl:if test="@type='sat'"><saxon:assign name="last_sibling_type" select="7"/> </xsl:if>
641                        </xsl:when>
642                        <xsl:otherwise><saxon:assign name="last_sibling_type" select="@type"/></xsl:otherwise>
643                    </xsl:choose>
644                </xsl:for-each>
645                <xsl:call-template name="retain_preceding_positions">
646                    <xsl:with-param name="num" select="number($type_value)-number($last_sibling_type)-1"></xsl:with-param>
647                </xsl:call-template>
648            </xsl:if>
649            <xsl:if test="$num_preceding_sibling = 0"> 
650                <xsl:call-template name="retain_preceding_positions">
651                    <xsl:with-param name="num" select="$num_expect_preceding_sibling"></xsl:with-param>
652                </xsl:call-template>
653            </xsl:if>
654        </xsl:if>
655        <xsl:text>"</xsl:text><xsl:value-of select="replace(.,'&quot;', '\\&quot;')"/><xsl:text>"</xsl:text>
656        <xsl:if test="$num>position()">
657            <xsl:text>,</xsl:text>
658        </xsl:if>           
659    </xsl:for-each>
660    <xsl:text>]</xsl:text>
661</xsl:template>   
662   
663<xsl:variable name="i" select="0" saxon:assignable="yes"/>    
664<xsl:template name="retain_preceding_positions">
665    <xsl:param name="num"></xsl:param>
666    <saxon:assign name="i" select="0"/>
667    <saxon:while test="$num > $i">
668        <xsl:text>undefined,</xsl:text>
669        <saxon:assign name="i" select="$i+1"/>
670    </saxon:while>   
671</xsl:template>
672   
673<xsl:template name="ignore" match="cyclicNameSets | monthPatterns"></xsl:template>
674
675  <!-- too bad that can only use standard xsl:call-template(name can not be variable)
676         error occurs if use <saxon:call-templates($templateToCall)  /> -->
677 <xsl:template name="invoke_template_by_name">
678     <xsl:param name="templateName"></xsl:param>
679     <xsl:param name="name"></xsl:param>
680     <xsl:param name="width"></xsl:param>
681         <xsl:param name="ctx"></xsl:param>
682     <xsl:param name="fromLocaleAlias"></xsl:param>
683     <xsl:if test="$templateName='top'">
684         <xsl:call-template name="top"></xsl:call-template>
685     </xsl:if>
686     <xsl:if test="$templateName='calendar'">
687         <xsl:call-template name="calendar">
688                        <xsl:with-param name="fromLocaleAlias" select="$fromLocaleAlias"></xsl:with-param>
689                 </xsl:call-template>
690     </xsl:if>
691     <xsl:if test="$templateName='months_days_quarters_dayPeriods'">
692         <xsl:call-template name="months_days_quarters_dayPeriods">
693                          <xsl:with-param name="name" select="$name"></xsl:with-param>
694              <xsl:with-param name="width" select="$width"></xsl:with-param>
695                          <xsl:with-param name="ctx" select="$ctx"></xsl:with-param>
696             <xsl:with-param name="fromLocaleAlias" select="$fromLocaleAlias"></xsl:with-param>
697          </xsl:call-template>
698     </xsl:if>
699     <xsl:if test="$templateName='eras'">
700         <xsl:call-template name="eras">
701             <xsl:with-param name="name" select="$name"></xsl:with-param>
702             <xsl:with-param name="fromLocaleAlias" select="$fromLocaleAlias"></xsl:with-param>
703         </xsl:call-template>
704     </xsl:if>
705     <xsl:if test="$templateName='date_time_Formats'">
706         <xsl:call-template name="date_time_Formats">
707             <xsl:with-param name="width" select="$width"></xsl:with-param>
708             <xsl:with-param name="fromLocaleAlias" select="$fromLocaleAlias"></xsl:with-param>
709         </xsl:call-template>
710     </xsl:if>
711     <xsl:if test="$templateName='dateTimeFormats'">
712         <xsl:call-template name="dateTimeFormats">
713             <xsl:with-param name="width" select="$width"></xsl:with-param>
714             <xsl:with-param name="fromLocaleAlias" select="$fromLocaleAlias"></xsl:with-param>
715         </xsl:call-template>
716     </xsl:if>
717     <xsl:if test="$templateName='fields'">
718         <xsl:call-template name="fields">
719             <xsl:with-param name="width" select="$width"></xsl:with-param>
720             <xsl:with-param name="fromLocaleAlias" select="$fromLocaleAlias"></xsl:with-param>
721         </xsl:call-template>
722     </xsl:if>     
723 </xsl:template>
724   
725</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.