module Brief class Line attr_reader :_content, :number, :code attr_accessor :raw HeadingRegex = /^#+\s*/ CodeBlockRegex = /^\s*```/ def initialize(content, number, code=false) @_content = content @number = number + 1 @code = code end def to_s content end def type case when code? "content" when _content.match(HeadingRegex) "heading" when _content.match(CodeBlockRegex) "code_block_marker" else "content" end end def content _content.gsub(HeadingRegex, '') end def raw @raw || _content end def heading? !code? && type == "heading" end def level _content.match(HeadingRegex).to_s.count('#') end def sort_index [level, number] end def line_number number end def content? type == "content" || type == "code_block_marker" end def code? !!@code end end end