lib/twitter_cldr/js/renderers/data/numbers/numbers_renderer.rb (64 lines of code) (raw):

# encoding: UTF-8 # Copyright 2012 Twitter, Inc # http://www.apache.org/licenses/LICENSE-2.0 module TwitterCldr module Js module Renderers module Data module Numbers class NumbersRenderer < TwitterCldr::Js::Renderers::Base def tokens_for_locale(locale) DataReaders::NumberDataReader.types.inject({}) do |ret, type| ret[type] = {} [:positive, :negative].each do |sign| ret[type][sign] = case type when :short_decimal, :long_decimal (DataReaders::NumberDataReader::ABBREVIATED_MIN_POWER..DataReaders::NumberDataReader::ABBREVIATED_MAX_POWER).inject({}) do |formats, i| exponent = 10 ** i data_reader = DataReaders::NumberDataReader.new(locale, :type => type, :format => exponent) patterns = data_reader.pattern(exponent).inject({}) do |memo, (plural, pattern)| if pattern.is_a?(String) tokens = data_reader.tokenizer.tokenize(pattern).map(&:value) # abbreviation doesn't work for negative numbers in the Ruby version, so we have to fix it here memo[plural] = sign == :positive ? tokens : ["-"] + tokens[1..-1] elsif pattern == 0 # there's no specific formatting pattern for these options, skipping them else puts "Invalid number pattern for locale=#{locale}, type=#{type}, sign=#{sign}, i=#{i}: #{pattern.inspect}" end memo end formats[exponent] = patterns unless patterns.empty? formats end else data_reader = DataReaders::NumberDataReader.new(locale, :type => type) number = sign == :positive ? 1 : -1 pattern = data_reader.pattern(number) data_reader.tokenizer.tokenize(pattern).map(&:value) end end ret end end def tokens tokens_for_locale(@locale) end def symbols DataReaders::NumberDataReader.new(@locale).symbols end def currencies_data TwitterCldr.get_resource(:shared, :currency_digits_and_rounding) end def get_data { :NumberFormatter => { :all_tokens => tokens(), :symbols => symbols() }, :CurrencyFormatter => { :currencies_data => currencies_data() } } end end end end end end end