resolve(name, text)
public
Returns a reference to name.
If the reference is found and name is not documented text
will be returned. If name is escaped name is returned.
If name is not found text is returned.
Show source
def resolve name, text
return @seen[name] if @seen.include? name
if /#{CLASS_REGEXP_STR}([.#]|::)#{METHOD_REGEXP_STR}/ =~ name then
type = $2
if '.' == type
method = $3
else
method = "#{type}#{$3}"
end
container = @context.find_symbol_module($1)
elsif /^([.#]|::)#{METHOD_REGEXP_STR}/ =~ 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
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 = case name
when /^\\(#{CLASS_REGEXP_STR})$/ then
@context.find_symbol $1
else
@context.find_symbol name
end unless ref
ref = @store.page name if not ref and name =~ /^\w+$/
ref = nil if RDoc::Alias === ref
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