class RDoc::CrossReference

def initialize context

def initialize context
  @context = context
  @store   = context.store
  @seen = {}
end

def resolve name, text

def resolve name, text
  return @seen[name] if @seen.include? name
  ref = case name
        when /^\\(#{CLASS_REGEXP_STR})$/o then
          @context.find_symbol $1
        else
          @context.find_symbol name
        end
  ref = resolve_method name unless ref
  # Try a page name
  ref = @store.page name if not ref and name =~ /^[\w.]+$/
  ref = nil if RDoc::Alias === ref # external alias, can't link to it
  out = if name == '\\' then
          name
        elsif name =~ /^\\/ then
          # we remove the \ only in front of what we know:
          # other backslashes are treated later, only outside of <tt>
          ref ? $' : name
        elsif ref then
          if ref.display? then
            ref
          else
            text
          end
        else
          text
        end
  @seen[name] = out
  out
end

def resolve_method name

def resolve_method name
  ref = nil
  if /#{CLASS_REGEXP_STR}([.#]|::)#{METHOD_REGEXP_STR}/o =~ name then
    type = $2
    if '.' == type # will find either #method or ::method
      method = $3
    else
      method = "#{type}#{$3}"
    end
    container = @context.find_symbol_module($1)
  elsif /^([.#]|::)#{METHOD_REGEXP_STR}/o =~ name then
    type = $1
    if '.' == type
      method = $2
    else
      method = "#{type}#{$2}"
    end
    container = @context
  else
    type = nil
    container = nil
  end
  if container then
    unless RDoc::TopLevel === container then
      if '.' == type then
        if 'new' == method then # AnyClassName.new will be class method
          ref = container.find_local_symbol method
          ref = container.find_ancestor_local_symbol method unless ref
        else
          ref = container.find_local_symbol "::#{method}"
          ref = container.find_ancestor_local_symbol "::#{method}" unless ref
          ref = container.find_local_symbol "##{method}" unless ref
          ref = container.find_ancestor_local_symbol "##{method}" unless ref
        end
      else
        ref = container.find_local_symbol method
        ref = container.find_ancestor_local_symbol method unless ref
      end
    end
  end
  ref
end