Class: RDoc::CrossReference (Ruby 2.4.2)
Description: Class : RDoc::CrossReference - Ruby 2.4.2

Support for the Ruby 2.4 series has ended. See here for reference.

### Home Classes Methods

### In Files

- rdoc/cross_reference.rb
- rdoc/markup/to_html_snippet.rb
- rdoc/markup/to_label.rb

### Parent

Object

### Methods

- ::new
- #resolve

### Class/Module Index

Quicksearch

- RDoc
- RDoc::Alias
- RDoc::AnonClass
- RDoc::AnyMethod
- RDoc::Attr
- RDoc::ClassModule
- RDoc::CodeObject
- RDoc::Comment
- RDoc::Constant
- RDoc::Context
- RDoc::Context::Section
- RDoc::CrossReference
- RDoc::ERBIO
- RDoc::ERBPartial
- RDoc::Encoding
- RDoc::Error
- RDoc::Extend
- RDoc::Generator
- RDoc::Generator::Darkfish
- RDoc::Generator::JsonIndex
- RDoc::Generator::Markup
- RDoc::Generator::POT
- RDoc::Generator::POT::MessageExtractor
- RDoc::Generator::POT::PO
- RDoc::Generator::POT::POEntry
- RDoc::Generator::RI
- RDoc::GhostMethod
- RDoc::I18n
- RDoc::I18n::Locale
- RDoc::I18n::Text
- RDoc::Include
- RDoc::Markdown
- RDoc::Markdown::Literals
- RDoc::Markup
- RDoc::Markup::AttrChanger
- RDoc::Markup::AttrSpan
- RDoc::Markup::AttributeManager
- RDoc::Markup::Attributes
- RDoc::Markup::BlankLine
- RDoc::Markup::BlockQuote
- RDoc::Markup::Document
- RDoc::Markup::Formatter
- RDoc::Markup::FormatterTestCase
- RDoc::Markup::HardBreak
- RDoc::Markup::Include
- RDoc::Markup::IndentedParagraph
- RDoc::Markup::List
- RDoc::Markup::ListItem
- RDoc::Markup::Paragraph
- RDoc::Markup::Parser
- RDoc::Markup::Parser::Error
- RDoc::Markup::Parser::ParseError
- RDoc::Markup::PreProcess
- RDoc::Markup::Raw
- RDoc::Markup::Rule
- RDoc::Markup::Special
- RDoc::Markup::TextFormatterTestCase
- RDoc::Markup::ToAnsi
- RDoc::Markup::ToBs
- RDoc::Markup::ToHtml
- RDoc::Markup::ToHtmlCrossref
- RDoc::Markup::ToHtmlSnippet
- RDoc::Markup::ToJoinedParagraph
- RDoc::Markup::ToLabel
- RDoc::Markup::ToMarkdown
- RDoc::Markup::ToRdoc
- RDoc::Markup::ToTableOfContents
- RDoc::Markup::ToTest
- RDoc::Markup::ToTtOnly
- RDoc::Markup::Verbatim
- RDoc::MetaMethod
- RDoc::MethodAttr
- RDoc::Mixin
- RDoc::NormalClass
- RDoc::NormalModule
- RDoc::Options
- RDoc::Parser
- RDoc::Parser::C
- RDoc::Parser::ChangeLog
- RDoc::Parser::Markdown
- RDoc::Parser::RD
- RDoc::Parser::Ruby
- RDoc::Parser::RubyTools
- RDoc::Parser::Simple
- RDoc::Parser::Text
- RDoc::RD
- RDoc::RD::BlockParser
- RDoc::RD::Inline
- RDoc::RD::InlineParser
- RDoc::RDoc
- RDoc::RI
- RDoc::RI::Driver
- RDoc::RI::Driver::Error
- RDoc::RI::Driver::NotFoundError
- RDoc::RI::Error
- RDoc::RI::Paths
- RDoc::RI::Task
- RDoc::Require
- RDoc::RubyLex
- RDoc::RubyLex::Error
- RDoc::RubyToken
- RDoc::RubygemsHook
- RDoc::Servlet
- RDoc::SingleClass
- RDoc::Stats
- RDoc::Stats::Normal
- RDoc::Stats::Quiet
- RDoc::Stats::Verbose
- RDoc::Store
- RDoc::Store::Error
- RDoc::Store::MissingFileError
- RDoc::Task
- RDoc::TestCase
- RDoc::Text
- RDoc::TokenStream
- RDoc::TomDoc
- RDoc::TopLevel
- RDocTask

No matching classes.

# RDoc::CrossReference

`RDoc::CrossReference` is a reusable way to create cross references for names.

### Constants

ALL_CROSSREF_REGEXP

  Version of `CROSSREF_REGEXP` used when `--hyperlink-all` is specified.

CLASS_REGEXP_STR

  Regular expression to match class references

  1. There can be a '\' in front of text to suppress the cross-reference

  2. There can be a '::' in front of class names to reference from the top-level namespace.

  3. The method can be followed by parenthesis (not recommended)

CROSSREF_REGEXP

  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.

METHOD_REGEXP_STR

  Regular expression to match method references.

  See `CLASS_REGEXP_STR`

### Attributes

seen[RW]

Hash of references that have been looked-up to their replacements

### Public Class Methods

new(context) click to toggle source

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

### Public Instance Methods

resolve(name, text) click to toggle source

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