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
            

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 Documenting-ruby.org.

blog comments powered by Disqus