def self.next_list_item(reader, list_block, match, sibling_trait = nil)
list_type = list_block.context
if list_type == :dlist
list_term = ListItem.new(list_block, match[1])
list_item = ListItem.new(list_block, match[3])
has_text = !match[3].to_s.empty?
else
list_item = ListItem.new(list_block, match[2])
if !sibling_trait
sibling_trait = resolve_list_marker(list_type, match[1], list_block.buffer.size, true)
end
list_item.marker = sibling_trait
has_text = true
end
reader.get_line
list_item_reader = Reader.new grab_lines_for_list_item(reader, list_type, sibling_trait, has_text)
if list_item_reader.has_more_lines?
comment_lines = list_item_reader.consume_line_comments
subsequent_line = list_item_reader.peek_line
list_item_reader.unshift(*comment_lines) unless comment_lines.empty?
if !subsequent_line.nil?
continuation_connects_first_block = (subsequent_line == "\n")
if !continuation_connects_first_block && list_type != :dlist
has_text = false
end
content_adjacent = !subsequent_line.chomp.empty?
else
continuation_connects_first_block = false
content_adjacent = false
end
options = {:text => !has_text}
while list_item_reader.has_more_lines?
new_block = next_block(list_item_reader, list_block, {}, options)
list_item.blocks << new_block unless new_block.nil?
end
list_item.fold_first(continuation_connects_first_block, content_adjacent)
end
if list_type == :dlist
unless list_item.text? || list_item.blocks?
list_item = nil
end
[list_term, list_item]
else
list_item
end
end