class RDoc::Markup::ToHtmlCrossref

def cross_reference name, text = nil

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

def gen_url url, text

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

def handle_special_CROSSREF(special)

def handle_special_CROSSREF(special)
  name = special.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_special_HYPERLINK special

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

def handle_special_RDOCLINK special

def handle_special_RDOCLINK special
  url = special.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_special crossref_re, :CROSSREF
  @cross_reference = RDoc::CrossReference.new @context
end

def link name, text

def link name, text
  original_name = name
  if name =~ /(.*[^#:])@/ then
    name = $1
    label = $'
  end
  ref = @cross_reference.resolve name, text
  text = ref.output_name @context if
    RDoc::MethodAttr === ref and text == original_name
  case ref
  when String then
    ref
  else
    path = ref.as_href @from_path
    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