Class: Generators::HyperlinkHtml

Inherits:
SM::ToHtml
  • Object
show all
Defined in:
lib/generators/templates/application/merb_core/doc/rdoc/generators/merb_generator.rb,
lib/generators/templates/application/merb_stack/doc/rdoc/generators/merb_generator.rb

Overview

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

Instance Method Summary collapse

Constructor Details

#initialize(from_path, context) ⇒ HyperlinkHtml

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



88
89
90
91
92
93
94
95
# File 'lib/generators/templates/application/merb_core/doc/rdoc/generators/merb_generator.rb', line 88

def initialize(from_path, context)
    super()
    @from_path = from_path

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

Instance Method Details

#gen_url(url, text) ⇒ Object

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



131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# File 'lib/generators/templates/application/merb_core/doc/rdoc/generators/merb_generator.rb', line 131

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"
        url = path
    end

    if (type == "http" || type == "link") && url =~ /\.(gif|png|jpg|jpeg|bmp)$/
        "<img src=\"#{url}\">"
    elsif (type == "http" || type == "link")
        "<a href=\"#{url}\" target=\"_blank\">#{text}</a>"
    else
        "<a href=\"#\" onclick=\"jsHref('#{url}');\">#{text.sub(%r{^#{type}:/*}, '')}</a>"

    end
end

#handle_special_CROSSREF(special) ⇒ Object

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.



104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/generators/templates/application/merb_core/doc/rdoc/generators/merb_generator.rb', line 104

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=\"index.html?a=#{ref.aref}&name=#{name}\">#{name}</a>"
    else
        name #it does not need to be a link
    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.



162
163
164
165
# File 'lib/generators/templates/application/merb_core/doc/rdoc/generators/merb_generator.rb', line 162

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]


171
172
173
174
175
176
177
178
179
180
# File 'lib/generators/templates/application/merb_core/doc/rdoc/generators/merb_generator.rb', line 171

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