markdown :: LineList :: defaultinit
# A markdown list line.
# Mainly used to factorize code between ordered and unordered lists.
abstract class LineList
super Line
redef fun process(v) do
var line = v.current_line
# go to list end
while line != null do
var t = v.line_kind(line)
if not line.is_empty and (line.prev_empty and line.leading == 0 and
not t isa LineList) then break
line = line.next
end
# build list block
var current_block = v.current_block.as(not null)
var list: MDBlock
if line != null then
list = current_block.split(line.prev.as(not null))
else
list = current_block.split(current_block.last_line.as(not null))
end
var kind = block_kind(list)
list.kind = kind
list.first_line.as(not null).prev_empty = false
list.last_line.as(not null).next_empty = false
list.remove_surrounding_empty_lines
list.first_line.as(not null).prev_empty = false
list.last_line.as(not null).next_empty = false
kind.init_block(v)
var block = list.first_block
while block != null do
block.remove_list_indent(v)
v.recurse(block, true)
block = block.next
end
kind.expand_paragraphs(list)
v.current_line = line
end
# Create a new block kind based on this line.
protected fun block_kind(block: MDBlock): BlockList is abstract
# Extract string value from `MDLine`.
protected fun extract_value(line: MDLine): String is abstract
end
lib/markdown/markdown.nit:1886,1--1931,3