In Files

  • rdoc/generators/html_generator.rb

Files

Class/Module Index [+]

Quicksearch

Generators::HyperlinkHtml

Subclass of the SM::ToHtml class that supports looking up words in the AllReferences list. Those that are found (like AllReferences in this comment) will be hyperlinked

Public Class Methods

new(from_path, context) click to toggle source

We need to record the html path of our caller so we can generate correct relative paths for any hyperlinks that we find

 
               # File rdoc/generators/html_generator.rb, line 92
def initialize(from_path, context)
  super()
  @from_path = from_path

  @parent_name = context.parent_name
  @parent_name += "::" if @parent_name
  @context = context
end
            

Public Instance Methods

gen_url(url, text) click to toggle source

Generate a hyperlink for url, labeled with text. Handle the special cases for img: and link: described under handle_special_HYPEDLINK

 
               # File rdoc/generators/html_generator.rb, line 140
def gen_url(url, text)
  if url =~ /([A-Za-z]+):(.*)/
    type = $1
    path = $2
  else
    type = "http"
    path = url
    url  = "http://#{url}"
  end

  if type == "link"
    if path[0,1] == '#'     # is this meaningful?
      url = path
    else
      url = HTMLGenerator.gen_url(@from_path, path)
    end
  end

  if (type == "http" || type == "link") && 
      url =~ /\.(gif|png|jpg|jpeg|bmp)$/

    "<img src=\"#{url}\" />"
  else
    "<a href=\"#{url}\">#{text.sub(%r{^#{type}:/*}, '')}</a>"
  end
end
            
handle_special_CROSSREF(special) click to toggle source

We're invoked when any text matches the CROSSREF pattern (defined in MarkUp). If we fine the corresponding reference, generate a hyperlink. If the name we're looking for contains no punctuation, we look for it up the module/class chain. For

example, HyperlinkHtml is found, even without the Generators

prefix, because we look for it in module Generators first.

 
               # File rdoc/generators/html_generator.rb, line 108
def handle_special_CROSSREF(special)
  name = special.text
  if name[0,1] == '#'
    lookup = name[1..-1]
    name = lookup unless Options.instance.show_hash
  else
    lookup = name
  end

  # Find class, module, or method in class or module.
  if /([A-Z]\w*)[.\#](\w+[!?=]?)/ =~ lookup
    container = $1
    method = $2
    ref = @context.find_symbol(container, method)
  elsif /([A-Za-z]\w*)[.\#](\w+(\([\.\w+\*\/\+\-\=\<\>]+\))?)/ =~ lookup
    container = $1
    method = $2
    ref = @context.find_symbol(container, method)
  else
    ref = @context.find_symbol(lookup)
  end

  if ref and ref.document_self
    "<a href=\"#{ref.as_href(@from_path)}\">#{name}</a>"
  else
    name
  end
end