Maintenance of Ruby 2.0.0 ended on February 24, 2016. Read more

In Files

  • rdoc/markup/to_html_crossref.rb

Class/Module Index [+]



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.



RDoc::CodeObject for generating references


Should we show ‘#’ characters on method references?

Public Class Methods

new(options, from_path, context, markup = nil) click to toggle source

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 = @context

Public Instance Methods

cross_reference(name, text = nil) click to toggle source

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
gen_url(url, text) click to toggle source

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
handle_special_CROSSREF(special) click to toggle source

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/

  cross_reference name

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 visit