Class: SGF::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/sgf/parser.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(event_listener) ⇒ Parser

Returns a new instance of Parser.



5
6
7
8
9
# File 'lib/sgf/parser.rb', line 5

def initialize event_listener
  @event_listener = event_listener
  @stm = SGFStateMachine.new
  @stm.context = event_listener
end

Instance Attribute Details

#event_listenerObject (readonly)

Returns the value of attribute event_listener.



3
4
5
# File 'lib/sgf/parser.rb', line 3

def event_listener
  @event_listener
end

Class Method Details

.is_binary?(file) ⇒ Boolean

Returns:

  • (Boolean)


48
49
50
51
52
# File 'lib/sgf/parser.rb', line 48

def is_binary? file
  # This does not work?!
  # parts = %x(/usr/bin/file -i #{file}).split(':', 2)
  # not parts[1].include?('text')
end

.parse(input, debug = false) ⇒ Object



36
37
38
39
40
# File 'lib/sgf/parser.rb', line 36

def parse input, debug = false
  parser = SGF::Parser.new(SGF::Model::EventListener.new(debug))
  parser.parse input
  parser.event_listener.game
end

.parse_file(filename, debug = false) ⇒ Object



42
43
44
45
46
# File 'lib/sgf/parser.rb', line 42

def parse_file filename, debug = false
  parser = SGF::Parser.new(SGF::Model::EventListener.new(debug))
  parser.parse_file filename
  parser.event_listener.game
end

Instance Method Details

#parse(input) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/sgf/parser.rb', line 11

def parse input
  @stm.reset
  
  raise ArgumentError.new if input.nil? or input.strip.empty?
  
  input.strip!
    
  0.upto(input.size - 1) do |i|
    @position = i
    @stm.event(input[i,1])
  end
  
  @stm.end
rescue StateMachineError => e
  raise ParseError.new(input, @position, e.message)
end

#parse_file(filename) ⇒ Object

Raises:



28
29
30
31
32
33
# File 'lib/sgf/parser.rb', line 28

def parse_file filename
  raise BinaryFileError if Parser.is_binary?(filename)
  File.open(filename) do |f|
    parse f.readlines.join
  end
end