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
@@ -1,47 +0,0 @@
|
|
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 Formatters
|
8
|
-
class Base
|
9
|
-
attr_reader :tokenizer
|
10
|
-
|
11
|
-
def format(obj, options = {})
|
12
|
-
process_tokens(self.get_tokens(obj, options), obj, options)
|
13
|
-
end
|
14
|
-
|
15
|
-
protected
|
16
|
-
|
17
|
-
def process_tokens(tokens, obj, options = {})
|
18
|
-
result = ""
|
19
|
-
|
20
|
-
tokens.each_with_index do |token, index|
|
21
|
-
case token.type
|
22
|
-
when :composite
|
23
|
-
result << eval(process_tokens(token.tokens, obj)).to_s
|
24
|
-
when :pattern
|
25
|
-
result << self.result_for_token(token, index, obj, options)
|
26
|
-
else
|
27
|
-
if token.value.size > 0 && token.value[0].chr == "'" && token.value[-1].chr == "'"
|
28
|
-
result << token.value[1..-2]
|
29
|
-
else
|
30
|
-
result << token.value
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
result
|
36
|
-
end
|
37
|
-
|
38
|
-
def get_tokens(obj, options = {})
|
39
|
-
@tokenizer.tokens(options)
|
40
|
-
end
|
41
|
-
|
42
|
-
def extract_locale(options)
|
43
|
-
options[:locale] || TwitterCldr::DEFAULT_LOCALE
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
@@ -1,19 +0,0 @@
|
|
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 Formatters
|
8
|
-
class DateFormatter < DateTimeFormatter
|
9
|
-
def initialize(options = {})
|
10
|
-
locale = extract_locale(options)
|
11
|
-
cache_key = TwitterCldr::Utils.compute_cache_key("date", locale, options[:calendar_type])
|
12
|
-
@tokenizer = tokenizer_cache[cache_key] ||= TwitterCldr::Tokenizers::DateTokenizer.new(
|
13
|
-
:locale => locale,
|
14
|
-
:calendar_type => options[:calendar_type]
|
15
|
-
)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,19 +0,0 @@
|
|
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 Formatters
|
8
|
-
class TimeFormatter < DateTimeFormatter
|
9
|
-
def initialize(options = {})
|
10
|
-
locale = extract_locale(options)
|
11
|
-
cache_key = TwitterCldr::Utils.compute_cache_key("time", locale, options[:calendar_type])
|
12
|
-
@tokenizer = tokenizer_cache[cache_key] ||= TwitterCldr::Tokenizers::TimeTokenizer.new(
|
13
|
-
:locale => locale,
|
14
|
-
:calendar_type => options[:calendar_type]
|
15
|
-
)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
# Copyright 2012 Twitter, Inc
|
4
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
5
|
-
|
6
|
-
require 'hamster'
|
7
|
-
|
8
|
-
module TwitterCldr
|
9
|
-
module Normalization
|
10
|
-
class Base
|
11
|
-
|
12
|
-
class << self
|
13
|
-
|
14
|
-
def normalize(string)
|
15
|
-
code_points = TwitterCldr::Utils::CodePoints.from_string(string)
|
16
|
-
normalized_code_points = normalize_code_points(code_points)
|
17
|
-
TwitterCldr::Utils::CodePoints.to_string(normalized_code_points)
|
18
|
-
end
|
19
|
-
|
20
|
-
def combining_class_for(code_point)
|
21
|
-
combining_class_cache[code_point] ||=
|
22
|
-
TwitterCldr::Shared::CodePoint.find(code_point).combining_class.to_i
|
23
|
-
rescue NoMethodError
|
24
|
-
0
|
25
|
-
end
|
26
|
-
|
27
|
-
protected
|
28
|
-
|
29
|
-
def combining_class_cache
|
30
|
-
@combining_class_cache ||= {}
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,79 +0,0 @@
|
|
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 Normalization
|
8
|
-
module Hangul
|
9
|
-
|
10
|
-
class << self
|
11
|
-
|
12
|
-
SBASE = 0xAC00
|
13
|
-
LBASE = 0x1100
|
14
|
-
VBASE = 0x1161
|
15
|
-
TBASE = 0x11A7
|
16
|
-
|
17
|
-
LCOUNT = 19
|
18
|
-
VCOUNT = 21
|
19
|
-
TCOUNT = 28
|
20
|
-
|
21
|
-
NCOUNT = VCOUNT * TCOUNT # 588
|
22
|
-
SCOUNT = LCOUNT * NCOUNT # 11172
|
23
|
-
|
24
|
-
LLIMIT = LBASE + LCOUNT # 0x1113 = 4371
|
25
|
-
VLIMIT = VBASE + VCOUNT # 0x1176 = 4470
|
26
|
-
TLIMIT = TBASE + TCOUNT # 0x11C3 = 4547
|
27
|
-
SLIMIT = SBASE + SCOUNT # 0xD7A4 = 55204
|
28
|
-
|
29
|
-
# Special composition for Hangul syllables. Documented in Section 3.12 at
|
30
|
-
# http://www.unicode.org/versions/Unicode6.1.0/ch03.pdf
|
31
|
-
#
|
32
|
-
def compose(code_points)
|
33
|
-
l = code_points.first - LBASE
|
34
|
-
v = code_points[1] - VBASE
|
35
|
-
t = code_points[2] ? code_points[2] - TBASE : 0 # T part may be missing, that's ok
|
36
|
-
|
37
|
-
SBASE + l * NCOUNT + v * TCOUNT + t
|
38
|
-
end
|
39
|
-
|
40
|
-
# Special decomposition for Hangul syllables. Documented in Section 3.12 at http://www.unicode.org/versions/Unicode6.1.0/ch03.pdf
|
41
|
-
# Also see http://source.icu-project.org/repos/icu/icuhtml/trunk/design/collation/ICU_collation_design.htm#Hangul_Implicit_CEs
|
42
|
-
#
|
43
|
-
def decompose(code_point)
|
44
|
-
decomposition_cache[code_point] ||= begin
|
45
|
-
l = code_point - SBASE
|
46
|
-
|
47
|
-
t = l % TCOUNT
|
48
|
-
l /= TCOUNT
|
49
|
-
v = l % VCOUNT
|
50
|
-
l /= VCOUNT
|
51
|
-
|
52
|
-
result = []
|
53
|
-
|
54
|
-
result << LBASE + l
|
55
|
-
result << VBASE + v
|
56
|
-
result << TBASE + t if t > 0
|
57
|
-
|
58
|
-
result
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def hangul_syllable?(code_point)
|
63
|
-
(SBASE...SLIMIT).include?(code_point)
|
64
|
-
end
|
65
|
-
|
66
|
-
private
|
67
|
-
|
68
|
-
def syllable_cache
|
69
|
-
@syllable_cache ||= {}
|
70
|
-
end
|
71
|
-
|
72
|
-
def decomposition_cache
|
73
|
-
@decomposition_cache ||= {}
|
74
|
-
end
|
75
|
-
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
@@ -1,24 +0,0 @@
|
|
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 Normalization
|
8
|
-
|
9
|
-
# Implements normalization of a Unicode string to Normalization Form C (NFC).
|
10
|
-
# This normalization includes canonical decomposition followed by canonical composition.
|
11
|
-
#
|
12
|
-
class NFC < NFKC
|
13
|
-
|
14
|
-
class << self
|
15
|
-
|
16
|
-
def normalize_code_points(code_points)
|
17
|
-
compose(TwitterCldr::Normalization::NFD.normalize_code_points(code_points))
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,26 +0,0 @@
|
|
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 Normalization
|
8
|
-
|
9
|
-
# Implements normalization of a Unicode string to Normalization Form D (NFD).
|
10
|
-
# This normalization includes only canonical decomposition.
|
11
|
-
#
|
12
|
-
class NFD < NFKD
|
13
|
-
|
14
|
-
class << self
|
15
|
-
|
16
|
-
protected
|
17
|
-
|
18
|
-
def decompose?(unicode_data)
|
19
|
-
super && !unicode_data.compatibility_decomposition? # skip compatibility decompositions
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,114 +0,0 @@
|
|
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 Normalization
|
8
|
-
|
9
|
-
# Implements normalization of a Unicode string to Normalization Form KC (NFKC).
|
10
|
-
# This normalization form includes compatibility decomposition followed by compatibility composition.
|
11
|
-
#
|
12
|
-
class NFKC < Base
|
13
|
-
|
14
|
-
class << self
|
15
|
-
|
16
|
-
VALID_HANGUL_SEQUENCES = [
|
17
|
-
[0, :lparts],
|
18
|
-
[1, :vparts],
|
19
|
-
[2, :tparts]
|
20
|
-
]
|
21
|
-
|
22
|
-
def normalize_code_points(code_points)
|
23
|
-
compose(TwitterCldr::Normalization::NFKD.normalize_code_points(code_points))
|
24
|
-
end
|
25
|
-
|
26
|
-
protected
|
27
|
-
|
28
|
-
def compose(code_points)
|
29
|
-
final = []
|
30
|
-
hangul_code_points = []
|
31
|
-
|
32
|
-
code_points.each_with_index do |code_point, index|
|
33
|
-
final << code_point
|
34
|
-
hangul_type = TwitterCldr::Shared::CodePoint.hangul_type(code_point)
|
35
|
-
next_hangul_type = TwitterCldr::Shared::CodePoint.hangul_type(code_points[index + 1])
|
36
|
-
|
37
|
-
if valid_hangul_sequence?(hangul_code_points.size, hangul_type)
|
38
|
-
hangul_code_points << code_point
|
39
|
-
unless valid_hangul_sequence?(hangul_code_points.size, next_hangul_type)
|
40
|
-
next_hangul_type = nil
|
41
|
-
end
|
42
|
-
else
|
43
|
-
hangul_code_points.clear
|
44
|
-
end
|
45
|
-
|
46
|
-
if hangul_code_points.size > 1 && !next_hangul_type
|
47
|
-
final.pop(hangul_code_points.size)
|
48
|
-
final << compose_hangul(hangul_code_points)
|
49
|
-
hangul_code_points.clear
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
compose_normal(final)
|
54
|
-
final
|
55
|
-
end
|
56
|
-
|
57
|
-
def valid_hangul_sequence?(buffer_size, hangul_type)
|
58
|
-
VALID_HANGUL_SEQUENCES.include?([buffer_size, hangul_type])
|
59
|
-
end
|
60
|
-
|
61
|
-
def compose_hangul(code_points)
|
62
|
-
TwitterCldr::Normalization::Hangul.compose(code_points)
|
63
|
-
end
|
64
|
-
|
65
|
-
# Implements composition of Unicode code points following the guidelines here:
|
66
|
-
# http://www.unicode.org/versions/Unicode6.1.0/ch03.pdf - Section 3.12
|
67
|
-
# Combining code points are combined with their base characters. For example, "ñ"
|
68
|
-
# can be decomposed into 006E 0303, one code point for the "n" and the "˜" respectively.
|
69
|
-
# Composition reverses this process, turning 006E 0303 into a single 00F1 code point.
|
70
|
-
#
|
71
|
-
def compose_normal(code_points)
|
72
|
-
index = 1
|
73
|
-
|
74
|
-
while index < code_points.size
|
75
|
-
code_point = code_points[index]
|
76
|
-
combining_class = combining_class_for(code_point)
|
77
|
-
starter_index = find_starter_index(index, code_points)
|
78
|
-
|
79
|
-
# is this character blocked from combining with the last starter?
|
80
|
-
if starter_index < index - 1
|
81
|
-
previous_combining_class = combining_class_for(code_points[index - 1])
|
82
|
-
blocked = (previous_combining_class == 0) || (previous_combining_class >= combining_class)
|
83
|
-
else
|
84
|
-
blocked = false
|
85
|
-
end
|
86
|
-
|
87
|
-
unless blocked
|
88
|
-
# do a reverse-lookup for the decomposed code points
|
89
|
-
composite = TwitterCldr::Shared::CodePoint.for_canonical_decomposition([code_points[starter_index], code_point])
|
90
|
-
|
91
|
-
# check if two code points are canonically equivalent
|
92
|
-
if composite && !composite.excluded_from_composition?
|
93
|
-
# combine the characters
|
94
|
-
code_points[starter_index] = composite.code_point
|
95
|
-
code_points.delete_at(index)
|
96
|
-
index -= 1
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
index += 1
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
def find_starter_index(start_pos, code_points)
|
105
|
-
start_pos.times do |i|
|
106
|
-
return start_pos - i - 1 if combining_class_for(code_points[start_pos - i - 1]) == 0
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
end
|
111
|
-
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
@@ -1,120 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
# Copyright 2012 Twitter, Inc
|
4
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
5
|
-
|
6
|
-
module TwitterCldr
|
7
|
-
# Normalization module includes algorithm for Unicode normalization. Basic information on this topic can be found in the
|
8
|
-
# Unicode Standard Annex #15 "Unicode Normalization Forms" at http://www.unicode.org/reports/tr15/. More detailed
|
9
|
-
# description is given in the section "3.11 Normalization Forms" of the Unicode Standard core specification. The
|
10
|
-
# latest version at the moment (for Unicode 6.1) is available at http://www.unicode.org/versions/Unicode6.1.0/ch03.pdf.
|
11
|
-
#
|
12
|
-
module Normalization
|
13
|
-
|
14
|
-
# Implements normalization of a Unicode string to Normalization Form KD (NFKD).
|
15
|
-
# This normalization form includes only compatibility decomposition.
|
16
|
-
#
|
17
|
-
class NFKD < Base
|
18
|
-
|
19
|
-
class << self
|
20
|
-
|
21
|
-
def normalize_code_points(code_points)
|
22
|
-
canonical_ordering(decompose(code_points))
|
23
|
-
end
|
24
|
-
|
25
|
-
protected
|
26
|
-
|
27
|
-
def decompose(code_points)
|
28
|
-
code_points.inject(Hamster.list) do |ret, code_point|
|
29
|
-
decompose_recursively(code_point).each do |decomp_cp|
|
30
|
-
ret = ret.cons(decomp_cp)
|
31
|
-
end
|
32
|
-
ret
|
33
|
-
end.reverse.to_a
|
34
|
-
end
|
35
|
-
|
36
|
-
# Recursively decomposes a given code point with the values in its Decomposition Mapping property.
|
37
|
-
#
|
38
|
-
def decompose_recursively(code_point)
|
39
|
-
unicode_data = TwitterCldr::Shared::CodePoint.find(code_point)
|
40
|
-
return [code_point] unless unicode_data
|
41
|
-
|
42
|
-
if unicode_data.hangul_type == :compositions
|
43
|
-
decompose_hangul(code_point)
|
44
|
-
else
|
45
|
-
decompose_regular(unicode_data)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
# Decomposes regular (non-Hangul) code point.
|
50
|
-
#
|
51
|
-
def decompose_regular(unicode_data)
|
52
|
-
if decompose?(unicode_data)
|
53
|
-
unicode_data.decomposition.map { |code_point| decompose_recursively(code_point) }.flatten
|
54
|
-
else
|
55
|
-
[unicode_data.code_point]
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def decompose?(unicode_data)
|
60
|
-
!!unicode_data.decomposition
|
61
|
-
end
|
62
|
-
|
63
|
-
def decompose_hangul(code_point)
|
64
|
-
TwitterCldr::Normalization::Hangul.decompose(code_point)
|
65
|
-
end
|
66
|
-
|
67
|
-
# Performs the Canonical Ordering Algorithm by stable sorting of every subsequence of combining code points
|
68
|
-
# (code points that have combining class greater than zero).
|
69
|
-
#
|
70
|
-
def canonical_ordering(code_points)
|
71
|
-
code_points_with_cc = code_points.map { |cp| [cp, combining_class_for(cp)] }
|
72
|
-
|
73
|
-
result = []
|
74
|
-
accum = []
|
75
|
-
|
76
|
-
code_points_with_cc.each do |cp_with_cc|
|
77
|
-
if cp_with_cc[1] == 0
|
78
|
-
unless accum.empty?
|
79
|
-
result.concat(stable_sort(accum))
|
80
|
-
accum = []
|
81
|
-
end
|
82
|
-
result << cp_with_cc
|
83
|
-
else
|
84
|
-
accum << cp_with_cc
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
result.concat(stable_sort(accum)) unless accum.empty?
|
89
|
-
result.map { |cp_with_cc| cp_with_cc[0] }
|
90
|
-
end
|
91
|
-
|
92
|
-
# Performs stable sorting of a sequence of [code_point, combining_class] pairs. For sorting a regular bubble
|
93
|
-
# sort is used (with a small optimization that stops the algorithm if none of the elements were swapped during
|
94
|
-
# the iteration).
|
95
|
-
#
|
96
|
-
def stable_sort(code_points_with_cc)
|
97
|
-
n = code_points_with_cc.size - 2
|
98
|
-
|
99
|
-
code_points_with_cc.size.times do
|
100
|
-
swapped = false
|
101
|
-
|
102
|
-
(0..n).each do |j|
|
103
|
-
if code_points_with_cc[j][1] > code_points_with_cc[j + 1][1]
|
104
|
-
code_points_with_cc[j], code_points_with_cc[j + 1] = code_points_with_cc[j + 1], code_points_with_cc[j]
|
105
|
-
swapped = true
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
break unless swapped
|
110
|
-
n -= 1
|
111
|
-
end
|
112
|
-
|
113
|
-
code_points_with_cc
|
114
|
-
end
|
115
|
-
|
116
|
-
end
|
117
|
-
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|
@@ -1,41 +0,0 @@
|
|
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 Normalization
|
8
|
-
|
9
|
-
# This class isn't used anywhere because it was found that it negatively
|
10
|
-
# affects normalization performance.
|
11
|
-
module QuickCheck
|
12
|
-
|
13
|
-
class << self
|
14
|
-
|
15
|
-
def requires_normalization?(code_point, algorithm)
|
16
|
-
key = TwitterCldr::Utils.compute_cache_key(code_point, algorithm)
|
17
|
-
requires_cache[key] = if requires_cache[key].nil?
|
18
|
-
resource_for(algorithm).any? do |range|
|
19
|
-
range.include?(code_point)
|
20
|
-
end
|
21
|
-
else
|
22
|
-
requires_cache[key]
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
protected
|
27
|
-
|
28
|
-
def requires_cache
|
29
|
-
@requires_cache ||= {}
|
30
|
-
end
|
31
|
-
|
32
|
-
def resource_for(algorithm)
|
33
|
-
@resources ||= {}
|
34
|
-
@resources[algorithm] ||= TwitterCldr.get_resource("unicode_data", "#{algorithm.to_s.downcase}_quick_check")
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
@@ -1,169 +0,0 @@
|
|
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 Base
|
9
|
-
attr_reader :resource, :locale
|
10
|
-
attr_reader :token_splitter_regexes, :token_type_regexes, :paths
|
11
|
-
attr_accessor :type, :format, :placeholders
|
12
|
-
|
13
|
-
def initialize(options = {})
|
14
|
-
@locale = TwitterCldr.convert_locale(options[:locale] || TwitterCldr::DEFAULT_LOCALE)
|
15
|
-
init_resources
|
16
|
-
init_placeholders
|
17
|
-
end
|
18
|
-
|
19
|
-
protected
|
20
|
-
|
21
|
-
# Not to be confused with tokenize_pattern, which pulls out placeholders. Tokenize_format actually splits a completely
|
22
|
-
# expanded format string into whatever parts are defined by the subclass's token type and token splitter regexes.
|
23
|
-
def tokenize_format(text)
|
24
|
-
text.split(token_splitter_regex_for(type)).each_with_index.inject([]) do |ret, (token, index)|
|
25
|
-
unless index == 0 && token == ""
|
26
|
-
regexes = token_type_regexes_for(type)
|
27
|
-
|
28
|
-
token_type = regexes.inject([]) do |match_ret, (token_type, matchers)|
|
29
|
-
match_ret << token_type if token =~ matchers[:regex]
|
30
|
-
match_ret
|
31
|
-
end.min { |a, b| regexes[a][:priority] <=> regexes[b][:priority] }
|
32
|
-
|
33
|
-
if token_type == :composite
|
34
|
-
content = token.match(regexes[token_type][:content])[1]
|
35
|
-
ret << CompositeToken.new(tokenize_format(content))
|
36
|
-
else
|
37
|
-
ret << Token.new(:value => token, :type => token_type)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
ret
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def token_type_regexes_for(type)
|
45
|
-
token_type_regexes[type] || token_type_regexes[:else]
|
46
|
-
end
|
47
|
-
|
48
|
-
def token_splitter_regex_for(type)
|
49
|
-
token_splitter_regexes[type] || token_splitter_regexes[:else]
|
50
|
-
end
|
51
|
-
|
52
|
-
def tokens_for(path, additional_cache_key_params = [])
|
53
|
-
tokens_for_pattern(pattern_for(traverse(path)), path, additional_cache_key_params)
|
54
|
-
end
|
55
|
-
|
56
|
-
def tokens_for_pattern(pattern, path, additional_cache_key_params = [])
|
57
|
-
cache_key = TwitterCldr::Utils.compute_cache_key(@locale, path.join('.'), type, format || "nil", *additional_cache_key_params)
|
58
|
-
|
59
|
-
unless token_cache.include?(cache_key)
|
60
|
-
result = []
|
61
|
-
tokens = expand_pattern(pattern)
|
62
|
-
|
63
|
-
tokens.each do |token|
|
64
|
-
if token.is_a?(Token) || token.is_a?(CompositeToken)
|
65
|
-
result << token
|
66
|
-
else
|
67
|
-
result += tokenize_format(token[:value])
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
token_cache[cache_key] = result
|
72
|
-
end
|
73
|
-
|
74
|
-
token_cache[cache_key]
|
75
|
-
end
|
76
|
-
|
77
|
-
def tokens_with_placeholders_for(key)
|
78
|
-
cache_key = TwitterCldr::Utils.compute_cache_key(@locale, key, type)
|
79
|
-
|
80
|
-
unless token_cache.include?(cache_key)
|
81
|
-
result = []
|
82
|
-
tokens = tokenize_pattern(pattern_for(traverse(key)))
|
83
|
-
tokens.each do |token|
|
84
|
-
result << token
|
85
|
-
end
|
86
|
-
token_cache[cache_key] = result
|
87
|
-
end
|
88
|
-
|
89
|
-
token_cache[cache_key]
|
90
|
-
end
|
91
|
-
|
92
|
-
def token_cache
|
93
|
-
@@token_cache ||= {}
|
94
|
-
end
|
95
|
-
|
96
|
-
def init_placeholders
|
97
|
-
@placeholders = {}
|
98
|
-
end
|
99
|
-
|
100
|
-
def traverse(path, hash = @resource)
|
101
|
-
TwitterCldr::Utils.traverse_hash(hash, path)
|
102
|
-
end
|
103
|
-
|
104
|
-
# expands all path symbols
|
105
|
-
def expand(current, haystack)
|
106
|
-
if current.is_a?(Symbol)
|
107
|
-
expand(traverse(current.to_s.split('.').map(&:to_sym), haystack), haystack)
|
108
|
-
elsif current.is_a?(Hash)
|
109
|
-
current.inject({}) do |ret, (key, val)|
|
110
|
-
ret[key] = expand(val, haystack)
|
111
|
-
ret
|
112
|
-
end
|
113
|
-
else
|
114
|
-
current
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
def expand_pattern(format_str)
|
119
|
-
if format_str.is_a?(Symbol)
|
120
|
-
# symbols mean another path was given
|
121
|
-
expand_pattern(pattern_for(traverse(format_str.to_s.split('.').map(&:to_sym))))
|
122
|
-
else
|
123
|
-
parts = tokenize_pattern(format_str)
|
124
|
-
final = []
|
125
|
-
|
126
|
-
parts.each do |part|
|
127
|
-
case part[:type]
|
128
|
-
when :placeholder
|
129
|
-
placeholder = choose_placeholder(part[:value], @placeholders)
|
130
|
-
final += placeholder ? placeholder.tokens(:type => type) : []
|
131
|
-
else
|
132
|
-
final << part
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
final
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
# Tokenize_pattern is supposed to take a pattern found in the YAML resource files and break it into placeholders and plaintext.
|
141
|
-
# Placeholders are delimited by single and double curly braces, plaintext is everything else.
|
142
|
-
def tokenize_pattern(pattern_str)
|
143
|
-
results = []
|
144
|
-
pattern_str.split(/(\{\{?\w*\}?\}|\'\w+\')/).each do |piece|
|
145
|
-
unless piece.empty?
|
146
|
-
case piece[0].chr
|
147
|
-
when "{"
|
148
|
-
results << { :value => piece, :type => :placeholder }
|
149
|
-
else
|
150
|
-
results << { :value => piece, :type => :plaintext }
|
151
|
-
end
|
152
|
-
end
|
153
|
-
end
|
154
|
-
results
|
155
|
-
end
|
156
|
-
|
157
|
-
def choose_placeholder(token, placeholders)
|
158
|
-
if token[0..1] == "{{"
|
159
|
-
token_value = token[2..-3]
|
160
|
-
found = placeholders.find { |placeholder| placeholder[:name].to_s == token_value }
|
161
|
-
else
|
162
|
-
found = placeholders[token[1..-2].to_i]
|
163
|
-
end
|
164
|
-
|
165
|
-
found ? found[:object] : nil
|
166
|
-
end
|
167
|
-
end
|
168
|
-
end
|
169
|
-
end
|