Sha256: 02120f92bb9a6ce71eec92e17c5584c3e67101768c48a1c483b526fc01b58efb

Contents?: true

Size: 1.07 KB

Versions: 1

Compression:

Stored size: 1.07 KB

Contents

module SGF
  class Writer

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

    # Takes a node and a filename as arguments
    def save(root_node, filename)
      stringify_tree_from root_node

      File.open(filename, 'w') { |f| f << @sgf }
    end

    private

    def write_tree_from node
      @sgf << "\n" << node.to_str(@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 write_new_branch_from node
      node.each_child do |child_node|
        open_branch
        write_tree_from child_node
        close_branch
      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
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
SgfParser-2.0.0 lib/sgf/writer.rb