class BufferWriter

def initialize()
  self.writer = new FileWriter()
end

defm set_output_file(output_file)
  self.writer.set_output_file(output_file)
end

defm write(line)
  self.writer.write(line)

  line = self.strip_colors(line)
  append(line('$'), line)
  :normal gJ
end

defm writeln(line)
  self.writer.writeln(line)

  line = self.strip_colors(line)
  append(line('$'), line)
  :normal G
end

defm flush()
  self.writer.flush()
end

defm flush_line()
  self.writer.flush_line()
end

" private methods

def strip_colors(line)
  return substitute(line, '\e\[[0-9;]\+[mK]', '', 'g')
end

end