class Treetop::Runtime::SyntaxNode

We extend the SyntaxNode class to include a hash of meta data. Individual rules can define meta_data_item method that must return a hash that is merged with the hash data for the entire query.

Public Instance Methods

meta_data(hash = {}) click to toggle source
# File lib/canql/treetop/extensions.rb, line 9
def meta_data(hash = {})
  hash.merge!(meta_data_item) if respond_to?(:meta_data_item)

  if nonterminal?
    elements.each do |element|
      element.meta_data(hash)
    end
  end

  hash
end
reverse_scan_for_marker(marker) click to toggle source
# File lib/canql/treetop/extensions.rb, line 27
def reverse_scan_for_marker(marker)
  marker_value = reverse_marker_scanner(self, marker)
  return if marker_value.nil? || marker_value.empty?
  marker_value
end
text_values_for_marker(marker) click to toggle source
# File lib/canql/treetop/extensions.rb, line 21
def text_values_for_marker(marker)
  list = []
  text_values_for_marker_scanner(self, marker, list)
  list
end

Private Instance Methods

reverse_marker_scanner(root, marker) click to toggle source
# File lib/canql/treetop/extensions.rb, line 44
def reverse_marker_scanner(root, marker)
  return if root.nil? || root.elements.nil?
  marker_value = root.send(marker).text_value if root.respond_to?(marker)
  if marker_value.nil? || marker_value.empty?
    marker_value = reverse_marker_scanner(root.parent, marker)
  end
  marker_value
end
text_values_for_marker_scanner(root, marker, list) click to toggle source
# File lib/canql/treetop/extensions.rb, line 35
def text_values_for_marker_scanner(root, marker, list)
  return if root.elements.nil?
  root.elements.each do |e|
    list << e.send(marker).text_value if e.respond_to?(marker)
    text_values_for_marker_scanner(e, marker, list)
  end
  list
end