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.
- checksums.yaml +4 -4
- data/Gemfile +16 -2
- data/History.txt +9 -1
- data/README.md +297 -113
- data/Rakefile +97 -17
- data/lib/twitter_cldr/collation/collator.rb +12 -3
- data/lib/twitter_cldr/collation/trie_builder.rb +1 -1
- data/lib/twitter_cldr/{tokenizers/calendars → data_readers}/additional_date_format_selector.rb +6 -4
- data/lib/twitter_cldr/data_readers/calendar_data_reader.rb +91 -0
- data/lib/twitter_cldr/data_readers/data_reader.rb +32 -0
- data/lib/twitter_cldr/data_readers/date_data_reader.rb +26 -0
- data/lib/twitter_cldr/data_readers/date_time_data_reader.rb +41 -0
- data/lib/twitter_cldr/data_readers/number_data_reader.rb +142 -0
- data/lib/twitter_cldr/data_readers/time_data_reader.rb +26 -0
- data/lib/twitter_cldr/data_readers/timespan_data_reader.rb +122 -0
- data/lib/twitter_cldr/data_readers.rb +17 -0
- data/lib/twitter_cldr/formatters/calendars/{datetime_formatter.rb → date_time_formatter.rb} +27 -42
- data/lib/twitter_cldr/formatters/calendars/timespan_formatter.rb +3 -64
- data/lib/twitter_cldr/formatters/formatter.rb +39 -0
- data/lib/twitter_cldr/formatters/list_formatter.rb +22 -12
- data/lib/twitter_cldr/formatters/numbers/abbreviated/abbreviated_number_formatter.rb +5 -26
- data/lib/twitter_cldr/formatters/numbers/currency_formatter.rb +2 -11
- data/lib/twitter_cldr/formatters/numbers/decimal_formatter.rb +4 -2
- data/lib/twitter_cldr/formatters/numbers/number_formatter.rb +45 -27
- data/lib/twitter_cldr/formatters/numbers/percent_formatter.rb +3 -13
- data/lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb +224 -0
- data/lib/twitter_cldr/formatters/numbers/rbnf/post_processors/chinese.rb +122 -0
- data/lib/twitter_cldr/formatters/numbers/rbnf/rule.rb +93 -0
- data/lib/twitter_cldr/formatters/numbers/rbnf/rule_group.rb +20 -0
- data/lib/twitter_cldr/formatters/numbers/rbnf/rule_parser.rb +86 -0
- data/lib/twitter_cldr/formatters/numbers/rbnf/rule_set.rb +259 -0
- data/lib/twitter_cldr/formatters/numbers/rbnf/substitution.rb +30 -0
- data/lib/twitter_cldr/formatters/numbers/rbnf.rb +127 -0
- data/lib/twitter_cldr/formatters/plurals/plural_formatter.rb +18 -6
- data/lib/twitter_cldr/formatters.rb +4 -5
- data/lib/twitter_cldr/localized/localized_array.rb +1 -1
- data/lib/twitter_cldr/localized/localized_date.rb +6 -3
- data/lib/twitter_cldr/localized/localized_datetime.rb +38 -15
- data/lib/twitter_cldr/localized/localized_number.rb +40 -24
- data/lib/twitter_cldr/localized/localized_object.rb +4 -4
- data/lib/twitter_cldr/localized/localized_string.rb +40 -7
- data/lib/twitter_cldr/localized/localized_time.rb +9 -2
- data/lib/twitter_cldr/localized/localized_timespan.rb +50 -5
- data/lib/twitter_cldr/normalization.rb +8 -19
- data/lib/twitter_cldr/parsers/parser.rb +50 -0
- data/lib/twitter_cldr/parsers/segmentation_parser.rb +137 -0
- data/lib/twitter_cldr/parsers/symbol_table.rb +30 -0
- data/lib/twitter_cldr/parsers/unicode_regex/character_class.rb +91 -0
- data/lib/twitter_cldr/parsers/unicode_regex/character_range.rb +39 -0
- data/lib/twitter_cldr/parsers/unicode_regex/character_set.rb +65 -0
- data/lib/twitter_cldr/parsers/unicode_regex/component.rb +50 -0
- data/lib/twitter_cldr/parsers/unicode_regex/literal.rb +83 -0
- data/lib/twitter_cldr/parsers/unicode_regex/unicode_string.rb +41 -0
- data/lib/twitter_cldr/parsers/unicode_regex_parser.rb +262 -0
- data/lib/twitter_cldr/parsers.rb +5 -1
- data/lib/twitter_cldr/resources/casefolder.rb.erb +64 -0
- data/lib/twitter_cldr/resources/casefolder_class_generator.rb +75 -0
- data/lib/twitter_cldr/resources/download.rb +10 -4
- data/lib/twitter_cldr/resources/icu_based_importer.rb +18 -0
- data/lib/twitter_cldr/resources/locales_resources_importer.rb +24 -13
- data/lib/twitter_cldr/resources/normalization_quick_check_importer.rb +1 -14
- data/lib/twitter_cldr/resources/rbnf_test_importer.rb +107 -0
- data/lib/twitter_cldr/resources/readme_renderer.rb +115 -0
- data/lib/twitter_cldr/resources/tailoring_importer.rb +2 -8
- data/lib/twitter_cldr/resources/uli/segment_exceptions_importer.rb +62 -0
- data/lib/twitter_cldr/resources/uli.rb +12 -0
- data/lib/twitter_cldr/resources/unicode_data_importer.rb +84 -14
- data/lib/twitter_cldr/resources/unicode_importer.rb +37 -0
- data/lib/twitter_cldr/resources/unicode_properties_importer.rb +79 -0
- data/lib/twitter_cldr/resources.rb +8 -1
- data/lib/twitter_cldr/shared/break_iterator.rb +213 -0
- data/lib/twitter_cldr/shared/calendar.rb +38 -14
- data/lib/twitter_cldr/shared/casefolder.rb +210 -0
- data/lib/twitter_cldr/shared/code_point.rb +103 -16
- data/lib/twitter_cldr/shared/numbering_system.rb +58 -0
- data/lib/twitter_cldr/shared/territories.rb +43 -1
- data/lib/twitter_cldr/shared/unicode_regex.rb +81 -0
- data/lib/twitter_cldr/shared.rb +13 -9
- data/lib/twitter_cldr/tokenizers/calendars/date_time_tokenizer.rb +77 -0
- data/lib/twitter_cldr/tokenizers/calendars/date_tokenizer.rb +14 -29
- data/lib/twitter_cldr/tokenizers/calendars/time_tokenizer.rb +13 -28
- data/lib/twitter_cldr/tokenizers/calendars/timespan_tokenizer.rb +11 -87
- data/lib/twitter_cldr/tokenizers/numbers/number_tokenizer.rb +16 -71
- data/lib/twitter_cldr/tokenizers/numbers/rbnf_tokenizer.rb +53 -0
- data/lib/twitter_cldr/tokenizers/pattern_tokenizer.rb +42 -0
- data/lib/twitter_cldr/tokenizers/segmentation/segmentation_tokenizer.rb +39 -0
- data/lib/twitter_cldr/tokenizers/tokenizer.rb +116 -0
- data/lib/twitter_cldr/tokenizers/unicode_regex/unicode_regex_tokenizer.rb +52 -0
- data/lib/twitter_cldr/tokenizers.rb +8 -4
- data/lib/twitter_cldr/utils/code_points.rb +1 -1
- data/lib/twitter_cldr/utils/range_set.rb +242 -0
- data/lib/twitter_cldr/utils/yaml.rb +17 -12
- data/lib/twitter_cldr/utils.rb +1 -1
- data/lib/twitter_cldr/version.rb +1 -1
- data/lib/twitter_cldr.rb +2 -1
- data/resources/custom/locales/sv/units.yml +8 -0
- data/resources/locales/af/calendars.yml +278 -224
- data/resources/locales/af/currencies.yml +954 -916
- data/resources/locales/af/languages.yml +583 -580
- data/resources/locales/af/layout.yml +5 -5
- data/resources/locales/af/lists.yml +23 -7
- data/resources/locales/af/numbers.yml +59 -54
- data/resources/locales/af/plurals.yml +2 -2
- data/resources/locales/af/rbnf.yml +261 -0
- data/resources/locales/af/territories.yml +264 -263
- data/resources/locales/ar/calendars.yml +287 -259
- data/resources/locales/ar/currencies.yml +1730 -1692
- data/resources/locales/ar/languages.yml +583 -580
- data/resources/locales/ar/layout.yml +5 -5
- data/resources/locales/ar/lists.yml +23 -7
- data/resources/locales/ar/numbers.yml +66 -61
- data/resources/locales/ar/plurals.yml +5 -8
- data/resources/locales/ar/rbnf.yml +519 -0
- data/resources/locales/ar/territories.yml +264 -263
- data/resources/locales/be/calendars.yml +238 -237
- data/resources/locales/be/currencies.yml +954 -917
- data/resources/locales/be/languages.yml +583 -580
- data/resources/locales/be/layout.yml +5 -5
- data/resources/locales/be/lists.yml +23 -7
- data/resources/locales/be/numbers.yml +62 -57
- data/resources/locales/be/plurals.yml +7 -4
- data/resources/locales/be/rbnf.yml +1288 -0
- data/resources/locales/be/territories.yml +264 -263
- data/resources/locales/bg/calendars.yml +278 -218
- data/resources/locales/bg/currencies.yml +955 -917
- data/resources/locales/bg/languages.yml +583 -580
- data/resources/locales/bg/layout.yml +5 -5
- data/resources/locales/bg/lists.yml +23 -7
- data/resources/locales/bg/numbers.yml +62 -57
- data/resources/locales/bg/plurals.yml +2 -2
- data/resources/locales/bg/rbnf.yml +280 -0
- data/resources/locales/bg/territories.yml +264 -263
- data/resources/locales/bn/calendars.yml +287 -225
- data/resources/locales/bn/currencies.yml +953 -916
- data/resources/locales/bn/languages.yml +583 -580
- data/resources/locales/bn/layout.yml +5 -5
- data/resources/locales/bn/lists.yml +23 -7
- data/resources/locales/bn/numbers.yml +62 -57
- data/resources/locales/bn/plurals.yml +2 -2
- data/resources/locales/bn/rbnf.yml +4 -0
- data/resources/locales/bn/territories.yml +264 -263
- data/resources/locales/ca/calendars.yml +278 -278
- data/resources/locales/ca/currencies.yml +953 -916
- data/resources/locales/ca/languages.yml +583 -580
- data/resources/locales/ca/layout.yml +5 -5
- data/resources/locales/ca/lists.yml +23 -7
- data/resources/locales/ca/numbers.yml +62 -57
- data/resources/locales/ca/plurals.yml +3 -2
- data/resources/locales/ca/rbnf.yml +756 -0
- data/resources/locales/ca/territories.yml +264 -263
- data/resources/locales/cs/calendars.yml +269 -262
- data/resources/locales/cs/currencies.yml +1483 -1172
- data/resources/locales/cs/languages.yml +583 -580
- data/resources/locales/cs/layout.yml +5 -5
- data/resources/locales/cs/lists.yml +23 -7
- data/resources/locales/cs/numbers.yml +64 -58
- data/resources/locales/cs/plurals.yml +6 -2
- data/resources/locales/cs/rbnf.yml +367 -0
- data/resources/locales/cs/territories.yml +264 -263
- data/resources/locales/cy/calendars.yml +275 -274
- data/resources/locales/cy/currencies.yml +1585 -1548
- data/resources/locales/cy/languages.yml +583 -580
- data/resources/locales/cy/layout.yml +5 -5
- data/resources/locales/cy/lists.yml +23 -7
- data/resources/locales/cy/numbers.yml +66 -61
- data/resources/locales/cy/plurals.yml +4 -3
- data/resources/locales/cy/rbnf.yml +298 -0
- data/resources/locales/cy/territories.yml +264 -263
- data/resources/locales/da/calendars.yml +281 -280
- data/resources/locales/da/currencies.yml +954 -916
- data/resources/locales/da/languages.yml +583 -580
- data/resources/locales/da/layout.yml +5 -5
- data/resources/locales/da/lists.yml +23 -7
- data/resources/locales/da/numbers.yml +62 -57
- data/resources/locales/da/plurals.yml +3 -2
- data/resources/locales/da/rbnf.yml +194 -0
- data/resources/locales/da/territories.yml +264 -263
- data/resources/locales/de/calendars.yml +294 -293
- data/resources/locales/de/currencies.yml +954 -916
- data/resources/locales/de/languages.yml +583 -580
- data/resources/locales/de/layout.yml +5 -5
- data/resources/locales/de/lists.yml +23 -7
- data/resources/locales/de/numbers.yml +62 -57
- data/resources/locales/de/plurals.yml +3 -2
- data/resources/locales/de/rbnf.yml +346 -0
- data/resources/locales/de/territories.yml +264 -263
- data/resources/locales/el/calendars.yml +279 -282
- data/resources/locales/el/currencies.yml +954 -916
- data/resources/locales/el/languages.yml +583 -580
- data/resources/locales/el/layout.yml +5 -5
- data/resources/locales/el/lists.yml +23 -7
- data/resources/locales/el/numbers.yml +62 -57
- data/resources/locales/el/plurals.yml +2 -2
- data/resources/locales/el/rbnf.yml +880 -0
- data/resources/locales/el/territories.yml +264 -263
- data/resources/locales/en/calendars.yml +192 -191
- data/resources/locales/en/currencies.yml +953 -915
- data/resources/locales/en/languages.yml +583 -580
- data/resources/locales/en/layout.yml +5 -5
- data/resources/locales/en/lists.yml +23 -7
- data/resources/locales/en/numbers.yml +62 -57
- data/resources/locales/en/plurals.yml +3 -2
- data/resources/locales/en/rbnf.yml +542 -0
- data/resources/locales/en/territories.yml +264 -263
- data/resources/locales/en-GB/calendars.yml +195 -194
- data/resources/locales/en-GB/currencies.yml +953 -915
- data/resources/locales/en-GB/languages.yml +583 -580
- data/resources/locales/en-GB/layout.yml +5 -5
- data/resources/locales/en-GB/lists.yml +23 -7
- data/resources/locales/en-GB/numbers.yml +62 -57
- data/resources/locales/en-GB/plurals.yml +2 -1
- data/resources/locales/en-GB/rbnf.yml +4 -0
- data/resources/locales/en-GB/territories.yml +264 -263
- data/resources/locales/es/calendars.yml +288 -238
- data/resources/locales/es/currencies.yml +953 -922
- data/resources/locales/es/languages.yml +583 -580
- data/resources/locales/es/layout.yml +5 -5
- data/resources/locales/es/lists.yml +23 -7
- data/resources/locales/es/numbers.yml +62 -57
- data/resources/locales/es/plurals.yml +2 -2
- data/resources/locales/es/rbnf.yml +913 -0
- data/resources/locales/es/territories.yml +264 -263
- data/resources/locales/eu/calendars.yml +277 -218
- data/resources/locales/eu/currencies.yml +953 -916
- data/resources/locales/eu/languages.yml +583 -580
- data/resources/locales/eu/layout.yml +5 -5
- data/resources/locales/eu/lists.yml +23 -7
- data/resources/locales/eu/numbers.yml +56 -51
- data/resources/locales/eu/plurals.yml +2 -2
- data/resources/locales/eu/rbnf.yml +4 -0
- data/resources/locales/eu/territories.yml +264 -263
- data/resources/locales/fa/calendars.yml +294 -293
- data/resources/locales/fa/currencies.yml +955 -916
- data/resources/locales/fa/languages.yml +583 -580
- data/resources/locales/fa/layout.yml +5 -5
- data/resources/locales/fa/lists.yml +23 -7
- data/resources/locales/fa/numbers.yml +62 -57
- data/resources/locales/fa/plurals.yml +2 -2
- data/resources/locales/fa/rbnf.yml +157 -0
- data/resources/locales/fa/territories.yml +264 -263
- data/resources/locales/fi/calendars.yml +284 -283
- data/resources/locales/fi/currencies.yml +953 -915
- data/resources/locales/fi/languages.yml +583 -580
- data/resources/locales/fi/layout.yml +5 -5
- data/resources/locales/fi/lists.yml +23 -7
- data/resources/locales/fi/numbers.yml +62 -57
- data/resources/locales/fi/plurals.yml +3 -2
- data/resources/locales/fi/rbnf.yml +206 -0
- data/resources/locales/fi/territories.yml +264 -263
- data/resources/locales/fil/calendars.yml +281 -230
- data/resources/locales/fil/currencies.yml +953 -916
- data/resources/locales/fil/languages.yml +583 -580
- data/resources/locales/fil/layout.yml +5 -5
- data/resources/locales/fil/lists.yml +23 -7
- data/resources/locales/fil/numbers.yml +62 -57
- data/resources/locales/fil/plurals.yml +3 -2
- data/resources/locales/fil/rbnf.yml +158 -0
- data/resources/locales/fil/territories.yml +264 -263
- data/resources/locales/fr/calendars.yml +297 -296
- data/resources/locales/fr/currencies.yml +968 -949
- data/resources/locales/fr/languages.yml +583 -580
- data/resources/locales/fr/layout.yml +5 -5
- data/resources/locales/fr/lists.yml +23 -7
- data/resources/locales/fr/numbers.yml +62 -57
- data/resources/locales/fr/plurals.yml +2 -2
- data/resources/locales/fr/rbnf.yml +621 -0
- data/resources/locales/fr/territories.yml +264 -263
- data/resources/locales/ga/calendars.yml +192 -191
- data/resources/locales/ga/currencies.yml +954 -916
- data/resources/locales/ga/languages.yml +583 -580
- data/resources/locales/ga/layout.yml +5 -5
- data/resources/locales/ga/lists.yml +23 -7
- data/resources/locales/ga/numbers.yml +62 -57
- data/resources/locales/ga/plurals.yml +4 -3
- data/resources/locales/ga/rbnf.yml +615 -0
- data/resources/locales/ga/territories.yml +264 -263
- data/resources/locales/gl/calendars.yml +283 -217
- data/resources/locales/gl/currencies.yml +953 -916
- data/resources/locales/gl/languages.yml +583 -580
- data/resources/locales/gl/layout.yml +5 -5
- data/resources/locales/gl/lists.yml +23 -7
- data/resources/locales/gl/numbers.yml +62 -57
- data/resources/locales/gl/plurals.yml +3 -2
- data/resources/locales/gl/rbnf.yml +4 -0
- data/resources/locales/gl/territories.yml +264 -263
- data/resources/locales/he/calendars.yml +248 -220
- data/resources/locales/he/currencies.yml +992 -932
- data/resources/locales/he/languages.yml +583 -580
- data/resources/locales/he/layout.yml +5 -5
- data/resources/locales/he/lists.yml +23 -7
- data/resources/locales/he/numbers.yml +64 -59
- data/resources/locales/he/plurals.yml +6 -3
- data/resources/locales/he/rbnf.yml +1029 -0
- data/resources/locales/he/territories.yml +264 -263
- data/resources/locales/hi/calendars.yml +284 -216
- data/resources/locales/hi/currencies.yml +953 -915
- data/resources/locales/hi/languages.yml +583 -580
- data/resources/locales/hi/layout.yml +5 -5
- data/resources/locales/hi/lists.yml +23 -7
- data/resources/locales/hi/numbers.yml +60 -55
- data/resources/locales/hi/plurals.yml +2 -2
- data/resources/locales/hi/rbnf.yml +430 -0
- data/resources/locales/hi/territories.yml +264 -263
- data/resources/locales/hr/calendars.yml +308 -307
- data/resources/locales/hr/currencies.yml +1248 -1504
- data/resources/locales/hr/languages.yml +583 -580
- data/resources/locales/hr/layout.yml +5 -5
- data/resources/locales/hr/lists.yml +23 -7
- data/resources/locales/hr/numbers.yml +63 -59
- data/resources/locales/hr/plurals.yml +12 -4
- data/resources/locales/hr/rbnf.yml +599 -0
- data/resources/locales/hr/territories.yml +264 -263
- data/resources/locales/hu/calendars.yml +285 -284
- data/resources/locales/hu/currencies.yml +954 -916
- data/resources/locales/hu/languages.yml +583 -580
- data/resources/locales/hu/layout.yml +5 -5
- data/resources/locales/hu/lists.yml +23 -7
- data/resources/locales/hu/numbers.yml +62 -57
- data/resources/locales/hu/plurals.yml +2 -2
- data/resources/locales/hu/rbnf.yml +363 -0
- data/resources/locales/hu/territories.yml +264 -263
- data/resources/locales/id/calendars.yml +276 -275
- data/resources/locales/id/currencies.yml +954 -916
- data/resources/locales/id/languages.yml +583 -580
- data/resources/locales/id/layout.yml +5 -5
- data/resources/locales/id/lists.yml +23 -7
- data/resources/locales/id/numbers.yml +61 -56
- data/resources/locales/id/plurals.yml +2 -2
- data/resources/locales/id/rbnf.yml +121 -0
- data/resources/locales/id/territories.yml +264 -263
- data/resources/locales/is/calendars.yml +281 -242
- data/resources/locales/is/currencies.yml +954 -916
- data/resources/locales/is/languages.yml +583 -580
- data/resources/locales/is/layout.yml +5 -5
- data/resources/locales/is/lists.yml +23 -7
- data/resources/locales/is/numbers.yml +62 -57
- data/resources/locales/is/plurals.yml +5 -2
- data/resources/locales/is/rbnf.yml +326 -0
- data/resources/locales/is/territories.yml +264 -263
- data/resources/locales/it/calendars.yml +275 -260
- data/resources/locales/it/currencies.yml +953 -920
- data/resources/locales/it/languages.yml +583 -580
- data/resources/locales/it/layout.yml +5 -5
- data/resources/locales/it/lists.yml +23 -7
- data/resources/locales/it/numbers.yml +59 -54
- data/resources/locales/it/plurals.yml +3 -2
- data/resources/locales/it/rbnf.yml +1189 -0
- data/resources/locales/it/territories.yml +264 -263
- data/resources/locales/ja/calendars.yml +269 -207
- data/resources/locales/ja/currencies.yml +953 -915
- data/resources/locales/ja/languages.yml +583 -580
- data/resources/locales/ja/layout.yml +5 -5
- data/resources/locales/ja/lists.yml +23 -7
- data/resources/locales/ja/numbers.yml +62 -57
- data/resources/locales/ja/plurals.yml +2 -2
- data/resources/locales/ja/rbnf.yml +209 -0
- data/resources/locales/ja/territories.yml +264 -263
- data/resources/locales/ko/calendars.yml +246 -213
- data/resources/locales/ko/currencies.yml +953 -915
- data/resources/locales/ko/languages.yml +583 -580
- data/resources/locales/ko/layout.yml +5 -5
- data/resources/locales/ko/lists.yml +23 -7
- data/resources/locales/ko/numbers.yml +60 -55
- data/resources/locales/ko/plurals.yml +2 -2
- data/resources/locales/ko/rbnf.yml +722 -0
- data/resources/locales/ko/territories.yml +264 -263
- data/resources/locales/lv/calendars.yml +286 -285
- data/resources/locales/lv/currencies.yml +1122 -1084
- data/resources/locales/lv/languages.yml +583 -580
- data/resources/locales/lv/layout.yml +5 -5
- data/resources/locales/lv/lists.yml +23 -7
- data/resources/locales/lv/numbers.yml +63 -58
- data/resources/locales/lv/plurals.yml +11 -3
- data/resources/locales/lv/rbnf.yml +238 -0
- data/resources/locales/lv/territories.yml +264 -263
- data/resources/locales/ms/calendars.yml +280 -279
- data/resources/locales/ms/currencies.yml +954 -916
- data/resources/locales/ms/languages.yml +583 -580
- data/resources/locales/ms/layout.yml +5 -5
- data/resources/locales/ms/lists.yml +23 -7
- data/resources/locales/ms/numbers.yml +62 -57
- data/resources/locales/ms/plurals.yml +2 -2
- data/resources/locales/ms/rbnf.yml +130 -0
- data/resources/locales/ms/territories.yml +264 -263
- data/resources/locales/nb/calendars.yml +284 -283
- data/resources/locales/nb/currencies.yml +958 -916
- data/resources/locales/nb/languages.yml +583 -580
- data/resources/locales/nb/layout.yml +5 -5
- data/resources/locales/nb/lists.yml +23 -7
- data/resources/locales/nb/numbers.yml +62 -57
- data/resources/locales/nb/plurals.yml +2 -2
- data/resources/locales/nb/rbnf.yml +191 -0
- data/resources/locales/nb/territories.yml +264 -263
- data/resources/locales/nl/calendars.yml +285 -284
- data/resources/locales/nl/currencies.yml +953 -917
- data/resources/locales/nl/languages.yml +583 -580
- data/resources/locales/nl/layout.yml +5 -5
- data/resources/locales/nl/lists.yml +23 -7
- data/resources/locales/nl/numbers.yml +62 -57
- data/resources/locales/nl/plurals.yml +3 -2
- data/resources/locales/nl/rbnf.yml +320 -0
- data/resources/locales/nl/territories.yml +264 -263
- data/resources/locales/pl/calendars.yml +288 -287
- data/resources/locales/pl/currencies.yml +1326 -1284
- data/resources/locales/pl/languages.yml +583 -580
- data/resources/locales/pl/layout.yml +5 -5
- data/resources/locales/pl/lists.yml +23 -7
- data/resources/locales/pl/numbers.yml +64 -59
- data/resources/locales/pl/plurals.yml +11 -4
- data/resources/locales/pl/rbnf.yml +410 -0
- data/resources/locales/pl/territories.yml +264 -263
- data/resources/locales/pt/calendars.yml +290 -289
- data/resources/locales/pt/currencies.yml +954 -916
- data/resources/locales/pt/languages.yml +583 -580
- data/resources/locales/pt/layout.yml +5 -5
- data/resources/locales/pt/lists.yml +23 -7
- data/resources/locales/pt/numbers.yml +62 -57
- data/resources/locales/pt/plurals.yml +4 -2
- data/resources/locales/pt/rbnf.yml +586 -0
- data/resources/locales/pt/territories.yml +264 -263
- data/resources/locales/ro/calendars.yml +284 -283
- data/resources/locales/ro/currencies.yml +1170 -1132
- data/resources/locales/ro/languages.yml +583 -580
- data/resources/locales/ro/layout.yml +5 -5
- data/resources/locales/ro/lists.yml +23 -7
- data/resources/locales/ro/numbers.yml +63 -58
- data/resources/locales/ro/plurals.yml +5 -2
- data/resources/locales/ro/rbnf.yml +250 -0
- data/resources/locales/ro/territories.yml +264 -263
- data/resources/locales/ru/calendars.yml +282 -281
- data/resources/locales/ru/currencies.yml +1118 -1247
- data/resources/locales/ru/languages.yml +583 -580
- data/resources/locales/ru/layout.yml +5 -5
- data/resources/locales/ru/lists.yml +23 -7
- data/resources/locales/ru/numbers.yml +63 -59
- data/resources/locales/ru/plurals.yml +8 -4
- data/resources/locales/ru/rbnf.yml +385 -0
- data/resources/locales/ru/territories.yml +264 -263
- data/resources/locales/sk/calendars.yml +254 -251
- data/resources/locales/sk/currencies.yml +1174 -1008
- data/resources/locales/sk/languages.yml +583 -580
- data/resources/locales/sk/layout.yml +5 -5
- data/resources/locales/sk/lists.yml +23 -7
- data/resources/locales/sk/numbers.yml +64 -58
- data/resources/locales/sk/plurals.yml +6 -2
- data/resources/locales/sk/rbnf.yml +304 -0
- data/resources/locales/sk/territories.yml +264 -263
- data/resources/locales/sq/calendars.yml +283 -206
- data/resources/locales/sq/currencies.yml +954 -916
- data/resources/locales/sq/languages.yml +583 -580
- data/resources/locales/sq/layout.yml +5 -5
- data/resources/locales/sq/lists.yml +23 -7
- data/resources/locales/sq/numbers.yml +62 -57
- data/resources/locales/sq/plurals.yml +2 -2
- data/resources/locales/sq/rbnf.yml +181 -0
- data/resources/locales/sq/territories.yml +264 -263
- data/resources/locales/sr/calendars.yml +290 -289
- data/resources/locales/sr/currencies.yml +1251 -1508
- data/resources/locales/sr/languages.yml +583 -580
- data/resources/locales/sr/layout.yml +5 -5
- data/resources/locales/sr/lists.yml +23 -7
- data/resources/locales/sr/numbers.yml +62 -58
- data/resources/locales/sr/plurals.yml +12 -4
- data/resources/locales/sr/rbnf.yml +429 -0
- data/resources/locales/sr/territories.yml +264 -263
- data/resources/locales/sv/calendars.yml +290 -289
- data/resources/locales/sv/currencies.yml +960 -930
- data/resources/locales/sv/languages.yml +583 -580
- data/resources/locales/sv/layout.yml +5 -5
- data/resources/locales/sv/lists.yml +23 -7
- data/resources/locales/sv/numbers.yml +63 -58
- data/resources/locales/sv/plurals.yml +3 -2
- data/resources/locales/sv/rbnf.yml +692 -0
- data/resources/locales/sv/territories.yml +264 -263
- data/resources/locales/ta/calendars.yml +281 -266
- data/resources/locales/ta/currencies.yml +953 -915
- data/resources/locales/ta/languages.yml +583 -580
- data/resources/locales/ta/layout.yml +5 -5
- data/resources/locales/ta/lists.yml +23 -7
- data/resources/locales/ta/numbers.yml +62 -57
- data/resources/locales/ta/plurals.yml +2 -2
- data/resources/locales/ta/rbnf.yml +241 -0
- data/resources/locales/ta/territories.yml +264 -263
- data/resources/locales/th/calendars.yml +278 -289
- data/resources/locales/th/currencies.yml +953 -915
- data/resources/locales/th/languages.yml +583 -580
- data/resources/locales/th/layout.yml +5 -5
- data/resources/locales/th/lists.yml +23 -7
- data/resources/locales/th/numbers.yml +62 -57
- data/resources/locales/th/plurals.yml +2 -2
- data/resources/locales/th/rbnf.yml +119 -0
- data/resources/locales/th/territories.yml +264 -263
- data/resources/locales/tr/calendars.yml +287 -286
- data/resources/locales/tr/currencies.yml +953 -916
- data/resources/locales/tr/languages.yml +583 -580
- data/resources/locales/tr/layout.yml +5 -5
- data/resources/locales/tr/lists.yml +23 -7
- data/resources/locales/tr/numbers.yml +61 -56
- data/resources/locales/tr/plurals.yml +2 -2
- data/resources/locales/tr/rbnf.yml +277 -0
- data/resources/locales/tr/territories.yml +264 -263
- data/resources/locales/uk/calendars.yml +286 -252
- data/resources/locales/uk/currencies.yml +1311 -1070
- data/resources/locales/uk/languages.yml +583 -580
- data/resources/locales/uk/layout.yml +5 -5
- data/resources/locales/uk/lists.yml +23 -7
- data/resources/locales/uk/numbers.yml +64 -59
- data/resources/locales/uk/plurals.yml +10 -4
- data/resources/locales/uk/rbnf.yml +430 -0
- data/resources/locales/uk/territories.yml +264 -263
- data/resources/locales/ur/calendars.yml +267 -228
- data/resources/locales/ur/currencies.yml +954 -916
- data/resources/locales/ur/languages.yml +583 -580
- data/resources/locales/ur/layout.yml +5 -5
- data/resources/locales/ur/lists.yml +23 -7
- data/resources/locales/ur/numbers.yml +62 -57
- data/resources/locales/ur/plurals.yml +3 -2
- data/resources/locales/ur/rbnf.yml +4 -0
- data/resources/locales/ur/territories.yml +264 -263
- data/resources/locales/vi/calendars.yml +256 -236
- data/resources/locales/vi/currencies.yml +953 -915
- data/resources/locales/vi/languages.yml +583 -580
- data/resources/locales/vi/layout.yml +5 -5
- data/resources/locales/vi/lists.yml +23 -7
- data/resources/locales/vi/numbers.yml +62 -57
- data/resources/locales/vi/plurals.yml +2 -2
- data/resources/locales/vi/rbnf.yml +164 -0
- data/resources/locales/vi/territories.yml +264 -263
- data/resources/locales/zh/calendars.yml +266 -265
- data/resources/locales/zh/currencies.yml +953 -915
- data/resources/locales/zh/languages.yml +583 -580
- data/resources/locales/zh/layout.yml +5 -5
- data/resources/locales/zh/lists.yml +23 -7
- data/resources/locales/zh/numbers.yml +62 -57
- data/resources/locales/zh/plurals.yml +2 -2
- data/resources/locales/zh/rbnf.yml +689 -0
- data/resources/locales/zh/territories.yml +264 -263
- data/resources/locales/zh-Hant/calendars.yml +266 -265
- data/resources/locales/zh-Hant/currencies.yml +955 -915
- data/resources/locales/zh-Hant/languages.yml +583 -580
- data/resources/locales/zh-Hant/layout.yml +5 -5
- data/resources/locales/zh-Hant/lists.yml +23 -7
- data/resources/locales/zh-Hant/numbers.yml +62 -57
- data/resources/locales/zh-Hant/plurals.yml +2 -2
- data/resources/locales/zh-Hant/rbnf.yml +647 -0
- data/resources/locales/zh-Hant/territories.yml +264 -263
- data/resources/shared/currency_digits_and_rounding.yml +67 -64
- data/resources/shared/numbering_systems.yml +176 -0
- data/resources/shared/rbnf_root.yml +1573 -0
- data/resources/shared/segments/segments_root.yml +728 -0
- data/resources/shared/segments/tailorings/en.yml +8 -0
- data/resources/uli/segments/de.yml +128 -0
- data/resources/uli/segments/en.yml +154 -0
- data/resources/uli/segments/es.yml +112 -0
- data/resources/uli/segments/fr.yml +47 -0
- data/resources/uli/segments/it.yml +37 -0
- data/resources/uli/segments/pt.yml +173 -0
- data/resources/uli/segments/ru.yml +10 -0
- data/resources/unicode_data/casefolding.yml +4765 -0
- data/resources/unicode_data/indices/bidi_class.yml +4572 -0
- data/resources/unicode_data/indices/bidi_mirrored.yml +3087 -0
- data/resources/unicode_data/indices/category.yml +10918 -0
- data/resources/unicode_data/indices/keys.yml +101 -0
- data/resources/unicode_data/properties/line_break.yml +9269 -0
- data/resources/unicode_data/properties/sentence_break.yml +8067 -0
- data/resources/unicode_data/properties/word_break.yml +3001 -0
- data/spec/collation/collation_spec.rb +2 -1
- data/spec/collation/collator_spec.rb +4 -3
- data/spec/collation/tailoring_spec.rb +2 -2
- data/spec/collation/tailoring_tests/he.txt +5 -2
- data/spec/{tokenizers/calendars → data_readers}/additional_date_format_selector_spec.rb +13 -13
- data/spec/data_readers/date_time_data_reader_spec.rb +26 -0
- data/spec/data_readers/number_data_reader_spec.rb +18 -0
- data/spec/data_readers/timespan_data_reader.rb +22 -0
- data/spec/formatters/calendars/datetime_formatter_spec.rb +18 -22
- data/spec/formatters/list_formatter_spec.rb +16 -87
- data/spec/formatters/numbers/abbreviated/abbreviated_number_formatter_spec.rb +15 -59
- data/spec/formatters/numbers/abbreviated/long_decimal_formatter_spec.rb +32 -17
- data/spec/formatters/numbers/abbreviated/short_decimal_formatter_spec.rb +33 -17
- data/spec/formatters/numbers/currency_formatter_spec.rb +18 -13
- data/spec/formatters/numbers/decimal_formatter_spec.rb +16 -18
- data/spec/formatters/numbers/number_formatter_spec.rb +40 -31
- data/spec/formatters/numbers/percent_formatter_spec.rb +14 -6
- data/spec/formatters/numbers/rbnf/allowed_failures.yml +74 -0
- data/spec/formatters/numbers/rbnf/locales/af/rbnf_test.yml +706 -0
- data/spec/formatters/numbers/rbnf/locales/ar/rbnf_test.yml +706 -0
- data/spec/formatters/numbers/rbnf/locales/be/rbnf_test.yml +1174 -0
- data/spec/formatters/numbers/rbnf/locales/bg/rbnf_test.yml +706 -0
- data/spec/formatters/numbers/rbnf/locales/bn/rbnf_test.yml +1291 -0
- data/spec/formatters/numbers/rbnf/locales/ca/rbnf_test.yml +1174 -0
- data/spec/formatters/numbers/rbnf/locales/cs/rbnf_test.yml +823 -0
- data/spec/formatters/numbers/rbnf/locales/cy/rbnf_test.yml +940 -0
- data/spec/formatters/numbers/rbnf/locales/da/rbnf_test.yml +940 -0
- data/spec/formatters/numbers/rbnf/locales/de/rbnf_test.yml +940 -0
- data/spec/formatters/numbers/rbnf/locales/el/rbnf_test.yml +1174 -0
- data/spec/formatters/numbers/rbnf/locales/en/rbnf_test.yml +1291 -0
- data/spec/formatters/numbers/rbnf/locales/en-GB/rbnf_test.yml +1291 -0
- data/spec/formatters/numbers/rbnf/locales/es/rbnf_test.yml +1642 -0
- data/spec/formatters/numbers/rbnf/locales/eu/rbnf_test.yml +1291 -0
- data/spec/formatters/numbers/rbnf/locales/fa/rbnf_test.yml +589 -0
- data/spec/formatters/numbers/rbnf/locales/fi/rbnf_test.yml +706 -0
- data/spec/formatters/numbers/rbnf/locales/fil/rbnf_test.yml +706 -0
- data/spec/formatters/numbers/rbnf/locales/fr/rbnf_test.yml +1408 -0
- data/spec/formatters/numbers/rbnf/locales/ga/rbnf_test.yml +940 -0
- data/spec/formatters/numbers/rbnf/locales/gl/rbnf_test.yml +1291 -0
- data/spec/formatters/numbers/rbnf/locales/he/rbnf_test.yml +1057 -0
- data/spec/formatters/numbers/rbnf/locales/hi/rbnf_test.yml +823 -0
- data/spec/formatters/numbers/rbnf/locales/hr/rbnf_test.yml +1174 -0
- data/spec/formatters/numbers/rbnf/locales/hu/rbnf_test.yml +940 -0
- data/spec/formatters/numbers/rbnf/locales/id/rbnf_test.yml +706 -0
- data/spec/formatters/numbers/rbnf/locales/is/rbnf_test.yml +823 -0
- data/spec/formatters/numbers/rbnf/locales/it/rbnf_test.yml +1174 -0
- data/spec/formatters/numbers/rbnf/locales/ja/rbnf_test.yml +823 -0
- data/spec/formatters/numbers/rbnf/locales/ko/rbnf_test.yml +1408 -0
- data/spec/formatters/numbers/rbnf/locales/lv/rbnf_test.yml +706 -0
- data/spec/formatters/numbers/rbnf/locales/ms/rbnf_test.yml +706 -0
- data/spec/formatters/numbers/rbnf/locales/nb/rbnf_test.yml +940 -0
- data/spec/formatters/numbers/rbnf/locales/nl/rbnf_test.yml +706 -0
- data/spec/formatters/numbers/rbnf/locales/pl/rbnf_test.yml +823 -0
- data/spec/formatters/numbers/rbnf/locales/pt/rbnf_test.yml +1174 -0
- data/spec/formatters/numbers/rbnf/locales/ro/rbnf_test.yml +823 -0
- data/spec/formatters/numbers/rbnf/locales/ru/rbnf_test.yml +823 -0
- data/spec/formatters/numbers/rbnf/locales/sk/rbnf_test.yml +823 -0
- data/spec/formatters/numbers/rbnf/locales/sq/rbnf_test.yml +706 -0
- data/spec/formatters/numbers/rbnf/locales/sr/rbnf_test.yml +940 -0
- data/spec/formatters/numbers/rbnf/locales/sv/rbnf_test.yml +1876 -0
- data/spec/formatters/numbers/rbnf/locales/ta/rbnf_test.yml +706 -0
- data/spec/formatters/numbers/rbnf/locales/th/rbnf_test.yml +706 -0
- data/spec/formatters/numbers/rbnf/locales/tr/rbnf_test.yml +706 -0
- data/spec/formatters/numbers/rbnf/locales/uk/rbnf_test.yml +823 -0
- data/spec/formatters/numbers/rbnf/locales/ur/rbnf_test.yml +1291 -0
- data/spec/formatters/numbers/rbnf/locales/vi/rbnf_test.yml +706 -0
- data/spec/formatters/numbers/rbnf/locales/zh/rbnf_test.yml +940 -0
- data/spec/formatters/numbers/rbnf/locales/zh-Hant/rbnf_test.yml +940 -0
- data/spec/formatters/numbers/rbnf/rbnf_spec.rb +98 -0
- data/spec/formatters/plurals/plural_formatter_spec.rb +4 -4
- data/spec/formatters/plurals/rules_spec.rb +5 -5
- data/spec/localized/localized_date_spec.rb +1 -1
- data/spec/localized/localized_datetime_spec.rb +8 -13
- data/spec/localized/localized_number_spec.rb +17 -32
- data/spec/localized/localized_object_spec.rb +0 -5
- data/spec/localized/localized_string_spec.rb +40 -2
- data/spec/localized/localized_time_spec.rb +3 -6
- data/spec/localized/localized_timespan_spec.rb +144 -0
- data/spec/normalization_spec.rb +12 -12
- data/spec/parsers/number_parser_spec.rb +5 -5
- data/spec/parsers/parser_spec.rb +60 -0
- data/spec/parsers/segmentation_parser_spec.rb +96 -0
- data/spec/parsers/symbol_table_spec.rb +32 -0
- data/spec/parsers/unicode_regex/character_class_spec.rb +117 -0
- data/spec/parsers/unicode_regex/character_range_spec.rb +21 -0
- data/spec/parsers/unicode_regex/character_set_spec.rb +36 -0
- data/spec/parsers/unicode_regex/literal_spec.rb +34 -0
- data/spec/parsers/unicode_regex/unicode_string_spec.rb +22 -0
- data/spec/parsers/unicode_regex_parser_spec.rb +86 -0
- data/spec/readme_spec.rb +8 -269
- data/spec/shared/break_iterator_spec.rb +72 -0
- data/spec/shared/calendar_spec.rb +5 -4
- data/spec/shared/casefolder_spec.rb +30 -0
- data/spec/shared/casefolding.txt +251 -0
- data/spec/shared/casefolding_expected.txt +251 -0
- data/spec/shared/code_point_spec.rb +44 -14
- data/spec/shared/numbering_system_spec.rb +41 -0
- data/spec/shared/territories_spec.rb +14 -6
- data/spec/shared/unicode_regex_spec.rb +203 -0
- data/spec/spec_helper.rb +17 -0
- data/spec/tokenizers/calendars/date_tokenizer_spec.rb +26 -30
- data/spec/tokenizers/calendars/datetime_tokenizer_spec.rb +11 -90
- data/spec/tokenizers/calendars/time_tokenizer_spec.rb +5 -5
- data/spec/tokenizers/calendars/timespan_tokenizer_spec.rb +17 -7
- data/spec/tokenizers/numbers/number_tokenizer_spec.rb +28 -27
- data/spec/tokenizers/segmentation/segmentation_tokenizer_spec.rb +40 -0
- data/spec/tokenizers/unicode_regex/unicode_regex_tokenizer_spec.rb +190 -0
- data/spec/utils/range_set_spec.rb +171 -0
- data/spec/utils/yaml/yaml_spec.rb +62 -51
- data/twitter_cldr.gemspec +1 -1
- metadata +199 -30
- data/lib/twitter_cldr/formatters/base.rb +0 -47
- data/lib/twitter_cldr/formatters/calendars/date_formatter.rb +0 -19
- data/lib/twitter_cldr/formatters/calendars/time_formatter.rb +0 -19
- data/lib/twitter_cldr/normalization/base.rb +0 -37
- data/lib/twitter_cldr/normalization/hangul.rb +0 -79
- data/lib/twitter_cldr/normalization/nfc.rb +0 -24
- data/lib/twitter_cldr/normalization/nfd.rb +0 -26
- data/lib/twitter_cldr/normalization/nfkc.rb +0 -114
- data/lib/twitter_cldr/normalization/nfkd.rb +0 -120
- data/lib/twitter_cldr/normalization/quick_check.rb +0 -41
- data/lib/twitter_cldr/tokenizers/base.rb +0 -169
- data/lib/twitter_cldr/tokenizers/calendars/datetime_tokenizer.rb +0 -131
- data/lib/twitter_cldr/utils/territories.rb +0 -56
- data/spec/formatters/base_spec.rb +0 -18
- data/spec/formatters/calendars/timespan_formatter_spec.rb +0 -112
- data/spec/normalization/NormalizationTestShort.txt +0 -602
- data/spec/normalization/base_spec.rb +0 -16
- data/spec/normalization/hangul_spec.rb +0 -42
- data/spec/normalization/normalization_spec.rb +0 -113
- data/spec/tokenizers/base_spec.rb +0 -259
- data/spec/utils/territories_spec.rb +0 -16
@@ -24,24 +24,54 @@ module TwitterCldr
|
|
24
24
|
:simple_titlecase_map
|
25
25
|
]
|
26
26
|
|
27
|
-
CodePoint
|
27
|
+
class CodePoint
|
28
28
|
DECOMPOSITION_DATA_INDEX = 5
|
29
|
-
|
30
29
|
DECOMPOSITION_REGEX = /^(?:<(.+)>\s+)?(.+)?$/
|
31
30
|
|
32
|
-
|
31
|
+
INDICES = [
|
32
|
+
:category, :bidi_class, :bidi_mirrored
|
33
|
+
]
|
34
|
+
|
35
|
+
PROPERTIES = [
|
36
|
+
:sentence_break, :line_break, :word_break
|
37
|
+
]
|
38
|
+
|
39
|
+
attr_reader :fields
|
33
40
|
|
34
|
-
|
35
|
-
|
41
|
+
CODE_POINT_FIELDS.each_with_index do |field, idx|
|
42
|
+
unless field == :decomposition
|
43
|
+
define_method field do
|
44
|
+
fields[idx]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
36
48
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
49
|
+
def decomposition
|
50
|
+
@decomposition ||= begin
|
51
|
+
decomp = fields[DECOMPOSITION_DATA_INDEX]
|
52
|
+
if decomp =~ DECOMPOSITION_REGEX
|
53
|
+
$2 && $2.split.map(&:hex)
|
54
|
+
else
|
55
|
+
raise ArgumentError, "decomposition #{decomp.inspect} has invalid format"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def compatibility_decomposition_tag
|
61
|
+
@compat_decomp_tag ||= begin
|
62
|
+
decomp = fields[DECOMPOSITION_DATA_INDEX]
|
63
|
+
if decomp =~ DECOMPOSITION_REGEX
|
64
|
+
$1
|
65
|
+
else
|
66
|
+
raise ArgumentError, "decomposition #{decomp.inspect} has invalid format"
|
67
|
+
end
|
42
68
|
end
|
43
69
|
end
|
44
70
|
|
71
|
+
def initialize(fields)
|
72
|
+
@fields = fields
|
73
|
+
end
|
74
|
+
|
45
75
|
def compatibility_decomposition?
|
46
76
|
!!compatibility_decomposition_tag
|
47
77
|
end
|
@@ -65,7 +95,36 @@ module TwitterCldr
|
|
65
95
|
block_data = TwitterCldr.get_resource(:unicode_data, :blocks, target.first)
|
66
96
|
code_point_data = block_data.fetch(code_point) { |cp| get_range_start(cp, block_data) }
|
67
97
|
|
68
|
-
CodePoint.new(
|
98
|
+
CodePoint.new(code_point_data) if code_point_data
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
# Methods that return a list of code points for the given property name.
|
103
|
+
INDICES.each do |index_name|
|
104
|
+
define_method :"code_points_for_#{index_name}" do |value|
|
105
|
+
get_index(index_name)[value]
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
PROPERTIES.each do |property_name|
|
110
|
+
define_method :"code_points_for_#{property_name}" do |value|
|
111
|
+
get_property_data(property_name)[value]
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
# Search for code points wherein at least one property value contains prop_value.
|
116
|
+
# For example, if prop_value is set to :Zs, this method will return all code
|
117
|
+
# points that are considered spaces. If prop value is simply :Z, this method
|
118
|
+
# will return all code points who have a property value that contains :Z, i.e.
|
119
|
+
# spaces as well as line separators (:Zl) and paragraph separators (:Zp).
|
120
|
+
def code_points_for_property_value(prop_value)
|
121
|
+
index_key_cache[prop_value] ||= index_keys.inject([]) do |ret, (index_key, index_names)|
|
122
|
+
if index_key.to_s.include?(prop_value.to_s)
|
123
|
+
index_names.each do |index_name|
|
124
|
+
ret += get_index(index_name)[index_key]
|
125
|
+
end
|
126
|
+
end
|
127
|
+
ret
|
69
128
|
end
|
70
129
|
end
|
71
130
|
|
@@ -95,10 +154,6 @@ module TwitterCldr
|
|
95
154
|
end
|
96
155
|
end
|
97
156
|
|
98
|
-
def hangul_type_cache
|
99
|
-
@hangul_type_cache ||= {}
|
100
|
-
end
|
101
|
-
|
102
157
|
def excluded_from_composition?(code_point)
|
103
158
|
composition_exclusion_cache[code_point] ||=
|
104
159
|
composition_exclusions.any? { |exclusion| exclusion.include?(code_point) }
|
@@ -106,6 +161,38 @@ module TwitterCldr
|
|
106
161
|
|
107
162
|
private
|
108
163
|
|
164
|
+
def index_key_cache
|
165
|
+
@index_key_cache ||= {}
|
166
|
+
end
|
167
|
+
|
168
|
+
def index_keys
|
169
|
+
@index_keys ||= TwitterCldr.get_resource(:unicode_data, :indices, "keys")
|
170
|
+
end
|
171
|
+
|
172
|
+
def get_index(index_name)
|
173
|
+
index_cache[index_name] ||= TwitterCldr.get_resource(
|
174
|
+
:unicode_data, :indices, index_name
|
175
|
+
)
|
176
|
+
end
|
177
|
+
|
178
|
+
def get_property_data(property_name)
|
179
|
+
property_data_cache[property_name] ||= TwitterCldr.get_resource(
|
180
|
+
:unicode_data, :properties, property_name
|
181
|
+
)
|
182
|
+
end
|
183
|
+
|
184
|
+
def index_cache
|
185
|
+
@index_cache ||= {}
|
186
|
+
end
|
187
|
+
|
188
|
+
def property_data_cache
|
189
|
+
@property_data_cache ||= {}
|
190
|
+
end
|
191
|
+
|
192
|
+
def hangul_type_cache
|
193
|
+
@hangul_type_cache ||= {}
|
194
|
+
end
|
195
|
+
|
109
196
|
def code_point_cache
|
110
197
|
@code_point_cache ||= {}
|
111
198
|
end
|
@@ -132,7 +219,7 @@ module TwitterCldr
|
|
132
219
|
end
|
133
220
|
|
134
221
|
def blocks
|
135
|
-
TwitterCldr.get_resource(:unicode_data, :blocks)
|
222
|
+
@blocks ||= TwitterCldr.get_resource(:unicode_data, :blocks)
|
136
223
|
end
|
137
224
|
|
138
225
|
# Check if block constitutes a range. The code point beginning a range will have a name enclosed in <>, ending with 'First'
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# Copyright 2012 Twitter, Inc
|
4
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
5
|
+
|
6
|
+
module TwitterCldr
|
7
|
+
module Shared
|
8
|
+
|
9
|
+
class UnsupportedNumberingSystemError < StandardError; end
|
10
|
+
|
11
|
+
class NumberingSystem
|
12
|
+
|
13
|
+
class << self
|
14
|
+
def for_name(name)
|
15
|
+
system_cache[name] ||= begin
|
16
|
+
if system = resource[name.to_sym]
|
17
|
+
if system[:type] != "numeric"
|
18
|
+
raise UnsupportedNumberingSystemError.new("#{system[:type]} numbering systems not supported.")
|
19
|
+
else
|
20
|
+
new(system[:name], system[:digits])
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
protected
|
27
|
+
|
28
|
+
def system_cache
|
29
|
+
@system_cache ||= {}
|
30
|
+
end
|
31
|
+
|
32
|
+
def resource
|
33
|
+
@resource ||= TwitterCldr.get_resource(:shared, :numbering_systems)[:numbering_systems]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
attr_reader :name, :digits
|
38
|
+
|
39
|
+
def initialize(name, digits)
|
40
|
+
@name = name
|
41
|
+
@digits = split_digits(digits)
|
42
|
+
end
|
43
|
+
|
44
|
+
def transliterate(number)
|
45
|
+
number.to_s.gsub(/\d/) do |digit|
|
46
|
+
digits[digit.to_i]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
protected
|
51
|
+
|
52
|
+
def split_digits(str)
|
53
|
+
str.unpack("U*").map { |digit| [digit].pack("U*") }
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -29,7 +29,7 @@ module TwitterCldr
|
|
29
29
|
# codes" (UN M.49; for example, 014 for Eastern Africa and 419 for Latin
|
30
30
|
# America).
|
31
31
|
def from_territory_code_for_locale(territory_code, locale = TwitterCldr.locale)
|
32
|
-
get_resource(locale)[:territories][
|
32
|
+
get_resource(locale)[:territories][normalize_territory_code(territory_code)]
|
33
33
|
rescue
|
34
34
|
nil
|
35
35
|
end
|
@@ -48,6 +48,48 @@ module TwitterCldr
|
|
48
48
|
nil
|
49
49
|
end
|
50
50
|
|
51
|
+
# Normalizes a territory code to a symbol.
|
52
|
+
#
|
53
|
+
# 1) Converts to string.
|
54
|
+
# 2) Downcases.
|
55
|
+
# 3) Symbolizes.
|
56
|
+
#
|
57
|
+
# The downcasing is to convert ISO 3166-1 alpha-2 codes,
|
58
|
+
# used (upper-case) for territories in CLDR, to be lowercase, to be
|
59
|
+
# consistent with how territory codes are surfaced in TwitterCLDR
|
60
|
+
# methods relating to phone and postal codes.
|
61
|
+
def normalize_territory_code(territory_code)
|
62
|
+
return if territory_code.nil?
|
63
|
+
territory_code.to_s.downcase.gsub(/^0+/, '').to_sym
|
64
|
+
end
|
65
|
+
|
66
|
+
# Normalizes each key in the 'arg' hash or constituent hashes as
|
67
|
+
# if it were a territory code.
|
68
|
+
#
|
69
|
+
# In addition, removes entries in hashes where the key begins with a digit.
|
70
|
+
# Because of the way the twitter-cldr-rb YAML resource pipeline works,
|
71
|
+
# these three-digit codes get mangled (e.g. interpreted as octal then
|
72
|
+
# reinterpreted out in decimal), and translations for UN three-digit
|
73
|
+
# area codes cannot be trusted.
|
74
|
+
def deep_normalize_territory_code_keys(arg)
|
75
|
+
case arg
|
76
|
+
when Array
|
77
|
+
arg.map { |elem| deep_normalize_territory_code_keys(elem) }
|
78
|
+
when Hash
|
79
|
+
normalized = arg.inject({}) do |carry, (key, value)|
|
80
|
+
normalized_key = normalize_territory_code(key)
|
81
|
+
carry[normalized_key] = deep_normalize_territory_code_keys(value)
|
82
|
+
carry
|
83
|
+
end
|
84
|
+
normalized.delete_if do |key, _|
|
85
|
+
key.to_s =~ /^\d+$/
|
86
|
+
end
|
87
|
+
normalized
|
88
|
+
else
|
89
|
+
arg
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
51
93
|
protected
|
52
94
|
|
53
95
|
def get_resource(locale)
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# Copyright 2012 Twitter, Inc
|
4
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
5
|
+
|
6
|
+
module TwitterCldr
|
7
|
+
module Shared
|
8
|
+
class UnicodeRegex
|
9
|
+
|
10
|
+
class << self
|
11
|
+
|
12
|
+
def compile(str, modifiers = "", symbol_table = nil)
|
13
|
+
new(
|
14
|
+
parser.parse(tokenizer.tokenize(str), {
|
15
|
+
:symbol_table => symbol_table
|
16
|
+
}), modifiers
|
17
|
+
)
|
18
|
+
end
|
19
|
+
|
20
|
+
# All unicode characters
|
21
|
+
def all_unicode
|
22
|
+
@all_unicode ||= TwitterCldr::Utils::RangeSet.new(
|
23
|
+
[0..0x10FFFF]
|
24
|
+
)
|
25
|
+
end
|
26
|
+
|
27
|
+
# A few <control> characters (i.e. 2..7) and public/private surrogates (i.e. 55296..57343).
|
28
|
+
# These don't play nicely with Ruby's regular expression engine, and I think we
|
29
|
+
# can safely disregard them.
|
30
|
+
def invalid_regexp_chars
|
31
|
+
@invalid_regexp_chars ||= TwitterCldr::Utils::RangeSet.new(
|
32
|
+
[2..7, 55296..57343]
|
33
|
+
)
|
34
|
+
end
|
35
|
+
|
36
|
+
def valid_regexp_chars
|
37
|
+
@valid_regexp_chars ||= all_unicode.subtract(invalid_regexp_chars)
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def tokenizer
|
43
|
+
@tokenizer ||= TwitterCldr::Tokenizers::UnicodeRegexTokenizer.new
|
44
|
+
end
|
45
|
+
|
46
|
+
def parser
|
47
|
+
@parser ||= TwitterCldr::Parsers::UnicodeRegexParser.new
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
extend Forwardable
|
53
|
+
def_delegator :to_regexp, :match
|
54
|
+
def_delegator :to_regexp, :=~
|
55
|
+
|
56
|
+
attr_reader :elements, :modifiers
|
57
|
+
|
58
|
+
def initialize(elements, modifiers = nil)
|
59
|
+
@elements = elements
|
60
|
+
@modifiers = nil
|
61
|
+
end
|
62
|
+
|
63
|
+
def to_regexp
|
64
|
+
if RUBY_VERSION <= "1.8.7"
|
65
|
+
begin
|
66
|
+
Oniguruma::ORegexp.new(to_regexp_str, modifiers)
|
67
|
+
rescue NameError
|
68
|
+
raise "Unicode regular expressions require the Oniguruma gem when using Ruby 1.8. Please install, require, and retry."
|
69
|
+
end
|
70
|
+
else
|
71
|
+
@regexp ||= Regexp.new(to_regexp_str, modifiers)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def to_regexp_str
|
76
|
+
@regexp_str ||= elements.map(&:to_regexp_str).join
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
data/lib/twitter_cldr/shared.rb
CHANGED
@@ -5,15 +5,19 @@
|
|
5
5
|
|
6
6
|
module TwitterCldr
|
7
7
|
module Shared
|
8
|
-
autoload :Calendar,
|
9
|
-
autoload :CodePoint,
|
10
|
-
autoload :Currencies,
|
11
|
-
autoload :LanguageCodes,
|
12
|
-
autoload :Languages,
|
13
|
-
autoload :Numbers,
|
14
|
-
autoload :PhoneCodes,
|
15
|
-
autoload :PostalCodes,
|
16
|
-
autoload :Bidi,
|
8
|
+
autoload :Calendar, 'twitter_cldr/shared/calendar'
|
9
|
+
autoload :CodePoint, 'twitter_cldr/shared/code_point'
|
10
|
+
autoload :Currencies, 'twitter_cldr/shared/currencies'
|
11
|
+
autoload :LanguageCodes, 'twitter_cldr/shared/language_codes'
|
12
|
+
autoload :Languages, 'twitter_cldr/shared/languages'
|
13
|
+
autoload :Numbers, 'twitter_cldr/shared/numbers'
|
14
|
+
autoload :PhoneCodes, 'twitter_cldr/shared/phone_codes'
|
15
|
+
autoload :PostalCodes, 'twitter_cldr/shared/postal_codes'
|
16
|
+
autoload :Bidi, 'twitter_cldr/shared/bidi'
|
17
17
|
autoload :Territories, 'twitter_cldr/shared/territories'
|
18
|
+
autoload :NumberingSystem, 'twitter_cldr/shared/numbering_system'
|
19
|
+
autoload :Casefolder, 'twitter_cldr/shared/casefolder'
|
20
|
+
autoload :UnicodeRegex, 'twitter_cldr/shared/unicode_regex'
|
21
|
+
autoload :BreakIterator, 'twitter_cldr/shared/break_iterator'
|
18
22
|
end
|
19
23
|
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# Copyright 2012 Twitter, Inc
|
4
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
5
|
+
|
6
|
+
module TwitterCldr
|
7
|
+
module Tokenizers
|
8
|
+
class DateTimeTokenizer
|
9
|
+
|
10
|
+
attr_reader :data_reader
|
11
|
+
|
12
|
+
def initialize(data_reader)
|
13
|
+
@data_reader = data_reader
|
14
|
+
end
|
15
|
+
|
16
|
+
def tokenize(pattern)
|
17
|
+
expand_tokens(
|
18
|
+
PatternTokenizer.new(data_reader, tokenizer).tokenize(pattern)
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
# Tokenizes mixed date and time pattern strings,
|
23
|
+
# used to tokenize the additional date format patterns.
|
24
|
+
def full_tokenize(pattern)
|
25
|
+
PatternTokenizer.new(data_reader, full_tokenizer).tokenize(pattern)
|
26
|
+
end
|
27
|
+
|
28
|
+
protected
|
29
|
+
|
30
|
+
def expand_tokens(tokens)
|
31
|
+
tokens.inject([]) do |ret, token|
|
32
|
+
ret + case token.type
|
33
|
+
when :date
|
34
|
+
expand_date(token)
|
35
|
+
when :time
|
36
|
+
expand_time(token)
|
37
|
+
else
|
38
|
+
[token]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def expand_date(token)
|
44
|
+
date_reader = data_reader.date_reader
|
45
|
+
date_reader.tokenizer.tokenize(date_reader.pattern)
|
46
|
+
end
|
47
|
+
|
48
|
+
def expand_time(token)
|
49
|
+
time_reader = data_reader.time_reader
|
50
|
+
time_reader.tokenizer.tokenize(time_reader.pattern)
|
51
|
+
end
|
52
|
+
|
53
|
+
def full_tokenizer
|
54
|
+
@@full_tokenizer ||= begin
|
55
|
+
new_tok = Tokenizer.union(
|
56
|
+
data_reader.date_reader.tokenizer.tokenizer,
|
57
|
+
data_reader.time_reader.tokenizer.tokenizer
|
58
|
+
) do |recognizer|
|
59
|
+
recognizer.token_type != :plaintext
|
60
|
+
end
|
61
|
+
|
62
|
+
new_tok.recognizers << TokenRecognizer.new(:plaintext, //)
|
63
|
+
new_tok
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def tokenizer
|
68
|
+
@tokenizer ||= Tokenizer.new([
|
69
|
+
TokenRecognizer.new(:date, /\{\{date\}\}/),
|
70
|
+
TokenRecognizer.new(:time, /\{\{time\}\}/),
|
71
|
+
TokenRecognizer.new(:plaintext, //)
|
72
|
+
])
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -5,41 +5,26 @@
|
|
5
5
|
|
6
6
|
module TwitterCldr
|
7
7
|
module Tokenizers
|
8
|
-
class DateTokenizer
|
9
|
-
TOKEN_SPLITTER_REGEX = /(\s*\'[\w\s-]+\'\s*|G{1,5}|y+|Y+|Q{1,4}|q{1,5}|M{1,5}|L{1,5}|d{1,2}|F{1}|E{1,5}|e{1,5}|c{1,5}|\#\{[^\}]+\})/
|
10
|
-
TOKEN_TYPE_REGEXES = {
|
11
|
-
:composite => { :regex => /^\#\{[^\}]+\}/, :content => /^\#\{([^\}]+)\}/, :priority => 1 },
|
12
|
-
:pattern => { :regex => /^(?:G{1,5}|y+|Y+|Q{1,4}|q{1,5}|M{1,5}|L{1,5}|d{1,2}|F{1}|E{1,5}|e{1,5}|c{1,5})/, :priority => 2 },
|
13
|
-
:plaintext => { :regex => //, :priority => 3 }
|
14
|
-
}
|
8
|
+
class DateTokenizer
|
15
9
|
|
16
|
-
|
17
|
-
super(options)
|
10
|
+
attr_reader :data_reader
|
18
11
|
|
19
|
-
|
20
|
-
|
21
|
-
}
|
22
|
-
|
23
|
-
@token_type_regexes = {
|
24
|
-
:else => TOKEN_TYPE_REGEXES
|
25
|
-
}
|
26
|
-
|
27
|
-
@paths = {
|
28
|
-
:default => [:formats, :date, :default],
|
29
|
-
:full => [:formats, :date, :full],
|
30
|
-
:long => [:formats, :date, :long],
|
31
|
-
:medium => [:formats, :date, :medium],
|
32
|
-
:short => [:formats, :date, :short],
|
33
|
-
:additional => [:additional_formats]
|
34
|
-
}
|
12
|
+
def initialize(data_reader)
|
13
|
+
@data_reader = data_reader
|
35
14
|
end
|
36
15
|
|
37
|
-
|
16
|
+
def tokenize(pattern)
|
17
|
+
PatternTokenizer.new(data_reader, tokenizer).tokenize(pattern)
|
18
|
+
end
|
38
19
|
|
39
|
-
|
40
|
-
|
41
|
-
|
20
|
+
def tokenizer
|
21
|
+
@tokenizer ||= Tokenizer.new([
|
22
|
+
TokenRecognizer.new(:composite, /^\#\{[^\}]+\}/, /^\#\{([^\}]+)\}/),
|
23
|
+
TokenRecognizer.new(:pattern, /^(?:G{1,5}|y+|Y+|Q{1,4}|q{1,5}|M{1,5}|L{1,5}|d{1,2}|F{1}|E{1,5}|e{1,5}|c{1,5})/),
|
24
|
+
TokenRecognizer.new(:plaintext, //)
|
25
|
+
], /(\s*\'[\w\s-]+\'\s*|G{1,5}|y+|Y+|Q{1,4}|q{1,5}|M{1,5}|L{1,5}|d{1,2}|F{1}|E{1,5}|e{1,5}|c{1,5}|\#\{[^\}]+\})/)
|
42
26
|
end
|
27
|
+
|
43
28
|
end
|
44
29
|
end
|
45
30
|
end
|
@@ -5,40 +5,25 @@
|
|
5
5
|
|
6
6
|
module TwitterCldr
|
7
7
|
module Tokenizers
|
8
|
-
class TimeTokenizer
|
9
|
-
TOKEN_SPLITTER_REGEX = /(\'[\w\s-]+\'|a{1}|h{1,2}|H{1,2}|K{1,2}|k{1,2}|m{1,2}|s{1,2}|S+|z{1,4}|Z{1,4})/
|
10
|
-
TOKEN_TYPE_REGEXES = {
|
11
|
-
:pattern => { :regex => /^(a{1}|h{1,2}|H{1,2}|K{1,2}|k{1,2}|m{1,2}|s{1,2}|S+|z{1,4}|Z{1,4})/, :priority => 1 },
|
12
|
-
:plaintext => { :regex => //, :priority => 2 }
|
13
|
-
}
|
8
|
+
class TimeTokenizer
|
14
9
|
|
15
|
-
|
16
|
-
super(options)
|
10
|
+
attr_reader :data_reader
|
17
11
|
|
18
|
-
|
19
|
-
|
20
|
-
}
|
21
|
-
|
22
|
-
@token_type_regexes = {
|
23
|
-
:else => TOKEN_TYPE_REGEXES
|
24
|
-
}
|
25
|
-
|
26
|
-
@paths = {
|
27
|
-
:default => [:formats, :time, :default],
|
28
|
-
:full => [:formats, :time, :full],
|
29
|
-
:long => [:formats, :time, :long],
|
30
|
-
:medium => [:formats, :time, :medium],
|
31
|
-
:short => [:formats, :time, :short],
|
32
|
-
:additional => [:additional_formats]
|
33
|
-
}
|
12
|
+
def initialize(data_reader)
|
13
|
+
@data_reader = data_reader
|
34
14
|
end
|
35
15
|
|
36
|
-
|
16
|
+
def tokenize(pattern)
|
17
|
+
PatternTokenizer.new(data_reader, tokenizer).tokenize(pattern)
|
18
|
+
end
|
37
19
|
|
38
|
-
|
39
|
-
|
40
|
-
|
20
|
+
def tokenizer
|
21
|
+
@tokenizer ||= Tokenizer.new([
|
22
|
+
TokenRecognizer.new(:pattern, /^(a{1}|h{1,2}|H{1,2}|K{1,2}|k{1,2}|m{1,2}|s{1,2}|S+|z{1,4}|Z{1,4})/),
|
23
|
+
TokenRecognizer.new(:plaintext, //)
|
24
|
+
], /(\'[\w\s-]+\'|a{1}|h{1,2}|H{1,2}|K{1,2}|k{1,2}|m{1,2}|s{1,2}|S+|z{1,4}|Z{1,4})/)
|
41
25
|
end
|
26
|
+
|
42
27
|
end
|
43
28
|
end
|
44
29
|
end
|
@@ -5,103 +5,27 @@
|
|
5
5
|
|
6
6
|
module TwitterCldr
|
7
7
|
module Tokenizers
|
8
|
-
class TimespanTokenizer
|
8
|
+
class TimespanTokenizer
|
9
9
|
|
10
|
-
|
10
|
+
attr_reader :data_reader
|
11
11
|
|
12
|
-
def initialize(
|
13
|
-
|
14
|
-
|
15
|
-
@token_splitter_regex = /([^0*#,\.]*)([0#,\.]+)([^0*#,\.]*)$/ # creates spaces
|
16
|
-
|
17
|
-
@token_type_regexes = [
|
18
|
-
{ :type => :pattern, :regex => /[0?#,\.]*/ }, # splits token at right places
|
19
|
-
{ :type => :plaintext, :regex => // }
|
20
|
-
]
|
21
|
-
|
22
|
-
@base_path = [:units]
|
23
|
-
|
24
|
-
@paths = {
|
25
|
-
:ago => {
|
26
|
-
:default => :'hour-past',
|
27
|
-
:second => :'second-past',
|
28
|
-
:minute => :'minute-past',
|
29
|
-
:hour => :'hour-past',
|
30
|
-
:day => :'day-past',
|
31
|
-
:week => :'week-past',
|
32
|
-
:month => :'month-past',
|
33
|
-
:year => :'year-past'
|
34
|
-
},
|
35
|
-
:until => {
|
36
|
-
:default => :'hour-future',
|
37
|
-
:second => :'second-future',
|
38
|
-
:minute => :'minute-future',
|
39
|
-
:hour => :'hour-future',
|
40
|
-
:day => :'day-future',
|
41
|
-
:week => :'week-future',
|
42
|
-
:month => :'month-future',
|
43
|
-
:year => :'year-future'
|
44
|
-
},
|
45
|
-
:none => {
|
46
|
-
:default => :second,
|
47
|
-
:second => :second,
|
48
|
-
:minute => :minute,
|
49
|
-
:hour => :hour,
|
50
|
-
:day => :day,
|
51
|
-
:week => :week,
|
52
|
-
:month => :month,
|
53
|
-
:year => :year
|
54
|
-
}
|
55
|
-
}
|
56
|
-
end
|
57
|
-
|
58
|
-
def tokens(options = {})
|
59
|
-
# tokens_with_placeholders_for(full_path(:none, :second, :short, :two))
|
60
|
-
path = full_path(options[:direction], options[:unit], options[:type])
|
61
|
-
pluralization = options[:rule] || TwitterCldr::Formatters::Plurals::Rules.rule_for(options[:number], @locale)
|
62
|
-
available = traverse(path)
|
63
|
-
|
64
|
-
case pluralization # sometimes the plural rule will return ":one" when the resource only contains a path with "1"
|
65
|
-
when :zero
|
66
|
-
pluralization = 0 if available.include?(0)
|
67
|
-
when :one
|
68
|
-
pluralization = 1 if available.include?(1)
|
69
|
-
when :two
|
70
|
-
pluralization = 2 if available.include?(2)
|
71
|
-
end
|
72
|
-
|
73
|
-
if available.include?(pluralization)
|
74
|
-
path << pluralization
|
75
|
-
else
|
76
|
-
return [] unless available.keys.first
|
77
|
-
path << available.keys.first
|
78
|
-
end
|
79
|
-
|
80
|
-
tokens_with_placeholders_for(path)
|
12
|
+
def initialize(data_reader)
|
13
|
+
@data_reader = data_reader
|
81
14
|
end
|
82
15
|
|
83
|
-
def
|
84
|
-
|
16
|
+
def tokenize(pattern)
|
17
|
+
PatternTokenizer.new(data_reader, tokenizer).tokenize(pattern)
|
85
18
|
end
|
86
19
|
|
87
20
|
protected
|
88
21
|
|
89
|
-
def
|
90
|
-
@
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
@base_path + [@paths[direction][unit], type]
|
22
|
+
def tokenizer
|
23
|
+
@tokenizer ||= Tokenizer.new([
|
24
|
+
TokenRecognizer.new(:pattern, /\{?[0?#,\.]+\}?/),
|
25
|
+
TokenRecognizer.new(:plaintext, //)
|
26
|
+
], /([^0*#,\.\{\}]*)(\{?[0#,\.]+\}?)([^0*#,\.\{\}]*)$/)
|
95
27
|
end
|
96
28
|
|
97
|
-
def init_resources
|
98
|
-
@resource = TwitterCldr.get_locale_resource(@locale, :units)[TwitterCldr.convert_locale(@locale)]
|
99
|
-
end
|
100
|
-
|
101
|
-
def pattern_for(resource)
|
102
|
-
# can't go any deeper, so return original pattern (which should NOT be a hash, by the way)
|
103
|
-
resource
|
104
|
-
end
|
105
29
|
end
|
106
30
|
end
|
107
31
|
end
|