def parse_block(str)
until str.empty?
case str
when /\A\{\{\{\r?\n(.*?)\r?\n\}\}\}/m
end_paragraph
nowikiblock = make_nowikiblock($1)
@out << '<pre>' << escape_html(nowikiblock) << '</pre>'
when /\A\s*-{4,}\s*$/
end_paragraph
@out << '<hr/>'
when /\A\s*(={1,6})\s*(.*?)\s*=*\s*$(\r?\n)?/
end_paragraph
level = $1.size
@out << make_headline(level, $2)
when /\A[ \t]*\|.*$(\r?\n)?/
if !@stack.include?('table')
end_paragraph
start_tag('table')
end
parse_table_row($&)
when /\A\s*$(\r?\n)?/
end_paragraph
when /\A(\s*([*#]+)\s*(.*?))$(\r?\n)?/
line, bullet, item = $1, $2, $3
tag = (bullet[0,1] == '*' ? 'ul' : 'ol')
if bullet[0,1] == '#' || bullet.size != 2 || @stack.find {|x| ulol?(x) }
count = @stack.select { |x| ulol?(x) }.size
while !@stack.empty? && count > bullet.size
count -= 1 if ulol?(@stack.last)
end_tag
end
end_tag while !@stack.empty? && @stack.last != 'li'
if @stack.last == 'li' && count == bullet.size
end_tag
if @stack.last != tag
end_tag
count -= 1
end
end
while count < bullet.size
start_tag tag
count += 1
start_tag 'li' if count < bullet.size
end
@p = true
start_tag('li')
parse_inline(item)
else
start_paragraph
parse_inline(line)
end
when /\A([ \t]*\S+.*?)$(\r?\n)?/
start_paragraph
parse_inline($1)
else
raise "Parse error at #{str[0,30].inspect}"
end
str = $'
end
end_paragraph
@out
end