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
@@ -6,7 +6,6 @@
|
|
6
6
|
require 'spec_helper'
|
7
7
|
|
8
8
|
require 'open-uri'
|
9
|
-
require 'zip'
|
10
9
|
|
11
10
|
include TwitterCldr::Collation
|
12
11
|
|
@@ -72,6 +71,8 @@ END
|
|
72
71
|
def prepare_full_test
|
73
72
|
return if File.file?(FULL_COLLATION_TEST_PATH)
|
74
73
|
|
74
|
+
require 'zip'
|
75
|
+
|
75
76
|
print ' Downloading CollationAuxillary.zip ... '
|
76
77
|
zip_file = Tempfile.new('CollationAuxillary.zip')
|
77
78
|
zip_file.write(open(FULL_COLLATION_TEST_URL).read)
|
@@ -84,8 +84,9 @@ describe Collator do
|
|
84
84
|
let(:collation_elements) { [[39, 5, 5], [41, 5, 5], [43, 5, 5]] }
|
85
85
|
|
86
86
|
before :each do
|
87
|
-
|
88
|
-
|
87
|
+
any_instance_of(TwitterCldr::Shared::CodePoint) do |instance|
|
88
|
+
stub(instance).combining_class_for { 0 }
|
89
|
+
end
|
89
90
|
end
|
90
91
|
|
91
92
|
it 'returns collation elements for a string' do
|
@@ -214,7 +215,7 @@ describe Collator do
|
|
214
215
|
mock(TrieLoader).load_default_trie { TrieBuilder.load_default_trie }
|
215
216
|
mock(TrieLoader).load_tailored_trie.with_any_args { |*args| TrieBuilder.load_tailored_trie(*args) }
|
216
217
|
|
217
|
-
stub(TwitterCldr::Normalization
|
218
|
+
stub(TwitterCldr::Normalization).normalize_code_points { |code_points| code_points }
|
218
219
|
end
|
219
220
|
|
220
221
|
let(:locale) { :some_locale }
|
@@ -22,7 +22,7 @@ describe 'Unicode collation tailoring' do
|
|
22
22
|
print "#{locale}\t-\t"
|
23
23
|
|
24
24
|
lines = File.open(File.join(File.dirname(__FILE__), 'tailoring_tests', "#{locale}.txt")) do |file|
|
25
|
-
file.
|
25
|
+
file.each_line.map(&:strip)
|
26
26
|
end
|
27
27
|
|
28
28
|
active_tests = lines.count(&method(:tailoring_test?))
|
@@ -49,7 +49,7 @@ describe 'Unicode collation tailoring' do
|
|
49
49
|
else
|
50
50
|
failures_info = "#{failures.size} failures: #{failures.inspect}"
|
51
51
|
puts failures_info
|
52
|
-
|
52
|
+
failures.should(be_empty, "#{locale} - #{failures_info}")
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|
@@ -1,4 +1,7 @@
|
|
1
|
-
# Pending:
|
1
|
+
# Pending:
|
2
|
+
# - Failure on line 53 is caused by script reordering (http://site.icu-project.org/design/collation/script-reordering)
|
3
|
+
# that is applied to Hebrew as well as to a few other locales, but is not supported by TwitterCLDR yet.
|
4
|
+
# - Other failures are identical to ICU.
|
2
5
|
|
3
6
|
xֽ
|
4
7
|
x
|
@@ -48,7 +51,7 @@ X.
|
|
48
51
|
x.x
|
49
52
|
x־
|
50
53
|
X־
|
51
|
-
x־x
|
54
|
+
// x־x
|
52
55
|
x׳
|
53
56
|
X׳
|
54
57
|
x׳x
|
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
require 'spec_helper'
|
7
7
|
|
8
|
-
include TwitterCldr::
|
8
|
+
include TwitterCldr::DataReaders
|
9
9
|
|
10
10
|
describe AdditionalDateFormatSelector do
|
11
11
|
let(:selector) do
|
@@ -90,16 +90,16 @@ describe AdditionalDateFormatSelector do
|
|
90
90
|
|
91
91
|
describe "#find_closest" do
|
92
92
|
it "returns an exact match if it exists" do
|
93
|
-
selector.find_closest("h").should ==
|
94
|
-
selector.find_closest("MMMd").should ==
|
95
|
-
selector.find_closest("Hms").should ==
|
96
|
-
selector.find_closest("yQQQQ").should ==
|
93
|
+
selector.find_closest("h").should == selector.pattern_hash[:h]
|
94
|
+
selector.find_closest("MMMd").should == selector.pattern_hash[:MMMd]
|
95
|
+
selector.find_closest("Hms").should == selector.pattern_hash[:Hms]
|
96
|
+
selector.find_closest("yQQQQ").should == selector.pattern_hash[:yQQQQ]
|
97
97
|
end
|
98
98
|
|
99
99
|
it "returns the next closest match (lowest score) if an exact match can't be found" do
|
100
|
-
selector.find_closest("MMMMd").should ==
|
101
|
-
selector.find_closest("mHs").should ==
|
102
|
-
selector.find_closest("Med").should ==
|
100
|
+
selector.find_closest("MMMMd").should == selector.pattern_hash[:MMMd]
|
101
|
+
selector.find_closest("mHs").should == selector.pattern_hash[:Hms]
|
102
|
+
selector.find_closest("Med").should == selector.pattern_hash[:MEd]
|
103
103
|
end
|
104
104
|
|
105
105
|
it "returns nil if an empty pattern is given" do
|
@@ -121,11 +121,11 @@ describe AdditionalDateFormatSelector do
|
|
121
121
|
it "returns a list of all available patterns" do
|
122
122
|
patterns = selector.patterns
|
123
123
|
patterns.should be_a(Array)
|
124
|
-
patterns.should include(
|
125
|
-
patterns.should include(
|
126
|
-
patterns.should include(
|
127
|
-
patterns.should include(
|
128
|
-
patterns.should include(
|
124
|
+
patterns.should include("MMMd")
|
125
|
+
patterns.should include("yQQQ")
|
126
|
+
patterns.should include("yQQQQ")
|
127
|
+
patterns.should include("EHms")
|
128
|
+
patterns.should include("d")
|
129
129
|
end
|
130
130
|
end
|
131
131
|
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# Copyright 2012 Twitter, Inc
|
4
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
5
|
+
|
6
|
+
require 'spec_helper'
|
7
|
+
|
8
|
+
include TwitterCldr::DataReaders
|
9
|
+
|
10
|
+
describe DateTimeDataReader do
|
11
|
+
let(:data_reader) { DateTimeDataReader.new(:es) }
|
12
|
+
|
13
|
+
describe "#initialize" do
|
14
|
+
it "chooses gregorian as the calendar type if none is specified" do
|
15
|
+
DateTimeDataReader.new(:es).calendar_type.should == :gregorian
|
16
|
+
DateTimeDataReader.new(:es, :calendar_type => :julian).calendar_type.should == :julian
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "#pattern" do
|
21
|
+
it "as of CLDR 23, should choose the medium date time path if no other type is specified" do
|
22
|
+
mock.proxy(data_reader).path_for(:medium, anything)
|
23
|
+
data_reader.pattern
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# Copyright 2012 Twitter, Inc
|
4
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
5
|
+
|
6
|
+
require 'spec_helper'
|
7
|
+
|
8
|
+
include TwitterCldr::DataReaders
|
9
|
+
|
10
|
+
describe NumberDataReader do
|
11
|
+
let(:data_reader) { NumberDataReader.new(:en) }
|
12
|
+
|
13
|
+
describe "#get_key_for" do
|
14
|
+
it "builds a power-of-ten key based on the number of digits in the input" do
|
15
|
+
(3..15).each { |i| data_reader.send(:get_key_for, "1337#{"0" * (i - 3)}").should == 10 ** i }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
it "should read correct tokens from custom locale" do
|
2
|
+
tokenizer = TimespanTokenizer.new(:locale => :sv)
|
3
|
+
one_day_ago = tokenizer.tokens(:unit => :day, :direction => :ago, :number => 1, :type => :default)
|
4
|
+
one_day_ago[0].should == { :value => "för ", :type => :plaintext }
|
5
|
+
one_day_ago[1].should == { :value => "{0}", :type => :placeholder }
|
6
|
+
one_day_ago[2].should == { :value => " dag sedan", :type => :plaintext }
|
7
|
+
|
8
|
+
two_days_ago = tokenizer.tokens(:unit => :day, :direction => :ago, :number => 2, :type => :default)
|
9
|
+
two_days_ago[0].should == { :value => "för ", :type => :plaintext }
|
10
|
+
two_days_ago[1].should == { :value => "{0}", :type => :placeholder }
|
11
|
+
two_days_ago[2].should == { :value => " dagar sedan", :type => :plaintext }
|
12
|
+
|
13
|
+
one_day_until = tokenizer.tokens(:unit => :day, :direction => :until, :number => 1, :type => :default)
|
14
|
+
one_day_until[0].should == { :value => "om ", :type => :plaintext }
|
15
|
+
one_day_until[1].should == { :value => "{0}", :type => :placeholder }
|
16
|
+
one_day_until[2].should == { :value => " dag", :type => :plaintext }
|
17
|
+
|
18
|
+
two_days_until = tokenizer.tokens(:unit => :day, :direction => :until, :number => 2, :type => :default)
|
19
|
+
two_days_until[0].should == { :value => "om ", :type => :plaintext }
|
20
|
+
two_days_until[1].should == { :value => "{0}", :type => :placeholder }
|
21
|
+
two_days_until[2].should == { :value => " dagar", :type => :plaintext }
|
22
|
+
end
|
@@ -9,7 +9,8 @@ include TwitterCldr::Formatters
|
|
9
9
|
|
10
10
|
describe DateTimeFormatter do
|
11
11
|
before(:each) do
|
12
|
-
|
12
|
+
data_reader = DateTimeDataReader.new(:de)
|
13
|
+
@formatter = DateTimeFormatter.new(data_reader)
|
13
14
|
end
|
14
15
|
|
15
16
|
describe "#day" do
|
@@ -394,42 +395,37 @@ describe DateTimeFormatter do
|
|
394
395
|
|
395
396
|
describe "#era" do
|
396
397
|
before(:each) do
|
397
|
-
|
398
|
+
data_reader = DateTimeDataReader.new(:en)
|
399
|
+
@formatter = DateTimeFormatter.new(data_reader)
|
398
400
|
end
|
399
401
|
|
400
402
|
it "test: pattern G" do
|
401
|
-
@formatter.send(:era, Date.new(2012, 1, 1), 'G', 1).should == "
|
402
|
-
@formatter.send(:era, Date.new(-1, 1, 1), 'G', 1).should == "
|
403
|
+
@formatter.send(:era, Date.new(2012, 1, 1), 'G', 1).should == "CE"
|
404
|
+
@formatter.send(:era, Date.new(-1, 1, 1), 'G', 1).should == "BCE"
|
403
405
|
end
|
404
406
|
|
405
407
|
it "test: pattern GG" do
|
406
|
-
@formatter.send(:era, Date.new(2012, 1, 1), 'GG', 2).should == "
|
407
|
-
@formatter.send(:era, Date.new(-1, 1, 1), 'GG', 2).should == "
|
408
|
+
@formatter.send(:era, Date.new(2012, 1, 1), 'GG', 2).should == "CE"
|
409
|
+
@formatter.send(:era, Date.new(-1, 1, 1), 'GG', 2).should == "BCE"
|
408
410
|
end
|
409
411
|
|
410
412
|
it "test: pattern GGG" do
|
411
|
-
@formatter.send(:era, Date.new(2012, 1, 1), 'GGG', 3).should == "
|
412
|
-
@formatter.send(:era, Date.new(-1, 1, 1), 'GGG', 3).should == "
|
413
|
+
@formatter.send(:era, Date.new(2012, 1, 1), 'GGG', 3).should == "CE"
|
414
|
+
@formatter.send(:era, Date.new(-1, 1, 1), 'GGG', 3).should == "BCE"
|
413
415
|
end
|
414
416
|
|
415
417
|
it "test: pattern GGGG" do
|
416
|
-
@formatter.send(:era, Date.new(2012, 1, 1), 'GGGG', 4).should == "
|
417
|
-
@formatter.send(:era, Date.new(-1, 1, 1), 'GGGG', 4).should == "Before
|
418
|
+
@formatter.send(:era, Date.new(2012, 1, 1), 'GGGG', 4).should == "Common Era"
|
419
|
+
@formatter.send(:era, Date.new(-1, 1, 1), 'GGGG', 4).should == "Before Common Era"
|
418
420
|
end
|
419
421
|
|
420
422
|
it "should fall back if the calendar doesn't contain the appropriate era data" do
|
421
|
-
stub(@formatter.
|
422
|
-
{
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
},
|
428
|
-
:name => {
|
429
|
-
0 => "name0"
|
430
|
-
}
|
431
|
-
}
|
432
|
-
}
|
423
|
+
stub(@formatter.data_reader.calendar).eras(:abbr) do
|
424
|
+
{ 0 => "abbr0", 1 => "abbr1" }
|
425
|
+
end
|
426
|
+
|
427
|
+
stub(@formatter.data_reader.calendar).eras(:name) do
|
428
|
+
{ 0 => "name0" }
|
433
429
|
end
|
434
430
|
|
435
431
|
date = Date.new(2012, 1, 1)
|
@@ -10,109 +10,38 @@ include TwitterCldr::Formatters
|
|
10
10
|
describe ListFormatter do
|
11
11
|
describe '#initialize' do
|
12
12
|
it 'fetches locale from options hash' do
|
13
|
-
ListFormatter.new(:
|
13
|
+
ListFormatter.new(:pt).locale.should == :pt
|
14
14
|
end
|
15
15
|
|
16
16
|
it "uses default locale if it's not passed in options hash" do
|
17
|
-
ListFormatter.new.locale.should == TwitterCldr
|
17
|
+
ListFormatter.new.locale.should == TwitterCldr.locale
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
@formatter = ListFormatter.new
|
24
|
-
end
|
25
|
-
|
26
|
-
describe "#compose" do
|
27
|
-
it "should reorder rtl lists" do
|
28
|
-
list = ["larry", "curly"]
|
29
|
-
@formatter.locale = :ar
|
30
|
-
@formatter.send(:compose, "{0} \331\210 {1}", list).should == "curly \331\210 larry"
|
31
|
-
end
|
32
|
-
|
33
|
-
it "should format a variable number of elements correctly" do
|
34
|
-
list = ["larry", "curly", "moe"]
|
35
|
-
@formatter.send(:compose, "{0} - {1} - {2}", list).should == "larry - curly - moe"
|
36
|
-
@formatter.send(:compose, "{0} - {1}", list).should == "larry - curly"
|
37
|
-
@formatter.send(:compose, "{0}", list).should == "larry"
|
38
|
-
@formatter.send(:compose, "", list).should == ""
|
39
|
-
end
|
40
|
-
|
41
|
-
it "should return the first element if the list only contains a single element" do
|
42
|
-
@formatter.send(:compose, "{0} - {1}", ["larry"]).should == "larry"
|
43
|
-
end
|
44
|
-
|
45
|
-
it "should return an empty string if the list is empty" do
|
46
|
-
@formatter.send(:compose, "{0} - {1}", []).should == ""
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
context "with a standard resource" do
|
51
|
-
before(:each) do
|
52
|
-
stub(@formatter).resource do
|
53
|
-
{
|
54
|
-
2 => "{0} $ {1}",
|
55
|
-
:middle => "{0}; {1}",
|
56
|
-
:start => "{0}< {1}",
|
57
|
-
:end => "{0}> {1}"
|
58
|
-
}
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
describe "#compose_list" do
|
63
|
-
it "should compose a list with two elements using the :end format" do
|
64
|
-
@formatter.send(:compose_list, ["larry", "curly"]).should == "larry> curly"
|
65
|
-
end
|
66
|
-
|
67
|
-
it "should compose a list with three elements using the :start and :end formats" do
|
68
|
-
@formatter.send(:compose_list, ["larry", "curly", "moe"]).should == "larry< curly> moe"
|
69
|
-
end
|
70
|
-
|
71
|
-
it "should compose a list with four elements using all the formats (:start, :middle, and :end)" do
|
72
|
-
@formatter.send(:compose_list, ["larry", "curly", "moe", "jerry"]).should == "larry< curly; moe> jerry"
|
73
|
-
end
|
74
|
-
|
75
|
-
it "should compose a list of five elements just for the hell of it" do
|
76
|
-
@formatter.send(:compose_list, ["larry", "curly", "moe", "jerry", "helga"]).should == "larry< curly; moe; jerry> helga"
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
describe "#format" do
|
81
|
-
it "should format correctly using the integer index if it exists" do
|
82
|
-
@formatter.format(["larry", "curly"]).should == "larry $ curly"
|
83
|
-
end
|
84
|
-
|
85
|
-
it "should format correctly if no corresponding integer index exists" do
|
86
|
-
@formatter.format(["larry", "curly", "moe"]).should == "larry< curly> moe"
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
21
|
+
describe "#format" do
|
22
|
+
let(:list) { ["larry", "curly", "moe"] }
|
90
23
|
|
91
|
-
context "with
|
24
|
+
context "with an English list formatter" do
|
92
25
|
before(:each) do
|
93
|
-
|
94
|
-
{ :middle => "{0}; {1}" }
|
95
|
-
end
|
26
|
+
@formatter = ListFormatter.new(:en)
|
96
27
|
end
|
97
28
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
29
|
+
it "formats English lists correctly using various types" do
|
30
|
+
@formatter.format(list).should == "larry, curly, and moe"
|
31
|
+
@formatter.format(list, :unit).should == "larry, curly, moe"
|
32
|
+
@formatter.format(list, :"unit-narrow").should == "larry curly moe"
|
102
33
|
end
|
103
34
|
end
|
104
35
|
|
105
|
-
context "with
|
36
|
+
context "with a Spanish list formatter" do
|
106
37
|
before(:each) do
|
107
|
-
|
108
|
-
{}
|
109
|
-
end
|
38
|
+
@formatter = ListFormatter.new(:es)
|
110
39
|
end
|
111
40
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
41
|
+
it "formats Spanish lists correctly using various types" do
|
42
|
+
@formatter.format(list).should == "larry, curly y moe"
|
43
|
+
@formatter.format(list, :unit).should == "larry, curly y moe"
|
44
|
+
@formatter.format(list, :"unit-narrow").should == "larry curly moe"
|
116
45
|
end
|
117
46
|
end
|
118
47
|
end
|
@@ -8,74 +8,30 @@ require 'spec_helper'
|
|
8
8
|
include TwitterCldr::Formatters
|
9
9
|
|
10
10
|
describe AbbreviatedNumberFormatter do
|
11
|
-
|
12
|
-
@formatter = AbbreviatedNumberFormatter.new(:locale => :en)
|
13
|
-
end
|
11
|
+
let(:formatter) { AbbreviatedNumberFormatter.new(:locale => :en) }
|
14
12
|
|
15
13
|
describe "#transform_number" do
|
16
14
|
it "chops off the number to the necessary number of sig figs" do
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
15
|
+
formatter.send(:transform_number, 10 ** 3).should == 1
|
16
|
+
formatter.send(:transform_number, 10 ** 4).should == 10
|
17
|
+
formatter.send(:transform_number, 10 ** 5).should == 100
|
18
|
+
formatter.send(:transform_number, 10 ** 6).should == 1
|
19
|
+
formatter.send(:transform_number, 10 ** 7).should == 10
|
20
|
+
formatter.send(:transform_number, 10 ** 8).should == 100
|
21
|
+
formatter.send(:transform_number, 10 ** 9).should == 1
|
22
|
+
formatter.send(:transform_number, 10 ** 10).should == 10
|
23
|
+
formatter.send(:transform_number, 10 ** 11).should == 100
|
24
|
+
formatter.send(:transform_number, 10 ** 12).should == 1
|
25
|
+
formatter.send(:transform_number, 10 ** 13).should == 10
|
26
|
+
formatter.send(:transform_number, 10 ** 14).should == 100
|
29
27
|
end
|
30
28
|
|
31
29
|
it "returns the original number if greater than 10^15" do
|
32
|
-
|
30
|
+
formatter.send(:transform_number, 10 ** 15).should == 10 ** 15
|
33
31
|
end
|
34
32
|
|
35
33
|
it "returns the original number if less than 10^3" do
|
36
|
-
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
describe "#get_key" do
|
41
|
-
it "builds a power-of-ten key based on the number of digits in the input" do
|
42
|
-
(3..15).each { |i| @formatter.send(:get_key, "1337#{"0" * (i - 3)}").should == 10 ** i }
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
describe "#get_tokens" do
|
47
|
-
before(:each) do
|
48
|
-
stub(@formatter).get_type { :awesome_type }
|
49
|
-
end
|
50
|
-
|
51
|
-
it "gets tokens for a valid number (between 10^3 and 10^15)" do
|
52
|
-
mock(@formatter.tokenizer).tokens({
|
53
|
-
:sign => :positive,
|
54
|
-
:type => :awesome_type,
|
55
|
-
:format => 10 ** 4
|
56
|
-
}) { "I'm just right!" }
|
57
|
-
|
58
|
-
@formatter.get_tokens(12345).should == "I'm just right!"
|
59
|
-
end
|
60
|
-
|
61
|
-
it "returns tokens for decimals if the number is too large" do
|
62
|
-
mock(@formatter.tokenizer).tokens({
|
63
|
-
:sign => :positive,
|
64
|
-
:type => :decimal,
|
65
|
-
:format => nil
|
66
|
-
}) { "I'm too big!" }
|
67
|
-
|
68
|
-
@formatter.get_tokens(1234567891011122).should == "I'm too big!"
|
69
|
-
end
|
70
|
-
|
71
|
-
it "returns tokens for decimals if the number is too small" do
|
72
|
-
mock(@formatter.tokenizer).tokens({
|
73
|
-
:sign => :positive,
|
74
|
-
:type => :decimal,
|
75
|
-
:format => nil
|
76
|
-
}) { "I'm too small!" }
|
77
|
-
|
78
|
-
@formatter.get_tokens(123).should == "I'm too small!"
|
34
|
+
formatter.send(:transform_number, 999).should == 999
|
79
35
|
end
|
80
36
|
end
|
81
37
|
end
|
@@ -8,34 +8,49 @@ require 'spec_helper'
|
|
8
8
|
include TwitterCldr::Formatters
|
9
9
|
|
10
10
|
describe LongDecimalFormatter do
|
11
|
-
|
12
|
-
|
11
|
+
let(:data_reader) do
|
12
|
+
TwitterCldr::DataReaders::NumberDataReader.new(:en, :type => :long_decimal)
|
13
13
|
end
|
14
14
|
|
15
|
+
let(:formatter) { data_reader.formatter }
|
16
|
+
let(:tokenizer) { data_reader.tokenizer }
|
17
|
+
|
15
18
|
it "formats valid numbers correctly (from 10^3 - 10^15)" do
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
19
|
+
expected = {
|
20
|
+
10 ** 3 => "1 thousand",
|
21
|
+
10 ** 4 => "10 thousand",
|
22
|
+
10 ** 5 => "100 thousand",
|
23
|
+
10 ** 6 => "1 million",
|
24
|
+
10 ** 7 => "10 million",
|
25
|
+
10 ** 8 => "100 million",
|
26
|
+
10 ** 9 => "1 billion",
|
27
|
+
10 ** 10 => "10 billion",
|
28
|
+
10 ** 11 => "100 billion",
|
29
|
+
10 ** 12 => "1 trillion",
|
30
|
+
10 ** 13 => "10 trillion",
|
31
|
+
10 ** 14 => "100 trillion"
|
32
|
+
}
|
33
|
+
|
34
|
+
expected.each do |num, text|
|
35
|
+
pattern = data_reader.pattern(num)
|
36
|
+
formatter.format(tokenizer.tokenize(pattern), num).should == text
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def format_number(number, options = {})
|
41
|
+
pattern = data_reader.pattern(number)
|
42
|
+
formatter.format(tokenizer.tokenize(pattern), number, options)
|
28
43
|
end
|
29
44
|
|
30
45
|
it "formats the number as if it were a straight decimal if it exceeds 10^15" do
|
31
|
-
|
46
|
+
format_number(10**15).should == "1,000,000,000,000,000"
|
32
47
|
end
|
33
48
|
|
34
49
|
it "formats the number as if it were a straight decimal if it's less than 1000" do
|
35
|
-
|
50
|
+
format_number(500).should == "500"
|
36
51
|
end
|
37
52
|
|
38
53
|
it "respects the :precision option" do
|
39
|
-
|
54
|
+
format_number(12345, :precision => 3).should match_normalized("12.345 thousand")
|
40
55
|
end
|
41
56
|
end
|
@@ -8,34 +8,50 @@ require 'spec_helper'
|
|
8
8
|
include TwitterCldr::Formatters
|
9
9
|
|
10
10
|
describe ShortDecimalFormatter do
|
11
|
-
|
12
|
-
|
11
|
+
let(:data_reader) do
|
12
|
+
TwitterCldr::DataReaders::NumberDataReader.new(:en, :type => :short_decimal)
|
13
13
|
end
|
14
14
|
|
15
|
+
let(:formatter) { data_reader.formatter }
|
16
|
+
let(:tokenizer) { data_reader.tokenizer }
|
17
|
+
|
15
18
|
it "formats valid numbers correctly (from 10^3 - 10^15)" do
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
19
|
+
expected = {
|
20
|
+
10 ** 3 => "1K",
|
21
|
+
10 ** 4 => "10K",
|
22
|
+
10 ** 5 => "100K",
|
23
|
+
10 ** 6 => "1M",
|
24
|
+
10 ** 7 => "10M",
|
25
|
+
10 ** 8 => "100M",
|
26
|
+
10 ** 9 => "1B",
|
27
|
+
10 ** 10 => "10B",
|
28
|
+
10 ** 11 => "100B",
|
29
|
+
10 ** 12 => "1T",
|
30
|
+
10 ** 13 => "10T",
|
31
|
+
10 ** 14 => "100T"
|
32
|
+
}
|
33
|
+
|
34
|
+
expected.each do |num, text|
|
35
|
+
pattern = data_reader.pattern(num)
|
36
|
+
formatter.format(tokenizer.tokenize(pattern), num).should == text
|
37
|
+
end
|
28
38
|
end
|
29
39
|
|
30
40
|
it "formats the number as if it were a straight decimal if it exceeds 10^15" do
|
31
|
-
|
41
|
+
number = 10**15
|
42
|
+
pattern = data_reader.pattern(number)
|
43
|
+
formatter.format(tokenizer.tokenize(pattern), number).should == "1,000,000,000,000,000"
|
32
44
|
end
|
33
45
|
|
34
46
|
it "formats the number as if it were a straight decimal if it's less than 1000" do
|
35
|
-
|
47
|
+
number = 500
|
48
|
+
pattern = data_reader.pattern(number)
|
49
|
+
formatter.format(tokenizer.tokenize(pattern), number).should == "500"
|
36
50
|
end
|
37
51
|
|
38
52
|
it "respects the :precision option" do
|
39
|
-
|
53
|
+
number = 12345
|
54
|
+
pattern = data_reader.pattern(number)
|
55
|
+
formatter.format(tokenizer.tokenize(pattern), number, :precision => 3).should match_normalized("12.345K")
|
40
56
|
end
|
41
57
|
end
|