def section(section_changes, header, entry_style, header_style = nil)
      return "" unless section_changes.size > 0
      str = ""

      unless header.empty?
        if header_style
          str << header_style.call(header)
        else
          str << header
        end
      end

      section_changes.each_with_index do |e, i|
        str << entry_style.call(e, i)
      end
      str
    end
def section(section_changes, header, entry_style, header_style = nil)
      return "" unless section_changes.size > 0
      str = ""

      unless header.empty?
        if header_style
          str << header_style.call(header)
        else
          str << header
        end
      end

      section_changes.each_with_index do |e, i|
        str << entry_style.call(e, i)
      end
      str
    end
Format a specific section.

 section_changes ... changes in the format of { section_1: [changes...], section_2: [changes...]}
 header ... header of the section
 entry_style ... is called for styling each item of a section
 header_style ... optional, since styled header can be passed directly; is called for styling the header of the section