class TwitterCldr::Transforms::Conversions::ConversionRule

Attributes

direction[R]
index[R]
left[R]
original_rule_text[R]
right[R]

Public Class Methods

accepts?(rule_text) click to toggle source
# File lib/twitter_cldr/transforms/conversions/conversion_rule.rb, line 24
def accepts?(rule_text)
  !!(rule_text =~ /([^\\]|\A)[<>]{1,2}/)
end
new(direction, left, right, original_rule_text, index) click to toggle source
# File lib/twitter_cldr/transforms/conversions/conversion_rule.rb, line 49
def initialize(direction, left, right, original_rule_text, index)
  @direction = direction
  @left = left
  @right = right
  @original_rule_text = original_rule_text
  @index = index
end
parse(rule_text, symbol_table, index) click to toggle source
# File lib/twitter_cldr/transforms/conversions/conversion_rule.rb, line 14
def parse(rule_text, symbol_table, index)
  options = {
    original_rule_text: rule_text,
    index: index
  }

  tokens = tokenize(rule_text, symbol_table)
  parser.parse(tokens, options)
end

Private Class Methods

parser() click to toggle source

Warning: not thread-safe

# File lib/twitter_cldr/transforms/conversions/conversion_rule.rb, line 37
def parser
  @parser ||= Parser.new
end
tokenize(rule_text, symbol_table) click to toggle source
# File lib/twitter_cldr/transforms/conversions/conversion_rule.rb, line 30
def tokenize(rule_text, symbol_table)
  cleaned_rule_text = Rule.remove_comment(rule_text)
  tokens = tokenizer.tokenize(cleaned_rule_text)
  replace_symbols(tokens, symbol_table)
end
tokenizer() click to toggle source
# File lib/twitter_cldr/transforms/conversions/conversion_rule.rb, line 41
def tokenizer
  @tokenizer ||= TwitterCldr::Transforms::Tokenizer.new
end

Public Instance Methods

backward?() click to toggle source
# File lib/twitter_cldr/transforms/conversions/conversion_rule.rb, line 61
def backward?
  direction == :backward
end
bidirectional?() click to toggle source
# File lib/twitter_cldr/transforms/conversions/conversion_rule.rb, line 65
def bidirectional?
  direction == :bidirectional
end
can_invert?() click to toggle source
# File lib/twitter_cldr/transforms/conversions/conversion_rule.rb, line 69
def can_invert?
  bidirectional? || backward?
end
codepoints() click to toggle source
# File lib/twitter_cldr/transforms/conversions/conversion_rule.rb, line 90
def codepoints
  left.codepoints
end
cursor_offset() click to toggle source
# File lib/twitter_cldr/transforms/conversions/conversion_rule.rb, line 124
def cursor_offset
  right.cursor_offset
end
forward?() click to toggle source
# File lib/twitter_cldr/transforms/conversions/conversion_rule.rb, line 57
def forward?
  direction == :bidirectional || direction == :forward
end
has_codepoints?() click to toggle source
# File lib/twitter_cldr/transforms/conversions/conversion_rule.rb, line 94
def has_codepoints?
  left.has_codepoints?
end
invert() click to toggle source
# File lib/twitter_cldr/transforms/conversions/conversion_rule.rb, line 77
def invert
  case direction
    when :backward
      self.class.new(
        :forward, left, right, original_rule_text, index
      )
    else
      self.class.new(
        direction, right, left, original_rule_text, index
      )
  end
end
is_conversion_rule?() click to toggle source
# File lib/twitter_cldr/transforms/conversions/conversion_rule.rb, line 73
def is_conversion_rule?
  true
end
match(cursor) click to toggle source
# File lib/twitter_cldr/transforms/conversions/conversion_rule.rb, line 98
def match(cursor)
  left.match(cursor)
end
original() click to toggle source
# File lib/twitter_cldr/transforms/conversions/conversion_rule.rb, line 102
def original
  @original ||= begin
    key = left.key.inject('') do |ret, token|
      ret + (token.type == :capture ? '' : token.value)
    end

    left.before_context + key + left.after_context
  end
end
replacement_for(side_match) click to toggle source
# File lib/twitter_cldr/transforms/conversions/conversion_rule.rb, line 112
def replacement_for(side_match)
  right.key.inject('') do |ret, token|
    ret + case token.type
      when :capture
        idx = token.value[1..-1].to_i - 1
        side_match.captures[idx]
      else
        token_value(token)
    end
  end
end