# Indented code blocks parser
class MdIndentedCodeBlockParser
super MdBlockParser
redef type BLOCK: MdIndentedCodeBlock
redef var block = new MdIndentedCodeBlock(location, use_tabs) is lazy
# Indent is tab?
var use_tabs: Bool
# Block content
var content = new Buffer
redef fun try_continue(state) do
if state.indent >= 4 then
return new MdBlockContinue.at_column(state.column + 4)
else if state.is_blank then
return new MdBlockContinue.at_index(state.next_non_space_index)
end
return null
end
redef fun add_line(line) do
if not content.is_empty then
content.add('\n')
end
content.append(line)
end
redef fun finalize(parser) do
super
add_line(" ")
var content = self.content.to_s
var literal = content.replace_first(re_trailing_blank_lines, "\n")
block.literal = literal
var lines = literal.split("\n")
location.line_end = location.line_start + lines.length - 2
location.column_end = content_offset + lines[lines.length - 2].length + 4
end
end
lib/markdown2/markdown_block_parsing.nit:780,1--821,3