class RDoc::Markup::ToHtmlCrossref

def handle_special_CROSSREF(special)

def handle_special_CROSSREF(special)
  name = special.text
  # 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/
  return @seen[name] if @seen.include? name
  lookup = name
  name = name[0, 1] unless @show_hash if name[0, 1] == '#'
  # Find class, module, or method in class or module.
  #
  # Do not, however, use an if/elsif/else chain to do so.  Instead, test
  # each possible pattern until one matches.  The reason for this is that a
  # string like "YAML.txt" could be the txt() class method of class YAML (in
  # which case it would match the first pattern, which splits the string
  # into container and method components and looks up both) or a filename
  # (in which case it would match the last pattern, which just checks
  # whether the string as a whole is a known symbol).
  if /#{CLASS_REGEXP_STR}([.#]|::)#{METHOD_REGEXP_STR}/ =~ lookup then
    container = $1
    type = $2
    type = '#' if type == '.'
    method = "#{type}#{$3}"
    ref = @context.find_symbol container, method
  end
  ref = @context.find_symbol lookup unless ref
  out = if lookup == '\\' then
          lookup
        elsif lookup =~ /^\\/ then
          $'
        elsif ref and ref.document_self then
          "<a href=\"#{ref.as_href @from_path}\">#{name}</a>"
        else
          name
        end
  @seen[name] = out
  out
end

def initialize(from_path, context, show_hash)

def initialize(from_path, context, show_hash)
  raise ArgumentError, 'from_path cannot be nil' if from_path.nil?
  super()
  @markup.add_special(CROSSREF_REGEXP, :CROSSREF)
  @from_path = from_path
  @context = context
  @show_hash = show_hash
  @seen = {}
end