class TwitterCldr::Formatters::Rbnf::NormalRuleFormatter
Attributes
is_fractional[R]
locale[R]
omit[R]
rule_group[R]
rule_set[R]
Public Class Methods
new(rule_set, rule_group, locale)
click to toggle source
# File lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb, line 55 def initialize(rule_set, rule_group, locale) @rule_set = rule_set @rule_group = rule_group @is_fractional = false @locale = locale end
Public Instance Methods
close_bracket(number, rule, token)
click to toggle source
# File lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb, line 112 def close_bracket(number, rule, token) @omit = false "" end
decimal(number, rule, token)
click to toggle source
if a decimal token occurs here, it's actually plaintext
# File lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb, line 122 def decimal(number, rule, token) token.value end
equals(number, rule, token)
click to toggle source
# File lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb, line 80 def equals(number, rule, token) generate_replacement(number, rule, token) end
format(number, rule)
click to toggle source
# File lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb, line 62 def format(number, rule) rule.tokens.map do |token| result = send(token.type, number, rule, token) @omit ? "" : result end.join end
generate_replacement(number, rule, token)
click to toggle source
# File lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb, line 84 def generate_replacement(number, rule, token) if rule_set_name = token.rule_set_reference RuleFormatter.format( number, rule_group.rule_set_for(rule_set_name), rule_group, locale ) elsif decimal_format = token.decimal_format sign = number < 0 ? :negative : :positive @data_reader ||= TwitterCldr::DataReaders::NumberDataReader.new(locale) decimal_format = @data_reader.pattern_for_sign(decimal_format, sign) @decimal_tokenizer ||= TwitterCldr::Tokenizers::NumberTokenizer.new(@data_reader) decimal_tokens = @decimal_tokenizer.tokenize(decimal_format) @decimal_formatter ||= TwitterCldr::Formatters::NumberFormatter.new(@data_reader) @decimal_formatter.format( decimal_tokens, number, type: :decimal ) else RuleFormatter.format(number, rule_set, rule_group, locale) end end
left_arrow(number, rule, token)
click to toggle source
# File lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb, line 75 def left_arrow(number, rule, token) quotient = (number.abs / rule.divisor) * (number < 0 ? -1 : 1) generate_replacement(quotient, rule, token) end
open_bracket(number, rule, token)
click to toggle source
# File lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb, line 107 def open_bracket(number, rule, token) @omit = rule.even_multiple_of?(number) "" end
plaintext(number, rule, token)
click to toggle source
# File lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb, line 117 def plaintext(number, rule, token) token.value end
plural(number, rule, token)
click to toggle source
# File lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb, line 130 def plural(number, rule, token) token.render(number / rule.divisor) end
right_arrow(number, rule, token)
click to toggle source
# File lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb, line 69 def right_arrow(number, rule, token) prev_rule = rule_set.previous_rule_for(rule) if token.length == 3 remainder = (number.abs % rule.divisor) * (number < 0 ? -1 : 1) generate_replacement(remainder, prev_rule, token) end
semicolon(number, rule, token)
click to toggle source
# File lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb, line 126 def semicolon(number, rule, token) "" end
Protected Instance Methods
fractional_part(number)
click to toggle source
# File lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb, line 140 def fractional_part(number) ".#{number.to_s.split(".")[1] || 0}".to_f end
integral_part(number)
click to toggle source
# File lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb, line 144 def integral_part(number) number.to_s.split(".").first.to_i end
invalid_token_error(token)
click to toggle source
# File lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb, line 136 def invalid_token_error(token) InvalidRbnfTokenError.new("'#{token.value}' not allowed in negative number rules.") end
transliterate?()
click to toggle source
# File lib/twitter_cldr/formatters/numbers/rbnf/formatters.rb, line 148 def transliterate? !SKIP_DECIMAL_TRANSLITERATION.include?(locale) end