class TwitterCldr::Transforms::ConversionRuleSet
Attributes
filter_rule[R]
inverse_filter_rule[R]
rule_index[R]
rules[R]
Public Class Methods
new(filter_rule, inverse_filter_rule, rules)
click to toggle source
# File lib/twitter_cldr/transforms/conversion_rule_set.rb, line 16 def initialize(filter_rule, inverse_filter_rule, rules) @rules = rules @filter_rule = filter_rule @inverse_filter_rule = inverse_filter_rule @rule_index = build_rule_index(rules) end
Public Instance Methods
apply_to(cursor)
click to toggle source
# File lib/twitter_cldr/transforms/conversion_rule_set.rb, line 53 def apply_to(cursor) until cursor.eos? if filter_rule.matches?(cursor) rule_match = find_matching_rule_at(cursor) if rule_match start = rule_match.start stop = rule_match.stop replacement = rule_match.replacement puts "#{cursor.text[start...stop]} -> #{replacement}" if $debug cursor.text[start...stop] = replacement cursor.advance( replacement.size + rule_match.cursor_offset ) else cursor.advance end else cursor.advance end end end
backward?()
click to toggle source
# File lib/twitter_cldr/transforms/conversion_rule_set.rb, line 27 def backward? false end
forward?()
click to toggle source
# File lib/twitter_cldr/transforms/conversion_rule_set.rb, line 23 def forward? true end
invert()
click to toggle source
# File lib/twitter_cldr/transforms/conversion_rule_set.rb, line 47 def invert ConversionRuleSet.new( inverse_filter_rule, filter_rule, inverted_rules ) end
is_conversion_rule?()
click to toggle source
# File lib/twitter_cldr/transforms/conversion_rule_set.rb, line 39 def is_conversion_rule? false end
is_conversion_rule_set?()
click to toggle source
# File lib/twitter_cldr/transforms/conversion_rule_set.rb, line 43 def is_conversion_rule_set? true end
is_filter_rule?()
click to toggle source
# File lib/twitter_cldr/transforms/conversion_rule_set.rb, line 31 def is_filter_rule? false end
is_transform_rule?()
click to toggle source
# File lib/twitter_cldr/transforms/conversion_rule_set.rb, line 35 def is_transform_rule? false end
Private Instance Methods
build_rule_index(rules)
click to toggle source
# File lib/twitter_cldr/transforms/conversion_rule_set.rb, line 132 def build_rule_index(rules) TwitterCldr::Utils::Trie.new.tap do |trie| rules.each_with_index do |rule, idx| next unless rule.forward? if rule.has_codepoints? codepoints = rule.codepoints if codepoints.size > 0 rule.codepoints.each do |codepoint| bytes = codepoint.chr('UTF-8').bytes if entry = trie.get(bytes) entry << rule else trie.add(bytes, [rule]) end end end else if entry = trie.get([0]) entry << rule else trie.add([0], [rule]) end end end end end
find_matching_blank_key_rule_at(cursor)
click to toggle source
# File lib/twitter_cldr/transforms/conversion_rule_set.rb, line 120 def find_matching_blank_key_rule_at(cursor) if rules = rule_index.get([0]) rules.each do |rule| if side_match = rule.match(cursor) return RuleMatch.new(rule, side_match) end end end nil end
find_matching_indexed_rule_at(cursor)
click to toggle source
# File lib/twitter_cldr/transforms/conversion_rule_set.rb, line 108 def find_matching_indexed_rule_at(cursor) if rules = rule_index.get(cursor.index_values) rules.each do |rule| if side_match = rule.match(cursor) return RuleMatch.new(rule, side_match) end end end nil end
find_matching_rule_at(cursor)
click to toggle source
# File lib/twitter_cldr/transforms/conversion_rule_set.rb, line 89 def find_matching_rule_at(cursor) indexed_match = find_matching_indexed_rule_at(cursor) blank_key_match = find_matching_blank_key_rule_at(cursor) if indexed_match if blank_key_match if blank_key_match < indexed_match blank_key_match else indexed_match end else indexed_match end else blank_key_match end end
inverted_rules()
click to toggle source
# File lib/twitter_cldr/transforms/conversion_rule_set.rb, line 79 def inverted_rules @inverted_rules ||= begin rules.each_with_object([]) do |rule, ret| if rule.can_invert? ret << rule.invert end end end end