class RDoc::Markup::ToHtml

def accept_blank_line(blank_line)

def accept_blank_line(blank_line)
  # @res << annotate("<p />") << "\n"
end

def accept_block_quote block_quote

def accept_block_quote block_quote
  @res << "\n<blockquote>"
  block_quote.parts.each do |part|
    part.accept self
  end
  @res << "</blockquote>\n"
end

def accept_heading heading

def accept_heading heading
  level = [6, heading.level].min
  label = heading.label @code_object
  @res << if @options.output_decoration
            "\n<h#{level} id=\"#{label}\">"
          else
            "\n<h#{level}>"
          end
  @res << to_html(heading.text)
  unless @options.pipe then
    @res << "<span><a href=\"##{label}\">&para;</a>"
    @res << " <a href=\"#top\">&uarr;</a></span>"
  end
  @res << "</h#{level}>\n"
end

def accept_list_end(list)

def accept_list_end(list)
  @list.pop
  if tag = @in_list_entry.pop
    @res << tag
  end
  @res << html_list_name(list.type, false) << "\n"
end

def accept_list_item_end(list_item)

def accept_list_item_end(list_item)
  @in_list_entry[-1] = list_end_for(@list.last)
end

def accept_list_item_start(list_item)

def accept_list_item_start(list_item)
  if tag = @in_list_entry.last
    @res << tag
  end
  @res << list_item_start(list_item, @list.last)
end

def accept_list_start(list)

def accept_list_start(list)
  @list << list.type
  @res << html_list_name(list.type, true)
  @in_list_entry.push false
end

def accept_paragraph paragraph

def accept_paragraph paragraph
  @res << "\n<p>"
  text = paragraph.text @hard_break
  text = text.gsub(/(#{SPACE_SEPARATED_LETTER_CLASS})?\K\r?\n(?=(?(1)(#{SPACE_SEPARATED_LETTER_CLASS})?))/o) {
    defined?($2) && ' '
  }
  @res << to_html(text)
  @res << "</p>\n"
end

def accept_raw raw

def accept_raw raw
  @res << raw.parts.join("\n")
end

def accept_rule rule

def accept_rule rule
  @res << "<hr>\n"
end

def accept_table header, body, aligns

def accept_table header, body, aligns
  @res << "\n<table role=\"table\">\n<thead>\n<tr>\n"
  header.zip(aligns) do |text, align|
    @res << '<th'
    @res << ' align="' << align << '"' if align
    @res << '>' << to_html(text) << "</th>\n"
  end
  @res << "</tr>\n</thead>\n<tbody>\n"
  body.each do |row|
    @res << "<tr>\n"
    row.zip(aligns) do |text, align|
      @res << '<td'
      @res << ' align="' << align << '"' if align
      @res << '>' << to_html(text) << "</td>\n"
    end
    @res << "</tr>\n"
  end
  @res << "</tbody>\n</table>\n"
end

def accept_verbatim verbatim

def accept_verbatim verbatim
  text = verbatim.text.rstrip
  klass = nil
  content = if verbatim.ruby? or parseable? text then
              begin
                tokens = RDoc::Parser::RipperStateLex.parse text
                klass  = ' class="ruby"'
                result = RDoc::TokenStream.to_html tokens
                result = result + "\n" unless "\n" == result[-1]
                result
              rescue
                CGI.escapeHTML text
              end
            else
              CGI.escapeHTML text
            end
  if @options.pipe then
    @res << "\n<pre><code>#{CGI.escapeHTML text}\n</code></pre>\n"
  else
    @res << "\n<pre#{klass}>#{content}</pre>\n"
  end
end

def convert_string(text)

def convert_string(text)
  CGI.escapeHTML text
end

def end_accepting

def end_accepting
  @res.join
end

def gen_url url, text

def gen_url url, text
  scheme, url, id = parse_url url
  if %w[http https link].include?(scheme) and
     url =~ /\.(gif|png|jpg|jpeg|bmp)$/ then
    "<img src=\"#{url}\" />"
  else
    if scheme != 'link' and %r%\A((?!https?:)(?:[^/#]*/)*+)([^/#]+)\.(rb|rdoc|md)(?=\z|#)%i =~ url
      url = "#$1#{$2.tr('.', '_')}_#$3.html#$'"
    end
    text = text.sub %r%^#{scheme}:/*%i, ''
    text = text.sub %r%^[*\^](\d+)$%,   '\1'
    link = "<a#{id} href=\"#{url}\">#{text}</a>"
    link = "<sup>#{link}</sup>" if /"foot/ =~ id
    link
  end
end

def handle_RDOCLINK url # :nodoc:

:nodoc:
def handle_RDOCLINK url # :nodoc:
  case url
  when /^rdoc-ref:/
    CGI.escapeHTML($')
  when /^rdoc-label:/
    text = $'
    text = case text
           when /\Alabel-/    then $'
           when /\Afootmark-/ then $'
           when /\Afoottext-/ then $'
           else                    text
           end
    gen_url CGI.escapeHTML(url), CGI.escapeHTML(text)
  when /^rdoc-image:/
    %[<img src=\"#{CGI.escapeHTML($')}\">]
  when /\Ardoc-[a-z]+:/
    CGI.escapeHTML($')
  end
end

def handle_regexp_HARD_BREAK target

def handle_regexp_HARD_BREAK target
  '<br>'
end

def handle_regexp_HYPERLINK(target)

def handle_regexp_HYPERLINK(target)
  url = CGI.escapeHTML(target.text)
  gen_url url, url
end

def handle_regexp_RDOCLINK target

def handle_regexp_RDOCLINK target
  handle_RDOCLINK 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   = CGI.escapeHTML($2)
  if /^rdoc-image:/ =~ label
    label = handle_RDOCLINK(label)
  else
    label = CGI.escapeHTML(label)
  end
  gen_url url, label
end

def html_list_name(list_type, open_tag)

def html_list_name(list_type, open_tag)
  tags = LIST_TYPE_TO_HTML[list_type]
  raise RDoc::Error, "Invalid list type: #{list_type.inspect}" unless tags
  tags[open_tag ? 0 : 1]
end

def init_link_notation_regexp_handlings

def init_link_notation_regexp_handlings
  add_regexp_handling_RDOCLINK
  add_regexp_handling_TIDYLINK
end

def init_regexp_handlings

def init_regexp_handlings
  # external links
  @markup.add_regexp_handling(/(?:link:|https?:|mailto:|ftp:|irc:|www\.)#{URL_CHARACTERS_REGEXP_STR}+\w/,
                              :HYPERLINK)
  init_link_notation_regexp_handlings
end

def init_tags

def init_tags
  add_tag :BOLD, "<strong>", "</strong>"
  add_tag :TT,   "<code>",   "</code>"
  add_tag :EM,   "<em>",     "</em>"
end

def initialize options, markup = nil

def initialize options, markup = nil
  super
  @code_object = nil
  @from_path = ''
  @in_list_entry = nil
  @list = nil
  @th = nil
  @hard_break = "<br>\n"
  init_regexp_handlings
  init_tags
end

def list_end_for(list_type)

def list_end_for(list_type)
  case list_type
  when :BULLET, :LALPHA, :NUMBER, :UALPHA then
    "</li>"
  when :LABEL, :NOTE then
    "</dd>"
  else
    raise RDoc::Error, "Invalid list type: #{list_type.inspect}"
  end
end

def list_item_start(list_item, list_type)

def list_item_start(list_item, list_type)
  case list_type
  when :BULLET, :LALPHA, :NUMBER, :UALPHA then
    "<li>"
  when :LABEL, :NOTE then
    Array(list_item.label).map do |label|
      "<dt>#{to_html label}</dt>\n"
    end.join << "<dd>"
  else
    raise RDoc::Error, "Invalid list type: #{list_type.inspect}"
  end
end

def parseable? text

def parseable? text
  verbose, $VERBOSE = $VERBOSE, nil
  catch(:valid) do
    eval("BEGIN { throw :valid, true }\n#{text}")
  end
rescue SyntaxError
  false
ensure
  $VERBOSE = verbose
end

def start_accepting

def start_accepting
  @res = []
  @in_list_entry = []
  @list = []
end

def to_html item

def to_html item
  super convert_flow @am.flow item
end