source: Dev/branches/rest-dojo-ui/client/util/buildscripts/cldr/calendar.xsl @ 256

Last change on this file since 256 was 256, checked in by hendrikvanantwerpen, 13 years ago

Reworked project structure based on REST interaction and Dojo library. As
soon as this is stable, the old jQueryUI branch can be removed (it's
kept for reference).

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