class RDoc::Markup::ToMarkdown

def accept_list_end(list)

def accept_list_end(list)
  super
end

def accept_list_item_end(list_item)

def accept_list_item_end(list_item)
  width = case @list_type.last
          when :BULLET then
            4
          when :NOTE, :LABEL then
            use_prefix
            @res << "\n"
            4
          else
            @list_index[-1] = @list_index.last.succ
            4
          end
  @indent -= width
end

def accept_list_item_start(list_item)

def accept_list_item_start(list_item)
  type = @list_type.last
  case type
  when :NOTE, :LABEL then
    bullets = Array(list_item.label).map do |label|
      attributes(label).strip
    end.join "\n"
    bullets << "\n" unless bullets.empty?
    @prefix = ' ' * @indent
    @indent += 4
    @prefix << bullets << ":" << (' ' * (@indent - 1))
  else
    bullet = type == :BULLET ? '*' : @list_index.last.to_s + '.'
    @prefix = (' ' * @indent) + bullet.ljust(4)
    @indent += 4
  end
end

def accept_list_start(list)

def accept_list_start(list)
  case list.type
  when :BULLET, :LABEL, :NOTE then
    @list_index << nil
  when :LALPHA, :NUMBER, :UALPHA then
    @list_index << 1
  else
    raise RDoc::Error, "invalid list type #{list.type}"
  end
  @list_width << 4
  @list_type << list.type
end

def accept_rule(rule)

def accept_rule(rule)
  use_prefix or @res << ' ' * @indent
  @res << '-' * 3
  @res << "\n"
end

def accept_verbatim(verbatim)

def accept_verbatim(verbatim)
  indent = ' ' * (@indent + 4)
  verbatim.parts.each do |part|
    @res << indent unless part == "\n"
    @res << part
  end
  @res << "\n"
end

def gen_url(url, text)

def gen_url(url, text)
  scheme, url, = parse_url url
  "[#{text.sub(%r{^#{scheme}:/*}i, '')}](#{url})"
end

def handle_rdoc_link(url)

def handle_rdoc_link(url)
  case url
  when /^rdoc-ref:/ then
    $'
  when /^rdoc-label:footmark-(\d+)/ then
    "[^#{$1}]:"
  when /^rdoc-label:foottext-(\d+)/ then
    "[^#{$1}]"
  when /^rdoc-label:label-/ then
    gen_url url, $'
  when /^rdoc-image:/ then
    "![](#{$'})"
  when /^rdoc-[a-z]+:/ then
    $'
  end
end

def handle_regexp_HARD_BREAK(target)

def handle_regexp_HARD_BREAK(target)
  "  \n"
end

def handle_regexp_RDOCLINK(target)

def handle_regexp_RDOCLINK(target)
  handle_rdoc_link target.text
end

def handle_regexp_TIDYLINK(target)

def handle_regexp_TIDYLINK(target)
  text = target.text
  return text unless text =~ /\{(.*?)\}\[(.*?)\]/ or text =~ /(\S+)\[(.*?)\]/
  label = $1
  url   = $2
  if url =~ /^rdoc-label:foot/ then
    handle_rdoc_link url
  else
    gen_url url, label
  end
end

def init_tags

def init_tags
  add_tag :BOLD, '**', '**'
  add_tag :EM,   '*',  '*'
  add_tag :TT,   '`',  '`'
end

def initialize(markup = nil)

def initialize(markup = nil)
  super
  @headings[1] = ['# ',      '']
  @headings[2] = ['## ',     '']
  @headings[3] = ['### ',    '']
  @headings[4] = ['#### ',   '']
  @headings[5] = ['##### ',  '']
  @headings[6] = ['###### ', '']
  add_regexp_handling_RDOCLINK
  add_regexp_handling_TIDYLINK
  @hard_break = "  \n"
end