twitter_cldr 3.0.0.beta1 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (698) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +16 -2
  3. data/History.txt +9 -1
  4. data/README.md +297 -113
  5. data/Rakefile +97 -17
  6. data/lib/twitter_cldr/collation/collator.rb +12 -3
  7. data/lib/twitter_cldr/collation/trie_builder.rb +1 -1
  8. data/lib/twitter_cldr/{tokenizers/calendars → data_readers}/additional_date_format_selector.rb +6 -4
  9. data/lib/twitter_cldr/data_readers/calendar_data_reader.rb +91 -0
  10. data/lib/twitter_cldr/data_readers/data_reader.rb +32 -0
  11. data/lib/twitter_cldr/data_readers/date_data_reader.rb +26 -0
  12. data/lib/twitter_cldr/data_readers/date_time_data_reader.rb +41 -0
  13. data/lib/twitter_cldr/data_readers/number_data_reader.rb +142 -0
  14. data/lib/twitter_cldr/data_readers/time_data_reader.rb +26 -0
  15. data/lib/twitter_cldr/data_readers/timespan_data_reader.rb +122 -0
  16. data/lib/twitter_cldr/data_readers.rb +17 -0
  17. data/lib/twitter_cldr/formatters/calendars/{datetime_formatter.rb → date_time_formatter.rb} +27 -42
  18. data/lib/twitter_cldr/formatters/calendars/timespan_formatter.rb +3 -64
  19. data/lib/twitter_cldr/formatters/formatter.rb +39 -0
  20. data/lib/twitter_cldr/formatters/list_formatter.rb +22 -12
  21. data/lib/twitter_cldr/formatters/numbers/abbreviated/abbreviated_number_formatter.rb +5 -26
  22. data/lib/twitter_cldr/formatters/numbers/currency_formatter.rb +2 -11
  23. data/lib/twitter_cldr/formatters/numbers/decimal_formatter.rb +4 -2
  24. data/lib/twitter_cldr/formatters/numbers/number_formatter.rb +45 -27
  25. data/lib/twitter_cldr/formatters/numbers/percent_formatter.rb +3 -13
  26. data/lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb +224 -0
  27. data/lib/twitter_cldr/formatters/numbers/rbnf/post_processors/chinese.rb +122 -0
  28. data/lib/twitter_cldr/formatters/numbers/rbnf/rule.rb +93 -0
  29. data/lib/twitter_cldr/formatters/numbers/rbnf/rule_group.rb +20 -0
  30. data/lib/twitter_cldr/formatters/numbers/rbnf/rule_parser.rb +86 -0
  31. data/lib/twitter_cldr/formatters/numbers/rbnf/rule_set.rb +259 -0
  32. data/lib/twitter_cldr/formatters/numbers/rbnf/substitution.rb +30 -0
  33. data/lib/twitter_cldr/formatters/numbers/rbnf.rb +127 -0
  34. data/lib/twitter_cldr/formatters/plurals/plural_formatter.rb +18 -6
  35. data/lib/twitter_cldr/formatters.rb +4 -5
  36. data/lib/twitter_cldr/localized/localized_array.rb +1 -1
  37. data/lib/twitter_cldr/localized/localized_date.rb +6 -3
  38. data/lib/twitter_cldr/localized/localized_datetime.rb +38 -15
  39. data/lib/twitter_cldr/localized/localized_number.rb +40 -24
  40. data/lib/twitter_cldr/localized/localized_object.rb +4 -4
  41. data/lib/twitter_cldr/localized/localized_string.rb +40 -7
  42. data/lib/twitter_cldr/localized/localized_time.rb +9 -2
  43. data/lib/twitter_cldr/localized/localized_timespan.rb +50 -5
  44. data/lib/twitter_cldr/normalization.rb +8 -19
  45. data/lib/twitter_cldr/parsers/parser.rb +50 -0
  46. data/lib/twitter_cldr/parsers/segmentation_parser.rb +137 -0
  47. data/lib/twitter_cldr/parsers/symbol_table.rb +30 -0
  48. data/lib/twitter_cldr/parsers/unicode_regex/character_class.rb +91 -0
  49. data/lib/twitter_cldr/parsers/unicode_regex/character_range.rb +39 -0
  50. data/lib/twitter_cldr/parsers/unicode_regex/character_set.rb +65 -0
  51. data/lib/twitter_cldr/parsers/unicode_regex/component.rb +50 -0
  52. data/lib/twitter_cldr/parsers/unicode_regex/literal.rb +83 -0
  53. data/lib/twitter_cldr/parsers/unicode_regex/unicode_string.rb +41 -0
  54. data/lib/twitter_cldr/parsers/unicode_regex_parser.rb +262 -0
  55. data/lib/twitter_cldr/parsers.rb +5 -1
  56. data/lib/twitter_cldr/resources/casefolder.rb.erb +64 -0
  57. data/lib/twitter_cldr/resources/casefolder_class_generator.rb +75 -0
  58. data/lib/twitter_cldr/resources/download.rb +10 -4
  59. data/lib/twitter_cldr/resources/icu_based_importer.rb +18 -0
  60. data/lib/twitter_cldr/resources/locales_resources_importer.rb +24 -13
  61. data/lib/twitter_cldr/resources/normalization_quick_check_importer.rb +1 -14
  62. data/lib/twitter_cldr/resources/rbnf_test_importer.rb +107 -0
  63. data/lib/twitter_cldr/resources/readme_renderer.rb +115 -0
  64. data/lib/twitter_cldr/resources/tailoring_importer.rb +2 -8
  65. data/lib/twitter_cldr/resources/uli/segment_exceptions_importer.rb +62 -0
  66. data/lib/twitter_cldr/resources/uli.rb +12 -0
  67. data/lib/twitter_cldr/resources/unicode_data_importer.rb +84 -14
  68. data/lib/twitter_cldr/resources/unicode_importer.rb +37 -0
  69. data/lib/twitter_cldr/resources/unicode_properties_importer.rb +79 -0
  70. data/lib/twitter_cldr/resources.rb +8 -1
  71. data/lib/twitter_cldr/shared/break_iterator.rb +213 -0
  72. data/lib/twitter_cldr/shared/calendar.rb +38 -14
  73. data/lib/twitter_cldr/shared/casefolder.rb +210 -0
  74. data/lib/twitter_cldr/shared/code_point.rb +103 -16
  75. data/lib/twitter_cldr/shared/numbering_system.rb +58 -0
  76. data/lib/twitter_cldr/shared/territories.rb +43 -1
  77. data/lib/twitter_cldr/shared/unicode_regex.rb +81 -0
  78. data/lib/twitter_cldr/shared.rb +13 -9
  79. data/lib/twitter_cldr/tokenizers/calendars/date_time_tokenizer.rb +77 -0
  80. data/lib/twitter_cldr/tokenizers/calendars/date_tokenizer.rb +14 -29
  81. data/lib/twitter_cldr/tokenizers/calendars/time_tokenizer.rb +13 -28
  82. data/lib/twitter_cldr/tokenizers/calendars/timespan_tokenizer.rb +11 -87
  83. data/lib/twitter_cldr/tokenizers/numbers/number_tokenizer.rb +16 -71
  84. data/lib/twitter_cldr/tokenizers/numbers/rbnf_tokenizer.rb +53 -0
  85. data/lib/twitter_cldr/tokenizers/pattern_tokenizer.rb +42 -0
  86. data/lib/twitter_cldr/tokenizers/segmentation/segmentation_tokenizer.rb +39 -0
  87. data/lib/twitter_cldr/tokenizers/tokenizer.rb +116 -0
  88. data/lib/twitter_cldr/tokenizers/unicode_regex/unicode_regex_tokenizer.rb +52 -0
  89. data/lib/twitter_cldr/tokenizers.rb +8 -4
  90. data/lib/twitter_cldr/utils/code_points.rb +1 -1
  91. data/lib/twitter_cldr/utils/range_set.rb +242 -0
  92. data/lib/twitter_cldr/utils/yaml.rb +17 -12
  93. data/lib/twitter_cldr/utils.rb +1 -1
  94. data/lib/twitter_cldr/version.rb +1 -1
  95. data/lib/twitter_cldr.rb +2 -1
  96. data/resources/custom/locales/sv/units.yml +8 -0
  97. data/resources/locales/af/calendars.yml +278 -224
  98. data/resources/locales/af/currencies.yml +954 -916
  99. data/resources/locales/af/languages.yml +583 -580
  100. data/resources/locales/af/layout.yml +5 -5
  101. data/resources/locales/af/lists.yml +23 -7
  102. data/resources/locales/af/numbers.yml +59 -54
  103. data/resources/locales/af/plurals.yml +2 -2
  104. data/resources/locales/af/rbnf.yml +261 -0
  105. data/resources/locales/af/territories.yml +264 -263
  106. data/resources/locales/ar/calendars.yml +287 -259
  107. data/resources/locales/ar/currencies.yml +1730 -1692
  108. data/resources/locales/ar/languages.yml +583 -580
  109. data/resources/locales/ar/layout.yml +5 -5
  110. data/resources/locales/ar/lists.yml +23 -7
  111. data/resources/locales/ar/numbers.yml +66 -61
  112. data/resources/locales/ar/plurals.yml +5 -8
  113. data/resources/locales/ar/rbnf.yml +519 -0
  114. data/resources/locales/ar/territories.yml +264 -263
  115. data/resources/locales/be/calendars.yml +238 -237
  116. data/resources/locales/be/currencies.yml +954 -917
  117. data/resources/locales/be/languages.yml +583 -580
  118. data/resources/locales/be/layout.yml +5 -5
  119. data/resources/locales/be/lists.yml +23 -7
  120. data/resources/locales/be/numbers.yml +62 -57
  121. data/resources/locales/be/plurals.yml +7 -4
  122. data/resources/locales/be/rbnf.yml +1288 -0
  123. data/resources/locales/be/territories.yml +264 -263
  124. data/resources/locales/bg/calendars.yml +278 -218
  125. data/resources/locales/bg/currencies.yml +955 -917
  126. data/resources/locales/bg/languages.yml +583 -580
  127. data/resources/locales/bg/layout.yml +5 -5
  128. data/resources/locales/bg/lists.yml +23 -7
  129. data/resources/locales/bg/numbers.yml +62 -57
  130. data/resources/locales/bg/plurals.yml +2 -2
  131. data/resources/locales/bg/rbnf.yml +280 -0
  132. data/resources/locales/bg/territories.yml +264 -263
  133. data/resources/locales/bn/calendars.yml +287 -225
  134. data/resources/locales/bn/currencies.yml +953 -916
  135. data/resources/locales/bn/languages.yml +583 -580
  136. data/resources/locales/bn/layout.yml +5 -5
  137. data/resources/locales/bn/lists.yml +23 -7
  138. data/resources/locales/bn/numbers.yml +62 -57
  139. data/resources/locales/bn/plurals.yml +2 -2
  140. data/resources/locales/bn/rbnf.yml +4 -0
  141. data/resources/locales/bn/territories.yml +264 -263
  142. data/resources/locales/ca/calendars.yml +278 -278
  143. data/resources/locales/ca/currencies.yml +953 -916
  144. data/resources/locales/ca/languages.yml +583 -580
  145. data/resources/locales/ca/layout.yml +5 -5
  146. data/resources/locales/ca/lists.yml +23 -7
  147. data/resources/locales/ca/numbers.yml +62 -57
  148. data/resources/locales/ca/plurals.yml +3 -2
  149. data/resources/locales/ca/rbnf.yml +756 -0
  150. data/resources/locales/ca/territories.yml +264 -263
  151. data/resources/locales/cs/calendars.yml +269 -262
  152. data/resources/locales/cs/currencies.yml +1483 -1172
  153. data/resources/locales/cs/languages.yml +583 -580
  154. data/resources/locales/cs/layout.yml +5 -5
  155. data/resources/locales/cs/lists.yml +23 -7
  156. data/resources/locales/cs/numbers.yml +64 -58
  157. data/resources/locales/cs/plurals.yml +6 -2
  158. data/resources/locales/cs/rbnf.yml +367 -0
  159. data/resources/locales/cs/territories.yml +264 -263
  160. data/resources/locales/cy/calendars.yml +275 -274
  161. data/resources/locales/cy/currencies.yml +1585 -1548
  162. data/resources/locales/cy/languages.yml +583 -580
  163. data/resources/locales/cy/layout.yml +5 -5
  164. data/resources/locales/cy/lists.yml +23 -7
  165. data/resources/locales/cy/numbers.yml +66 -61
  166. data/resources/locales/cy/plurals.yml +4 -3
  167. data/resources/locales/cy/rbnf.yml +298 -0
  168. data/resources/locales/cy/territories.yml +264 -263
  169. data/resources/locales/da/calendars.yml +281 -280
  170. data/resources/locales/da/currencies.yml +954 -916
  171. data/resources/locales/da/languages.yml +583 -580
  172. data/resources/locales/da/layout.yml +5 -5
  173. data/resources/locales/da/lists.yml +23 -7
  174. data/resources/locales/da/numbers.yml +62 -57
  175. data/resources/locales/da/plurals.yml +3 -2
  176. data/resources/locales/da/rbnf.yml +194 -0
  177. data/resources/locales/da/territories.yml +264 -263
  178. data/resources/locales/de/calendars.yml +294 -293
  179. data/resources/locales/de/currencies.yml +954 -916
  180. data/resources/locales/de/languages.yml +583 -580
  181. data/resources/locales/de/layout.yml +5 -5
  182. data/resources/locales/de/lists.yml +23 -7
  183. data/resources/locales/de/numbers.yml +62 -57
  184. data/resources/locales/de/plurals.yml +3 -2
  185. data/resources/locales/de/rbnf.yml +346 -0
  186. data/resources/locales/de/territories.yml +264 -263
  187. data/resources/locales/el/calendars.yml +279 -282
  188. data/resources/locales/el/currencies.yml +954 -916
  189. data/resources/locales/el/languages.yml +583 -580
  190. data/resources/locales/el/layout.yml +5 -5
  191. data/resources/locales/el/lists.yml +23 -7
  192. data/resources/locales/el/numbers.yml +62 -57
  193. data/resources/locales/el/plurals.yml +2 -2
  194. data/resources/locales/el/rbnf.yml +880 -0
  195. data/resources/locales/el/territories.yml +264 -263
  196. data/resources/locales/en/calendars.yml +192 -191
  197. data/resources/locales/en/currencies.yml +953 -915
  198. data/resources/locales/en/languages.yml +583 -580
  199. data/resources/locales/en/layout.yml +5 -5
  200. data/resources/locales/en/lists.yml +23 -7
  201. data/resources/locales/en/numbers.yml +62 -57
  202. data/resources/locales/en/plurals.yml +3 -2
  203. data/resources/locales/en/rbnf.yml +542 -0
  204. data/resources/locales/en/territories.yml +264 -263
  205. data/resources/locales/en-GB/calendars.yml +195 -194
  206. data/resources/locales/en-GB/currencies.yml +953 -915
  207. data/resources/locales/en-GB/languages.yml +583 -580
  208. data/resources/locales/en-GB/layout.yml +5 -5
  209. data/resources/locales/en-GB/lists.yml +23 -7
  210. data/resources/locales/en-GB/numbers.yml +62 -57
  211. data/resources/locales/en-GB/plurals.yml +2 -1
  212. data/resources/locales/en-GB/rbnf.yml +4 -0
  213. data/resources/locales/en-GB/territories.yml +264 -263
  214. data/resources/locales/es/calendars.yml +288 -238
  215. data/resources/locales/es/currencies.yml +953 -922
  216. data/resources/locales/es/languages.yml +583 -580
  217. data/resources/locales/es/layout.yml +5 -5
  218. data/resources/locales/es/lists.yml +23 -7
  219. data/resources/locales/es/numbers.yml +62 -57
  220. data/resources/locales/es/plurals.yml +2 -2
  221. data/resources/locales/es/rbnf.yml +913 -0
  222. data/resources/locales/es/territories.yml +264 -263
  223. data/resources/locales/eu/calendars.yml +277 -218
  224. data/resources/locales/eu/currencies.yml +953 -916
  225. data/resources/locales/eu/languages.yml +583 -580
  226. data/resources/locales/eu/layout.yml +5 -5
  227. data/resources/locales/eu/lists.yml +23 -7
  228. data/resources/locales/eu/numbers.yml +56 -51
  229. data/resources/locales/eu/plurals.yml +2 -2
  230. data/resources/locales/eu/rbnf.yml +4 -0
  231. data/resources/locales/eu/territories.yml +264 -263
  232. data/resources/locales/fa/calendars.yml +294 -293
  233. data/resources/locales/fa/currencies.yml +955 -916
  234. data/resources/locales/fa/languages.yml +583 -580
  235. data/resources/locales/fa/layout.yml +5 -5
  236. data/resources/locales/fa/lists.yml +23 -7
  237. data/resources/locales/fa/numbers.yml +62 -57
  238. data/resources/locales/fa/plurals.yml +2 -2
  239. data/resources/locales/fa/rbnf.yml +157 -0
  240. data/resources/locales/fa/territories.yml +264 -263
  241. data/resources/locales/fi/calendars.yml +284 -283
  242. data/resources/locales/fi/currencies.yml +953 -915
  243. data/resources/locales/fi/languages.yml +583 -580
  244. data/resources/locales/fi/layout.yml +5 -5
  245. data/resources/locales/fi/lists.yml +23 -7
  246. data/resources/locales/fi/numbers.yml +62 -57
  247. data/resources/locales/fi/plurals.yml +3 -2
  248. data/resources/locales/fi/rbnf.yml +206 -0
  249. data/resources/locales/fi/territories.yml +264 -263
  250. data/resources/locales/fil/calendars.yml +281 -230
  251. data/resources/locales/fil/currencies.yml +953 -916
  252. data/resources/locales/fil/languages.yml +583 -580
  253. data/resources/locales/fil/layout.yml +5 -5
  254. data/resources/locales/fil/lists.yml +23 -7
  255. data/resources/locales/fil/numbers.yml +62 -57
  256. data/resources/locales/fil/plurals.yml +3 -2
  257. data/resources/locales/fil/rbnf.yml +158 -0
  258. data/resources/locales/fil/territories.yml +264 -263
  259. data/resources/locales/fr/calendars.yml +297 -296
  260. data/resources/locales/fr/currencies.yml +968 -949
  261. data/resources/locales/fr/languages.yml +583 -580
  262. data/resources/locales/fr/layout.yml +5 -5
  263. data/resources/locales/fr/lists.yml +23 -7
  264. data/resources/locales/fr/numbers.yml +62 -57
  265. data/resources/locales/fr/plurals.yml +2 -2
  266. data/resources/locales/fr/rbnf.yml +621 -0
  267. data/resources/locales/fr/territories.yml +264 -263
  268. data/resources/locales/ga/calendars.yml +192 -191
  269. data/resources/locales/ga/currencies.yml +954 -916
  270. data/resources/locales/ga/languages.yml +583 -580
  271. data/resources/locales/ga/layout.yml +5 -5
  272. data/resources/locales/ga/lists.yml +23 -7
  273. data/resources/locales/ga/numbers.yml +62 -57
  274. data/resources/locales/ga/plurals.yml +4 -3
  275. data/resources/locales/ga/rbnf.yml +615 -0
  276. data/resources/locales/ga/territories.yml +264 -263
  277. data/resources/locales/gl/calendars.yml +283 -217
  278. data/resources/locales/gl/currencies.yml +953 -916
  279. data/resources/locales/gl/languages.yml +583 -580
  280. data/resources/locales/gl/layout.yml +5 -5
  281. data/resources/locales/gl/lists.yml +23 -7
  282. data/resources/locales/gl/numbers.yml +62 -57
  283. data/resources/locales/gl/plurals.yml +3 -2
  284. data/resources/locales/gl/rbnf.yml +4 -0
  285. data/resources/locales/gl/territories.yml +264 -263
  286. data/resources/locales/he/calendars.yml +248 -220
  287. data/resources/locales/he/currencies.yml +992 -932
  288. data/resources/locales/he/languages.yml +583 -580
  289. data/resources/locales/he/layout.yml +5 -5
  290. data/resources/locales/he/lists.yml +23 -7
  291. data/resources/locales/he/numbers.yml +64 -59
  292. data/resources/locales/he/plurals.yml +6 -3
  293. data/resources/locales/he/rbnf.yml +1029 -0
  294. data/resources/locales/he/territories.yml +264 -263
  295. data/resources/locales/hi/calendars.yml +284 -216
  296. data/resources/locales/hi/currencies.yml +953 -915
  297. data/resources/locales/hi/languages.yml +583 -580
  298. data/resources/locales/hi/layout.yml +5 -5
  299. data/resources/locales/hi/lists.yml +23 -7
  300. data/resources/locales/hi/numbers.yml +60 -55
  301. data/resources/locales/hi/plurals.yml +2 -2
  302. data/resources/locales/hi/rbnf.yml +430 -0
  303. data/resources/locales/hi/territories.yml +264 -263
  304. data/resources/locales/hr/calendars.yml +308 -307
  305. data/resources/locales/hr/currencies.yml +1248 -1504
  306. data/resources/locales/hr/languages.yml +583 -580
  307. data/resources/locales/hr/layout.yml +5 -5
  308. data/resources/locales/hr/lists.yml +23 -7
  309. data/resources/locales/hr/numbers.yml +63 -59
  310. data/resources/locales/hr/plurals.yml +12 -4
  311. data/resources/locales/hr/rbnf.yml +599 -0
  312. data/resources/locales/hr/territories.yml +264 -263
  313. data/resources/locales/hu/calendars.yml +285 -284
  314. data/resources/locales/hu/currencies.yml +954 -916
  315. data/resources/locales/hu/languages.yml +583 -580
  316. data/resources/locales/hu/layout.yml +5 -5
  317. data/resources/locales/hu/lists.yml +23 -7
  318. data/resources/locales/hu/numbers.yml +62 -57
  319. data/resources/locales/hu/plurals.yml +2 -2
  320. data/resources/locales/hu/rbnf.yml +363 -0
  321. data/resources/locales/hu/territories.yml +264 -263
  322. data/resources/locales/id/calendars.yml +276 -275
  323. data/resources/locales/id/currencies.yml +954 -916
  324. data/resources/locales/id/languages.yml +583 -580
  325. data/resources/locales/id/layout.yml +5 -5
  326. data/resources/locales/id/lists.yml +23 -7
  327. data/resources/locales/id/numbers.yml +61 -56
  328. data/resources/locales/id/plurals.yml +2 -2
  329. data/resources/locales/id/rbnf.yml +121 -0
  330. data/resources/locales/id/territories.yml +264 -263
  331. data/resources/locales/is/calendars.yml +281 -242
  332. data/resources/locales/is/currencies.yml +954 -916
  333. data/resources/locales/is/languages.yml +583 -580
  334. data/resources/locales/is/layout.yml +5 -5
  335. data/resources/locales/is/lists.yml +23 -7
  336. data/resources/locales/is/numbers.yml +62 -57
  337. data/resources/locales/is/plurals.yml +5 -2
  338. data/resources/locales/is/rbnf.yml +326 -0
  339. data/resources/locales/is/territories.yml +264 -263
  340. data/resources/locales/it/calendars.yml +275 -260
  341. data/resources/locales/it/currencies.yml +953 -920
  342. data/resources/locales/it/languages.yml +583 -580
  343. data/resources/locales/it/layout.yml +5 -5
  344. data/resources/locales/it/lists.yml +23 -7
  345. data/resources/locales/it/numbers.yml +59 -54
  346. data/resources/locales/it/plurals.yml +3 -2
  347. data/resources/locales/it/rbnf.yml +1189 -0
  348. data/resources/locales/it/territories.yml +264 -263
  349. data/resources/locales/ja/calendars.yml +269 -207
  350. data/resources/locales/ja/currencies.yml +953 -915
  351. data/resources/locales/ja/languages.yml +583 -580
  352. data/resources/locales/ja/layout.yml +5 -5
  353. data/resources/locales/ja/lists.yml +23 -7
  354. data/resources/locales/ja/numbers.yml +62 -57
  355. data/resources/locales/ja/plurals.yml +2 -2
  356. data/resources/locales/ja/rbnf.yml +209 -0
  357. data/resources/locales/ja/territories.yml +264 -263
  358. data/resources/locales/ko/calendars.yml +246 -213
  359. data/resources/locales/ko/currencies.yml +953 -915
  360. data/resources/locales/ko/languages.yml +583 -580
  361. data/resources/locales/ko/layout.yml +5 -5
  362. data/resources/locales/ko/lists.yml +23 -7
  363. data/resources/locales/ko/numbers.yml +60 -55
  364. data/resources/locales/ko/plurals.yml +2 -2
  365. data/resources/locales/ko/rbnf.yml +722 -0
  366. data/resources/locales/ko/territories.yml +264 -263
  367. data/resources/locales/lv/calendars.yml +286 -285
  368. data/resources/locales/lv/currencies.yml +1122 -1084
  369. data/resources/locales/lv/languages.yml +583 -580
  370. data/resources/locales/lv/layout.yml +5 -5
  371. data/resources/locales/lv/lists.yml +23 -7
  372. data/resources/locales/lv/numbers.yml +63 -58
  373. data/resources/locales/lv/plurals.yml +11 -3
  374. data/resources/locales/lv/rbnf.yml +238 -0
  375. data/resources/locales/lv/territories.yml +264 -263
  376. data/resources/locales/ms/calendars.yml +280 -279
  377. data/resources/locales/ms/currencies.yml +954 -916
  378. data/resources/locales/ms/languages.yml +583 -580
  379. data/resources/locales/ms/layout.yml +5 -5
  380. data/resources/locales/ms/lists.yml +23 -7
  381. data/resources/locales/ms/numbers.yml +62 -57
  382. data/resources/locales/ms/plurals.yml +2 -2
  383. data/resources/locales/ms/rbnf.yml +130 -0
  384. data/resources/locales/ms/territories.yml +264 -263
  385. data/resources/locales/nb/calendars.yml +284 -283
  386. data/resources/locales/nb/currencies.yml +958 -916
  387. data/resources/locales/nb/languages.yml +583 -580
  388. data/resources/locales/nb/layout.yml +5 -5
  389. data/resources/locales/nb/lists.yml +23 -7
  390. data/resources/locales/nb/numbers.yml +62 -57
  391. data/resources/locales/nb/plurals.yml +2 -2
  392. data/resources/locales/nb/rbnf.yml +191 -0
  393. data/resources/locales/nb/territories.yml +264 -263
  394. data/resources/locales/nl/calendars.yml +285 -284
  395. data/resources/locales/nl/currencies.yml +953 -917
  396. data/resources/locales/nl/languages.yml +583 -580
  397. data/resources/locales/nl/layout.yml +5 -5
  398. data/resources/locales/nl/lists.yml +23 -7
  399. data/resources/locales/nl/numbers.yml +62 -57
  400. data/resources/locales/nl/plurals.yml +3 -2
  401. data/resources/locales/nl/rbnf.yml +320 -0
  402. data/resources/locales/nl/territories.yml +264 -263
  403. data/resources/locales/pl/calendars.yml +288 -287
  404. data/resources/locales/pl/currencies.yml +1326 -1284
  405. data/resources/locales/pl/languages.yml +583 -580
  406. data/resources/locales/pl/layout.yml +5 -5
  407. data/resources/locales/pl/lists.yml +23 -7
  408. data/resources/locales/pl/numbers.yml +64 -59
  409. data/resources/locales/pl/plurals.yml +11 -4
  410. data/resources/locales/pl/rbnf.yml +410 -0
  411. data/resources/locales/pl/territories.yml +264 -263
  412. data/resources/locales/pt/calendars.yml +290 -289
  413. data/resources/locales/pt/currencies.yml +954 -916
  414. data/resources/locales/pt/languages.yml +583 -580
  415. data/resources/locales/pt/layout.yml +5 -5
  416. data/resources/locales/pt/lists.yml +23 -7
  417. data/resources/locales/pt/numbers.yml +62 -57
  418. data/resources/locales/pt/plurals.yml +4 -2
  419. data/resources/locales/pt/rbnf.yml +586 -0
  420. data/resources/locales/pt/territories.yml +264 -263
  421. data/resources/locales/ro/calendars.yml +284 -283
  422. data/resources/locales/ro/currencies.yml +1170 -1132
  423. data/resources/locales/ro/languages.yml +583 -580
  424. data/resources/locales/ro/layout.yml +5 -5
  425. data/resources/locales/ro/lists.yml +23 -7
  426. data/resources/locales/ro/numbers.yml +63 -58
  427. data/resources/locales/ro/plurals.yml +5 -2
  428. data/resources/locales/ro/rbnf.yml +250 -0
  429. data/resources/locales/ro/territories.yml +264 -263
  430. data/resources/locales/ru/calendars.yml +282 -281
  431. data/resources/locales/ru/currencies.yml +1118 -1247
  432. data/resources/locales/ru/languages.yml +583 -580
  433. data/resources/locales/ru/layout.yml +5 -5
  434. data/resources/locales/ru/lists.yml +23 -7
  435. data/resources/locales/ru/numbers.yml +63 -59
  436. data/resources/locales/ru/plurals.yml +8 -4
  437. data/resources/locales/ru/rbnf.yml +385 -0
  438. data/resources/locales/ru/territories.yml +264 -263
  439. data/resources/locales/sk/calendars.yml +254 -251
  440. data/resources/locales/sk/currencies.yml +1174 -1008
  441. data/resources/locales/sk/languages.yml +583 -580
  442. data/resources/locales/sk/layout.yml +5 -5
  443. data/resources/locales/sk/lists.yml +23 -7
  444. data/resources/locales/sk/numbers.yml +64 -58
  445. data/resources/locales/sk/plurals.yml +6 -2
  446. data/resources/locales/sk/rbnf.yml +304 -0
  447. data/resources/locales/sk/territories.yml +264 -263
  448. data/resources/locales/sq/calendars.yml +283 -206
  449. data/resources/locales/sq/currencies.yml +954 -916
  450. data/resources/locales/sq/languages.yml +583 -580
  451. data/resources/locales/sq/layout.yml +5 -5
  452. data/resources/locales/sq/lists.yml +23 -7
  453. data/resources/locales/sq/numbers.yml +62 -57
  454. data/resources/locales/sq/plurals.yml +2 -2
  455. data/resources/locales/sq/rbnf.yml +181 -0
  456. data/resources/locales/sq/territories.yml +264 -263
  457. data/resources/locales/sr/calendars.yml +290 -289
  458. data/resources/locales/sr/currencies.yml +1251 -1508
  459. data/resources/locales/sr/languages.yml +583 -580
  460. data/resources/locales/sr/layout.yml +5 -5
  461. data/resources/locales/sr/lists.yml +23 -7
  462. data/resources/locales/sr/numbers.yml +62 -58
  463. data/resources/locales/sr/plurals.yml +12 -4
  464. data/resources/locales/sr/rbnf.yml +429 -0
  465. data/resources/locales/sr/territories.yml +264 -263
  466. data/resources/locales/sv/calendars.yml +290 -289
  467. data/resources/locales/sv/currencies.yml +960 -930
  468. data/resources/locales/sv/languages.yml +583 -580
  469. data/resources/locales/sv/layout.yml +5 -5
  470. data/resources/locales/sv/lists.yml +23 -7
  471. data/resources/locales/sv/numbers.yml +63 -58
  472. data/resources/locales/sv/plurals.yml +3 -2
  473. data/resources/locales/sv/rbnf.yml +692 -0
  474. data/resources/locales/sv/territories.yml +264 -263
  475. data/resources/locales/ta/calendars.yml +281 -266
  476. data/resources/locales/ta/currencies.yml +953 -915
  477. data/resources/locales/ta/languages.yml +583 -580
  478. data/resources/locales/ta/layout.yml +5 -5
  479. data/resources/locales/ta/lists.yml +23 -7
  480. data/resources/locales/ta/numbers.yml +62 -57
  481. data/resources/locales/ta/plurals.yml +2 -2
  482. data/resources/locales/ta/rbnf.yml +241 -0
  483. data/resources/locales/ta/territories.yml +264 -263
  484. data/resources/locales/th/calendars.yml +278 -289
  485. data/resources/locales/th/currencies.yml +953 -915
  486. data/resources/locales/th/languages.yml +583 -580
  487. data/resources/locales/th/layout.yml +5 -5
  488. data/resources/locales/th/lists.yml +23 -7
  489. data/resources/locales/th/numbers.yml +62 -57
  490. data/resources/locales/th/plurals.yml +2 -2
  491. data/resources/locales/th/rbnf.yml +119 -0
  492. data/resources/locales/th/territories.yml +264 -263
  493. data/resources/locales/tr/calendars.yml +287 -286
  494. data/resources/locales/tr/currencies.yml +953 -916
  495. data/resources/locales/tr/languages.yml +583 -580
  496. data/resources/locales/tr/layout.yml +5 -5
  497. data/resources/locales/tr/lists.yml +23 -7
  498. data/resources/locales/tr/numbers.yml +61 -56
  499. data/resources/locales/tr/plurals.yml +2 -2
  500. data/resources/locales/tr/rbnf.yml +277 -0
  501. data/resources/locales/tr/territories.yml +264 -263
  502. data/resources/locales/uk/calendars.yml +286 -252
  503. data/resources/locales/uk/currencies.yml +1311 -1070
  504. data/resources/locales/uk/languages.yml +583 -580
  505. data/resources/locales/uk/layout.yml +5 -5
  506. data/resources/locales/uk/lists.yml +23 -7
  507. data/resources/locales/uk/numbers.yml +64 -59
  508. data/resources/locales/uk/plurals.yml +10 -4
  509. data/resources/locales/uk/rbnf.yml +430 -0
  510. data/resources/locales/uk/territories.yml +264 -263
  511. data/resources/locales/ur/calendars.yml +267 -228
  512. data/resources/locales/ur/currencies.yml +954 -916
  513. data/resources/locales/ur/languages.yml +583 -580
  514. data/resources/locales/ur/layout.yml +5 -5
  515. data/resources/locales/ur/lists.yml +23 -7
  516. data/resources/locales/ur/numbers.yml +62 -57
  517. data/resources/locales/ur/plurals.yml +3 -2
  518. data/resources/locales/ur/rbnf.yml +4 -0
  519. data/resources/locales/ur/territories.yml +264 -263
  520. data/resources/locales/vi/calendars.yml +256 -236
  521. data/resources/locales/vi/currencies.yml +953 -915
  522. data/resources/locales/vi/languages.yml +583 -580
  523. data/resources/locales/vi/layout.yml +5 -5
  524. data/resources/locales/vi/lists.yml +23 -7
  525. data/resources/locales/vi/numbers.yml +62 -57
  526. data/resources/locales/vi/plurals.yml +2 -2
  527. data/resources/locales/vi/rbnf.yml +164 -0
  528. data/resources/locales/vi/territories.yml +264 -263
  529. data/resources/locales/zh/calendars.yml +266 -265
  530. data/resources/locales/zh/currencies.yml +953 -915
  531. data/resources/locales/zh/languages.yml +583 -580
  532. data/resources/locales/zh/layout.yml +5 -5
  533. data/resources/locales/zh/lists.yml +23 -7
  534. data/resources/locales/zh/numbers.yml +62 -57
  535. data/resources/locales/zh/plurals.yml +2 -2
  536. data/resources/locales/zh/rbnf.yml +689 -0
  537. data/resources/locales/zh/territories.yml +264 -263
  538. data/resources/locales/zh-Hant/calendars.yml +266 -265
  539. data/resources/locales/zh-Hant/currencies.yml +955 -915
  540. data/resources/locales/zh-Hant/languages.yml +583 -580
  541. data/resources/locales/zh-Hant/layout.yml +5 -5
  542. data/resources/locales/zh-Hant/lists.yml +23 -7
  543. data/resources/locales/zh-Hant/numbers.yml +62 -57
  544. data/resources/locales/zh-Hant/plurals.yml +2 -2
  545. data/resources/locales/zh-Hant/rbnf.yml +647 -0
  546. data/resources/locales/zh-Hant/territories.yml +264 -263
  547. data/resources/shared/currency_digits_and_rounding.yml +67 -64
  548. data/resources/shared/numbering_systems.yml +176 -0
  549. data/resources/shared/rbnf_root.yml +1573 -0
  550. data/resources/shared/segments/segments_root.yml +728 -0
  551. data/resources/shared/segments/tailorings/en.yml +8 -0
  552. data/resources/uli/segments/de.yml +128 -0
  553. data/resources/uli/segments/en.yml +154 -0
  554. data/resources/uli/segments/es.yml +112 -0
  555. data/resources/uli/segments/fr.yml +47 -0
  556. data/resources/uli/segments/it.yml +37 -0
  557. data/resources/uli/segments/pt.yml +173 -0
  558. data/resources/uli/segments/ru.yml +10 -0
  559. data/resources/unicode_data/casefolding.yml +4765 -0
  560. data/resources/unicode_data/indices/bidi_class.yml +4572 -0
  561. data/resources/unicode_data/indices/bidi_mirrored.yml +3087 -0
  562. data/resources/unicode_data/indices/category.yml +10918 -0
  563. data/resources/unicode_data/indices/keys.yml +101 -0
  564. data/resources/unicode_data/properties/line_break.yml +9269 -0
  565. data/resources/unicode_data/properties/sentence_break.yml +8067 -0
  566. data/resources/unicode_data/properties/word_break.yml +3001 -0
  567. data/spec/collation/collation_spec.rb +2 -1
  568. data/spec/collation/collator_spec.rb +4 -3
  569. data/spec/collation/tailoring_spec.rb +2 -2
  570. data/spec/collation/tailoring_tests/he.txt +5 -2
  571. data/spec/{tokenizers/calendars → data_readers}/additional_date_format_selector_spec.rb +13 -13
  572. data/spec/data_readers/date_time_data_reader_spec.rb +26 -0
  573. data/spec/data_readers/number_data_reader_spec.rb +18 -0
  574. data/spec/data_readers/timespan_data_reader.rb +22 -0
  575. data/spec/formatters/calendars/datetime_formatter_spec.rb +18 -22
  576. data/spec/formatters/list_formatter_spec.rb +16 -87
  577. data/spec/formatters/numbers/abbreviated/abbreviated_number_formatter_spec.rb +15 -59
  578. data/spec/formatters/numbers/abbreviated/long_decimal_formatter_spec.rb +32 -17
  579. data/spec/formatters/numbers/abbreviated/short_decimal_formatter_spec.rb +33 -17
  580. data/spec/formatters/numbers/currency_formatter_spec.rb +18 -13
  581. data/spec/formatters/numbers/decimal_formatter_spec.rb +16 -18
  582. data/spec/formatters/numbers/number_formatter_spec.rb +40 -31
  583. data/spec/formatters/numbers/percent_formatter_spec.rb +14 -6
  584. data/spec/formatters/numbers/rbnf/allowed_failures.yml +74 -0
  585. data/spec/formatters/numbers/rbnf/locales/af/rbnf_test.yml +706 -0
  586. data/spec/formatters/numbers/rbnf/locales/ar/rbnf_test.yml +706 -0
  587. data/spec/formatters/numbers/rbnf/locales/be/rbnf_test.yml +1174 -0
  588. data/spec/formatters/numbers/rbnf/locales/bg/rbnf_test.yml +706 -0
  589. data/spec/formatters/numbers/rbnf/locales/bn/rbnf_test.yml +1291 -0
  590. data/spec/formatters/numbers/rbnf/locales/ca/rbnf_test.yml +1174 -0
  591. data/spec/formatters/numbers/rbnf/locales/cs/rbnf_test.yml +823 -0
  592. data/spec/formatters/numbers/rbnf/locales/cy/rbnf_test.yml +940 -0
  593. data/spec/formatters/numbers/rbnf/locales/da/rbnf_test.yml +940 -0
  594. data/spec/formatters/numbers/rbnf/locales/de/rbnf_test.yml +940 -0
  595. data/spec/formatters/numbers/rbnf/locales/el/rbnf_test.yml +1174 -0
  596. data/spec/formatters/numbers/rbnf/locales/en/rbnf_test.yml +1291 -0
  597. data/spec/formatters/numbers/rbnf/locales/en-GB/rbnf_test.yml +1291 -0
  598. data/spec/formatters/numbers/rbnf/locales/es/rbnf_test.yml +1642 -0
  599. data/spec/formatters/numbers/rbnf/locales/eu/rbnf_test.yml +1291 -0
  600. data/spec/formatters/numbers/rbnf/locales/fa/rbnf_test.yml +589 -0
  601. data/spec/formatters/numbers/rbnf/locales/fi/rbnf_test.yml +706 -0
  602. data/spec/formatters/numbers/rbnf/locales/fil/rbnf_test.yml +706 -0
  603. data/spec/formatters/numbers/rbnf/locales/fr/rbnf_test.yml +1408 -0
  604. data/spec/formatters/numbers/rbnf/locales/ga/rbnf_test.yml +940 -0
  605. data/spec/formatters/numbers/rbnf/locales/gl/rbnf_test.yml +1291 -0
  606. data/spec/formatters/numbers/rbnf/locales/he/rbnf_test.yml +1057 -0
  607. data/spec/formatters/numbers/rbnf/locales/hi/rbnf_test.yml +823 -0
  608. data/spec/formatters/numbers/rbnf/locales/hr/rbnf_test.yml +1174 -0
  609. data/spec/formatters/numbers/rbnf/locales/hu/rbnf_test.yml +940 -0
  610. data/spec/formatters/numbers/rbnf/locales/id/rbnf_test.yml +706 -0
  611. data/spec/formatters/numbers/rbnf/locales/is/rbnf_test.yml +823 -0
  612. data/spec/formatters/numbers/rbnf/locales/it/rbnf_test.yml +1174 -0
  613. data/spec/formatters/numbers/rbnf/locales/ja/rbnf_test.yml +823 -0
  614. data/spec/formatters/numbers/rbnf/locales/ko/rbnf_test.yml +1408 -0
  615. data/spec/formatters/numbers/rbnf/locales/lv/rbnf_test.yml +706 -0
  616. data/spec/formatters/numbers/rbnf/locales/ms/rbnf_test.yml +706 -0
  617. data/spec/formatters/numbers/rbnf/locales/nb/rbnf_test.yml +940 -0
  618. data/spec/formatters/numbers/rbnf/locales/nl/rbnf_test.yml +706 -0
  619. data/spec/formatters/numbers/rbnf/locales/pl/rbnf_test.yml +823 -0
  620. data/spec/formatters/numbers/rbnf/locales/pt/rbnf_test.yml +1174 -0
  621. data/spec/formatters/numbers/rbnf/locales/ro/rbnf_test.yml +823 -0
  622. data/spec/formatters/numbers/rbnf/locales/ru/rbnf_test.yml +823 -0
  623. data/spec/formatters/numbers/rbnf/locales/sk/rbnf_test.yml +823 -0
  624. data/spec/formatters/numbers/rbnf/locales/sq/rbnf_test.yml +706 -0
  625. data/spec/formatters/numbers/rbnf/locales/sr/rbnf_test.yml +940 -0
  626. data/spec/formatters/numbers/rbnf/locales/sv/rbnf_test.yml +1876 -0
  627. data/spec/formatters/numbers/rbnf/locales/ta/rbnf_test.yml +706 -0
  628. data/spec/formatters/numbers/rbnf/locales/th/rbnf_test.yml +706 -0
  629. data/spec/formatters/numbers/rbnf/locales/tr/rbnf_test.yml +706 -0
  630. data/spec/formatters/numbers/rbnf/locales/uk/rbnf_test.yml +823 -0
  631. data/spec/formatters/numbers/rbnf/locales/ur/rbnf_test.yml +1291 -0
  632. data/spec/formatters/numbers/rbnf/locales/vi/rbnf_test.yml +706 -0
  633. data/spec/formatters/numbers/rbnf/locales/zh/rbnf_test.yml +940 -0
  634. data/spec/formatters/numbers/rbnf/locales/zh-Hant/rbnf_test.yml +940 -0
  635. data/spec/formatters/numbers/rbnf/rbnf_spec.rb +98 -0
  636. data/spec/formatters/plurals/plural_formatter_spec.rb +4 -4
  637. data/spec/formatters/plurals/rules_spec.rb +5 -5
  638. data/spec/localized/localized_date_spec.rb +1 -1
  639. data/spec/localized/localized_datetime_spec.rb +8 -13
  640. data/spec/localized/localized_number_spec.rb +17 -32
  641. data/spec/localized/localized_object_spec.rb +0 -5
  642. data/spec/localized/localized_string_spec.rb +40 -2
  643. data/spec/localized/localized_time_spec.rb +3 -6
  644. data/spec/localized/localized_timespan_spec.rb +144 -0
  645. data/spec/normalization_spec.rb +12 -12
  646. data/spec/parsers/number_parser_spec.rb +5 -5
  647. data/spec/parsers/parser_spec.rb +60 -0
  648. data/spec/parsers/segmentation_parser_spec.rb +96 -0
  649. data/spec/parsers/symbol_table_spec.rb +32 -0
  650. data/spec/parsers/unicode_regex/character_class_spec.rb +117 -0
  651. data/spec/parsers/unicode_regex/character_range_spec.rb +21 -0
  652. data/spec/parsers/unicode_regex/character_set_spec.rb +36 -0
  653. data/spec/parsers/unicode_regex/literal_spec.rb +34 -0
  654. data/spec/parsers/unicode_regex/unicode_string_spec.rb +22 -0
  655. data/spec/parsers/unicode_regex_parser_spec.rb +86 -0
  656. data/spec/readme_spec.rb +8 -269
  657. data/spec/shared/break_iterator_spec.rb +72 -0
  658. data/spec/shared/calendar_spec.rb +5 -4
  659. data/spec/shared/casefolder_spec.rb +30 -0
  660. data/spec/shared/casefolding.txt +251 -0
  661. data/spec/shared/casefolding_expected.txt +251 -0
  662. data/spec/shared/code_point_spec.rb +44 -14
  663. data/spec/shared/numbering_system_spec.rb +41 -0
  664. data/spec/shared/territories_spec.rb +14 -6
  665. data/spec/shared/unicode_regex_spec.rb +203 -0
  666. data/spec/spec_helper.rb +17 -0
  667. data/spec/tokenizers/calendars/date_tokenizer_spec.rb +26 -30
  668. data/spec/tokenizers/calendars/datetime_tokenizer_spec.rb +11 -90
  669. data/spec/tokenizers/calendars/time_tokenizer_spec.rb +5 -5
  670. data/spec/tokenizers/calendars/timespan_tokenizer_spec.rb +17 -7
  671. data/spec/tokenizers/numbers/number_tokenizer_spec.rb +28 -27
  672. data/spec/tokenizers/segmentation/segmentation_tokenizer_spec.rb +40 -0
  673. data/spec/tokenizers/unicode_regex/unicode_regex_tokenizer_spec.rb +190 -0
  674. data/spec/utils/range_set_spec.rb +171 -0
  675. data/spec/utils/yaml/yaml_spec.rb +62 -51
  676. data/twitter_cldr.gemspec +1 -1
  677. metadata +199 -30
  678. data/lib/twitter_cldr/formatters/base.rb +0 -47
  679. data/lib/twitter_cldr/formatters/calendars/date_formatter.rb +0 -19
  680. data/lib/twitter_cldr/formatters/calendars/time_formatter.rb +0 -19
  681. data/lib/twitter_cldr/normalization/base.rb +0 -37
  682. data/lib/twitter_cldr/normalization/hangul.rb +0 -79
  683. data/lib/twitter_cldr/normalization/nfc.rb +0 -24
  684. data/lib/twitter_cldr/normalization/nfd.rb +0 -26
  685. data/lib/twitter_cldr/normalization/nfkc.rb +0 -114
  686. data/lib/twitter_cldr/normalization/nfkd.rb +0 -120
  687. data/lib/twitter_cldr/normalization/quick_check.rb +0 -41
  688. data/lib/twitter_cldr/tokenizers/base.rb +0 -169
  689. data/lib/twitter_cldr/tokenizers/calendars/datetime_tokenizer.rb +0 -131
  690. data/lib/twitter_cldr/utils/territories.rb +0 -56
  691. data/spec/formatters/base_spec.rb +0 -18
  692. data/spec/formatters/calendars/timespan_formatter_spec.rb +0 -112
  693. data/spec/normalization/NormalizationTestShort.txt +0 -602
  694. data/spec/normalization/base_spec.rb +0 -16
  695. data/spec/normalization/hangul_spec.rb +0 -42
  696. data/spec/normalization/normalization_spec.rb +0 -113
  697. data/spec/tokenizers/base_spec.rb +0 -259
  698. data/spec/utils/territories_spec.rb +0 -16
@@ -0,0 +1,251 @@
1
+ dreiländereck
2
+ aus wikipedia, der freien enzyklopädie
3
+ wechseln zu: navigation, suche
4
+ dreiländereck d/f/ch am rheinhafen von basel
5
+ vaalserberg: dreiländereck (d/nl/b)
6
+ sevening: europadenkmal (d/b/l)
7
+ denkmal für das „schengener abkommen“ in schengen, luxemburg (d/l/f)
8
+ zittau: dreiländereck (d/cz/pl)
9
+ treriksröset: dreiländereck fin/n/s
10
+ berg ofen: grenzstein dreiländereck i/slo/a
11
+ monte roraima: dreiländereck brasilien, guyana, venezuela
12
+ markstein auf der argentinischen seite des dreiländerecks ra/br/py
13
+
14
+ ein dreiländereck – auch länderdreieck genannt – ist der geografische punkt, wo drei gleichrangige grenzen und auch drei gleich geartete territorien (länder, staaten, bundesländer) aufeinander treffen. bekannt werden solche dreiländerecke meist, wenn sie schon längere zeit bestehen oder aber, wenn drei kulturen aufeinander treffen.
15
+
16
+ meist ist diese stelle durch die jeweiligen staatsflaggen oder monumente markiert.
17
+
18
+ von den zurzeit 195 staaten auf der erde haben 134 einen solchen grenzpunkt. insgesamt existieren 157 dreiländerecke auf der erde. die häufigkeit des vorkommens von dreiländerecken ist abhängig von der anzahl der nachbarn, aber auch von der anzahl der seegrenzen. so haben inselnationen wie japan keines, wie auch staaten wie portugal oder dänemark, die nur ein nachbarland haben bzw. vollständig von einem staat umgeben sind (wie z. b. san marino). auch sind zwei nachbarländer kein hinreichendes kriterium, wie es z. b. bzgl. der usa in nordamerika ist. auch die fläche eines staats hat nur bedingt mit der anzahl an dreiländerecken zu tun: der staat mit den meisten ist china mit 15, während russland, der flächenmässig grösste staat der welt, nur acht hat.
19
+
20
+ österreich hat an seinen grenzen neun dreiländerecke (und ist damit der staat mit den meisten dreiländerecken innerhalb europas), deutschland sieben, die schweiz sechs und liechtenstein weist zwei dreiländerecke auf.
21
+ inhaltsverzeichnis
22
+ [verbergen]
23
+
24
+ * 1 dreiländerecke weltweit
25
+ o 1.1 europa
26
+ o 1.2 mittel- und südamerika
27
+ o 1.3 nordamerika
28
+ o 1.4 afrika
29
+ o 1.5 asien
30
+ * 2 ehemalige dreiländerecke
31
+ o 2.1 europa
32
+ * 3 siehe auch
33
+ * 4 weblinks
34
+
35
+ dreiländerecke weltweit [bearbeiten]
36
+
37
+ alphabetische liste von allen 46 internationalen dreiländerecken in europa:
38
+
39
+ europa [bearbeiten]
40
+
41
+ * albanien – griechenland – mazedonien, am prespa-see
42
+ * albanien – mazedonien – kosovo, südlich von prizren in kosovo
43
+ * albanien – montenegro – kosovo, nördlich von bajram curri in albanien
44
+ * andorra – frankreich – spanien (osteck), in den pyrenäen
45
+ * andorra – frankreich – spanien (westeck), in den pyrenäen
46
+ * belgien – deutschland – luxemburg, am europadenkmal an der our bei sevenig
47
+ * belgien – deutschland – niederlande, auf dem vaalserberg westlich von aachen (war zeitweilig auch wegen neutral-moresnet ein vierländereck)
48
+ * belgien – frankreich – luxemburg, bei longwy, pétange, aubange
49
+ * bosnien-herzegowina – kroatien – montenegro, nordöstlich von gruda in kroatien
50
+ * bosnien-herzegowina – kroatien – serbien, westlich von omjelovo in bosnien-herzegowina
51
+ * bosnien-herzegowina – montenegro – serbien, westlich von priboj in serbien
52
+ * bulgarien – griechenland – mazedonien, westlich von petritsch in bulgarien
53
+ * bulgarien – griechenland – türkei, bei der griechischen gemeinde trigono, westlich des türkischen edirne
54
+ * bulgarien – mazedonien – serbien, westlich von kjustendil in bulgarien
55
+ * bulgarien – rumänien – serbien, östlich von negotin in serbien
56
+ * deutschland – frankreich – luxemburg, bei perl, apach, schengen in der mosel
57
+ * deutschland – frankreich – schweiz, bei basel, hüningen und weil am rhein im rhein
58
+ * deutschland – polen – tschechien, südöstlich von zittau
59
+ * deutschland – schweiz – österreich, im bodensee
60
+ * deutschland – tschechien – österreich, am plöckenstein (1320 m), böhmerwald
61
+ * estland – lettland – russland, westlich von stuborova in lettland
62
+ * finnland – norwegen – russland, nordöstlich von ivalo in finnland
63
+ * finnland – norwegen – schweden, schwedisch treriksröset, norwegisch treriksrøysa, finnisch kolmen valtakunnan rajapyykki, westlich von kilpisjärvi in finnland
64
+ * frankreich – italien – schweiz, auf der bergspitze des mont dolent (3820 m) nahe dem mont blanc
65
+ * italien – schweiz – österreich, nähe reschenpass an der „dreiländerecke“ (2.179 m)
66
+ * italien – slowenien – österreich, bei arnoldstein auf dem gipfel des ofen (slow. peč) alias dreiländereck
67
+ * kroatien – serbien – ungarn, nordöstlich von gruda in kroatien
68
+ * kroatien – slowenien – ungarn, südöstlich von letenye in ungarn
69
+ * lettland – litauen – weissrussland, nordöstlich von visaginas in litauen
70
+ * lettland – russland – weissrussland, südöstlich von suskova in lettland
71
+ * liechtenstein – schweiz – österreich (nordeck), im rhein bei sennwald
72
+ * liechtenstein – schweiz – österreich (südeck), im rätikon am naafkopf (2571 m)
73
+ * litauen – polen – russland (kaliningrad), westlich von wizajny in polen
74
+ * litauen – polen – weissrussland, westlich von druskininkai in litauen
75
+ * moldawien – rumänien – ukraine (nordeck), nordöstlich von dărăbani in rumänien
76
+ * moldawien – rumänien – ukraine (südeck), östlich von galaţi in rumänien
77
+ * polen – slowakei – tschechien, bei hrčava in tschechien und jaworzynka in polen
78
+ * polen – slowakei – ukraine, nordöstlich von nova sedlica in slowakei
79
+ * polen – ukraine – weissrussland, südöstlich von wlodawa in polen
80
+ * rumänien – serbien – ungarn, südlich von kübekhaza in ungarn
81
+ * rumänien – ukraine – ungarn, nordöstlich von bercu in rumänien
82
+ * russland – ukraine – weissrussland, südöstlich von homel in weissrussland
83
+ * slowakei – ukraine – ungarn, bei zahony in ungarn
84
+ * slowakei – ungarn – österreich, bei deutsch jahrndorf in österreich, rajka in ungarn
85
+ * slowakei – tschechien – österreich, bei hohenau an der march in österreich
86
+ * slowenien – österreich – ungarn, östlich von tauka in österreich
87
+
88
+ die nachfolgende auflistung zeigt eine kleine auswahl existierender dreiländerecke in anderen kontinenten:
89
+
90
+ mittel- und südamerika [bearbeiten]
91
+
92
+ in mittelamerika existieren zwei dreiländerecke und in südamerika 13:
93
+
94
+ * argentinien – bolivien – chile
95
+ * argentinien – bolivien – paraguay
96
+ * argentinien – brasilien – paraguay: hito tres fronteras, bekannt durch die iguaçu-wasserfälle
97
+ * argentinien – brasilien – uruguay
98
+ * mittelamerika: belize – guatemala – mexiko
99
+ * bolivien – brasilien – paraguay
100
+ * bolivien – brasilien – peru
101
+ * bolivien – chile – peru
102
+ * brasilien – kolumbien – peru: tres fronteras, im amazonas-regenwald mit einer dreistadt tabatinga, leticia, santa rosa mit mehr als 100.000 einwohnern
103
+ * brasilien – kolumbien – venezuela
104
+ * brasilien – französisch-guayana – surinam
105
+ * brasilien – guyana – surinam
106
+ * brasilien – guyana – venezuela: auf dem berg monte roraima
107
+ * kolumbien – ecuador – peru
108
+ * mittelamerika: guatemala – honduras – el salvador
109
+
110
+ nordamerika [bearbeiten]
111
+
112
+ da mit kanada und den vereinigten staaten nur zwei staaten in nordamerika neben einigen französischen inseln an der kanadischen ostküste existieren, kann es dort keine dreiländerecke geben.
113
+
114
+ die bundesstaaten der vereinigten staaten bilden 38 tri-state areas (dreistaatengebiete).
115
+
116
+ afrika [bearbeiten]
117
+
118
+ in afrika existieren 55 dreiländerecke:
119
+
120
+ * südafrika – botswana – namibia
121
+ * südafrika – botswana – simbabwe
122
+ * südafrika – mosambik – simbabwe (siehe crook’s corner)
123
+ * südafrika – mosambik – swasiland (nord)
124
+ * südafrika – mosambik – swasiland (süd)
125
+ * algerien – libyen – niger
126
+ * algerien – libyen – tunesien
127
+ * algerien – mali – mauretanien
128
+ * algerien – mali – niger
129
+ * algerien – marokko – west-sahara
130
+ * algerien – mauretanien – west-sahara
131
+ * angola – namibia – sambia
132
+ * angola – republik kongo – demokratische republik kongo: cabinda
133
+ * angola – demokratische republik kongo – sambia
134
+ * benin – burkina faso – niger
135
+ * benin – burkina faso – togo
136
+ * benin – niger – nigeria
137
+ * botswana – sambia – simbabwe
138
+ * burkina faso – elfenbeinküste – ghana
139
+ * burkina faso – elfenbeinküste – mali
140
+ * burkina faso – ghana – togo
141
+ * burkina faso – mali – niger
142
+ * burundi – demokratische republik kongo – ruanda
143
+ * burundi – ruanda – tansania
144
+ * kamerun – gabun – äquatorial-guinea
145
+ * kamerun – gabun – republik kongo
146
+ * kamerun – nigeria – tschad
147
+ * kamerun – zentralafrikanische republik – republik kongo
148
+ * kamerun – zentralafrikanische republik – tschad
149
+ * elfenbeinküste – guinea – liberia
150
+ * elfenbeinküste – guinea – mali
151
+ * dschibuti – eritrea – äthiopien
152
+ * dschibuti – äthiopien – somalia
153
+ * ägypten – libyen – sudan
154
+ * eritrea – äthiopien – sudan
155
+ * äthiopien – kenia – somalia
156
+ * äthiopien – kenia – sudan
157
+ * guinea – guinea-bissau – senegal
158
+ * guinea – liberia – sierra leone
159
+ * kenia – uganda – sudan
160
+ * kenia – uganda – tansania
161
+ * libyen – niger – tschad
162
+ * libyen – sudan – tschad
163
+ * malawi – mosambik – tansania
164
+ * malawi – mosambik – sambia
165
+ * mosambik – tansania – sambia
166
+ * mosambik – sambia – simbabwe: bei zumbo
167
+ * mali – mauretanien – senegal
168
+ * niger – nigeria – tschad
169
+ * uganda – demokratische republik kongo – ruanda
170
+ * uganda – demokratische republik kongo – sudan
171
+ * uganda – ruanda – tansania
172
+ * zentralafrikanische republik – republik kongo – demokratische republik kongo
173
+ * zentralafrikanische republik – demokratische republik kongo – sudan
174
+ * demokratische republik kongo – tansania – sambia
175
+
176
+ asien [bearbeiten]
177
+
178
+ in asien existieren 42 dreiländerecke:
179
+
180
+ * afghanistan – iran – pakistan
181
+ * afghanistan – iran – turkmenistan
182
+ * afghanistan – vr china – pakistan
183
+ * afghanistan – vr china – tadschikistan
184
+ * afghanistan – usbekistan – tadschikistan
185
+ * afghanistan – usbekistan – turkmenistan
186
+ * saudi-arabien – vereinigte arabische emirate – oman: umm az zamul
187
+ * saudi-arabien – irak – jordanien
188
+ * saudi-arabien – irak – kuwait
189
+ * saudi-arabien – oman – jemen
190
+ * armenien – aserbaidschan – georgien
191
+
192
+ mekong und goldenes dreieck
193
+
194
+ * armenien – aserbaidschan – iran
195
+ * armenien – aserbaidschan – iran
196
+ * armenien – aserbaidschan – türkei
197
+ * gaza-streifen – ägypten – israel
198
+ * bangladesch – burma – indien
199
+ * bhutan – vr china – indien (osten)
200
+ * bhutan – vr china – indien (westen)
201
+ * burma – vr china – indien
202
+ * burma – vr china – laos
203
+ * burma – laos – thailand: goldenes dreieck
204
+ * kambodscha – laos – thailand
205
+ * kambodscha – laos – vietnam
206
+ * vr china – indien – nepal (osten)
207
+ * vr china – indien – nepal (westen)
208
+ * vr china – indien – pakistan
209
+ * vr china – kasachstan – kirgisien
210
+ * vr china – kasachstan – russland
211
+ * vr china – laos – vietnam
212
+ * vr china – mongolei – russland (osten)
213
+ * vr china – mongolei – russland (westen)
214
+ * vr china – nord-korea – russland in der region primorje
215
+ * palästina – israel – jordanien (nord)
216
+ * palästina – israel – jordanien (süden)
217
+ * irak – iran – türkei
218
+ * irak – jordanien – syrien
219
+ * irak – syrien – türkei
220
+ * israel – jordanien – syrien
221
+ * israel – libanon – syrien: mount hermon
222
+ * kasachstan – kirgisien – usbekistan
223
+ * kasachstan – usbekistan – turkmenistan
224
+ * kirgisien – usbekistan – tadschikistan
225
+
226
+ die dreiländerecke vr china – kasachstan – russland sowie vr china – mongolei – russland liegen im altai nur 50 kilometer voneinander entfernt.
227
+
228
+ ehemalige dreiländerecke [bearbeiten]
229
+
230
+ infolge von grenzverschiebungen kommt es vor, dass dreiländerecke zu normalen staatsgrenzen werden, aber dennoch ein markanter punkt bleiben:
231
+
232
+ europa [bearbeiten]
233
+
234
+ * italien – schweiz – österreich; bis zur abtretung südtirols von österreich an italien, nähe stilfserjoch auf der dreisprachenspitze. es ist heute ein „dreispracheneck“ geblieben mit italienisch (lombardei), deutsch (südtirol) und rätoromanisch (schweiz).
235
+ * br deutschland – ddr – tschechoslowakei; bis zur wiedervereinigung an der stelle, wo bayern, sachsen und böhmen (tschechien) aufeinander treffen, es handelt sich um einen punkt in der nähe der orte regnitzlosau, landkreis hof, bayern; eichigt, vogtlandkreis, sachsen; und hranice u aše, okres cheb, heute tschechische republik.
236
+
237
+ siehe auch [bearbeiten]
238
+ commons commons: dreiländereck – bilder, videos und audiodateien
239
+
240
+ * dreikaisereck
241
+ * vierländereck
242
+ * dreiherrenstein
243
+ * tanzen im dreiländereck
244
+ * dreigräben
245
+
246
+ weblinks [bearbeiten]
247
+
248
+ * liste aller dreiländer als kml-datei mit koordinaten
249
+
250
+ von „http://de.wikipedia.org/wiki/dreil%c3%a4ndereck“
251
+ kategorien: politische geographie | grenze
@@ -8,9 +8,19 @@ require 'spec_helper'
8
8
  include TwitterCldr::Shared
9
9
 
10
10
  describe CodePoint do
11
+ def clear
12
+ CodePoint.instance_variable_set(:@composition_exclusion_cache, nil)
13
+ CodePoint.instance_variable_set(:@canonical_compositions, nil)
14
+ CodePoint.instance_variable_set(:@block_cache, nil)
15
+ CodePoint.instance_variable_set(:@blocks, nil)
16
+ end
17
+
18
+ after(:each) { clear }
19
+ before(:each) { clear }
20
+
11
21
  describe "#initialize" do
12
22
  let(:unicode_data) { ['17D1', 'KHMER SIGN VIRIAM', 'Mn', '0', 'NSM', decomposition, "", "", "", 'N', "", "", "", "", ""] }
13
- let(:code_point) { CodePoint.new(*unicode_data) }
23
+ let(:code_point) { CodePoint.new(unicode_data) }
14
24
 
15
25
  context 'when decomposition is canonical' do
16
26
  let(:decomposition) { '0028 007A 0029' }
@@ -59,17 +69,13 @@ describe CodePoint do
59
69
  code_point.should_not be_compatibility_decomposition
60
70
  end
61
71
  end
62
-
63
- it 'raises ArgumentError if decomposition has invalid format' do
64
-
65
- end
66
72
  end
67
73
 
68
74
  describe "#find" do
69
75
  it "retrieves information for any valid code point" do
70
76
  data = CodePoint.find(0x301)
71
77
  data.should be_a(CodePoint)
72
- data.values.length.should == 15
78
+ data.fields.length.should == 15
73
79
  end
74
80
 
75
81
  it "returns nil if the information is not found" do
@@ -107,20 +113,45 @@ describe CodePoint do
107
113
  end
108
114
  end
109
115
 
116
+ describe "#code_points_for{index}" do
117
+ it "returns code points for the given general unicode property name" do
118
+ cps = CodePoint.code_points_for_category(:Cc)
119
+ cps.should be_a(Array)
120
+ cps.first.should == (0..31)
121
+
122
+ cps = CodePoint.code_points_for_bidi_class(:BN)
123
+ cps.should be_a(Array)
124
+ cps.first.should == (0..8)
125
+
126
+ cps = CodePoint.code_points_for_bidi_mirrored(:N)
127
+ cps.should be_a(Array)
128
+ cps.first.should == (0..39)
129
+ end
130
+ end
131
+
132
+ describe "#code_points_for_property_value" do
133
+ it "returns code points for the given unicode property and value" do
134
+ cps = CodePoint.code_points_for_line_break(:CM)
135
+ cps.should be_a(Array)
136
+ cps.first.should == (0..8)
137
+
138
+ cps = CodePoint.code_points_for_sentence_break(:Extend)
139
+ cps.should be_a(Array)
140
+ cps.first.should == (768..879)
141
+
142
+ cps = CodePoint.code_points_for_word_break(:Hebrew_Letter)
143
+ cps.should be_a(Array)
144
+ cps.first.should == (1488..1514)
145
+ end
146
+ end
147
+
110
148
  describe "#for_canonical_decomposition" do
111
149
  let(:canonical_compositions) { { [123, 456] => 789 } }
112
150
 
113
151
  before(:each) do
114
- # clear the decomposition map after each test so mocks/stubs work
115
- CodePoint.instance_variable_set(:@canonical_compositions, nil)
116
152
  stub(CodePoint).find { |code_point| "I'm code point #{code_point}" }
117
153
  end
118
154
 
119
- after(:all) do
120
- # clear the decomposition map after each test so mocks/stubs work
121
- CodePoint.instance_variable_set(:@canonical_compositions, nil)
122
- end
123
-
124
155
  context "with a stubbed decomposition map" do
125
156
  before(:each) do
126
157
  mock(TwitterCldr).get_resource(:unicode_data, :canonical_compositions) { canonical_compositions }
@@ -144,7 +175,6 @@ describe CodePoint do
144
175
 
145
176
  describe "#hangul_type" do
146
177
  before(:each) do
147
- # CodePoint.instance_variable_set(:'@hangul_type_cache', {})
148
178
  stub(CodePoint).hangul_blocks {
149
179
  {
150
180
  :lparts => [1..10],
@@ -0,0 +1,41 @@
1
+ # encoding: UTF-8
2
+
3
+ # Copyright 2012 Twitter, Inc
4
+ # http://www.apache.org/licenses/LICENSE-2.0
5
+
6
+ require 'spec_helper'
7
+
8
+ include TwitterCldr::Shared
9
+
10
+ describe NumberingSystem do
11
+ describe "#for_name" do
12
+ it "should return the correct numbering system for the given name" do
13
+ NumberingSystem.for_name("latn").digits.should == %w(0 1 2 3 4 5 6 7 8 9)
14
+ NumberingSystem.for_name("arab").digits.should == %w(٠ ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ ٩)
15
+ end
16
+
17
+ it "should raise an error if the system is not numeric" do
18
+ lambda { NumberingSystem.for_name("roman") }.should raise_error(UnsupportedNumberingSystemError)
19
+ end
20
+ end
21
+
22
+ describe "#transliterate" do
23
+ context "with the arabic numbering system" do
24
+ let(:system) { NumberingSystem.for_name("arab") }
25
+
26
+ it "replaces ascii numeral characters with arabic ones" do
27
+ system.transliterate(123).should match_normalized("١٢٣")
28
+ system.transliterate(947).should match_normalized("٩٤٧")
29
+ end
30
+ end
31
+
32
+ context "with the Han decimal system" do
33
+ let(:system) { NumberingSystem.for_name("hanidec") }
34
+
35
+ it "replaces ascii numeral characters with Han ones" do
36
+ system.transliterate(123).should match_normalized("一二三")
37
+ system.transliterate(947).should match_normalized("九四七")
38
+ end
39
+ end
40
+ end
41
+ end
@@ -17,14 +17,14 @@ describe Territories do
17
17
  end
18
18
 
19
19
  it "should use alternate/short names" do
20
- Territories.translate_territory("Congo [DRC]", :en, :es).should match_normalized("Congo [República Democrática del Congo]")
21
- Territories.translate_territory("Congo [Republic]", :en, :es).should match_normalized("Congo [República]")
20
+ Territories.translate_territory("Congo (DRC)", :en, :es).should match_normalized("Congo (República Democrática del Congo)")
21
+ Territories.translate_territory("Congo (Republic)", :en, :es).should match_normalized("Congo (República)")
22
22
  Territories.translate_territory("East Timor", :en, :es).should match_normalized("Timor Oriental")
23
- Territories.translate_territory("Falkland Islands [Islas Malvinas]", :en, :es).should match_normalized("Islas Malvinas [Islas Falkland]")
23
+ Territories.translate_territory("Falkland Islands (Islas Malvinas)", :en, :es).should match_normalized("Islas Malvinas (Islas Falkland)")
24
24
  Territories.translate_territory("Hong Kong", :en, :es).should match_normalized("Hong Kong")
25
25
  Territories.translate_territory("Ivory Coast", :en, :es).should match_normalized("Costa de Marfil")
26
26
  Territories.translate_territory("Macau", :en, :es).should match_normalized("Macao")
27
- Territories.translate_territory("Macedonia [FYROM]", :en, :es).should match_normalized("Macedonia [ERYM]")
27
+ Territories.translate_territory("Macedonia (FYROM)", :en, :es).should match_normalized("Macedonia (ERYM)")
28
28
  end
29
29
 
30
30
  it "should be capitalization agnostic" do
@@ -56,12 +56,12 @@ describe Territories do
56
56
  describe "#from_territory_code_for_locale" do
57
57
  it "should return the territory in the correct locale for the given locale code (i.e. RU in English should be Russia)" do
58
58
  Territories.from_territory_code_for_locale(:ES, :en).should match_normalized("Spain")
59
- Territories.from_territory_code_for_locale(:GB, :es).should match_normalized("Reino Unido")
59
+ Territories.from_territory_code_for_locale(:GB, :es).should match_normalized("UK")
60
60
  end
61
61
 
62
62
  it "should work with lower-case country codes as well" do
63
63
  Territories.from_territory_code_for_locale(:es, :en).should match_normalized("Spain")
64
- Territories.from_territory_code_for_locale(:gb, :es).should match_normalized("Reino Unido")
64
+ Territories.from_territory_code_for_locale(:gb, :es).should match_normalized("UK")
65
65
  end
66
66
 
67
67
  it "should work with Traditional Chinese" do
@@ -116,5 +116,13 @@ describe Territories do
116
116
  end
117
117
  end
118
118
 
119
+ describe "#deep_normalize_territory_code_keys" do
120
+ Territories.deep_normalize_territory_code_keys(
121
+ { "is" => [ { "US" => "United States",
122
+ 5 => "Suður-Ameríka" },
123
+ { "009" => "Eyjaálfa" } ] }
124
+ ).should == { :is => [ { :us => "United States" }, { } ] }
125
+ end
126
+
119
127
  end
120
128
 
@@ -0,0 +1,203 @@
1
+ # encoding: UTF-8
2
+
3
+ # Copyright 2012 Twitter, Inc
4
+ # http://www.apache.org/licenses/LICENSE-2.0
5
+
6
+ require 'spec_helper'
7
+
8
+ include TwitterCldr::Shared
9
+
10
+ describe UnicodeRegex do
11
+ def compile(str, symbol_table = nil)
12
+ UnicodeRegex.compile(str, "", symbol_table)
13
+ end
14
+
15
+ let(:symbol_table) do
16
+ tokenizer = TwitterCldr::Tokenizers::UnicodeRegexTokenizer.new
17
+ table = TwitterCldr::Parsers::SymbolTable.new({
18
+ "$FOO" => tokenizer.tokenize("[g-k]"),
19
+ "$BAR" => tokenizer.tokenize("[p-s]")
20
+ })
21
+ end
22
+
23
+ context "basic operations" do
24
+ let(:regex) { compile("[abc]") }
25
+
26
+ describe "#compile" do
27
+ it "should return a UnicodeRegex, parsed and ready to go" do
28
+ regex.should be_a(UnicodeRegex)
29
+ end
30
+ end
31
+
32
+ describe "#to_regexp_str" do
33
+ it "should return the string representation of this regex" do
34
+ regex.to_regexp_str.should == "(?:[\\141-\\143])"
35
+ end
36
+ end
37
+
38
+ describe "#to_regexp" do
39
+ it "should return a ruby Regexp" do
40
+ if RUBY_VERSION <= "1.8.7"
41
+ regex.to_regexp.should be_a(Oniguruma::ORegexp)
42
+ else
43
+ regex.to_regexp.should be_a(Regexp)
44
+ end
45
+ end
46
+
47
+ it "should properly turn various basic regexes into strings" do
48
+ compile("^abc$").to_regexp_str.should == "^(?:\\141)(?:\\142)(?:\\143)$"
49
+ compile("a(b)c").to_regexp_str.should == "(?:\\141)((?:\\142))(?:\\143)"
50
+ compile("a(?:b)c").to_regexp_str.should == "(?:\\141)(?:(?:\\142))(?:\\143)"
51
+ compile("a{1,3}").to_regexp_str.should == "(?:\\141){1,3}"
52
+ compile("[abc]").to_regexp_str.should == "(?:[\\141-\\143])"
53
+ end
54
+
55
+ it "should properly turn various complex regexes into strings" do
56
+ compile("[a-z0-9]").to_regexp_str.should == "(?:[\\60-\\71]|[\\141-\\172])"
57
+ compile("[\\u0067-\\u0071]").to_regexp_str.should == "(?:[\\147-\\161])"
58
+ end
59
+
60
+ it "should properly substitute variables" do
61
+ compile("$FOO$BAR", symbol_table).to_regexp_str.should == "(?:[\\147-\\153])(?:[\\160-\\163])"
62
+ end
63
+ end
64
+ end
65
+
66
+ context "with a few variables" do
67
+ describe "#match" do
68
+ it "should substitute variables from the symbol table" do
69
+ regex = compile("$FOO $BAR", symbol_table)
70
+ regex.should exactly_match("h r")
71
+ regex.should exactly_match("j q")
72
+ regex.should_not exactly_match("h t")
73
+ regex.should_not exactly_match("c s")
74
+ end
75
+ end
76
+ end
77
+
78
+ context "matching basics" do
79
+ describe "#match" do
80
+ it "should match a regex with no char class" do
81
+ regex = compile("^abc$")
82
+ regex.should exactly_match("abc")
83
+ regex.should_not exactly_match("cba")
84
+ end
85
+
86
+ it "should match a regex with a capturing group" do
87
+ regex = compile("a(b)c")
88
+ match = regex.match("abc")
89
+ match.should_not be_nil
90
+ match.captures[0].should == "b"
91
+ end
92
+
93
+ it "should match a regex with a non-capturing group" do
94
+ regex = compile("a(?:b)c")
95
+ match = regex.match("abc")
96
+ match.should_not be_nil
97
+ match.captures.should == []
98
+ end
99
+
100
+ it "should match a regex with a quantifier" do
101
+ regex = compile("a{1,3}")
102
+ regex.should exactly_match("a")
103
+ regex.should exactly_match("aa")
104
+ regex.should exactly_match("aaa")
105
+ regex.should_not exactly_match("aaaa")
106
+ regex.should_not exactly_match("b")
107
+ end
108
+
109
+ it "should match a regex with a basic char class" do
110
+ regex = compile("[abc]")
111
+ regex.should exactly_match("a")
112
+ regex.should exactly_match("b")
113
+ regex.should exactly_match("c")
114
+ regex.should_not exactly_match("ab")
115
+ regex.should_not exactly_match("d")
116
+ end
117
+ end
118
+ end
119
+
120
+ context "matching complex character classes" do
121
+ describe "#match" do
122
+ it "should match a regex with a char class containing a range" do
123
+ regex = compile("[a-z0-9]")
124
+ regex.should exactly_match("a")
125
+ regex.should exactly_match("m")
126
+ regex.should exactly_match("z")
127
+ regex.should exactly_match("0")
128
+ regex.should exactly_match("3")
129
+ regex.should exactly_match("9")
130
+ regex.should_not exactly_match("a0")
131
+ regex.should_not exactly_match("m4")
132
+ end
133
+
134
+ it "should match a regex with a char class containing a unicode range" do
135
+ regex = compile("[\\u0067-\\u0071]") # g-q
136
+ regex.should exactly_match("g")
137
+ regex.should exactly_match("q")
138
+ regex.should exactly_match("h")
139
+ regex.should_not exactly_match("z")
140
+ end
141
+
142
+ it "should match a regex containing a character set" do
143
+ regex = compile("[\\p{Zs}]")
144
+ regex.should exactly_match([160].pack("U*")) # non-breaking space
145
+ regex.should exactly_match([5760].pack("U*")) # ogham space mark
146
+ regex.should_not exactly_match("a")
147
+ end
148
+
149
+ it "should match a regex containing a negated character set" do
150
+ regex = compile("[\\P{Zs}]")
151
+ regex.should exactly_match("a")
152
+ regex.should_not exactly_match([160].pack("U*"))
153
+ regex.should_not exactly_match([5760].pack("U*"))
154
+ end
155
+
156
+ it "should match a regex containing a character set (alternate syntax)" do
157
+ regex = compile("[[:Zs:]]")
158
+ regex.should exactly_match([160].pack("U*")) # non-breaking space
159
+ regex.should exactly_match([5760].pack("U*")) # ogham space mark
160
+ regex.should_not exactly_match("a")
161
+ end
162
+
163
+ it "should match a regex containing a negated character set (alternate syntax)" do
164
+ regex = compile("[[:^Zs:]]")
165
+ regex.should exactly_match("a")
166
+ regex.should_not exactly_match([160].pack("U*"))
167
+ regex.should_not exactly_match([5760].pack("U*"))
168
+ end
169
+
170
+ it "should match a regex with a character set and some quantifiers" do
171
+ regex = compile("[\\u0067-\\u0071]+")
172
+ regex.should exactly_match("gg")
173
+ regex.should exactly_match("gh")
174
+ regex.should exactly_match("qjk")
175
+ regex.should_not exactly_match("")
176
+ end
177
+
178
+ it "should match a regex that uses special switches inside the char class" do
179
+ regex = compile("[\\w]+")
180
+ regex.should exactly_match("a")
181
+ regex.should exactly_match("abc")
182
+ regex.should exactly_match("a0b_1c2")
183
+ regex.should_not exactly_match("$@#")
184
+ end
185
+
186
+ it "should match a regex that uses negated special switches inside the char class" do
187
+ regex = compile("[\\W]+")
188
+ regex.should_not exactly_match("a")
189
+ regex.should_not exactly_match("abc")
190
+ regex.should_not exactly_match("a0b_1c2")
191
+ regex.should exactly_match("$@#")
192
+ end
193
+
194
+ it "should match a regex with a complicated expression inside the char class" do
195
+ # not [separators U space-tilde] diff [letters diff numbers] (diff is commutative)
196
+ regex = compile("[^[\\p{Z}\\u0020-\\u007f]-[\\p{L}]-[\\p{N}]]")
197
+ regex.should exactly_match(" ")
198
+ regex.should exactly_match(",")
199
+ regex.should_not exactly_match("a")
200
+ end
201
+ end
202
+ end
203
+ end
data/spec/spec_helper.rb CHANGED
@@ -6,6 +6,12 @@
6
6
  require 'rspec'
7
7
  require 'rspec/autorun' # somehow makes rcov work with rspec
8
8
  require 'twitter_cldr'
9
+ require 'pry-nav'
10
+
11
+ if RUBY_VERSION <= "1.8.7"
12
+ $KCODE = "UTF-8"
13
+ require 'oniguruma'
14
+ end
9
15
 
10
16
  if ENV['SCOV']
11
17
  require 'simplecov'
@@ -62,6 +68,17 @@ RSpec::Matchers.define :match_normalized do |expected|
62
68
  end
63
69
  end
64
70
 
71
+ RSpec::Matchers.define :exactly_match do |expected|
72
+ match do |actual|
73
+ if actual.respond_to?(:match)
74
+ m = actual.match(expected)
75
+ m.to_a.first == expected
76
+ else
77
+ expected === actual
78
+ end
79
+ end
80
+ end
81
+
65
82
  def check_token_list(got, expected)
66
83
  got.size.should == expected.size
67
84
  expected.each_with_index do |exp_hash, index|