Sha256: e42dd81d5a852dfb2339d8517acfe8e0fea68f35d1e1456b9634c622ab098a10

Contents?: true

Size: 1.03 KB

Versions: 2

Compression:

Stored size: 1.03 KB

Contents

class SGF::Writer
  # Takes a node and a filename as arguments
  def save(root_node, filename)
    #TODO - accept any I/O object?
    stringify_tree_from root_node
    File.open(filename, 'w') { |f| f << @sgf }
  end

  def stringify_tree_from root_node
    @indentation = 0
    @sgf = ""
    write_new_branch_from root_node
    @sgf
  end

  private

  def write_new_branch_from node
    node.each_child do |child_node|
      open_branch
      write_tree_from child_node
      close_branch
    end
  end

  def write_tree_from node
    @sgf << "\n" << node.to_s(@indentation)
    decide_what_comes_after node
  end

  def decide_what_comes_after node
    if node.children.size == 1
      then write_tree_from node.children[0]
    else write_new_branch_from node
    end
  end

  def open_branch
    @sgf << "\n" << whitespace << "("
    @indentation += 2
  end

  def close_branch
    @indentation -= 2
    @indentation = (@indentation < 0) ? 0 : @indentation
    @sgf << "\n" << whitespace << ")"
  end

  def whitespace
    " " * @indentation
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
SgfParser-3.0.1 lib/sgf/writer.rb
SgfParser-3.0.0 lib/sgf/writer.rb