Support for the Ruby 2.4 series has ended. See here for reference.
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
Allows cross-references to be created based on the given context (RDoc::Context).
# File rdoc/cross_reference.rb, line 111
def initialize context
@context = context
@store = context.store
@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 rdoc/cross_reference.rb, line 125
def resolve name, text
return @seen[name] if @seen.include? name
if /#{CLASS_REGEXP_STR}([.#]|::)#{METHOD_REGEXP_STR}/o =~ name then
type = $2
type = '' if type == '.' # will find either #method or ::method
method = "#{type}#{$3}"
container = @context.find_symbol_module($1)
elsif /^([.#]|::)#{METHOD_REGEXP_STR}/o =~ 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 /^\\(#{CLASS_REGEXP_STR})$/o then
@context.find_symbol $1
else
@context.find_symbol name
end 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