class Bchess::PGN::Parser

Attributes

error[R]
input[R]
output[R]
tree[R]

Public Class Methods

new(input) click to toggle source
# File lib/pgn/parser.rb, line 13
def initialize(input)
  @input = input
end

Public Instance Methods

parse() click to toggle source
# File lib/pgn/parser.rb, line 17
def parse
  if input.is_a?(String)
    @tree = @@parser.parse(input)
  elsif input.is_a?(Bchess::PGN::PGNFile)
    @tree = @@parser.parse(input.load_games)
  end

  unless tree
    raise PGN::ParserException, "Parse error at offset: #{@@parser.index}"
  end

  sanitize_tree(tree)
end

Private Instance Methods

sanitize_tree(root_node) click to toggle source
# File lib/pgn/parser.rb, line 33
def sanitize_tree(root_node)
  root_elements = root_node.elements
  return unless root_elements

  root_elements.delete_if { |node| node.class.name == 'Treetop::Runtime::SyntaxNode' }
  root_elements.each { |node| sanitize_tree(node) }
end