class FoodIngredientParser::Loose::Transform::SplitENumbers
Constants
- MATCH_RE
- SINGLE_RE
- SPLIT_RE
Transforms node tree to split e-number combinations.
@note mark and amount is lost, this is not expected on e-numbers
Public Class Methods
new(node)
click to toggle source
# File lib/food_ingredient_parser/loose/transform/split_e_numbers.rb, line 18 def initialize(node) @node = node end
transform!(node)
click to toggle source
# File lib/food_ingredient_parser/loose/transform/split_e_numbers.rb, line 14 def self.transform!(node) new(node).transform! end
Public Instance Methods
transform!()
click to toggle source
# File lib/food_ingredient_parser/loose/transform/split_e_numbers.rb, line 22 def transform! transform_node!(@node) @node end
Private Instance Methods
new_node(node, begins, ends)
click to toggle source
# File lib/food_ingredient_parser/loose/transform/split_e_numbers.rb, line 43 def new_node(node, begins, ends) offset = node.name.interval.first new_node = Node.new(node.input, offset + begins .. offset + ends) new_node.name = Node.new(node.input, new_node.interval) new_node end
transform_node!(node)
click to toggle source
# File lib/food_ingredient_parser/loose/transform/split_e_numbers.rb, line 29 def transform_node!(node) if node.contains.any? node.contains.each {|n| transform_node!(n) } elsif node.name && m = MATCH_RE.match(node.name.text_value) i = 0 while m = node.name.text_value.match(SPLIT_RE, i) node.contains << new_node(node, i, m.begin(0)-1) i = m.end(0) end node.contains << new_node(node, i, node.name.interval.last) if i <= node.name.interval.last node.name = nil end end