class MT940::Parser

Public Class Methods

parse(data) click to toggle source
# File lib/mt940parser/parser.rb, line 12
def self.parse(data)
  tree = @@parser.parse(data)

  if tree.nil?
    self.show_error(data)
    raise ParseError, "Failed to parse file. See log for more information"
  end

  # clean up the tree by removing all nodes of default type 'SyntaxNode'
  self.clean_tree(tree)

  return tree
end

Private Class Methods

clean_tree(root_node) click to toggle source
# File lib/mt940parser/parser.rb, line 33
def self.clean_tree(root_node)
  return if(root_node.elements.nil?)
  root_node.elements.delete_if{|node| node.class.name == "Treetop::Runtime::SyntaxNode" }
  root_node.elements.delete_if{|node| node.class.name == "Document::NewLine" } #remove nls
  root_node.elements.delete_if{|node| node.class.name == "R86::Blank" } #remove nls
  root_node.elements.each {|node| self.clean_tree(node) }
end
show_error(data) click to toggle source
# File lib/mt940parser/parser.rb, line 28
def self.show_error(data)
  @@parser.failure_reason =~ /^(Expected .+) after/m
  puts "#{$1.gsub("\n", '$NEWLINE')}:", data.lines.to_a[@@parser.failure_line - 1],"#{'~' * (@@parser.failure_column - 1)}^"
end