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
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
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
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
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
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.
# File rdoc/generators/html_generator.rb, line 174 def handle_special_HYPERLINK(special) url = special.text gen_url(url, url) end
HEre's a hypedlink where the label is different to the URL
<label>[url]
# File rdoc/generators/html_generator.rb, line 183 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