lib/sgf/parser/tree_parse.rb in SgfParser-0.9.0 vs lib/sgf/parser/tree_parse.rb in SgfParser-0.9.1

- old
+ new

@@ -1,13 +1,12 @@ require 'stringio' module SgfParser class Tree - private + #private - # Creates a tree (truly, a linked list) from @sgf. def parse while char = next_character case char when '(' then store_branch when ')' then fetch_branch @@ -63,17 +62,32 @@ @identity = "" end def get_property buffer = "" - while true - next_bit = @stream.sysread(1) - break if next_bit == "]" - next_bit << @stream.sysread(1) if next_bit == "\\" - next_bit = "]" if next_bit == "\\]" - buffer << next_bit + while char = next_character + case char + when "]" then break unless multiple_properties? + when "\\" then + char << next_character + char = "]" if char == "\\]" + end + + buffer << char end - buffer + "[#{buffer}]" + end + + def multiple_properties? + multiple_properties = false + if char = next_character + char = next_character if char == "\n" + if char == "[" + multiple_properties = true + end + @stream.pos -= 1 + multiple_properties + end end def store_character(char) @identity << char unless char == "\n" end