Class: RDocF95::Markup::ToHtmlCrossref
- Defined in:
- lib/rdoc-f95/markup/to_html_crossref.rb
Overview
Subclass of the RDocF95::Markup::ToHtml class that supports looking up words in the AllReferences list. Those that are found (like AllReferences in this comment) will be hyperlinked
Direct Known Subclasses
Constant Summary
Constants inherited from ToHtml
RDocF95::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).
-
#handle_special_CROSSREFFILE(special) ⇒ Object
CROSSREFFILE is similar to CROSSREF.
-
#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 38 39 40 41 42 43 44 45 |
# File 'lib/rdoc-f95/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 and assignment in Fortran 90 or 95) \b\w+(::\w+)*[\.\#]\w+(\([\.\w+\*\/\+\-\=\<\>]+\))? # meth(**) (for operator and assignment in Fortran 90 or 95) | \#\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) # file names @markup.add_special(/( ((\/|\.\.\/|\.\/|\w)[\w\#\/\.\-\~\:]*[!?=]?) # file_name | ((\/|\.\.\/|\.\/|\w)[\w\#\/\.\-\~\:]*(\([\.\w+\*\/\+\-\=\<\>]+\))?) )/x, :CROSSREFFILE) @from_path = from_path @context = context @show_hash = show_hash @seen = {} @seen_file = {} end |
Instance Attribute Details
#context ⇒ Object
Returns the value of attribute context.
10 11 12 |
# File 'lib/rdoc-f95/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.
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 84 85 86 87 88 89 90 91 |
# File 'lib/rdoc-f95/markup/to_html_crossref.rb', line 55 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 |
#handle_special_CROSSREFFILE(special) ⇒ Object
CROSSREFFILE is similar to CROSSREF. But this pattern is hit to filenames or methods in files
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/rdoc-f95/markup/to_html_crossref.rb', line 97 def handle_special_CROSSREFFILE(special) name = special.text return @seen_file[name] if @seen_file.include? name # Find file, or method in file if /([\w\/\.].*\.\w+)[.\#](.*)/ =~ name file_name = $1 method = $2 ref = @context.find_file file_name, method else ref = @context.find_file name end out = if ref and ref.document_self then "<a href=\"#{ref.as_href(@from_path)}\">#{name}</a>" else name end @seen_file[name] = out out end |