ruby-changes:3963
From: ko1@a...
Date: Wed, 13 Feb 2008 07:23:32 +0900 (JST)
Subject: [ruby-changes:3963] drbrain - Ruby:r15453 (trunk): Separate HTML linking and crossreferencing into separate files.
drbrain 2008-02-13 07:23:00 +0900 (Wed, 13 Feb 2008) New Revision: 15453 Added files: trunk/lib/rdoc/markup/to_html_crossref.rb Removed files: trunk/lib/rdoc/markup/to_html_hyperlink.rb Modified files: trunk/ChangeLog trunk/lib/rdoc/generator.rb trunk/lib/rdoc/markup/to_html.rb Log: Separate HTML linking and crossreferencing into separate files. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=15453&r2=15452&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/lib/rdoc/markup/to_html_hyperlink.rb http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/lib/rdoc/markup/to_html_crossref.rb http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/lib/rdoc/generator.rb?r1=15453&r2=15452&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/lib/rdoc/markup/to_html.rb?r1=15453&r2=15452&diff_format=u Index: ChangeLog =================================================================== --- ChangeLog (revision 15452) +++ ChangeLog (revision 15453) @@ -1,3 +1,8 @@ +Wed Feb 13 07:21:23 2008 Eric Hodel <drbrain@s...> + + * lib/rdoc/to_html_hyperlink.rb: Moved linking to to_html.rb, move + crossref to to_html_crossref.rb + Wed Feb 13 04:15:44 2008 Nobuyoshi Nakada <nobu@r...> * parse.y (arg_concat_gen, arg_append_gen): optimize for array push. Index: lib/rdoc/generator.rb =================================================================== --- lib/rdoc/generator.rb (revision 15452) +++ lib/rdoc/generator.rb (revision 15453) @@ -1,7 +1,7 @@ require 'cgi' require 'rdoc' require 'rdoc/options' -require 'rdoc/markup/to_html_hyperlink' +require 'rdoc/markup/to_html_crossref' require 'rdoc/template' module RDoc::Generator @@ -81,7 +81,7 @@ return '' unless str unless defined? @formatter then - @formatter = RDoc::Markup::ToHtmlHyperlink.new(path, self, + @formatter = RDoc::Markup::ToHtmlCrossref.new(path, self, @options.show_hash) end Index: lib/rdoc/markup/to_html_hyperlink.rb =================================================================== --- lib/rdoc/markup/to_html_hyperlink.rb (revision 15452) +++ lib/rdoc/markup/to_html_hyperlink.rb (revision 15453) @@ -1,149 +0,0 @@ -require 'rdoc/markup/to_html' - -## -# 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 - -class RDoc::Markup::ToHtmlHyperlink < RDoc::Markup::ToHtml - - attr_accessor :context - - ## - # We need to record the html path of our caller so we can generate - # correct relative paths for any hyperlinks that we find - - 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) - - # external hyperlinks - @markup.add_special(/((link:|https?:|mailto:|ftp:|www\.)\S+\w)/, :HYPERLINK) - - # and links of the form <text>[<url>] - @markup.add_special(/(((\{.*?\})|\b\S+?)\[\S+?\.\S+?\])/, :TIDYLINK) - - @from_path = from_path - @context = context - @show_hash = show_hash - - @seen = {} - 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 - # example, HyperlinkHtml is found, even without the Generator:: - # prefix, because we look for it in module Generator first. - - 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 - - ## - # Generate a hyperlink for url, labeled with text. Handle the - # special cases for img: and link: described under handle_special_HYPEDLINK - - def gen_url(url, text) - if url =~ /([A-Za-z]+):(.*)/ then - type = $1 - path = $2 - else - type = "http" - path = url - url = "http://#{url}" - end - - if type == "link" then - url = if path[0, 1] == '#' then # is this meaningful? - path - else - HTML.gen_url @from_path, path - end - end - - if (type == "http" or type == "link") and - url =~ /\.(gif|png|jpg|jpeg|bmp)$/ then - "<img src=\"#{url}\" />" - else - "<a href=\"#{url}\">#{text.sub(%r{^#{type}:/*}, '')}</a>" - 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. - - 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] - - def handle_special_TIDYLINK(special) - text = special.text - - return text unless text =~ /\{(.*?)\}\[(.*?)\]/ or text =~ /(\S+)\[(.*?)\]/ - - label = $1 - url = $2 - gen_url url, label - end - -end - Index: lib/rdoc/markup/to_html.rb =================================================================== --- lib/rdoc/markup/to_html.rb (revision 15452) +++ lib/rdoc/markup/to_html.rb (revision 15453) @@ -20,10 +20,73 @@ def initialize super + # external hyperlinks + @markup.add_special(/((link:|https?:|mailto:|ftp:|www\.)\S+\w)/, :HYPERLINK) + + # and links of the form <text>[<url>] + @markup.add_special(/(((\{.*?\})|\b\S+?)\[\S+?\.\S+?\])/, :TIDYLINK) + init_tags end ## + # Generate a hyperlink for url, labeled with text. Handle the + # special cases for img: and link: described under handle_special_HYPEDLINK + + def gen_url(url, text) + if url =~ /([A-Za-z]+):(.*)/ then + type = $1 + path = $2 + else + type = "http" + path = url + url = "http://#{url}" + end + + if type == "link" then + url = if path[0, 1] == '#' then # is this meaningful? + path + else + HTML.gen_url @from_path, path + end + end + + if (type == "http" or type == "link") and + url =~ /\.(gif|png|jpg|jpeg|bmp)$/ then + "<img src=\"#{url}\" />" + else + "<a href=\"#{url}\">#{text.sub(%r{^#{type}:/*}, '')}</a>" + 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. + + 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] or {long label}[url] + + def handle_special_TIDYLINK(special) + text = special.text + + return text unless text =~ /\{(.*?)\}\[(.*?)\]/ or text =~ /(\S+)\[(.*?)\]/ + + label = $1 + url = $2 + gen_url url, label + end + + ## # Set up the standard mapping of attributes to HTML tags def init_tags Index: lib/rdoc/markup/to_html_crossref.rb =================================================================== --- lib/rdoc/markup/to_html_crossref.rb (revision 0) +++ lib/rdoc/markup/to_html_crossref.rb (revision 15453) @@ -0,0 +1,86 @@ +require 'rdoc/markup/to_html' + +## +# 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 + +class RDoc::Markup::ToHtmlCrossref < RDoc::Markup::ToHtml + + attr_accessor :context + + ## + # We need to record the html path of our caller so we can generate + # correct relative paths for any hyperlinks that we find + + 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 + + ## + # 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. + + 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 + +end + Property changes on: lib/rdoc/markup/to_html_crossref.rb ___________________________________________________________________ Name: svn:eol-style + LF Name: svn:keywords + Author Date Id Revision -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/