Class: Generators::HyperlinkHtml

Class | Generators::HyperlinkHtml
In: | rdoc/generators/html_generator.rb
Parent: | SM::ToHtml

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

### Methods

gen_url handle_special_CROSSREF handle_special_HYPERLINK handle_special_TIDYLINK new

### Public Class methods

new(from_path, context)

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

[Source]

    # 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)

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

[Source]

    # File rdoc/generators/html_generator.rb, line 135
        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)

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.

[Source]

    # 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

          if /([A-Z].*)[.\#](.*)/ =~ 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

handle_special_HYPERLINK(special)

And we’re invoked with a potential external hyperlink mailto: just gets inserted. http: links are checked to see if they reference an image. If so, that image gets inserted using an <img> tag. Otherwise a conventional <a href> is used. We also support a special type of hyperlink, link:, which is a reference to a local file whose path is relative to the —op directory.

[Source]

    # File rdoc/generators/html_generator.rb, line 169
        def handle_special_HYPERLINK(special)
          url = special.text
          gen_url(url, url)
        end

handle_special_TIDYLINK(special)

HEre’s a hypedlink where the label is different to the URL

     <label>[url]

[Source]

    # File rdoc/generators/html_generator.rb, line 178
        def handle_special_TIDYLINK(special)
          text = special.text
    #      unless text =~ /(\S+)\[(.*?)\]/
          unless text =~ /\{(.*?)\}\[(.*?)\]/ or text =~ /(\S+)\[(.*?)\]/
            return text
          end
          label = $1
          url   = $2
          gen_url(url, label)
        end

[Validate]