class RDoc::Markup::ToHtmlCrossref

def cross_reference name, text = nil, code = true

def cross_reference name, text = nil, code = true
  lookup = name
  name = name[1..-1] unless @show_hash if name[0, 1] == '#'
  if name =~ /(.*[^#:])@/
    text ||= "#{CGI.unescape $'} at <code>#{$1}</code>"
    code = false
  else
    text ||= name
  end
  link lookup, text, code
end

def gen_url url, text

def gen_url url, text
  return super unless url =~ /\Ardoc-ref:/
  name = $'
  cross_reference name, text, name == text
end

def handle_regexp_CROSSREF(target)

def handle_regexp_CROSSREF(target)
  name = target.text
  return name if name =~ /@[\w-]+\.[\w-]/ # labels that look like emails
  unless @hyperlink_all then
    # This ensures that words entirely consisting of lowercase letters will
    # not have cross-references generated (to suppress lots of erroneous
    # cross-references to "new" in text, for instance)
    return name if name =~ /\A[a-z]*\z/
  end
  cross_reference name
end

def handle_regexp_HYPERLINK target

def handle_regexp_HYPERLINK target
  return cross_reference $' if target.text =~ /\Ardoc-ref:/
  super
end

def handle_regexp_RDOCLINK target

def handle_regexp_RDOCLINK target
  url = target.text
  case url
  when /\Ardoc-ref:/ then
    cross_reference $'
  else
    super
  end
end

def initialize(options, from_path, context, markup = nil)

def initialize(options, from_path, context, markup = nil)
  raise ArgumentError, 'from_path cannot be nil' if from_path.nil?
  super options, markup
  @context       = context
  @from_path     = from_path
  @hyperlink_all = @options.hyperlink_all
  @show_hash     = @options.show_hash
  crossref_re = @hyperlink_all ? ALL_CROSSREF_REGEXP : CROSSREF_REGEXP
  @markup.add_regexp_handling crossref_re, :CROSSREF
  @cross_reference = RDoc::CrossReference.new @context
end

def link name, text, code = true

def link name, text, code = true
  if name =~ /(.*[^#:])@/ then
    name = $1
    label = $'
  end
  ref = @cross_reference.resolve name, text
  case ref
  when String then
    ref
  else
    path = ref.as_href @from_path
    if code and RDoc::CodeObject === ref and !(RDoc::TopLevel === ref)
      text = "<code>#{text}</code>"
    end
    if path =~ /#/ then
      path << "-label-#{label}"
    elsif ref.sections and
          ref.sections.any? { |section| label == section.title } then
      path << "##{label}"
    else
      path << "#label-#{label}"
    end if label
    "<a href=\"#{path}\">#{text}</a>"
  end
end