RDoc::CrossReference is a reusable way to create cross references for names.
Version of CROSSREF_REGEXP used when
--hyperlink-all
is specified.
Regular expression to match class references
There can be a ‘\’ in front of text to suppress the cross-reference
There can be a ‘::’ in front of class names to reference from the top-level namespace.
The method can be followed by parenthesis (not recommended)
Regular expressions matching text that should potentially have cross-reference links generated are passed to add_special. Note that these expressions are meant to pick up text for which cross-references have been suppressed, since the suppression characters are removed by the code that is triggered.
Regular expression to match method references.
See CLASS_REGEXP_STR
Hash of references that have been looked-up to their replacements
Allows cross-references to be created based on the given
context
(RDoc::Context).
# File lib/rdoc/cross_reference.rb, line 103
def initialize context
@context = context
@seen = {}
end
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.
# File lib/rdoc/cross_reference.rb, line 116
def resolve name, text
return @seen[name] if @seen.include? name
if %r#{CLASS_REGEXP_STR}([.#]|::)#{METHOD_REGEXP_STR}/ =~ name then
type = $2
type = '' if type == '.' # will find either #method or ::method
method = "#{type}#{$3}"
container = @context.find_symbol_module($1)
elsif %r^([.#]|::)#{METHOD_REGEXP_STR}/ =~ name then
type = $1
type = '' if type == '.'
method = "#{type}#{$2}"
container = @context
else
container = nil
end
if container then
ref = container.find_local_symbol method
unless ref || RDoc::TopLevel === container then
ref = container.find_ancestor_local_symbol method
end
end
ref = case name
when %r^\\(#{CLASS_REGEXP_STR})$/ then
@context.find_symbol $1
else
@context.find_symbol name
end unless ref
# Try a page name
ref = RDoc::TopLevel.page name if not ref and name =~ %r^\w+$/
ref = nil if RDoc::Alias === ref # external alias, can't link to it
out = if name == '\' then
name
elsif name =~ %r^\\/ 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
/ | Search |
---|---|
? | Show this help |