diff options
author | drbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-12-16 23:07:49 +0000 |
---|---|---|
committer | drbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-12-16 23:07:49 +0000 |
commit | 810008293fd8ce3a9d3d62dcf2f2229b98c2bd49 (patch) | |
tree | 7e06c2b0a08a3b29bf6a1c1cfd44a352fb2d82e2 /lib/rdoc/markup/formatter.rb | |
parent | 10295ab2ff87b1189dcbe129a07a692417db53f6 (diff) |
* lib/rdoc.rb: Updated VERSION.
* lib/rdoc/markup/attribute_manager.rb: Removed useless empty check.
* lib/rdoc/markup/to_markdown.rb: Support links from other formats.
* lib/rdoc/markup/formatter.rb: ditto.
* lib/rdoc/markup/to_html.rb: ditto.
* test/rdoc/test_rdoc_markup_formatter.rb: Test for above.
* test/rdoc/test_rdoc_markup_to_html.rb: ditto.
* test/rdoc/test_rdoc_markup_to_markdown.rb: ditto.
* lib/rdoc/rd/block_parser.rb: Improved footnote display. Worked
around bug in footnote conversion to Markdown.
* test/rdoc/test_rdoc_rd_block_parser.rb: Test for above.
* lib/rdoc/rd/inline_parser.rb: Fixed bug with emphasis inside
verbatim.
* test/rdoc/test_rdoc_rd_inline_parser.rb: Test for above.
* test/rdoc/test_rdoc_parser_rd.rb: Use mu_pp, use shortcut methods.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38418 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rdoc/markup/formatter.rb')
-rw-r--r-- | lib/rdoc/markup/formatter.rb | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/lib/rdoc/markup/formatter.rb b/lib/rdoc/markup/formatter.rb index a5f639c28c..b668746c7a 100644 --- a/lib/rdoc/markup/formatter.rb +++ b/lib/rdoc/markup/formatter.rb @@ -18,6 +18,30 @@ class RDoc::Markup::Formatter InlineTag = Struct.new(:bit, :on, :off) ## + # Converts a target url to one that is relative to a given path + + def self.gen_relative_url path, target + from = File.dirname path + to, to_file = File.split target + + from = from.split "/" + to = to.split "/" + + from.delete '.' + to.delete '.' + + while from.size > 0 and to.size > 0 and from[0] == to[0] do + from.shift + to.shift + end + + from.fill ".." + from.concat to + from << to_file + File.join(*from) + end + + ## # Creates a new Formatter def initialize options, markup = nil @@ -35,6 +59,7 @@ class RDoc::Markup::Formatter @tt_bit = @attributes.bitmap_for :TT @hard_break = '' + @from_path = '.' end ## @@ -52,6 +77,26 @@ class RDoc::Markup::Formatter end ## + # Adds a special for links of the form rdoc-...: + + def add_special_RDOCLINK + @markup.add_special(/rdoc-[a-z]+:\S+/, :RDOCLINK) + end + + ## + # Adds a special for links of the form {<text>}[<url>] and <word>[<url>] + + def add_special_TIDYLINK + @markup.add_special(/(?: + \{.*?\} | # multi-word label + \b[^\s{}]+? # single-word label + ) + + \[\S+?\] # link target + /x, :TIDYLINK) + end + + ## # Add a new set of tags for an attribute. We allow separate start and end # tags for flexibility @@ -179,6 +224,36 @@ class RDoc::Markup::Formatter end ## + # Extracts and a scheme, url and an anchor id from +url+ and returns them. + + def parse_url url + case url + when /^rdoc-label:([^:]*)(?::(.*))?/ then + scheme = 'link' + path = "##{$1}" + id = " id=\"#{$2}\"" if $2 + when /([A-Za-z]+):(.*)/ then + scheme = $1.downcase + path = $2 + when /^#/ then + else + scheme = 'http' + path = url + url = "http://#{url}" + end + + if scheme == 'link' then + url = if path[0, 1] == '#' then # is this meaningful? + path + else + self.class.gen_relative_url @from_path, path + end + end + + [scheme, url, id] + end + + ## # Is +tag+ a tt tag? def tt? tag |