Class: RDoc::Markup::ToHtmlCrossref
- Defined in:
- lib/rdoc/markup/to_html_crossref.rb
Overview
Subclass of the RDoc::Markup::ToHtml class that supports looking up words in the AllReferences list. Those that are found (like AllReferences in this comment) will be hyperlinked
Constant Summary
Constants inherited from ToHtml
RDoc::Markup::ToHtml::LIST_TYPE_TO_HTML
Instance Attribute Summary collapse
-
#context ⇒ Object
Returns the value of attribute context.
Instance Method Summary collapse
-
#handle_special_CROSSREF(special) ⇒ Object
We’re invoked when any text matches the CROSSREF pattern (defined in MarkUp).
-
#initialize(from_path, context, show_hash) ⇒ ToHtmlCrossref
constructor
We need to record the html path of our caller so we can generate correct relative paths for any hyperlinks that we find.
Methods inherited from ToHtml
#accept_blank_line, #accept_heading, #accept_list_end, #accept_list_item, #accept_list_start, #accept_paragraph, #accept_rule, #accept_verbatim, #add_tag, #annotate, #end_accepting, #gen_url, #handle_special_HYPERLINK, #handle_special_TIDYLINK, #init_tags, #start_accepting, #wrap
Methods inherited from Formatter
Constructor Details
#initialize(from_path, context, show_hash) ⇒ ToHtmlCrossref
We need to record the html path of our caller so we can generate correct relative paths for any hyperlinks that we find
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/rdoc/markup/to_html_crossref.rb', line 16 def initialize(from_path, context, show_hash) super() # class names, variable names, or instance variables @markup.add_special(/( # A::B.meth(**) (for operator in Fortran95) \w+(::\w+)*[.\#]\w+(\([\.\w+\*\/\+\-\=\<\>]+\))? # meth(**) (for operator in Fortran95) | \#\w+(\([.\w\*\/\+\-\=\<\>]+\))? | \b([A-Z]\w*(::\w+)*[.\#]\w+) # A::B.meth | \b([A-Z]\w+(::\w+)*) # A::B | \#\w+[!?=]? # #meth_name | \\?\b\w+([_\/\.]+\w+)*[!?=]? # meth_name )/x, :CROSSREF) @from_path = from_path @context = context @show_hash = show_hash @seen = {} end |
Instance Attribute Details
#context ⇒ Object
Returns the value of attribute context.
10 11 12 |
# File 'lib/rdoc/markup/to_html_crossref.rb', line 10 def context @context end |
Instance Method Details
#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 Generator
-
prefix, because we look for it in module Generator first.
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/rdoc/markup/to_html_crossref.rb', line 47 def handle_special_CROSSREF(special) name = special.text return @seen[name] if @seen.include? name if name[0,1] == '#' then lookup = name[1..-1] name = lookup unless @show_hash else lookup = name end # Find class, module, or method in class or module. if /([A-Z]\w*)[.\#](\w+[!?=]?)/ =~ lookup then container = $1 method = $2 ref = @context.find_symbol container, method elsif /([A-Za-z]\w*)[.\#](\w+(\([\.\w+\*\/\+\-\=\<\>]+\))?)/ =~ lookup then container = $1 method = $2 ref = @context.find_symbol container, method else ref = @context.find_symbol lookup end out = if lookup =~ /^\\/ then $' elsif ref and ref.document_self then "<a href=\"#{ref.as_href(@from_path)}\">#{name}</a>" else name end @seen[name] = out out end |