twitter_cldr 1.6.2 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (733) hide show
  1. data/Gemfile +3 -1
  2. data/History.txt +8 -0
  3. data/README.md +64 -14
  4. data/Rakefile +57 -7
  5. data/js/lib/compiler.rb +3 -1
  6. data/js/lib/mustache/bundle.coffee +5 -5
  7. data/js/lib/mustache/numbers/numbers.coffee +179 -0
  8. data/js/lib/mustache/shared/currencies.coffee +27 -0
  9. data/js/lib/renderers/numbers/numbers_renderer.rb +31 -0
  10. data/js/lib/renderers/plurals/rules/plural_rules_compiler.rb +5 -1
  11. data/js/lib/renderers/shared/currencies_renderer.rb +23 -0
  12. data/js/lib/twitter_cldr_js.rb +2 -0
  13. data/js/spec/js/calendars/timespan_spec.js +2 -2
  14. data/js/spec/js/numbers/currency_spec.js +34 -0
  15. data/js/spec/js/numbers/decimal_spec.js +24 -0
  16. data/js/spec/js/numbers/helpers/fraction_spec.js +23 -0
  17. data/js/spec/js/numbers/helpers/integer_spec.js +100 -0
  18. data/js/spec/js/numbers/number_spec.js +70 -0
  19. data/js/spec/js/numbers/percent_spec.js +22 -0
  20. data/js/spec/rb/renderers/plurals/plural_rules_compiler_spec.rb +4 -0
  21. data/lib/twitter_cldr/collation/collator.rb +14 -20
  22. data/lib/twitter_cldr/collation/trie_builder.rb +3 -3
  23. data/lib/twitter_cldr/formatters/numbers/decimal_formatter.rb +0 -6
  24. data/lib/twitter_cldr/formatters/numbers/helpers/base.rb +1 -1
  25. data/lib/twitter_cldr/formatters/numbers/number_formatter.rb +6 -2
  26. data/lib/twitter_cldr/normalization/base.rb +7 -1
  27. data/lib/twitter_cldr/normalization/nfd.rb +2 -6
  28. data/lib/twitter_cldr/normalization/nfkc.rb +4 -10
  29. data/lib/twitter_cldr/normalization/nfkd.rb +12 -37
  30. data/lib/twitter_cldr/resources.rb +10 -3
  31. data/lib/twitter_cldr/resources/canonical_compositions_updater.rb +51 -0
  32. data/lib/twitter_cldr/resources/composition_exclusions_importer.rb +62 -0
  33. data/lib/twitter_cldr/resources/custom_locales_resources_importer.rb +80 -0
  34. data/lib/twitter_cldr/resources/download.rb +41 -0
  35. data/lib/twitter_cldr/resources/loader.rb +1 -1
  36. data/lib/twitter_cldr/resources/locales_resources_importer.rb +105 -0
  37. data/lib/twitter_cldr/resources/phone_codes_importer.rb +48 -0
  38. data/lib/twitter_cldr/resources/postal_codes_importer.rb +44 -0
  39. data/lib/twitter_cldr/resources/tailoring_importer.rb +18 -16
  40. data/lib/twitter_cldr/resources/unicode_data_importer.rb +90 -0
  41. data/lib/twitter_cldr/shared.rb +3 -1
  42. data/lib/twitter_cldr/shared/code_point.rb +47 -36
  43. data/lib/twitter_cldr/shared/currencies.rb +12 -15
  44. data/lib/twitter_cldr/shared/phone_codes.rb +30 -0
  45. data/lib/twitter_cldr/shared/postal_codes.rb +35 -0
  46. data/lib/twitter_cldr/tokenizers/calendars/timespan_tokenizer.rb +11 -3
  47. data/lib/twitter_cldr/tokenizers/numbers/number_tokenizer.rb +8 -1
  48. data/lib/twitter_cldr/utils/code_points.rb +2 -2
  49. data/lib/twitter_cldr/version.rb +1 -1
  50. data/resources/collation/tailoring/af.yml +3 -3
  51. data/resources/collation/tailoring/ar.yml +3 -3
  52. data/resources/collation/tailoring/ca.yml +3 -3
  53. data/resources/collation/tailoring/cs.yml +3 -3
  54. data/resources/collation/tailoring/da.yml +4 -4
  55. data/resources/collation/tailoring/de.yml +3 -3
  56. data/resources/collation/tailoring/el.yml +3 -3
  57. data/resources/collation/tailoring/en.yml +3 -3
  58. data/resources/collation/tailoring/es.yml +3 -3
  59. data/resources/collation/tailoring/eu.yml +3 -3
  60. data/resources/collation/tailoring/fa.yml +3 -3
  61. data/resources/collation/tailoring/fi.yml +3 -3
  62. data/resources/collation/tailoring/fil.yml +3 -3
  63. data/resources/collation/tailoring/fr.yml +3 -3
  64. data/resources/collation/tailoring/he.yml +3 -3
  65. data/resources/collation/tailoring/hi.yml +3 -3
  66. data/resources/collation/tailoring/hu.yml +3 -3
  67. data/resources/collation/tailoring/id.yml +3 -3
  68. data/resources/collation/tailoring/it.yml +3 -3
  69. data/resources/collation/tailoring/ja.yml +3 -3
  70. data/resources/collation/tailoring/ko.yml +3 -3
  71. data/resources/collation/tailoring/ms.yml +3 -3
  72. data/resources/collation/tailoring/nb.yml +3 -3
  73. data/resources/collation/tailoring/nl.yml +3 -3
  74. data/resources/collation/tailoring/pl.yml +3 -3
  75. data/resources/collation/tailoring/pt.yml +3 -3
  76. data/resources/collation/tailoring/ru.yml +3 -3
  77. data/resources/collation/tailoring/sv.yml +3 -3
  78. data/resources/collation/tailoring/th.yml +3 -3
  79. data/resources/collation/tailoring/tr.yml +3 -3
  80. data/resources/collation/tailoring/uk.yml +3 -3
  81. data/resources/collation/tailoring/ur.yml +3 -3
  82. data/resources/collation/tailoring/zh-Hant.yml +3 -3
  83. data/resources/collation/tailoring/zh.yml +3 -3
  84. data/resources/custom/locales/af/units.yml +19 -19
  85. data/resources/custom/locales/ar/units.yml +35 -35
  86. data/resources/custom/locales/ca/units.yml +19 -19
  87. data/resources/custom/locales/cs/units.yml +23 -23
  88. data/resources/custom/locales/da/units.yml +19 -19
  89. data/resources/custom/locales/de/units.yml +19 -19
  90. data/resources/custom/locales/el/units.yml +19 -19
  91. data/resources/custom/locales/en/units.yml +10 -10
  92. data/resources/custom/locales/es/units.yml +19 -19
  93. data/resources/custom/locales/eu/units.yml +19 -19
  94. data/resources/custom/locales/fa/units.yml +15 -15
  95. data/resources/custom/locales/fi/units.yml +19 -19
  96. data/resources/custom/locales/fil/units.yml +19 -19
  97. data/resources/custom/locales/fr/units.yml +19 -19
  98. data/resources/custom/locales/he/units.yml +19 -19
  99. data/resources/custom/locales/hi/units.yml +19 -19
  100. data/resources/custom/locales/hu/units.yml +15 -15
  101. data/resources/custom/locales/id/units.yml +15 -15
  102. data/resources/custom/locales/it/units.yml +19 -19
  103. data/resources/custom/locales/ja/units.yml +15 -15
  104. data/resources/custom/locales/ko/units.yml +15 -15
  105. data/resources/custom/locales/ms/units.yml +15 -15
  106. data/resources/custom/locales/nb/units.yml +19 -19
  107. data/resources/custom/locales/nl/units.yml +19 -19
  108. data/resources/custom/locales/pl/units.yml +27 -23
  109. data/resources/custom/locales/pt/units.yml +19 -19
  110. data/resources/custom/locales/ru/units.yml +27 -27
  111. data/resources/custom/locales/sv/units.yml +19 -19
  112. data/resources/custom/locales/th/units.yml +15 -15
  113. data/resources/custom/locales/tr/units.yml +15 -15
  114. data/resources/custom/locales/uk/units.yml +27 -27
  115. data/resources/custom/locales/ur/units.yml +19 -19
  116. data/resources/custom/locales/zh-Hant/units.yml +15 -15
  117. data/resources/custom/locales/zh/units.yml +15 -15
  118. data/resources/locales/af/calendars.yml +114 -113
  119. data/resources/locales/af/languages.yml +174 -173
  120. data/resources/locales/af/numbers.yml +43 -42
  121. data/resources/locales/af/plurals.yml +3 -2
  122. data/resources/locales/af/units.yml +136 -135
  123. data/resources/locales/ar/calendars.yml +121 -120
  124. data/resources/locales/ar/languages.yml +501 -500
  125. data/resources/locales/ar/numbers.yml +36 -35
  126. data/resources/locales/ar/plurals.yml +9 -1
  127. data/resources/locales/ar/units.yml +220 -219
  128. data/resources/locales/ca/calendars.yml +157 -156
  129. data/resources/locales/ca/languages.yml +511 -510
  130. data/resources/locales/ca/numbers.yml +44 -43
  131. data/resources/locales/ca/plurals.yml +3 -2
  132. data/resources/locales/ca/units.yml +136 -135
  133. data/resources/locales/cs/calendars.yml +153 -152
  134. data/resources/locales/cs/languages.yml +472 -471
  135. data/resources/locales/cs/numbers.yml +45 -44
  136. data/resources/locales/cs/plurals.yml +3 -2
  137. data/resources/locales/cs/units.yml +164 -163
  138. data/resources/locales/da/calendars.yml +117 -116
  139. data/resources/locales/da/languages.yml +515 -514
  140. data/resources/locales/da/numbers.yml +44 -43
  141. data/resources/locales/da/plurals.yml +3 -1
  142. data/resources/locales/da/units.yml +122 -121
  143. data/resources/locales/de/calendars.yml +136 -135
  144. data/resources/locales/de/languages.yml +514 -513
  145. data/resources/locales/de/numbers.yml +44 -43
  146. data/resources/locales/de/plurals.yml +3 -1
  147. data/resources/locales/de/units.yml +136 -135
  148. data/resources/locales/el/calendars.yml +138 -137
  149. data/resources/locales/el/languages.yml +520 -519
  150. data/resources/locales/el/numbers.yml +43 -42
  151. data/resources/locales/el/plurals.yml +3 -2
  152. data/resources/locales/el/units.yml +143 -142
  153. data/resources/locales/en/calendars.yml +117 -116
  154. data/resources/locales/en/languages.yml +559 -558
  155. data/resources/locales/en/numbers.yml +32 -31
  156. data/resources/locales/en/plurals.yml +3 -1
  157. data/resources/locales/en/units.yml +108 -107
  158. data/resources/locales/es/calendars.yml +118 -117
  159. data/resources/locales/es/languages.yml +511 -510
  160. data/resources/locales/es/numbers.yml +42 -41
  161. data/resources/locales/es/plurals.yml +3 -1
  162. data/resources/locales/es/units.yml +136 -135
  163. data/resources/locales/eu/calendars.yml +124 -123
  164. data/resources/locales/eu/languages.yml +162 -161
  165. data/resources/locales/eu/numbers.yml +44 -43
  166. data/resources/locales/eu/plurals.yml +3 -2
  167. data/resources/locales/eu/units.yml +129 -128
  168. data/resources/locales/fa/calendars.yml +137 -136
  169. data/resources/locales/fa/languages.yml +489 -488
  170. data/resources/locales/fa/numbers.yml +31 -30
  171. data/resources/locales/fa/plurals.yml +3 -1
  172. data/resources/locales/fa/units.yml +122 -121
  173. data/resources/locales/fi/calendars.yml +153 -152
  174. data/resources/locales/fi/languages.yml +520 -519
  175. data/resources/locales/fi/numbers.yml +44 -43
  176. data/resources/locales/fi/plurals.yml +3 -1
  177. data/resources/locales/fi/units.yml +136 -135
  178. data/resources/locales/fil/calendars.yml +123 -122
  179. data/resources/locales/fil/languages.yml +169 -168
  180. data/resources/locales/fil/numbers.yml +32 -31
  181. data/resources/locales/fil/plurals.yml +3 -1
  182. data/resources/locales/fil/units.yml +122 -121
  183. data/resources/locales/fr/calendars.yml +144 -143
  184. data/resources/locales/fr/languages.yml +512 -511
  185. data/resources/locales/fr/numbers.yml +44 -43
  186. data/resources/locales/fr/plurals.yml +3 -1
  187. data/resources/locales/fr/units.yml +136 -135
  188. data/resources/locales/he/calendars.yml +120 -119
  189. data/resources/locales/he/languages.yml +282 -281
  190. data/resources/locales/he/numbers.yml +32 -31
  191. data/resources/locales/he/plurals.yml +3 -1
  192. data/resources/locales/he/units.yml +122 -121
  193. data/resources/locales/hi/calendars.yml +112 -111
  194. data/resources/locales/hi/languages.yml +511 -510
  195. data/resources/locales/hi/numbers.yml +32 -31
  196. data/resources/locales/hi/plurals.yml +3 -1
  197. data/resources/locales/hi/units.yml +122 -121
  198. data/resources/locales/hu/calendars.yml +142 -141
  199. data/resources/locales/hu/languages.yml +520 -519
  200. data/resources/locales/hu/numbers.yml +43 -42
  201. data/resources/locales/hu/plurals.yml +3 -1
  202. data/resources/locales/hu/units.yml +108 -107
  203. data/resources/locales/id/calendars.yml +117 -116
  204. data/resources/locales/id/languages.yml +514 -513
  205. data/resources/locales/id/numbers.yml +43 -42
  206. data/resources/locales/id/plurals.yml +3 -1
  207. data/resources/locales/id/units.yml +108 -107
  208. data/resources/locales/it/calendars.yml +123 -122
  209. data/resources/locales/it/languages.yml +504 -503
  210. data/resources/locales/it/numbers.yml +44 -43
  211. data/resources/locales/it/plurals.yml +3 -1
  212. data/resources/locales/it/units.yml +122 -121
  213. data/resources/locales/ja/calendars.yml +109 -108
  214. data/resources/locales/ja/languages.yml +516 -515
  215. data/resources/locales/ja/numbers.yml +35 -34
  216. data/resources/locales/ja/plurals.yml +3 -1
  217. data/resources/locales/ja/units.yml +108 -107
  218. data/resources/locales/ko/calendars.yml +112 -111
  219. data/resources/locales/ko/languages.yml +509 -508
  220. data/resources/locales/ko/numbers.yml +32 -31
  221. data/resources/locales/ko/plurals.yml +3 -1
  222. data/resources/locales/ko/units.yml +108 -107
  223. data/resources/locales/ms/calendars.yml +134 -133
  224. data/resources/locales/ms/languages.yml +158 -157
  225. data/resources/locales/ms/numbers.yml +31 -30
  226. data/resources/locales/ms/plurals.yml +3 -1
  227. data/resources/locales/ms/units.yml +136 -135
  228. data/resources/locales/nb/calendars.yml +143 -142
  229. data/resources/locales/nb/languages.yml +530 -529
  230. data/resources/locales/nb/numbers.yml +44 -43
  231. data/resources/locales/nb/plurals.yml +3 -2
  232. data/resources/locales/nb/units.yml +130 -129
  233. data/resources/locales/nl/calendars.yml +124 -123
  234. data/resources/locales/nl/languages.yml +516 -515
  235. data/resources/locales/nl/numbers.yml +44 -43
  236. data/resources/locales/nl/plurals.yml +3 -1
  237. data/resources/locales/nl/units.yml +122 -121
  238. data/resources/locales/pl/calendars.yml +148 -147
  239. data/resources/locales/pl/languages.yml +505 -504
  240. data/resources/locales/pl/numbers.yml +46 -45
  241. data/resources/locales/pl/plurals.yml +5 -1
  242. data/resources/locales/pl/units.yml +205 -204
  243. data/resources/locales/pt/calendars.yml +131 -130
  244. data/resources/locales/pt/languages.yml +517 -516
  245. data/resources/locales/pt/numbers.yml +44 -43
  246. data/resources/locales/pt/plurals.yml +3 -1
  247. data/resources/locales/pt/units.yml +136 -135
  248. data/resources/locales/ru/calendars.yml +143 -142
  249. data/resources/locales/ru/languages.yml +511 -510
  250. data/resources/locales/ru/numbers.yml +43 -42
  251. data/resources/locales/ru/plurals.yml +5 -1
  252. data/resources/locales/ru/units.yml +192 -191
  253. data/resources/locales/sv/calendars.yml +151 -150
  254. data/resources/locales/sv/languages.yml +531 -530
  255. data/resources/locales/sv/numbers.yml +44 -43
  256. data/resources/locales/sv/plurals.yml +3 -1
  257. data/resources/locales/sv/units.yml +136 -135
  258. data/resources/locales/th/calendars.yml +125 -124
  259. data/resources/locales/th/languages.yml +510 -509
  260. data/resources/locales/th/numbers.yml +41 -40
  261. data/resources/locales/th/plurals.yml +3 -1
  262. data/resources/locales/th/units.yml +108 -107
  263. data/resources/locales/tr/calendars.yml +139 -138
  264. data/resources/locales/tr/languages.yml +511 -510
  265. data/resources/locales/tr/numbers.yml +43 -42
  266. data/resources/locales/tr/plurals.yml +3 -1
  267. data/resources/locales/tr/units.yml +108 -107
  268. data/resources/locales/uk/calendars.yml +131 -130
  269. data/resources/locales/uk/languages.yml +520 -519
  270. data/resources/locales/uk/numbers.yml +46 -45
  271. data/resources/locales/uk/plurals.yml +5 -2
  272. data/resources/locales/uk/units.yml +192 -191
  273. data/resources/locales/ur/calendars.yml +111 -110
  274. data/resources/locales/ur/languages.yml +164 -163
  275. data/resources/locales/ur/numbers.yml +32 -31
  276. data/resources/locales/ur/plurals.yml +3 -1
  277. data/resources/locales/ur/units.yml +136 -135
  278. data/resources/locales/zh-Hant/calendars.yml +116 -115
  279. data/resources/locales/zh-Hant/languages.yml +510 -509
  280. data/resources/locales/zh-Hant/numbers.yml +35 -34
  281. data/resources/locales/zh-Hant/plurals.yml +3 -2
  282. data/resources/locales/zh-Hant/units.yml +108 -107
  283. data/resources/locales/zh/calendars.yml +138 -137
  284. data/resources/locales/zh/languages.yml +506 -505
  285. data/resources/locales/zh/numbers.yml +35 -34
  286. data/resources/locales/zh/plurals.yml +3 -1
  287. data/resources/locales/zh/units.yml +80 -79
  288. data/resources/shared/currencies.yml +448 -451
  289. data/resources/shared/phone_codes.yml +241 -0
  290. data/resources/shared/postal_codes.yml +160 -0
  291. data/resources/unicode_data/blocks.yml +221 -221
  292. data/resources/unicode_data/blocks/aegean_numbers.yml +913 -0
  293. data/resources/unicode_data/blocks/alchemical_symbols.yml +1857 -0
  294. data/resources/unicode_data/blocks/alphabetic_presentation_forms.yml +929 -0
  295. data/resources/unicode_data/blocks/ancient_greek_musical_notation.yml +1121 -0
  296. data/resources/unicode_data/blocks/ancient_greek_numbers.yml +1201 -0
  297. data/resources/unicode_data/blocks/ancient_symbols.yml +193 -0
  298. data/resources/unicode_data/blocks/arabic.yml +4049 -0
  299. data/resources/unicode_data/blocks/arabic_extended_a.yml +625 -0
  300. data/resources/unicode_data/blocks/arabic_mathematical_alphabetic_symbols.yml +2289 -0
  301. data/resources/unicode_data/{arabic_presentation_forms_a.yml → blocks/arabic_presentation_forms_a.yml} +7369 -7368
  302. data/resources/unicode_data/{arabic_presentation_forms_b.yml → blocks/arabic_presentation_forms_b.yml} +1414 -1414
  303. data/resources/unicode_data/blocks/arabic_supplement.yml +769 -0
  304. data/resources/unicode_data/blocks/armenian.yml +1393 -0
  305. data/resources/unicode_data/blocks/arrows.yml +1793 -0
  306. data/resources/unicode_data/blocks/avestan.yml +977 -0
  307. data/resources/unicode_data/blocks/balinese.yml +1937 -0
  308. data/resources/unicode_data/blocks/bamum.yml +1409 -0
  309. data/resources/unicode_data/blocks/bamum_supplement.yml +9105 -0
  310. data/resources/unicode_data/blocks/basic_latin.yml +2049 -0
  311. data/resources/unicode_data/blocks/batak.yml +897 -0
  312. data/resources/unicode_data/blocks/bengali.yml +1473 -0
  313. data/resources/unicode_data/blocks/block_elements.yml +513 -0
  314. data/resources/unicode_data/blocks/bopomofo.yml +657 -0
  315. data/resources/unicode_data/blocks/bopomofo_extended.yml +433 -0
  316. data/resources/unicode_data/{box_drawing.yml → blocks/box_drawing.yml} +1537 -1537
  317. data/resources/unicode_data/blocks/brahmi.yml +1729 -0
  318. data/resources/unicode_data/blocks/braille_patterns.yml +4097 -0
  319. data/resources/unicode_data/blocks/buginese.yml +481 -0
  320. data/resources/unicode_data/blocks/buhid.yml +321 -0
  321. data/resources/unicode_data/blocks/byzantine_musical_symbols.yml +3937 -0
  322. data/resources/unicode_data/blocks/carian.yml +785 -0
  323. data/resources/unicode_data/blocks/chakma.yml +1073 -0
  324. data/resources/unicode_data/blocks/cham.yml +1329 -0
  325. data/resources/unicode_data/blocks/cherokee.yml +1361 -0
  326. data/resources/unicode_data/{cjk_compatibility.yml → blocks/cjk_compatibility.yml} +2706 -2706
  327. data/resources/unicode_data/{cjk_compatibility_forms.yml → blocks/cjk_compatibility_forms.yml} +363 -363
  328. data/resources/unicode_data/blocks/cjk_compatibility_ideographs.yml +7553 -0
  329. data/resources/unicode_data/blocks/cjk_compatibility_ideographs_supplement.yml +8673 -0
  330. data/resources/unicode_data/blocks/cjk_radicals_supplement.yml +1841 -0
  331. data/resources/unicode_data/blocks/cjk_strokes.yml +577 -0
  332. data/resources/unicode_data/blocks/cjk_symbols_and_punctuation.yml +1025 -0
  333. data/resources/unicode_data/blocks/cjk_unified_ideographs.yml +33 -0
  334. data/resources/unicode_data/blocks/cjk_unified_ideographs_extension_a.yml +33 -0
  335. data/resources/unicode_data/blocks/cjk_unified_ideographs_extension_b.yml +33 -0
  336. data/resources/unicode_data/blocks/cjk_unified_ideographs_extension_c.yml +33 -0
  337. data/resources/unicode_data/blocks/cjk_unified_ideographs_extension_d.yml +33 -0
  338. data/resources/unicode_data/blocks/combining_diacritical_marks.yml +1793 -0
  339. data/resources/unicode_data/{combining_diacritical_marks_for_symbols.yml → blocks/combining_diacritical_marks_for_symbols.yml} +409 -409
  340. data/resources/unicode_data/blocks/combining_diacritical_marks_supplement.yml +689 -0
  341. data/resources/unicode_data/blocks/combining_half_marks.yml +113 -0
  342. data/resources/unicode_data/blocks/common_indic_number_forms.yml +161 -0
  343. data/resources/unicode_data/blocks/control_pictures.yml +625 -0
  344. data/resources/unicode_data/blocks/coptic.yml +1969 -0
  345. data/resources/unicode_data/blocks/counting_rod_numerals.yml +289 -0
  346. data/resources/unicode_data/blocks/cuneiform.yml +14065 -0
  347. data/resources/unicode_data/blocks/cuneiform_numbers_and_punctuation.yml +1649 -0
  348. data/resources/unicode_data/blocks/currency_symbols.yml +417 -0
  349. data/resources/unicode_data/blocks/cypriot_syllabary.yml +881 -0
  350. data/resources/unicode_data/{cyrillic.yml → blocks/cyrillic.yml} +2765 -2765
  351. data/resources/unicode_data/blocks/cyrillic_extended_a.yml +513 -0
  352. data/resources/unicode_data/blocks/cyrillic_extended_b.yml +1425 -0
  353. data/resources/unicode_data/blocks/cyrillic_supplement.yml +641 -0
  354. data/resources/unicode_data/blocks/deseret.yml +1281 -0
  355. data/resources/unicode_data/blocks/devanagari.yml +2033 -0
  356. data/resources/unicode_data/blocks/devanagari_extended.yml +449 -0
  357. data/resources/unicode_data/blocks/dingbats.yml +3057 -0
  358. data/resources/unicode_data/blocks/domino_tiles.yml +1601 -0
  359. data/resources/unicode_data/blocks/egyptian_hieroglyphs.yml +17137 -0
  360. data/resources/unicode_data/blocks/emoticons.yml +1217 -0
  361. data/resources/unicode_data/blocks/enclosed_alphanumeric_supplement.yml +2737 -0
  362. data/resources/unicode_data/blocks/enclosed_alphanumerics.yml +2561 -0
  363. data/resources/unicode_data/{enclosed_cjk_letters_and_months.yml → blocks/enclosed_cjk_letters_and_months.yml} +3067 -3067
  364. data/resources/unicode_data/{enclosed_ideographic_supplement.yml → blocks/enclosed_ideographic_supplement.yml} +685 -685
  365. data/resources/unicode_data/blocks/ethiopic.yml +5729 -0
  366. data/resources/unicode_data/blocks/ethiopic_extended.yml +1265 -0
  367. data/resources/unicode_data/blocks/ethiopic_extended_a.yml +513 -0
  368. data/resources/unicode_data/blocks/ethiopic_supplement.yml +417 -0
  369. data/resources/unicode_data/blocks/general_punctuation.yml +1713 -0
  370. data/resources/unicode_data/blocks/geometric_shapes.yml +1537 -0
  371. data/resources/unicode_data/blocks/georgian.yml +1409 -0
  372. data/resources/unicode_data/blocks/georgian_supplement.yml +641 -0
  373. data/resources/unicode_data/blocks/glagolitic.yml +1505 -0
  374. data/resources/unicode_data/blocks/gothic.yml +433 -0
  375. data/resources/unicode_data/{greek_and_coptic.yml → blocks/greek_and_coptic.yml} +1360 -1360
  376. data/resources/unicode_data/{greek_extended.yml → blocks/greek_extended.yml} +2330 -2330
  377. data/resources/unicode_data/blocks/gujarati.yml +1345 -0
  378. data/resources/unicode_data/blocks/gurmukhi.yml +1265 -0
  379. data/resources/unicode_data/{halfwidth_and_fullwidth_forms.yml → blocks/halfwidth_and_fullwidth_forms.yml} +2517 -2517
  380. data/resources/unicode_data/{hangul_compatibility_jamo.yml → blocks/hangul_compatibility_jamo.yml} +993 -993
  381. data/resources/unicode_data/blocks/hangul_jamo.yml +4097 -0
  382. data/resources/unicode_data/blocks/hangul_jamo_extended_a.yml +465 -0
  383. data/resources/unicode_data/blocks/hangul_jamo_extended_b.yml +1153 -0
  384. data/resources/unicode_data/blocks/hangul_syllables.yml +33 -0
  385. data/resources/unicode_data/blocks/hanunoo.yml +369 -0
  386. data/resources/unicode_data/blocks/hebrew.yml +1393 -0
  387. data/resources/unicode_data/blocks/high_private_use_surrogates.yml +33 -0
  388. data/resources/unicode_data/blocks/high_surrogates.yml +33 -0
  389. data/resources/unicode_data/blocks/hiragana.yml +1489 -0
  390. data/resources/unicode_data/blocks/ideographic_description_characters.yml +193 -0
  391. data/resources/unicode_data/blocks/imperial_aramaic.yml +497 -0
  392. data/resources/unicode_data/blocks/inscriptional_pahlavi.yml +433 -0
  393. data/resources/unicode_data/blocks/inscriptional_parthian.yml +481 -0
  394. data/resources/unicode_data/{ipa_extensions.yml → blocks/ipa_extensions.yml} +1050 -1050
  395. data/resources/unicode_data/blocks/javanese.yml +1457 -0
  396. data/resources/unicode_data/blocks/kaithi.yml +1057 -0
  397. data/resources/unicode_data/blocks/kana_supplement.yml +33 -0
  398. data/resources/unicode_data/{kanbun.yml → blocks/kanbun.yml} +167 -167
  399. data/resources/unicode_data/blocks/kangxi_radicals.yml +3425 -0
  400. data/resources/unicode_data/blocks/kannada.yml +1377 -0
  401. data/resources/unicode_data/blocks/katakana.yml +1537 -0
  402. data/resources/unicode_data/blocks/katakana_phonetic_extensions.yml +257 -0
  403. data/resources/unicode_data/blocks/kayah_li.yml +769 -0
  404. data/resources/unicode_data/blocks/kharoshthi.yml +1041 -0
  405. data/resources/unicode_data/blocks/khmer.yml +1825 -0
  406. data/resources/unicode_data/blocks/khmer_symbols.yml +513 -0
  407. data/resources/unicode_data/blocks/lao.yml +1073 -0
  408. data/resources/unicode_data/{latin_1_supplement.yml → blocks/latin_1_supplement.yml} +1319 -1319
  409. data/resources/unicode_data/{latin_extended_a.yml → blocks/latin_extended_a.yml} +1210 -1210
  410. data/resources/unicode_data/{latin_extended_additional.yml → blocks/latin_extended_additional.yml} +2460 -2460
  411. data/resources/unicode_data/{latin_extended_b.yml → blocks/latin_extended_b.yml} +2096 -2096
  412. data/resources/unicode_data/blocks/latin_extended_c.yml +513 -0
  413. data/resources/unicode_data/blocks/latin_extended_d.yml +2145 -0
  414. data/resources/unicode_data/blocks/lepcha.yml +1185 -0
  415. data/resources/unicode_data/blocks/letterlike_symbols.yml +1281 -0
  416. data/resources/unicode_data/blocks/limbu.yml +1057 -0
  417. data/resources/unicode_data/blocks/linear_b_ideograms.yml +1969 -0
  418. data/resources/unicode_data/blocks/linear_b_syllabary.yml +1409 -0
  419. data/resources/unicode_data/blocks/lisu.yml +769 -0
  420. data/resources/unicode_data/blocks/low_surrogates.yml +33 -0
  421. data/resources/unicode_data/blocks/lycian.yml +465 -0
  422. data/resources/unicode_data/blocks/lydian.yml +433 -0
  423. data/resources/unicode_data/blocks/mahjong_tiles.yml +705 -0
  424. data/resources/unicode_data/blocks/malayalam.yml +1569 -0
  425. data/resources/unicode_data/blocks/mandaic.yml +465 -0
  426. data/resources/unicode_data/{mathematical_alphanumeric_symbols.yml → blocks/mathematical_alphanumeric_symbols.yml} +11953 -11953
  427. data/resources/unicode_data/blocks/mathematical_operators.yml +4097 -0
  428. data/resources/unicode_data/blocks/meetei_mayek.yml +897 -0
  429. data/resources/unicode_data/blocks/meetei_mayek_extensions.yml +369 -0
  430. data/resources/unicode_data/blocks/meroitic_cursive.yml +417 -0
  431. data/resources/unicode_data/blocks/meroitic_hieroglyphs.yml +513 -0
  432. data/resources/unicode_data/blocks/miao.yml +2129 -0
  433. data/resources/unicode_data/blocks/miscellaneous_mathematical_symbols_a.yml +769 -0
  434. data/resources/unicode_data/blocks/miscellaneous_mathematical_symbols_b.yml +2049 -0
  435. data/resources/unicode_data/blocks/miscellaneous_symbols.yml +4097 -0
  436. data/resources/unicode_data/blocks/miscellaneous_symbols_and_arrows.yml +1393 -0
  437. data/resources/unicode_data/blocks/miscellaneous_symbols_and_pictographs.yml +8529 -0
  438. data/resources/unicode_data/blocks/miscellaneous_technical.yml +3905 -0
  439. data/resources/unicode_data/blocks/modifier_tone_letters.yml +513 -0
  440. data/resources/unicode_data/blocks/mongolian.yml +2497 -0
  441. data/resources/unicode_data/blocks/musical_symbols.yml +3521 -0
  442. data/resources/unicode_data/blocks/myanmar.yml +2561 -0
  443. data/resources/unicode_data/blocks/myanmar_extended_a.yml +449 -0
  444. data/resources/unicode_data/blocks/new_tai_lue.yml +1329 -0
  445. data/resources/unicode_data/blocks/nko.yml +945 -0
  446. data/resources/unicode_data/blocks/number_forms.yml +929 -0
  447. data/resources/unicode_data/blocks/ogham.yml +465 -0
  448. data/resources/unicode_data/blocks/ol_chiki.yml +769 -0
  449. data/resources/unicode_data/blocks/old_italic.yml +561 -0
  450. data/resources/unicode_data/blocks/old_persian.yml +801 -0
  451. data/resources/unicode_data/blocks/old_south_arabian.yml +513 -0
  452. data/resources/unicode_data/blocks/old_turkic.yml +1169 -0
  453. data/resources/unicode_data/blocks/optical_character_recognition.yml +177 -0
  454. data/resources/unicode_data/blocks/oriya.yml +1441 -0
  455. data/resources/unicode_data/blocks/osmanya.yml +641 -0
  456. data/resources/unicode_data/blocks/phags_pa.yml +897 -0
  457. data/resources/unicode_data/blocks/phaistos_disc.yml +737 -0
  458. data/resources/unicode_data/blocks/phoenician.yml +465 -0
  459. data/resources/unicode_data/blocks/phonetic_extensions.yml +2049 -0
  460. data/resources/unicode_data/blocks/phonetic_extensions_supplement.yml +1025 -0
  461. data/resources/unicode_data/blocks/playing_cards.yml +945 -0
  462. data/resources/unicode_data/blocks/private_use_area.yml +33 -0
  463. data/resources/unicode_data/blocks/rejang.yml +593 -0
  464. data/resources/unicode_data/blocks/rumi_numeral_symbols.yml +497 -0
  465. data/resources/unicode_data/blocks/runic.yml +1297 -0
  466. data/resources/unicode_data/blocks/samaritan.yml +977 -0
  467. data/resources/unicode_data/blocks/saurashtra.yml +1297 -0
  468. data/resources/unicode_data/blocks/sharada.yml +1329 -0
  469. data/resources/unicode_data/blocks/shavian.yml +769 -0
  470. data/resources/unicode_data/blocks/sinhala.yml +1281 -0
  471. data/resources/unicode_data/blocks/small_form_variants.yml +417 -0
  472. data/resources/unicode_data/blocks/sora_sompeng.yml +561 -0
  473. data/resources/unicode_data/blocks/spacing_modifier_letters.yml +1281 -0
  474. data/resources/unicode_data/blocks/specials.yml +81 -0
  475. data/resources/unicode_data/blocks/sundanese.yml +1025 -0
  476. data/resources/unicode_data/blocks/sundanese_supplement.yml +129 -0
  477. data/resources/unicode_data/blocks/superscripts_and_subscripts.yml +673 -0
  478. data/resources/unicode_data/blocks/supplemental_arrows_a.yml +257 -0
  479. data/resources/unicode_data/blocks/supplemental_arrows_b.yml +2049 -0
  480. data/resources/unicode_data/blocks/supplemental_mathematical_operators.yml +4097 -0
  481. data/resources/unicode_data/blocks/supplemental_punctuation.yml +961 -0
  482. data/resources/unicode_data/blocks/supplementary_private_use_area_a.yml +33 -0
  483. data/resources/unicode_data/blocks/supplementary_private_use_area_b.yml +33 -0
  484. data/resources/unicode_data/blocks/syloti_nagri.yml +705 -0
  485. data/resources/unicode_data/blocks/syriac.yml +1233 -0
  486. data/resources/unicode_data/blocks/tagalog.yml +321 -0
  487. data/resources/unicode_data/blocks/tagbanwa.yml +289 -0
  488. data/resources/unicode_data/blocks/tags.yml +1553 -0
  489. data/resources/unicode_data/blocks/tai_le.yml +561 -0
  490. data/resources/unicode_data/blocks/tai_tham.yml +2033 -0
  491. data/resources/unicode_data/blocks/tai_viet.yml +1153 -0
  492. data/resources/unicode_data/blocks/tai_xuan_jing_symbols.yml +1393 -0
  493. data/resources/unicode_data/blocks/takri.yml +1057 -0
  494. data/resources/unicode_data/blocks/tamil.yml +1153 -0
  495. data/resources/unicode_data/blocks/telugu.yml +1489 -0
  496. data/resources/unicode_data/blocks/thaana.yml +801 -0
  497. data/resources/unicode_data/blocks/thai.yml +1393 -0
  498. data/resources/unicode_data/blocks/tibetan.yml +3377 -0
  499. data/resources/unicode_data/blocks/tifinagh.yml +945 -0
  500. data/resources/unicode_data/blocks/transport_and_map_symbols.yml +1121 -0
  501. data/resources/unicode_data/blocks/ugaritic.yml +497 -0
  502. data/resources/unicode_data/blocks/unified_canadian_aboriginal_syllabics.yml +10241 -0
  503. data/resources/unicode_data/blocks/unified_canadian_aboriginal_syllabics_extended.yml +1121 -0
  504. data/resources/unicode_data/blocks/vai.yml +4801 -0
  505. data/resources/unicode_data/blocks/variation_selectors.yml +257 -0
  506. data/resources/unicode_data/blocks/variation_selectors_supplement.yml +3841 -0
  507. data/resources/unicode_data/blocks/vedic_extensions.yml +625 -0
  508. data/resources/unicode_data/{vertical_forms.yml → blocks/vertical_forms.yml} +121 -121
  509. data/resources/unicode_data/blocks/yi_radicals.yml +881 -0
  510. data/resources/unicode_data/blocks/yi_syllables.yml +18641 -0
  511. data/resources/unicode_data/blocks/yijing_hexagram_symbols.yml +1025 -0
  512. data/resources/unicode_data/canonical_compositions.yml +4925 -0
  513. data/resources/unicode_data/composition_exclusions.yml +78 -74
  514. data/resources/unicode_data/hangul_blocks.yml +9 -9
  515. data/spec/collation/collation_spec.rb +6 -6
  516. data/spec/collation/collator_spec.rb +18 -19
  517. data/spec/collation/trie_builder_spec.rb +6 -9
  518. data/spec/core_ext/array_spec.rb +1 -1
  519. data/spec/core_ext/string_spec.rb +1 -1
  520. data/spec/formatters/numbers/currency_formatter_spec.rb +5 -0
  521. data/spec/formatters/numbers/decimal_formatter_spec.rb +4 -0
  522. data/spec/formatters/numbers/number_formatter_spec.rb +4 -4
  523. data/spec/formatters/numbers/percent_formatter_spec.rb +8 -0
  524. data/spec/normalization/base_spec.rb +2 -2
  525. data/spec/normalization/normalization_spec.rb +7 -3
  526. data/spec/readme_spec.rb +9 -9
  527. data/spec/resources/loader_spec.rb +4 -4
  528. data/spec/shared/code_point_spec.rb +102 -62
  529. data/spec/shared/currencies_spec.rb +17 -19
  530. data/spec/shared/phone_codes_spec.rb +49 -0
  531. data/spec/shared/postal_codes_spec.rb +68 -0
  532. data/spec/utils/code_points_spec.rb +6 -6
  533. metadata +264 -224
  534. data/resources/unicode_data/aegean_numbers.yml +0 -913
  535. data/resources/unicode_data/alchemical_symbols.yml +0 -1857
  536. data/resources/unicode_data/alphabetic_presentation_forms.yml +0 -929
  537. data/resources/unicode_data/ancient_greek_musical_notation.yml +0 -1121
  538. data/resources/unicode_data/ancient_greek_numbers.yml +0 -1201
  539. data/resources/unicode_data/ancient_symbols.yml +0 -193
  540. data/resources/unicode_data/arabic.yml +0 -4049
  541. data/resources/unicode_data/arabic_extended_a.yml +0 -625
  542. data/resources/unicode_data/arabic_mathematical_alphabetic_symbols.yml +0 -2289
  543. data/resources/unicode_data/arabic_supplement.yml +0 -769
  544. data/resources/unicode_data/armenian.yml +0 -1393
  545. data/resources/unicode_data/arrows.yml +0 -1793
  546. data/resources/unicode_data/avestan.yml +0 -977
  547. data/resources/unicode_data/balinese.yml +0 -1937
  548. data/resources/unicode_data/bamum.yml +0 -1409
  549. data/resources/unicode_data/bamum_supplement.yml +0 -9105
  550. data/resources/unicode_data/basic_latin.yml +0 -2049
  551. data/resources/unicode_data/batak.yml +0 -897
  552. data/resources/unicode_data/bengali.yml +0 -1473
  553. data/resources/unicode_data/block_elements.yml +0 -513
  554. data/resources/unicode_data/bopomofo.yml +0 -657
  555. data/resources/unicode_data/bopomofo_extended.yml +0 -433
  556. data/resources/unicode_data/brahmi.yml +0 -1729
  557. data/resources/unicode_data/braille_patterns.yml +0 -4097
  558. data/resources/unicode_data/buginese.yml +0 -481
  559. data/resources/unicode_data/buhid.yml +0 -321
  560. data/resources/unicode_data/byzantine_musical_symbols.yml +0 -3937
  561. data/resources/unicode_data/carian.yml +0 -785
  562. data/resources/unicode_data/chakma.yml +0 -1073
  563. data/resources/unicode_data/cham.yml +0 -1329
  564. data/resources/unicode_data/cherokee.yml +0 -1361
  565. data/resources/unicode_data/cjk_compatibility_ideographs.yml +0 -7553
  566. data/resources/unicode_data/cjk_compatibility_ideographs_supplement.yml +0 -8673
  567. data/resources/unicode_data/cjk_radicals_supplement.yml +0 -1841
  568. data/resources/unicode_data/cjk_strokes.yml +0 -577
  569. data/resources/unicode_data/cjk_symbols_and_punctuation.yml +0 -1025
  570. data/resources/unicode_data/cjk_unified_ideographs.yml +0 -33
  571. data/resources/unicode_data/cjk_unified_ideographs_extension_a.yml +0 -33
  572. data/resources/unicode_data/cjk_unified_ideographs_extension_b.yml +0 -33
  573. data/resources/unicode_data/cjk_unified_ideographs_extension_c.yml +0 -33
  574. data/resources/unicode_data/cjk_unified_ideographs_extension_d.yml +0 -33
  575. data/resources/unicode_data/combining_diacritical_marks.yml +0 -1793
  576. data/resources/unicode_data/combining_diacritical_marks_supplement.yml +0 -689
  577. data/resources/unicode_data/combining_half_marks.yml +0 -113
  578. data/resources/unicode_data/common_indic_number_forms.yml +0 -161
  579. data/resources/unicode_data/control_pictures.yml +0 -625
  580. data/resources/unicode_data/coptic.yml +0 -1969
  581. data/resources/unicode_data/counting_rod_numerals.yml +0 -289
  582. data/resources/unicode_data/cuneiform.yml +0 -14065
  583. data/resources/unicode_data/cuneiform_numbers_and_punctuation.yml +0 -1649
  584. data/resources/unicode_data/currency_symbols.yml +0 -417
  585. data/resources/unicode_data/cypriot_syllabary.yml +0 -881
  586. data/resources/unicode_data/cyrillic_extended_a.yml +0 -513
  587. data/resources/unicode_data/cyrillic_extended_b.yml +0 -1425
  588. data/resources/unicode_data/cyrillic_supplement.yml +0 -641
  589. data/resources/unicode_data/decomposition_map.yml +0 -4565
  590. data/resources/unicode_data/deseret.yml +0 -1281
  591. data/resources/unicode_data/devanagari.yml +0 -2033
  592. data/resources/unicode_data/devanagari_extended.yml +0 -449
  593. data/resources/unicode_data/dingbats.yml +0 -3057
  594. data/resources/unicode_data/domino_tiles.yml +0 -1601
  595. data/resources/unicode_data/egyptian_hieroglyphs.yml +0 -17137
  596. data/resources/unicode_data/emoticons.yml +0 -1217
  597. data/resources/unicode_data/enclosed_alphanumeric_supplement.yml +0 -2737
  598. data/resources/unicode_data/enclosed_alphanumerics.yml +0 -2561
  599. data/resources/unicode_data/ethiopic.yml +0 -5729
  600. data/resources/unicode_data/ethiopic_extended.yml +0 -1265
  601. data/resources/unicode_data/ethiopic_extended_a.yml +0 -513
  602. data/resources/unicode_data/ethiopic_supplement.yml +0 -417
  603. data/resources/unicode_data/general_punctuation.yml +0 -1713
  604. data/resources/unicode_data/geometric_shapes.yml +0 -1537
  605. data/resources/unicode_data/georgian.yml +0 -1409
  606. data/resources/unicode_data/georgian_supplement.yml +0 -641
  607. data/resources/unicode_data/glagolitic.yml +0 -1505
  608. data/resources/unicode_data/gothic.yml +0 -433
  609. data/resources/unicode_data/gujarati.yml +0 -1345
  610. data/resources/unicode_data/gurmukhi.yml +0 -1265
  611. data/resources/unicode_data/hangul_jamo.yml +0 -4097
  612. data/resources/unicode_data/hangul_jamo_extended_a.yml +0 -465
  613. data/resources/unicode_data/hangul_jamo_extended_b.yml +0 -1153
  614. data/resources/unicode_data/hangul_syllables.yml +0 -33
  615. data/resources/unicode_data/hanunoo.yml +0 -369
  616. data/resources/unicode_data/hebrew.yml +0 -1393
  617. data/resources/unicode_data/high_private_use_surrogates.yml +0 -33
  618. data/resources/unicode_data/high_surrogates.yml +0 -33
  619. data/resources/unicode_data/hiragana.yml +0 -1489
  620. data/resources/unicode_data/ideographic_description_characters.yml +0 -193
  621. data/resources/unicode_data/imperial_aramaic.yml +0 -497
  622. data/resources/unicode_data/inscriptional_pahlavi.yml +0 -433
  623. data/resources/unicode_data/inscriptional_parthian.yml +0 -481
  624. data/resources/unicode_data/javanese.yml +0 -1457
  625. data/resources/unicode_data/kaithi.yml +0 -1057
  626. data/resources/unicode_data/kana_supplement.yml +0 -33
  627. data/resources/unicode_data/kangxi_radicals.yml +0 -3425
  628. data/resources/unicode_data/kannada.yml +0 -1377
  629. data/resources/unicode_data/katakana.yml +0 -1537
  630. data/resources/unicode_data/katakana_phonetic_extensions.yml +0 -257
  631. data/resources/unicode_data/kayah_li.yml +0 -769
  632. data/resources/unicode_data/kharoshthi.yml +0 -1041
  633. data/resources/unicode_data/khmer.yml +0 -1825
  634. data/resources/unicode_data/khmer_symbols.yml +0 -513
  635. data/resources/unicode_data/lao.yml +0 -1073
  636. data/resources/unicode_data/latin_extended_c.yml +0 -513
  637. data/resources/unicode_data/latin_extended_d.yml +0 -2145
  638. data/resources/unicode_data/lepcha.yml +0 -1185
  639. data/resources/unicode_data/letterlike_symbols.yml +0 -1281
  640. data/resources/unicode_data/limbu.yml +0 -1057
  641. data/resources/unicode_data/linear_b_ideograms.yml +0 -1969
  642. data/resources/unicode_data/linear_b_syllabary.yml +0 -1409
  643. data/resources/unicode_data/lisu.yml +0 -769
  644. data/resources/unicode_data/low_surrogates.yml +0 -33
  645. data/resources/unicode_data/lycian.yml +0 -465
  646. data/resources/unicode_data/lydian.yml +0 -433
  647. data/resources/unicode_data/mahjong_tiles.yml +0 -705
  648. data/resources/unicode_data/malayalam.yml +0 -1569
  649. data/resources/unicode_data/mandaic.yml +0 -465
  650. data/resources/unicode_data/mathematical_operators.yml +0 -4097
  651. data/resources/unicode_data/meetei_mayek.yml +0 -897
  652. data/resources/unicode_data/meetei_mayek_extensions.yml +0 -369
  653. data/resources/unicode_data/meroitic_cursive.yml +0 -417
  654. data/resources/unicode_data/meroitic_hieroglyphs.yml +0 -513
  655. data/resources/unicode_data/miao.yml +0 -2129
  656. data/resources/unicode_data/miscellaneous_mathematical_symbols_a.yml +0 -769
  657. data/resources/unicode_data/miscellaneous_mathematical_symbols_b.yml +0 -2049
  658. data/resources/unicode_data/miscellaneous_symbols.yml +0 -4097
  659. data/resources/unicode_data/miscellaneous_symbols_and_arrows.yml +0 -1393
  660. data/resources/unicode_data/miscellaneous_symbols_and_pictographs.yml +0 -8529
  661. data/resources/unicode_data/miscellaneous_technical.yml +0 -3905
  662. data/resources/unicode_data/modifier_tone_letters.yml +0 -513
  663. data/resources/unicode_data/mongolian.yml +0 -2497
  664. data/resources/unicode_data/musical_symbols.yml +0 -3521
  665. data/resources/unicode_data/myanmar.yml +0 -2561
  666. data/resources/unicode_data/myanmar_extended_a.yml +0 -449
  667. data/resources/unicode_data/new_tai_lue.yml +0 -1329
  668. data/resources/unicode_data/nko.yml +0 -945
  669. data/resources/unicode_data/number_forms.yml +0 -929
  670. data/resources/unicode_data/ogham.yml +0 -465
  671. data/resources/unicode_data/ol_chiki.yml +0 -769
  672. data/resources/unicode_data/old_italic.yml +0 -561
  673. data/resources/unicode_data/old_persian.yml +0 -801
  674. data/resources/unicode_data/old_south_arabian.yml +0 -513
  675. data/resources/unicode_data/old_turkic.yml +0 -1169
  676. data/resources/unicode_data/optical_character_recognition.yml +0 -177
  677. data/resources/unicode_data/oriya.yml +0 -1441
  678. data/resources/unicode_data/osmanya.yml +0 -641
  679. data/resources/unicode_data/phags_pa.yml +0 -897
  680. data/resources/unicode_data/phaistos_disc.yml +0 -737
  681. data/resources/unicode_data/phoenician.yml +0 -465
  682. data/resources/unicode_data/phonetic_extensions.yml +0 -2049
  683. data/resources/unicode_data/phonetic_extensions_supplement.yml +0 -1025
  684. data/resources/unicode_data/playing_cards.yml +0 -945
  685. data/resources/unicode_data/private_use_area.yml +0 -33
  686. data/resources/unicode_data/rejang.yml +0 -593
  687. data/resources/unicode_data/rumi_numeral_symbols.yml +0 -497
  688. data/resources/unicode_data/runic.yml +0 -1297
  689. data/resources/unicode_data/samaritan.yml +0 -977
  690. data/resources/unicode_data/saurashtra.yml +0 -1297
  691. data/resources/unicode_data/sharada.yml +0 -1329
  692. data/resources/unicode_data/shavian.yml +0 -769
  693. data/resources/unicode_data/sinhala.yml +0 -1281
  694. data/resources/unicode_data/small_form_variants.yml +0 -417
  695. data/resources/unicode_data/sora_sompeng.yml +0 -561
  696. data/resources/unicode_data/spacing_modifier_letters.yml +0 -1281
  697. data/resources/unicode_data/specials.yml +0 -81
  698. data/resources/unicode_data/sundanese.yml +0 -1025
  699. data/resources/unicode_data/sundanese_supplement.yml +0 -129
  700. data/resources/unicode_data/superscripts_and_subscripts.yml +0 -673
  701. data/resources/unicode_data/supplemental_arrows_a.yml +0 -257
  702. data/resources/unicode_data/supplemental_arrows_b.yml +0 -2049
  703. data/resources/unicode_data/supplemental_mathematical_operators.yml +0 -4097
  704. data/resources/unicode_data/supplemental_punctuation.yml +0 -961
  705. data/resources/unicode_data/supplementary_private_use_area_a.yml +0 -33
  706. data/resources/unicode_data/supplementary_private_use_area_b.yml +0 -33
  707. data/resources/unicode_data/syloti_nagri.yml +0 -705
  708. data/resources/unicode_data/syriac.yml +0 -1233
  709. data/resources/unicode_data/tagalog.yml +0 -321
  710. data/resources/unicode_data/tagbanwa.yml +0 -289
  711. data/resources/unicode_data/tags.yml +0 -1553
  712. data/resources/unicode_data/tai_le.yml +0 -561
  713. data/resources/unicode_data/tai_tham.yml +0 -2033
  714. data/resources/unicode_data/tai_viet.yml +0 -1153
  715. data/resources/unicode_data/tai_xuan_jing_symbols.yml +0 -1393
  716. data/resources/unicode_data/takri.yml +0 -1057
  717. data/resources/unicode_data/tamil.yml +0 -1153
  718. data/resources/unicode_data/telugu.yml +0 -1489
  719. data/resources/unicode_data/thaana.yml +0 -801
  720. data/resources/unicode_data/thai.yml +0 -1393
  721. data/resources/unicode_data/tibetan.yml +0 -3377
  722. data/resources/unicode_data/tifinagh.yml +0 -945
  723. data/resources/unicode_data/transport_and_map_symbols.yml +0 -1121
  724. data/resources/unicode_data/ugaritic.yml +0 -497
  725. data/resources/unicode_data/unified_canadian_aboriginal_syllabics.yml +0 -10241
  726. data/resources/unicode_data/unified_canadian_aboriginal_syllabics_extended.yml +0 -1121
  727. data/resources/unicode_data/vai.yml +0 -4801
  728. data/resources/unicode_data/variation_selectors.yml +0 -257
  729. data/resources/unicode_data/variation_selectors_supplement.yml +0 -3841
  730. data/resources/unicode_data/vedic_extensions.yml +0 -625
  731. data/resources/unicode_data/yi_radicals.yml +0 -881
  732. data/resources/unicode_data/yi_syllables.yml +0 -18641
  733. data/resources/unicode_data/yijing_hexagram_symbols.yml +0 -1025
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source 'http://rubygems.org'
1
+ source :rubygems
2
2
 
3
3
  gemspec
4
4
 
@@ -11,6 +11,8 @@ group :development do
11
11
  gem 'nokogiri'
12
12
  gem 'ruby_parser', '~> 2.3.1'
13
13
 
14
+ gem 'ruby-cldr', :github => 'KL-7/ruby-cldr', :branch => 'for-twitter-cldr'
15
+
14
16
  platform :ruby do
15
17
  gem 'therubyracer', '~> 0.9.10'
16
18
  gem 'uglifier', '~> 1.2.4'
data/History.txt CHANGED
@@ -1,3 +1,11 @@
1
+ === 1.7.0
2
+
3
+ * Wrote rake tasks to update CLDR and ICU resources.
4
+ * All resource files now written with symbolized keys so the gem doesn't have to recursively symbolize them on load.
5
+ * Unicode code points now represented internally with integers instead of strings for better performance.
6
+ * Added number formatting in JavaScript.
7
+ * Added telephone code lookup functionality (per country) and postal code validation.
8
+
1
9
  === 1.6.2
2
10
 
3
11
  * Collation tries now loaded from marshal dumps, collation running time improved by ~80%.
data/README.md CHANGED
@@ -271,6 +271,61 @@ TwitterCldr::Shared::Languages.translate_language("chino tradicional", :es, :en)
271
271
  TwitterCldr::Shared::Languages.translate_language("Traditional Chinese", :en, :es) # "chino tradicional"
272
272
  ```
273
273
 
274
+ ### Postal Codes
275
+
276
+ The CLDR contains postal code validation regexes for a number of countries.
277
+
278
+ ```ruby
279
+ # United States
280
+ TwitterCldr::Shared::PostalCodes.valid?(:us, "94103") # true
281
+ TwitterCldr::Shared::PostalCodes.valid?(:us, "9410") # false
282
+
283
+ # England (Great Britain)
284
+ TwitterCldr::Shared::PostalCodes.valid?(:gb, "BS98 1TL") # true
285
+
286
+ # Sweden
287
+ TwitterCldr::Shared::PostalCodes.valid?(:se, "280 12") # true
288
+
289
+ # Canada
290
+ TwitterCldr::Shared::PostalCodes.valid?(:ca, "V3H 1Z7") # true
291
+ ```
292
+
293
+ Get a list of supported territories by using the `#territories` method:
294
+
295
+ ```ruby
296
+ TwitterCldr::Shared::PostalCodes.territories # [:ve, :iq, :cx, :cv, ...]
297
+ ```
298
+
299
+ Just want the regex? No problem:
300
+
301
+ ```ruby
302
+ TwitterCldr::Shared::PostalCodes.regex_for_territory(:us) # /\d{5}([ \-]\d{4})?/
303
+ ```
304
+
305
+ ### Phone Codes
306
+
307
+ Look up phone codes by territory:
308
+
309
+ ```ruby
310
+ # United States
311
+ TwitterCldr::Shared::PhoneCodes.code_for_territory(:us) # "1"
312
+
313
+ # Perú
314
+ TwitterCldr::Shared::PhoneCodes.code_for_territory(:pe) # "51"
315
+
316
+ # Egypt
317
+ TwitterCldr::Shared::PhoneCodes.code_for_territory(:eg) # "20"
318
+
319
+ # Denmark
320
+ TwitterCldr::Shared::PhoneCodes.code_for_territory(:dk) # "45"
321
+ ```
322
+
323
+ Get a list of supported territories by using the `#territories` method:
324
+
325
+ ```ruby
326
+ TwitterCldr::Shared::PhoneCodes.territories # [:zw, :an, :tr, :by, :mh, ...]
327
+ ```
328
+
274
329
  ### Unicode Data
275
330
 
276
331
  TwitterCLDR provides ways to retrieve individual code points as well as normalize and decompose Unicode text.
@@ -278,7 +333,7 @@ TwitterCLDR provides ways to retrieve individual code points as well as normaliz
278
333
  Retrieve data for code points:
279
334
 
280
335
  ```ruby
281
- code_point = TwitterCldr::Shared::CodePoint.for_hex("1F3E9")
336
+ code_point = TwitterCldr::Shared::CodePoint.find(0x1F3E9)
282
337
  code_point.name # "LOVE HOTEL"
283
338
  code_point.bidi_mirrored # "N"
284
339
  code_point.category # "So"
@@ -288,13 +343,13 @@ code_point.combining_class # "0"
288
343
  Convert characters to code points:
289
344
 
290
345
  ```ruby
291
- TwitterCldr::Utils::CodePoints.from_string("¿") # ["00BF"]
346
+ TwitterCldr::Utils::CodePoints.from_string("¿") # [0xBF]
292
347
  ```
293
348
 
294
349
  Convert code points to characters:
295
350
 
296
351
  ```ruby
297
- TwitterCldr::Utils::CodePoints.to_string(["00BF"]) # "¿"
352
+ TwitterCldr::Utils::CodePoints.to_string([0xBF]) # "¿"
298
353
  ```
299
354
 
300
355
  Normalize/decompose a Unicode string (NFD, NFKD, NFC, and NFKC implementations available). Note that the normalized string will almost always look the same as the original string because most character display systems automatically combine decomposed characters.
@@ -306,29 +361,29 @@ TwitterCldr::Normalization::NFD.normalize("français") # "français"
306
361
  Normalization is easier to see in hex:
307
362
 
308
363
  ```ruby
309
- # ["0065", "0073", "0070", "0061", "00F1", "006F", "006C"]
364
+ # [101, 115, 112, 97, 241, 111, 108]
310
365
  TwitterCldr::Utils::CodePoints.from_string("español")
311
366
 
312
- # ["0065", "0073", "0070", "0061", "006E", "0303", "006F", "006C"]
367
+ # [101, 115, 112, 97, 110, 771, 111, 108]
313
368
  TwitterCldr::Utils::CodePoints.from_string(TwitterCldr::Normalization::NFD.normalize("español"))
314
369
  ```
315
370
 
316
- Notice in the example above that the letter "ñ" was transformed from `00F1` to `006E 0303`, which represent the "n" and the "˜" respectively.
371
+ Notice in the example above that the letter "ñ" was transformed from `241` to `110 771`, which represent the "n" and the "˜" respectively.
317
372
 
318
373
  A few convenience methods also exist for `String` that make it easy to normalize and get code points for strings:
319
374
 
320
375
  ```ruby
321
- # ["0065", "0073", "0070", "0061", "00F1", "006F", "006C"]
376
+ # [101, 115, 112, 97, 241, 111, 108]
322
377
  "español".localize.code_points
323
378
 
324
- # ["0065", "0073", "0070", "0061", "006E", "0303", "006F", "006C"]
379
+ # [101, 115, 112, 97, 110, 771, 111, 108]
325
380
  "español".localize.normalize.code_points
326
381
  ```
327
382
 
328
383
  Specify a specific normalization algorithm via the `:using` option. NFD, NFKD, NFC, and NFKC algorithms are all supported (default is NFD):
329
384
 
330
385
  ```ruby
331
- # ["0065", "0073", "0070", "0061", "006E", "0303", "006F", "006C"]
386
+ # [101, 115, 112, 97, 110, 771, 111, 108]
332
387
  "español".localize.normalize(:using => :NFKD).code_points
333
388
  ```
334
389
 
@@ -362,11 +417,6 @@ collator.get_collation_elements("Älg") # [[39, 5, 143], [0, 157, 5], [61, 5,
362
417
  collator.get_sort_key("Älg") # [39, 61, 51, 1, 134, 157, 6, 1, 143, 7]
363
418
  ```
364
419
 
365
- **Note**: The collation algorithm in TwitterCLDR isn't quite complete. Here's what we still have to do:
366
-
367
- 1. Backwards accent sorting for French.
368
- 2. Uppercase-first sorting for languages like Danish.
369
-
370
420
  **Note**: The TwitterCLDR collator does not currently pass all the collation tests provided by Unicode, but for some strange reasons. See the [summary](https://gist.github.com/f4ee3bd280a2257c5641) of these discrepancies if you're curious.
371
421
 
372
422
  ## About Twitter-specific Locales
data/Rakefile CHANGED
@@ -42,21 +42,71 @@ end
42
42
 
43
43
  namespace :resources do
44
44
  namespace :update do
45
+
46
+ desc 'Import locales resources'
47
+ task :locales_resources, :cldr_path do |_, args|
48
+ TwitterCldr::Resources::LocalesResourcesImporter.new(
49
+ args[:cldr_path] || '../cldr',
50
+ './resources/locales'
51
+ ).import
52
+ end
53
+
54
+ desc 'Import custom locales resources'
55
+ task :custom_locales_resources do
56
+ TwitterCldr::Resources::CustomLocalesResourcesImporter.new('./resources/custom/locales').import
57
+ end
58
+
45
59
  desc 'Import tailoring resources from CLDR data (should be executed using JRuby 1.7 in 1.9 mode)'
46
- task :tailoring do
47
- importer = TwitterCldr::Resources::TailoringImporter.new(
48
- ENV.fetch('CLDR_DATA_PATH', '../cldr-tailoring/'),
60
+ task :tailoring, :cldr_path, :icu4j_jar_path do |_, args|
61
+ TwitterCldr::Resources::TailoringImporter.new(
62
+ args[:cldr_path] || '../cldr',
49
63
  './resources/collation/tailoring',
50
- ENV.fetch('ICU4J_JAR_PATH', '../icu4j-49_1.jar')
51
- )
64
+ args[:icu4j_jar_path] ||'../icu4j-49_1.jar'
65
+ ).import(TwitterCldr.supported_locales)
66
+ end
67
+
68
+ desc 'Import Unicode data resources'
69
+ task :unicode_data, :unicode_data_path do |_, args|
70
+ TwitterCldr::Resources::UnicodeDataImporter.new(
71
+ args[:unicode_data_path] || '../unicode-data',
72
+ './resources/unicode_data'
73
+ ).import
74
+ end
52
75
 
53
- TwitterCldr.supported_locales.each { |locale| importer.import(locale) }
76
+ desc 'Import composition exclusions resource'
77
+ task :composition_exclusions, :derived_normalization_props_path do |_, args|
78
+ TwitterCldr::Resources::CompositionExclusionsImporter.new(
79
+ args[:derived_normalization_props_path] || '../unicode-data/DerivedNormalizationProps.txt',
80
+ './resources/unicode_data'
81
+ ).import
54
82
  end
55
83
 
56
- desc 'Updates default and tailoring tries dumps'
84
+ desc 'Import postal codes resource'
85
+ task :postal_codes, :cldr_path do |_, args|
86
+ TwitterCldr::Resources::PostalCodesImporter.new(
87
+ args[:cldr_path] || '../cldr',
88
+ './resources/shared'
89
+ ).import
90
+ end
91
+
92
+ desc 'Import phone codes resource'
93
+ task :phone_codes, :cldr_path do |_, args|
94
+ TwitterCldr::Resources::PhoneCodesImporter.new(
95
+ args[:cldr_path] || '../cldr',
96
+ './resources/shared'
97
+ ).import
98
+ end
99
+
100
+ desc 'Update default and tailoring tries dumps'
57
101
  task :tries do
58
102
  TwitterCldr::Resources::TriesDumper.update_dumps
59
103
  end
104
+
105
+ desc 'Update canonical compositions resource'
106
+ task :canonical_compositions do
107
+ TwitterCldr::Resources::CanonicalCompositionsUpdater.new('./resources/unicode_data').update
108
+ end
109
+
60
110
  end
61
111
  end
62
112
 
data/js/lib/compiler.rb CHANGED
@@ -32,7 +32,9 @@ module TwitterCldr
32
32
  @renderers ||= {
33
33
  :plural_rules => TwitterCldr::Js::Renderers::PluralRules::PluralRulesRenderer,
34
34
  :timespan => TwitterCldr::Js::Renderers::Calendars::TimespanRenderer,
35
- :datetime => TwitterCldr::Js::Renderers::Calendars::DateTimeRenderer
35
+ :datetime => TwitterCldr::Js::Renderers::Calendars::DateTimeRenderer,
36
+ :numbers => TwitterCldr::Js::Renderers::Numbers::NumbersRenderer,
37
+ :currencies => TwitterCldr::Js::Renderers::Shared::CurrenciesRenderer
36
38
  }
37
39
  end
38
40
  end
@@ -3,11 +3,11 @@
3
3
  // http://www.apache.org/licenses/LICENSE-2.0
4
4
 
5
5
  // TwitterCLDR (JavaScript) v{{version}}
6
- // Authors: Cameron Dutro [@camertron]
7
- Kirill Lashuk [@KL_7]
8
- portions by Sven Fuchs [@svenfuchs]
9
- // Homepage: https://twitter.com
10
- // Description: Provides date, time, number, and list formatting functionality for various Twitter-supported locales in Javascript.
6
+ // Authors: Cameron Dutro [@camertron]
7
+ Kirill Lashuk [@KL_7]
8
+ portions by Sven Fuchs [@svenfuchs]
9
+ // Homepage: https://twitter.com
10
+ // Description: Provides date, time, number, and list formatting functionality for various Twitter-supported locales in Javascript.
11
11
  ###
12
12
 
13
13
  TwitterCldr = {}
@@ -0,0 +1,179 @@
1
+ # Copyright 2012 Twitter, Inc
2
+ # http://www.apache.org/licenses/LICENSE-2.0
3
+
4
+ TwitterCldr.NumberFormatter = class NumberFormatter
5
+ constructor: ->
6
+ @all_tokens = `{{{tokens}}}`
7
+ @tokens = []
8
+ @symbols = `{{{symbols}}}`
9
+
10
+ @default_symbols =
11
+ 'group': ','
12
+ 'decimal': '.'
13
+ 'plus_sign': '+'
14
+ 'minus_sign': '-'
15
+
16
+ format: (number, options = {}) ->
17
+ opts = this.default_format_options_for(number)
18
+
19
+ for key, val of options
20
+ opts[key] = if options[key]? then options[key] else opts[key]
21
+
22
+ [prefix, suffix, integer_format, fraction_format] = this.partition_tokens(this.get_tokens(number, opts))
23
+ [int, fraction] = this.parse_number(number, opts)
24
+ result = integer_format.apply(parseFloat(int), opts)
25
+ result += fraction_format.apply(fraction, opts) if fraction
26
+ sign = if number < 0 && prefix != "-" then @symbols.minus_sign || @default_symbols.minus_sign else ""
27
+ "#{sign}#{prefix}#{result}#{suffix}"
28
+
29
+ partition_tokens: (tokens) ->
30
+ [tokens[0] || "",
31
+ tokens[2] || "",
32
+ new IntegerHelper(tokens[1], @symbols),
33
+ new FractionHelper(tokens[1], @symbols)]
34
+
35
+ parse_number: (number, options = {}) ->
36
+ if options.precision?
37
+ precision = options.precision
38
+ else
39
+ precision = this.precision_from(number)
40
+
41
+ number = this.round_to(number, precision)
42
+ Math.abs(number).toFixed(precision).split(".")
43
+
44
+ precision_from: (num) ->
45
+ parts = num.toString().split(".")
46
+ if parts.length == 2 then parts[1].length else 0
47
+
48
+ round_to: (number, precision) ->
49
+ factor = Math.pow(10, precision)
50
+ Math.round(number * factor) / factor
51
+
52
+ get_tokens: ->
53
+ throw "get_tokens() not implemented - use a derived class like PercentFormatter."
54
+
55
+ TwitterCldr.PercentFormatter = class PercentFormatter extends NumberFormatter
56
+ constructor: (options = {}) ->
57
+ @default_percent_sign = "%"
58
+ super
59
+
60
+ format: (number, options = {}) ->
61
+ super(number, options).replace('¤', @symbols.percent_sign || @default_percent_sign)
62
+
63
+ default_format_options_for: (number) ->
64
+ precision: 0
65
+
66
+ get_tokens: (number, options) ->
67
+ if number < 0 then @all_tokens.percent.negative else @all_tokens.percent.positive
68
+
69
+ TwitterCldr.DecimalFormatter = class DecimalFormatter extends NumberFormatter
70
+ format: (number, options = {}) ->
71
+ try
72
+ super(number, options)
73
+ catch error
74
+ number
75
+
76
+ default_format_options_for: (number) ->
77
+ precision: this.precision_from(number)
78
+
79
+ get_tokens: (number, options = {}) ->
80
+ if number < 0 then @all_tokens.decimal.negative else @all_tokens.decimal.positive
81
+
82
+ TwitterCldr.CurrencyFormatter = class CurrencyFormatter extends NumberFormatter
83
+ constructor: (options = {}) ->
84
+ @default_currency_symbol = "$"
85
+ @default_precision = 2
86
+ super
87
+
88
+ format: (number, options = {}) ->
89
+ if options.currency
90
+ if TwitterCldr.Currencies?
91
+ currency = TwitterCldr.Currencies.for_code(options.currency)
92
+ currency ||= TwitterCldr.Currencies.for_country(options.currency)
93
+ currency ||= symbol: options.currency
94
+ else
95
+ currency = symbol: options.currency
96
+ else
97
+ currency = symbol: @default_currency_symbol
98
+
99
+ super(number, options).replace('¤', currency.symbol)
100
+
101
+ default_format_options_for: (number) ->
102
+ precision = this.precision_from(number)
103
+ if precision == 0 then precision = @default_precision
104
+ precision: precision
105
+
106
+ get_tokens: (number, options = {}) ->
107
+ if number < 0 then @all_tokens.currency.negative else @all_tokens.currency.positive
108
+
109
+ TwitterCldr.NumberFormatter.BaseHelper = class BaseHelper
110
+ interpolate: (string, value, orientation = "right") ->
111
+ value = value.toString()
112
+ length = value.length
113
+ start = if orientation == "left" then 0 else -length
114
+ string = (("#" for i in [0...length]).join("") + string).slice(-length) if string.length < length
115
+
116
+ if start < 0
117
+ string = string[0...(start + string.length)] + value
118
+ else
119
+ string = string[0...start] + value + string[(length)..-1]
120
+
121
+ string.replace(/#/g, "")
122
+
123
+ TwitterCldr.NumberFormatter.IntegerHelper = class IntegerHelper extends BaseHelper
124
+ constructor: (token, symbols = {}) ->
125
+ format = token.split('.')[0]
126
+ @format = this.prepare_format(format, symbols)
127
+ @groups = this.parse_groups(format)
128
+ @separator = symbols.group || ','
129
+
130
+ apply: (number, options = {}) ->
131
+ this.format_groups(this.interpolate(@format, parseInt(number)))
132
+
133
+ format_groups: (string) ->
134
+ return string if @groups.length == 0
135
+ tokens = []
136
+
137
+ cur_token = this.chop_group(string, @groups[0])
138
+ tokens.push(cur_token)
139
+ string = string[0...(string.length - cur_token.length)] if cur_token
140
+
141
+ while string.length > @groups[@groups.length - 1]
142
+ cur_token = this.chop_group(string, @groups[@groups.length - 1])
143
+ tokens.push(cur_token)
144
+ string = string[0...(string.length - cur_token.length)] if cur_token
145
+
146
+ tokens.push(string)
147
+ (token for token in tokens when token != null).reverse().join(@separator)
148
+
149
+ parse_groups: (format) ->
150
+ return [] unless index = format.lastIndexOf(',')
151
+ rest = format[0...index]
152
+ widths = [format.length - index - 1]
153
+ widths.push(rest.length - rest.lastIndexOf(',') - 1) if rest.lastIndexOf(',') > -1
154
+ widths = (width for width in widths when width != null) # compact
155
+ widths.reverse() # uniq
156
+ (widths[index] for index in [0...widths.length] when widths.indexOf(widths[index], index + 1) == -1).reverse()
157
+
158
+ chop_group: (string, size) ->
159
+ if string.length > size then string[-size..-1] else null
160
+
161
+ prepare_format: (format, symbols) ->
162
+ format.replace(",", "").replace("+", symbols.plus_sign).replace("-", symbols.minus_sign)
163
+
164
+ TwitterCldr.NumberFormatter.FractionHelper = class FractionHelper extends BaseHelper
165
+ constructor: (token, symbols = {}) ->
166
+ @format = if token then token.split('.').pop() else ""
167
+ @decimal = symbols.decimal || "."
168
+ @precision = @format.length
169
+
170
+ apply: (fraction, options = {}) ->
171
+ precision = if options.precision? then options.precision else @precision
172
+ if precision > 0
173
+ @decimal + this.interpolate(this.format_for(options), fraction, "left")
174
+ else
175
+ ""
176
+
177
+ format_for: (options) ->
178
+ precision = if options.precision? then options.precision else @precision
179
+ if precision then ("0" for i in [0...precision]).join("") else @format