class Terminal::Table

def render

def render
  buffer = seperator << "\n" 
  if has_headings?
    buffer << Y + headings.map_with_index do |heading, i|
      width = 0
      if heading.is_a?(Hash) and !heading[:colspan].nil?
        i.upto(i + heading[:colspan] - 1) do |col|
          width += length_of_column(col)
        end
        width += (heading[:colspan] - 1) * (Y.length + 2)
      else
        width = length_of_column(i)
      end
      Heading.new( width, heading).render
    end.join(Y) + Y
    buffer << "\n#{seperator}\n"
  end
  buffer << rows.map do |row| 
    Y + row.map_with_index do |cell, i|
      width = 0
      if cell.is_a?(Hash) and !cell[:colspan].nil?
        i.upto(i + cell[:colspan] - 1) do |col|
          width += length_of_column(col)
        end
        width += (cell[:colspan] - 1) * (Y.length + 2)
      else
        width = length_of_column(i)
      end
      Cell.new(width, cell).render
    end.join(Y) + Y 
  end.join("\n")
  buffer << "\n#{seperator}\n"
end