class RDoc::Markup::ToHtmlCrossref
def handle_special_CROSSREF(special)
def handle_special_CROSSREF(special) name = special.text # 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/ return @seen[name] if @seen.include? name lookup = name name = name[0, 1] unless @show_hash if name[0, 1] == '#' # Find class, module, or method in class or module. # # Do not, however, use an if/elsif/else chain to do so. Instead, test # each possible pattern until one matches. The reason for this is that a # string like "YAML.txt" could be the txt() class method of class YAML (in # which case it would match the first pattern, which splits the string # into container and method components and looks up both) or a filename # (in which case it would match the last pattern, which just checks # whether the string as a whole is a known symbol). if /#{CLASS_REGEXP_STR}([.#]|::)#{METHOD_REGEXP_STR}/ =~ lookup then container = $1 type = $2 type = '#' if type == '.' method = "#{type}#{$3}" ref = @context.find_symbol container, method end ref = @context.find_symbol lookup unless ref out = if lookup == '\\' then lookup elsif lookup =~ /^\\/ then $' elsif ref and ref.document_self then "<a href=\"#{ref.as_href @from_path}\">#{name}</a>" else name end @seen[name] = out out end
def initialize(from_path, context, show_hash)
def initialize(from_path, context, show_hash) raise ArgumentError, 'from_path cannot be nil' if from_path.nil? super() @markup.add_special(CROSSREF_REGEXP, :CROSSREF) @from_path = from_path @context = context @show_hash = show_hash @seen = {} end