Subclass of the RDoc::Markup::ToHtml class that supports looking up method names, classes, etc to create links. RDoc::CrossReference is used to generate those links based on the current context.
Creates a new crossref resolver that generates links relative to
context which lives at from_path in the generated
files. ‘#’ characters on references are removed unless
show_hash is true. Only method names preceded by ‘#’ or ‘::’
are linked, unless hyperlink_all is true.
# File rdoc/markup/to_html_crossref.rb, line 31
def initialize(options, from_path, context, markup = nil)
raise ArgumentError, 'from_path cannot be nil' if from_path.nil?
super options, markup
@context = context
@from_path = from_path
@hyperlink_all = @options.hyperlink_all
@show_hash = @options.show_hash
crossref_re = @hyperlink_all ? ALL_CROSSREF_REGEXP : CROSSREF_REGEXP
@markup.add_special crossref_re, :CROSSREF
@cross_reference = RDoc::CrossReference.new @context
end
Creates a link to the reference name if the name exists. If
text is given it is used as the link text, otherwise
name is used.
# File rdoc/markup/to_html_crossref.rb, line 51
def cross_reference name, text = nil
lookup = name
name = name[1..-1] unless @show_hash if name[0, 1] == '#'
name = "#{CGI.unescape $'} at #{$1}" if name =~ /(.*[^#:])@/
text = name unless text
link lookup, text
end
Generates links for rdoc-ref: scheme URLs and allows RDoc::Markup::ToHtml to handle other schemes.
# File rdoc/markup/to_html_crossref.rb, line 118
def gen_url url, text
return super unless url =~ /\Ardoc-ref:/
cross_reference $', text
end
We’re invoked when any text matches the CROSSREF pattern. If we find the
corresponding reference, generate a link. If the name we’re looking for
contains no punctuation, we look for it up the module/class chain. For
example, ToHtml is found, even without the RDoc::Markup::
prefix, because we look for it in module Markup first.
# File rdoc/markup/to_html_crossref.rb, line 70
def handle_special_CROSSREF(special)
name = special.text
return name if name =~ /@[\w-]+\.[\w-]/ # labels that look like emails
unless @hyperlink_all then
# 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/
end
cross_reference name
end
Handles rdoc-ref: scheme links and allows RDoc::Markup::ToHtml to handle other schemes.
# File rdoc/markup/to_html_crossref.rb, line 89
def handle_special_HYPERLINK special
return cross_reference $' if special.text =~ /\Ardoc-ref:/
super
end
special is an rdoc-schemed link that will be converted into a
hyperlink. For the rdoc-ref scheme the cross-reference will be looked up
and the given name will be used.
All other contents are handled by the superclass
# File rdoc/markup/to_html_crossref.rb, line 103
def handle_special_RDOCLINK special
url = special.text
case url
when /\Ardoc-ref:/ then
cross_reference $'
else
super
end
end
Creates an HTML link to name with the given text.
# File rdoc/markup/to_html_crossref.rb, line 127
def link name, text
original_name = name
if name =~ /(.*[^#:])@/ then
name = $1
label = $'
end
ref = @cross_reference.resolve name, text
text = ref.output_name @context if
RDoc::MethodAttr === ref and text == original_name
case ref
when String then
ref
else
path = ref.as_href @from_path
if path =~ /#/ then
path << "-label-#{label}"
else
path << "#label-#{label}"
end if label
"<a href=\"#{path}\">#{text}</a>"
end
end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please see Improve the docs, or visit Documenting-ruby.org.