From b797fdc7e88c5ad7552f1c95081ad3c60507e3ee Mon Sep 17 00:00:00 2001 From: drbrain Date: Tue, 12 Feb 2008 22:23:00 +0000 Subject: [PATCH] Separate HTML linking and crossreferencing into separate files. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15453 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 ++ lib/rdoc/generator.rb | 4 +- lib/rdoc/markup/to_html.rb | 63 ++++++++++++++++++ ..._html_hyperlink.rb => to_html_crossref.rb} | 65 +------------------ 4 files changed, 71 insertions(+), 66 deletions(-) rename lib/rdoc/markup/{to_html_hyperlink.rb => to_html_crossref.rb} (58%) diff --git a/ChangeLog b/ChangeLog index f0ae8dfb4e..f314a39e35 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Wed Feb 13 07:21:23 2008 Eric Hodel + + * 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 * parse.y (arg_concat_gen, arg_append_gen): optimize for array push. diff --git a/lib/rdoc/generator.rb b/lib/rdoc/generator.rb index 0e5b4a8cc0..9859a3244f 100644 --- a/lib/rdoc/generator.rb +++ b/lib/rdoc/generator.rb @@ -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 @@ module RDoc::Generator 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 diff --git a/lib/rdoc/markup/to_html.rb b/lib/rdoc/markup/to_html.rb index 4fe16f8e91..3a500a4f0e 100644 --- a/lib/rdoc/markup/to_html.rb +++ b/lib/rdoc/markup/to_html.rb @@ -20,9 +20,72 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter def initialize super + # external hyperlinks + @markup.add_special(/((link:|https?:|mailto:|ftp:|www\.)\S+\w)/, :HYPERLINK) + + # and links of the form [] + @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 + "" + else + "#{text.sub(%r{^#{type}:/*}, '')}" + 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 + # tag. Otherwise a conventional 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 + # #{text.sub(%r{^#{type}:/*}, '')}" - 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 - # tag. Otherwise a conventional 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 - #