twitter_cldr_js 1.0.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +5 -0
- data/History.txt +11 -1
- data/README.md +103 -13
- data/Rakefile +1 -1
- data/lib/assets/javascripts/twitter_cldr/af.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/ar.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/be.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/bg.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/bn.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/ca.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/cs.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/cy.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/da.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/de.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/el.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/en.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/es.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/eu.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/fa.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/fi.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/fil.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/fr.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/ga.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/gl.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/he.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/hi.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/hu.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/id.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/it.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/ja.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/ko.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/lv.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/msa.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/nl.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/no.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/pl.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/pt.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/ro.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/ru.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/sk.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/sq.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/sr.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/sv.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/ta.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/th.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/tr.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/uk.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/ur.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/zh-cn.js +1815 -0
- data/lib/assets/javascripts/twitter_cldr/zh-tw.js +1815 -0
- data/lib/twitter_cldr/js/compiler.rb +12 -3
- data/lib/twitter_cldr/js/mustache/bundle.coffee +19 -1
- data/lib/twitter_cldr/js/mustache/calendars/additional_date_format_selector.coffee +85 -0
- data/lib/twitter_cldr/js/mustache/calendars/datetime.coffee +248 -226
- data/lib/twitter_cldr/js/mustache/calendars/timespan.coffee +19 -18
- data/lib/twitter_cldr/js/mustache/numbers/numbers.coffee +62 -19
- data/lib/twitter_cldr/js/mustache/plurals/rules.coffee +1 -1
- data/lib/twitter_cldr/js/mustache/shared/bidi.coffee +433 -0
- data/lib/twitter_cldr/js/mustache/shared/calendar.coffee +25 -0
- data/lib/twitter_cldr/js/mustache/shared/currencies.coffee +5 -11
- data/lib/twitter_cldr/js/mustache/shared/lists.coffee +40 -0
- data/lib/twitter_cldr/js/mustache/shared/prerender/bidi_classes.json +1 -0
- data/lib/twitter_cldr/js/mustache/utilities.coffee +87 -0
- data/lib/twitter_cldr/js/renderers.rb +23 -19
- data/lib/twitter_cldr/js/renderers/bundle.rb +8 -2
- data/lib/twitter_cldr/js/renderers/calendars/additional_date_format_selector_renderer.rb +18 -0
- data/lib/twitter_cldr/js/renderers/calendars/datetime_renderer.rb +13 -9
- data/lib/twitter_cldr/js/renderers/numbers/numbers_renderer.rb +17 -3
- data/lib/twitter_cldr/js/renderers/shared/bidi_renderer.rb +77 -0
- data/lib/twitter_cldr/js/renderers/shared/calendar_renderer.rb +20 -0
- data/lib/twitter_cldr/js/renderers/shared/currencies_renderer.rb +2 -2
- data/lib/twitter_cldr/js/renderers/shared/list_renderer.rb +22 -0
- data/lib/twitter_cldr/js/tasks/tasks.rake +9 -5
- data/lib/twitter_cldr/js/tasks/tasks.rb +6 -5
- data/lib/twitter_cldr/js/version.rb +1 -1
- data/spec/js/calendars/additional_date_format_selector.spec.js +126 -0
- data/spec/js/calendars/datetime.spec.js +29 -2
- data/spec/js/calendars/timespan.spec.js +45 -1
- data/spec/js/numbers/abbreviated/abbreviated_number.spec.js +47 -0
- data/spec/js/numbers/abbreviated/long_decimal.spec.js +57 -0
- data/spec/js/numbers/abbreviated/short_decimal.spec.js +57 -0
- data/spec/js/numbers/currency.spec.js +2 -2
- data/spec/js/numbers/decimal.spec.js +1 -1
- data/spec/js/numbers/helpers/fraction.spec.js +1 -1
- data/spec/js/numbers/helpers/integer.spec.js +1 -1
- data/spec/js/numbers/number.spec.js +1 -1
- data/spec/js/numbers/percent.spec.js +1 -1
- data/spec/js/plurals/plural_rules.spec.js +1 -1
- data/spec/js/shared/bidi.spec.js +105 -0
- data/spec/js/shared/calendar.spec.js +51 -0
- data/spec/js/shared/classpath_bidi_test.txt +217202 -0
- data/spec/js/shared/lists.spec.js +100 -0
- data/spec/js/utilities.spec.js +120 -0
- data/twitter_cldr_js.gemspec +1 -1
- metadata +68 -37
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_af.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_ar.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_ca.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_cs.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_da.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_de.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_el.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_en.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_es.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_eu.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_fa.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_fi.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_fil.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_fr.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_he.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_hi.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_hu.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_id.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_it.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_ja.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_ko.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_msa.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_nl.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_no.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_pl.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_pt.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_ru.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_sv.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_th.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_tr.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_uk.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_ur.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_zh-cn.js +0 -887
- data/lib/assets/javascripts/twitter_cldr/twitter_cldr_zh-tw.js +0 -887
@@ -0,0 +1,25 @@
|
|
1
|
+
# Copyright 2012 Twitter, Inc
|
2
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
3
|
+
|
4
|
+
class TwitterCldr.Calendar
|
5
|
+
@calendar: `{{{calendar}}}`
|
6
|
+
|
7
|
+
@months: (options = {}) ->
|
8
|
+
root = @get_root("months", options)
|
9
|
+
result = []
|
10
|
+
result[parseInt(key) - 1] = val for key, val of root
|
11
|
+
result
|
12
|
+
|
13
|
+
@weekdays: (options = {}) ->
|
14
|
+
@get_root("days", options)
|
15
|
+
|
16
|
+
@get_root: (key, options = {}) ->
|
17
|
+
root = @calendar[key]
|
18
|
+
names_form = options["names_form"] || "wide"
|
19
|
+
|
20
|
+
format = options.format || if root?["stand-alone"]?[names_form]?
|
21
|
+
"stand-alone"
|
22
|
+
else
|
23
|
+
"format"
|
24
|
+
|
25
|
+
root[format][names_form]
|
@@ -1,27 +1,21 @@
|
|
1
1
|
# Copyright 2012 Twitter, Inc
|
2
2
|
# http://www.apache.org/licenses/LICENSE-2.0
|
3
3
|
|
4
|
-
TwitterCldr.Currencies
|
4
|
+
class TwitterCldr.Currencies
|
5
5
|
@currencies = `{{{currencies}}}`
|
6
6
|
|
7
|
-
@countries: ->
|
8
|
-
@names ||= (country_name for country_name, data of @currencies)
|
9
|
-
|
10
7
|
@currency_codes: ->
|
11
|
-
@codes ||= (data.code for
|
12
|
-
|
13
|
-
@for_country: (country_name) ->
|
14
|
-
@currencies[country_name]
|
8
|
+
@codes ||= (data.code for _, data of @currencies)
|
15
9
|
|
16
10
|
@for_code: (currency_code) ->
|
17
|
-
|
11
|
+
result = null
|
18
12
|
for country_name, data of @currencies
|
19
13
|
if data.code == currency_code
|
20
|
-
|
14
|
+
result =
|
21
15
|
country: country_name
|
22
16
|
code: data.code
|
23
17
|
symbol: data.symbol
|
24
18
|
currency: data.currency
|
25
19
|
break
|
26
20
|
|
27
|
-
|
21
|
+
result
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# Copyright 2012 Twitter, Inc
|
2
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
3
|
+
|
4
|
+
class TwitterCldr.ListFormatter
|
5
|
+
constructor: (options = {}) ->
|
6
|
+
@formats = `{{{formats}}}`
|
7
|
+
|
8
|
+
format: (list) ->
|
9
|
+
if @formats[list.length.toString()]?
|
10
|
+
this.compose(@formats[list.length.toString()], list)
|
11
|
+
else
|
12
|
+
this.compose_list(list)
|
13
|
+
|
14
|
+
compose_list: (list) ->
|
15
|
+
result = this.compose(@formats.end || @formats.middle || "", [list[list.length - 2], list[list.length - 1]])
|
16
|
+
|
17
|
+
if list.length > 2
|
18
|
+
for i in [3..list.length]
|
19
|
+
format_key = if i == list.length then "start" else "middle"
|
20
|
+
format_key = "middle" unless @formats[format_key]?
|
21
|
+
result = this.compose(@formats[format_key] || "", [list[list.length - i], result])
|
22
|
+
|
23
|
+
result
|
24
|
+
|
25
|
+
compose: (format, elements) ->
|
26
|
+
elements = (element for element in elements when element isnt null)
|
27
|
+
|
28
|
+
if elements.length > 1
|
29
|
+
result = format.replace(/\{(\d+)\}/g, ->
|
30
|
+
RegExp.$1
|
31
|
+
)
|
32
|
+
|
33
|
+
if TwitterCldr.is_rtl
|
34
|
+
result = TwitterCldr.Bidi.from_string(result, {"direction": "RTL"}).reorder_visually().toString()
|
35
|
+
|
36
|
+
result.replace(/(\d+)/g, ->
|
37
|
+
elements[parseInt(RegExp.$1)]
|
38
|
+
)
|
39
|
+
else
|
40
|
+
elements[0] || ""
|
@@ -0,0 +1 @@
|
|
1
|
+
{"BN":{"8":[0],"13":[14],"5":[127,8298],"25":[134],"0":[173,65279,917505],"2":[8203],"4":[8288],"7":[119155],"95":[917536]},"S":{"0":[9,11,31]},"B":{"0":[10,13,133,8233],"2":[28]},"WS":{"0":[12,32,5760,6158,8232,8287,12288],"10":[8192]},"ON":{"1":[33,171,174,697,884,900,1542,1550,5787,6468,8189,8448,8456,8506,12342,12443,12829,13278,42622,64830,65120,65281,126704,127338],"4":[38,187,8512,65286,65529,127942],"5":[59,91,3059,8478,11493,65307,65339,127792],"3":[123,166,2038,3898,8451,8522,12289,13004,13175,43048,43124,128249,128320],"0":[161,180,215,247,894,903,1014,1418,1758,1769,3066,5120,6464,8125,8468,8485,8487,8489,8585,12336,12448,12539,13311,42611,42888,65021,65105,65108,65128,65131,65793,67871,119365,120539,120597,120655,120713,120771,128064],"2":[182,8127,8141,8157,8173,8316,8332,8470,12349,12924,42509,65124,65506],"13":[706,722,127153],"8":[741,65110],"16":[751,127968],"6":[3192,11513,65512,68409],"9":[5008,6128,11088,65040],"10":[6144,9280,65371,128581],"33":[6622,42752],"23":[8208,128336],"14":[8245,12977,127136,127169,127185],"25":[8261,9083,11904],"15":[8528,12880],"129":[8592],"289":[8724],"93":[9110],"38":[9216],"39":[9312],"449":[9450],"82":[9901],"254":[9985],"588":[10496],"59":[11776],"88":[11931],"213":[12032],"11":[12272,65936],"24":[12296],"35":[12736],"63":[19904],"54":[42128],"31":[65072],"74":[65856],"19":[69714,127872],"65":[119296],"86":[119552],"43":[126976],"99":[127024],"32":[127744],"69":[127799,128507,128640],"36":[127904],"62":[128000],"181":[128066],"61":[128256],"115":[128768]},"ET":{"2":[35,65283],"3":[162],"1":[176,1545,2546,43064,65129,65504,65509],"0":[1423,1642,2555,2801,3065,3647,6107,8494,8723,65119],"4":[8240],"25":[8352]},"ES":{"0":[43,45,8722,64297,65291,65293],"1":[8314,8330,65122]},"CS":{"0":[44,58,160,1548,8239,8260,65104,65106,65109,65292,65306],"1":[46,65294]},"EN":{"9":[48,1776,8320,65296],"1":[178],"0":[185,8304],"5":[8308],"19":[9352],"49":[120782],"10":[127232]},"L":{"25":[65,97,5761,6576,65313,65345,65549],"0":[170,181,186,750,902,908,1417,2363,2482,2510,2519,2563,2654,2691,2761,2768,2880,2903,2947,2972,3024,3031,3133,3199,3294,3406,3415,3517,3716,3722,3725,3749,3751,3773,3782,3894,3896,3967,3973,4145,4152,4295,4301,4696,4800,6070,6108,6314,6743,6753,6965,6971,7082,7143,7150,7379,7393,8025,8027,8029,8126,8206,8305,8319,8450,8455,8469,8484,8486,8488,9109,9900,11559,11565,43047,43597,43697,43712,43714,65792,65794,69632,69932,71340,71350,119970,119995,120134],"22":[192,3090,3218,6656,11648],"30":[216,8031,13280,66304,127248],"448":[248],"6":[699,1369,2425,2474,2548,2602,2730,2858,3449,3520,3648,3737,4688,4792,6100,8118,8134,8182,11680,11688,11696,11704,11712,11720,11728,11736,43808,43816,64256,69703,69819,119997,120086,120138],"1":[720,886,2434,2447,2503,2507,2524,2575,2610,2613,2616,2738,2763,2784,2818,2831,2866,2877,2887,2891,2908,2969,2974,2979,3006,3009,3160,3168,3202,3274,3285,3296,3313,3330,3424,3458,3634,3713,3719,3754,3762,4155,4227,5941,6087,6448,6755,7078,7154,7220,7413,8526,11506,11631,12334,43346,43444,43450,43486,43567,43571,43701,44006,65596,69815,71342,110592,119171,119966,119973,127568],"4":[736,2741,2869,3125,3253,3776,3976,6512,6973,8473,8517,12337,12344,43705,64275,120128],"3":[880,890,2365,2377,2486,2493,2649,2749,2962,3137,3389,3732,3757,3804,4186,4682,4698,4746,4786,4802,4882,5902,6435,7401,8144,8490,8508,11499,12540,42896,43015,44009,66336,74864,119977,120071,120123],"2":[904,2382,2527,2622,2674,2703,2911,2958,2984,3014,3018,3073,3086,3214,3270,3342,3398,3402,3535,3570,3745,5998,6441,6681,7146,8130,8178,12293,12445,43011,43584,65498],"19":[910,2404],"82":[931],"139":[1015],"157":[1162,66560],"37":[1329,7968,11520,43264],"38":[1377,119040],"54":[2307],"9":[2392,2662,3114,3174,3242,3302,3792,3902,6112,6160,6784,6800,8458,43000,43250,43600,44016,66720,69734,69872,70079,70096,71360],"7":[2437,2821,3077,3205,3261,3333,3544,4030,6078,7360,8016,43056,43588,43758,120077,120772],"21":[2451,2579,2707,2835],"11":[2534,2990,12992,43214,65536,119982],"5":[2565,2949,4039,4231,6451,6765,7406,7960,8008,8150,42738,42889,43777,43785,43793,65474,65482,65490],"8":[2693,3507,6979,7028,12321,65847,119146,127552],"10":[2790,6608,8495,42912,43471],"17":[2918,3461,5920,5952,119648],"12":[3046,3663,4046,4213,5888,5984,8160,8336,94099],"40":[3346,4704,6272,8544,12549,43520],"15":[3430,4193,4992],"23":[3482,3840,42624],"47":[3585,6916,7164,12832,43395,43648,119214],"26":[3866,6992,66352],"35":[3913,69891],"44":[4096,12784,65799,66000],"24":[4159,43020,43310,69840],"14":[4238,4808,7227,65599],"39":[4254,6470],"376":[4304],"32":[4752],"56":[4824,120540,120598,120656,120714],"66":[4888],"28":[4960,6400,66176,127462],"84":[5024,119808],"638":[5121],"80":[5792],"51":[6016,43072,70018],"87":[6176],"69":[6320],"43":[6528],"55":[6686,11568],"13":[6816,65616,66504,69942],"31":[7042,43612],"57":[7084,127280],"50":[7245,120488],"191":[7424],"277":[7680],"52":[8064],"68":[9014,93952],"77":[9372],"255":[10240],"46":[11264,11312,13008,42560,94032],"132":[11360],"85":[12353],"89":[12449],"93":[12593],"42":[12688,71296,127344,127504],"27":[12896,42512,120094],"49":[12927],"118":[13056],"98":[13179,74752],"6591":[13312],"22156":[19968],"316":[42192],"79":[42656],"101":[42786],"67":[43136],"29":[43359,66432,119180],"16":[43453,43739],"36":[43968,66463],"11206":[44032],"48":[55243,66208,69762],"8813":[55296],"105":[64112],"88":[65382],"18":[65576],"122":[65664],"53":[69634],"878":[73728],"1070":[77824],"568":[92160],"245":[118784],"61":[119081],"70":[119894],"64":[120005],"339":[120146],"42719":[131072],"4383":[173824],"541":[194560],"131071":[983040]},"NSM":{"111":[768],"6":[1155,1750,2385,3636,6071,6744,7394,65056,119173],"44":[1425],"0":[1471,1479,1648,1809,2362,2364,2381,2433,2492,2509,2620,2641,2677,2748,2765,2817,2876,2879,2893,2902,2946,3008,3021,3260,3405,3530,3542,3633,3761,3893,3895,3897,4038,4226,4237,4253,6086,6109,6313,6450,6742,6752,6754,6783,6964,6972,6978,7083,7142,7149,7405,7412,11647,42655,43010,43014,43019,43204,43443,43452,43587,43596,43696,43713,43766,44005,44008,44013,64286,66045,68159,69633,71339,71341,71351],"1":[1473,1476,1767,2402,2530,2561,2625,2631,2672,2689,2759,2786,2914,3157,3170,3276,3298,3426,3771,3864,3974,4153,4157,4184,4229,5970,6002,6068,6439,6679,7040,7080,7144,7222,12441,42736,43045,43569,43573,43703,43710,43756,68101,69760,69817,70016],"10":[1552,1958,3981,6089,43335],"20":[1611],"5":[1759,3764,3784,4146,43561,71344],"3":[1770,2070,2497,2881,3146,3393,4141,4209,6912,7074,7676,12330,42607,43446,68108,69811,94095,119210],"26":[1840,2276],"8":[2027,2075,7019,70070],"2":[2085,2137,2304,2635,3134,3142,3538,4190,4957,5906,5938,6155,6432,6457,7151,7376,11503,43392,43698,68097,68152,69888,119143,119362],"4":[2089,2753,3968,6966,69927],"7":[2369,3655,6757,7212,43302,69933,119163],"13":[3953],"35":[3993],"9":[6771,42612],"12":[7380],"38":[7616],"32":[8400],"31":[11744],"17":[43232],"15":[65024],"14":[69688],"239":[917760]},"R":{"0":[1470,1472,1475,1478,2042,2074,2084,2088,2142,8207,64285,64318,67592,67644,67903,68096],"26":[1488,68121,68440],"4":[1520,64312],"42":[1984],"1":[2036,64320,64323,67639,68030],"21":[2048,68416],"14":[2096],"24":[2112],"9":[64287,64326],"12":[64298],"5":[67584],"43":[67594],"22":[67647],"8":[67671,68176],"27":[67840],"25":[67872],"55":[67968],"3":[68112],"2":[68117],"7":[68160,68472],"31":[68192],"53":[68352],"72":[68608]},"AN":{"4":[1536],"9":[1632],"1":[1643],"0":[1757],"30":[69216]},"AL":{"0":[1544,1547,1549,1563,1969,2208,126500,126503,126521,126523,126530,126535,126537,126539,126548,126551,126553,126555,126557,126559,126564,126590],"44":[1566],"2":[1645,126541,126625],"100":[1649],"1":[1765,1774,1807,126497,126545,126561],"19":[1786],"29":[1810],"88":[1869],"10":[2210],"113":[64336],"362":[64467],"63":[64848],"53":[64914],"12":[65008],"4":[65136,126629],"134":[65142],"3":[126464,126516,126567,126580,126585],"26":[126469],"9":[126505,126592],"6":[126572],"16":[126603,126635]},"LRE":{"0":[8234]},"RLE":{"0":[8235]},"PDF":{"0":[8236]},"LRO":{"0":[8237]},"RLO":{"0":[8238]}}
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# Copyright 2012 Twitter, Inc
|
2
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
3
|
+
|
4
|
+
class TwitterCldr.Utilities
|
5
|
+
# This function was adapted from the Mozilla JS reference:
|
6
|
+
# https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/fromCharCode
|
7
|
+
@from_char_code: (code_point) ->
|
8
|
+
if code_point > 0xFFFF
|
9
|
+
code_point -= 0x10000
|
10
|
+
String.fromCharCode(0xD800 + (code_point >> 10), 0xDC00 + (code_point & 0x3FF))
|
11
|
+
else
|
12
|
+
String.fromCharCode(code_point)
|
13
|
+
|
14
|
+
# This function was adapted from the Mozilla JS reference:
|
15
|
+
# https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/charCodeAt
|
16
|
+
@char_code_at: (str, idx) ->
|
17
|
+
str += ''
|
18
|
+
end = str.length
|
19
|
+
surrogatePairs = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g
|
20
|
+
|
21
|
+
while surrogatePairs.exec(str) != null
|
22
|
+
li = surrogatePairs.lastIndex
|
23
|
+
if (li - 2 < idx) then idx += 1 else break
|
24
|
+
|
25
|
+
if (idx >= end) || (idx < 0)
|
26
|
+
return NaN
|
27
|
+
|
28
|
+
code = str.charCodeAt(idx)
|
29
|
+
|
30
|
+
if (0xD800 <= code) && (code <= 0xDBFF)
|
31
|
+
hi = code
|
32
|
+
low = str.charCodeAt(idx + 1) # Go one further, since one of the "characters" is part of a surrogate pair
|
33
|
+
return ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000
|
34
|
+
|
35
|
+
code
|
36
|
+
|
37
|
+
@unpack_string: (str) ->
|
38
|
+
result = []
|
39
|
+
|
40
|
+
for idx in [0...str.length]
|
41
|
+
code_point = @char_code_at(str, idx)
|
42
|
+
break unless code_point
|
43
|
+
result.push(code_point)
|
44
|
+
|
45
|
+
result
|
46
|
+
|
47
|
+
@pack_array: (char_arr) ->
|
48
|
+
(@from_char_code(cur_char) for cur_char in char_arr).join("")
|
49
|
+
|
50
|
+
@arraycopy: (orig, orig_index, dest, dest_index, length) ->
|
51
|
+
for elem, count in orig[orig_index...(orig_index + length)]
|
52
|
+
dest[dest_index + count] = elem
|
53
|
+
|
54
|
+
return
|
55
|
+
|
56
|
+
@max: (arr) ->
|
57
|
+
max = null
|
58
|
+
|
59
|
+
# make sure the first item chosen is not undefined, which can't be compared using >
|
60
|
+
for elem, start_index in arr
|
61
|
+
if elem?
|
62
|
+
max = elem
|
63
|
+
break
|
64
|
+
|
65
|
+
for i in [start_index..arr.length]
|
66
|
+
max = arr[i] if arr[i] > max
|
67
|
+
|
68
|
+
max
|
69
|
+
|
70
|
+
@min: (arr) ->
|
71
|
+
min = null
|
72
|
+
|
73
|
+
for elem, start_index in arr
|
74
|
+
if elem?
|
75
|
+
min = elem
|
76
|
+
break
|
77
|
+
|
78
|
+
for i in [start_index..arr.length]
|
79
|
+
min = arr[i] if arr[i] < min
|
80
|
+
|
81
|
+
min
|
82
|
+
|
83
|
+
@is_even: (num) ->
|
84
|
+
num % 2 == 0
|
85
|
+
|
86
|
+
@is_odd: (num) ->
|
87
|
+
num % 2 == 1
|
@@ -6,25 +6,29 @@
|
|
6
6
|
module TwitterCldr
|
7
7
|
module Js
|
8
8
|
module Renderers
|
9
|
-
autoload :Base,
|
10
|
-
autoload :Bundle,
|
11
|
-
|
12
|
-
module Calendars
|
13
|
-
autoload :DateTimeRenderer,
|
14
|
-
autoload :
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
autoload :
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
9
|
+
autoload :Base, 'twitter_cldr/js/renderers/base'
|
10
|
+
autoload :Bundle, 'twitter_cldr/js/renderers/bundle'
|
11
|
+
|
12
|
+
module Calendars
|
13
|
+
autoload :DateTimeRenderer, 'twitter_cldr/js/renderers/calendars/datetime_renderer'
|
14
|
+
autoload :AdditionalDateFormatSelectorRenderer, 'twitter_cldr/js/renderers/calendars/additional_date_format_selector_renderer'
|
15
|
+
autoload :TimespanRenderer, 'twitter_cldr/js/renderers/calendars/timespan_renderer'
|
16
|
+
end
|
17
|
+
|
18
|
+
module Numbers
|
19
|
+
autoload :NumbersRenderer, 'twitter_cldr/js/renderers/numbers/numbers_renderer'
|
20
|
+
end
|
21
|
+
|
22
|
+
module PluralRules
|
23
|
+
autoload :PluralRulesCompiler, 'twitter_cldr/js/renderers/plurals/rules/plural_rules_compiler'
|
24
|
+
autoload :PluralRulesRenderer, 'twitter_cldr/js/renderers/plurals/rules/plural_rules_renderer'
|
25
|
+
end
|
26
|
+
|
27
|
+
module Shared
|
28
|
+
autoload :CurrenciesRenderer, 'twitter_cldr/js/renderers/shared/currencies_renderer'
|
29
|
+
autoload :ListRenderer, 'twitter_cldr/js/renderers/shared/list_renderer'
|
30
|
+
autoload :BidiRenderer, 'twitter_cldr/js/renderers/shared/bidi_renderer'
|
31
|
+
autoload :CalendarRenderer, 'twitter_cldr/js/renderers/shared/calendar_renderer'
|
28
32
|
end
|
29
33
|
end
|
30
34
|
end
|
@@ -7,10 +7,16 @@ module TwitterCldr
|
|
7
7
|
module Js
|
8
8
|
module Renderers
|
9
9
|
class Bundle < Mustache
|
10
|
-
self.
|
10
|
+
self.template_path = File.expand_path(File.join(File.dirname(__FILE__), "..", "mustache"))
|
11
|
+
self.template_file = File.join(self.template_path, "bundle.coffee")
|
12
|
+
self.template_extension = "coffee"
|
11
13
|
|
12
14
|
def version
|
13
|
-
TwitterCldr::VERSION
|
15
|
+
TwitterCldr::Js::VERSION
|
16
|
+
end
|
17
|
+
|
18
|
+
def is_rtl?
|
19
|
+
TwitterCldr::Shared::Languages.is_rtl?(self[:locale])
|
14
20
|
end
|
15
21
|
end
|
16
22
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# Copyright 2012 Twitter, Inc
|
4
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
5
|
+
|
6
|
+
module TwitterCldr
|
7
|
+
module Js
|
8
|
+
module Renderers
|
9
|
+
module Calendars
|
10
|
+
|
11
|
+
class AdditionalDateFormatSelectorRenderer < TwitterCldr::Js::Renderers::Base
|
12
|
+
self.template_file = File.expand_path(File.join(File.dirname(__FILE__), "../..", "mustache/calendars/additional_date_format_selector.coffee"))
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -11,21 +11,25 @@ module TwitterCldr
|
|
11
11
|
self.template_file = File.expand_path(File.join(File.dirname(__FILE__), "../..", "mustache/calendars/datetime.coffee"))
|
12
12
|
|
13
13
|
def tokens
|
14
|
-
tokens = {}
|
15
14
|
{ :date_time => TwitterCldr::Tokenizers::DateTimeTokenizer,
|
16
15
|
:time => TwitterCldr::Tokenizers::TimeTokenizer,
|
17
|
-
:date => TwitterCldr::Tokenizers::DateTokenizer }.
|
16
|
+
:date => TwitterCldr::Tokenizers::DateTokenizer }.inject({}) do |tokens, (name, const)|
|
18
17
|
tokenizer = const.new(:locale => @locale)
|
19
18
|
tokens[name] = const::VALID_TYPES.inject({}) do |ret, type|
|
20
|
-
ret[type] =
|
19
|
+
ret[type] = if type == :additional
|
20
|
+
pattern_list = TwitterCldr.get_locale_resource(@locale, :calendars)[@locale][:calendars]
|
21
|
+
pattern_list = pattern_list[tokenizer.calendar_type][:additional_formats].keys
|
22
|
+
pattern_list.inject({}) do |additionals, pattern|
|
23
|
+
additionals[pattern] = tokenizer.tokens(:type => type, :format => pattern.to_s).map(&:to_hash)
|
24
|
+
additionals
|
25
|
+
end
|
26
|
+
else
|
27
|
+
tokenizer.tokens(:type => type).map(&:to_hash)
|
28
|
+
end
|
21
29
|
ret
|
22
30
|
end
|
23
|
-
|
24
|
-
|
25
|
-
end
|
26
|
-
|
27
|
-
def calendar
|
28
|
-
TwitterCldr::Tokenizers::DateTimeTokenizer.new(:locale => @locale).calendar.to_json
|
31
|
+
tokens
|
32
|
+
end.to_json
|
29
33
|
end
|
30
34
|
end
|
31
35
|
end
|
@@ -3,6 +3,8 @@
|
|
3
3
|
# Copyright 2012 Twitter, Inc
|
4
4
|
# http://www.apache.org/licenses/LICENSE-2.0
|
5
5
|
|
6
|
+
include TwitterCldr::Tokenizers
|
7
|
+
|
6
8
|
module TwitterCldr
|
7
9
|
module Js
|
8
10
|
module Renderers
|
@@ -11,11 +13,23 @@ module TwitterCldr
|
|
11
13
|
self.template_file = File.expand_path(File.join(File.dirname(__FILE__), "../..", "mustache/numbers/numbers.coffee"))
|
12
14
|
|
13
15
|
def tokens
|
14
|
-
TwitterCldr::Tokenizers::NumberTokenizer
|
15
|
-
|
16
|
+
tokenizer = TwitterCldr::Tokenizers::NumberTokenizer.new(:locale => @locale)
|
17
|
+
tokenizer.valid_types.inject({}) do |ret, type|
|
16
18
|
ret[type] = {}
|
17
19
|
[:positive, :negative].each do |sign|
|
18
|
-
ret[type][sign] =
|
20
|
+
ret[type][sign] = case type
|
21
|
+
when :short_decimal, :long_decimal
|
22
|
+
(NumberTokenizer::ABBREVIATED_MIN_POWER..NumberTokenizer::ABBREVIATED_MAX_POWER).inject({}) do |formats, i|
|
23
|
+
formats[10 ** i] = tokenizer.tokens(
|
24
|
+
:sign => sign,
|
25
|
+
:type => type,
|
26
|
+
:format => 10 ** i
|
27
|
+
)
|
28
|
+
formats
|
29
|
+
end
|
30
|
+
else
|
31
|
+
tokenizer.tokens(:sign => sign, :type => type)
|
32
|
+
end
|
19
33
|
end
|
20
34
|
ret
|
21
35
|
end.to_json
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# Copyright 2012 Twitter, Inc
|
4
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
5
|
+
|
6
|
+
module TwitterCldr
|
7
|
+
module Js
|
8
|
+
module Renderers
|
9
|
+
module Shared
|
10
|
+
|
11
|
+
class BidiRenderer < TwitterCldr::Js::Renderers::Base
|
12
|
+
self.template_file = File.expand_path(File.join(File.dirname(__FILE__), "../..", "mustache/shared/bidi.coffee"))
|
13
|
+
|
14
|
+
def initialize(options = {})
|
15
|
+
super
|
16
|
+
@prerender = options[:prerender]
|
17
|
+
end
|
18
|
+
|
19
|
+
def bidi_classes
|
20
|
+
@@bidi_classes ||= if @prerender
|
21
|
+
File.read(File.expand_path(File.join(File.dirname(__FILE__), "../..", "mustache/shared/prerender/bidi_classes.json")))
|
22
|
+
else
|
23
|
+
categories = rangify_code_points(code_points_by_category)
|
24
|
+
|
25
|
+
categories.inject({}) do |ret, (bidi_class, ranges)|
|
26
|
+
ret[bidi_class] ||= {}
|
27
|
+
ranges.each do |range|
|
28
|
+
diff = range.first == range.last ? 0 : range.last - range.first
|
29
|
+
ret[bidi_class][diff] ||= []
|
30
|
+
ret[bidi_class][diff] << range.first
|
31
|
+
end
|
32
|
+
ret
|
33
|
+
end.to_json
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
protected
|
38
|
+
|
39
|
+
def code_points_by_category
|
40
|
+
(0..0x10FFFF).inject({}) do |ret, i|
|
41
|
+
cp = TwitterCldr::Shared::CodePoint.find(i)
|
42
|
+
if cp
|
43
|
+
ret[cp.bidi_class] ||= []
|
44
|
+
ret[cp.bidi_class] << i
|
45
|
+
end
|
46
|
+
ret
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def rangify_code_points(categories)
|
51
|
+
categories.inject({}) do |ret, (bidi_class, cp_list)|
|
52
|
+
ret[bidi_class] = find_ranges(cp_list)
|
53
|
+
ret
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def find_ranges(list)
|
58
|
+
ranges = []
|
59
|
+
start_idx = 0
|
60
|
+
list.each_with_index do |item, idx|
|
61
|
+
if idx > 0
|
62
|
+
if list[idx - 1] < (item - 1)
|
63
|
+
ranges << (list[start_idx]..list[idx - 1])
|
64
|
+
start_idx = idx
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
ranges << (list[start_idx]..list[list.size - 1]) unless list.empty?
|
69
|
+
ranges
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# Copyright 2012 Twitter, Inc
|
4
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
5
|
+
|
6
|
+
module TwitterCldr
|
7
|
+
module Js
|
8
|
+
module Renderers
|
9
|
+
module Shared
|
10
|
+
class CalendarRenderer < TwitterCldr::Js::Renderers::Base
|
11
|
+
self.template_file = File.expand_path(File.join(File.dirname(__FILE__), "../..", "mustache/shared/calendar.coffee"))
|
12
|
+
|
13
|
+
def calendar
|
14
|
+
TwitterCldr::Tokenizers::DateTimeTokenizer.new(:locale => @locale).calendar.to_json
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|