From 336a8301f725bd8fbf5f1e0c4fee162382a76d0f Mon Sep 17 00:00:00 2001 From: drbrain Date: Tue, 27 Apr 2010 03:45:22 +0000 Subject: Import RDoc 2.5.7. Fixes #1318 and ruby-core:29780 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27509 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/rdoc/known_classes.rb | 1 + lib/rdoc/markup.rb | 12 +++---- lib/rdoc/markup/formatter_test_case.rb | 12 +++++++ lib/rdoc/markup/paragraph.rb | 57 +---------------------------- lib/rdoc/markup/parser.rb | 1 + lib/rdoc/markup/preprocess.rb | 64 +++++++++++++++++++++++++++++---- lib/rdoc/markup/raw.rb | 65 ++++++++++++++++++++++++++++++++++ lib/rdoc/markup/to_html.rb | 4 +++ lib/rdoc/markup/to_rdoc.rb | 4 +++ lib/rdoc/markup/verbatim.rb | 2 +- lib/rdoc/options.rb | 5 +++ lib/rdoc/parser/c.rb | 5 +-- lib/rdoc/parser/ruby.rb | 5 +-- lib/rdoc/parser/simple.rb | 5 +-- 14 files changed, 159 insertions(+), 83 deletions(-) create mode 100644 lib/rdoc/markup/raw.rb (limited to 'lib/rdoc') diff --git a/lib/rdoc/known_classes.rb b/lib/rdoc/known_classes.rb index dbb1802f5a..720a35f497 100644 --- a/lib/rdoc/known_classes.rb +++ b/lib/rdoc/known_classes.rb @@ -5,6 +5,7 @@ module RDoc KNOWN_CLASSES = { "rb_cArray" => "Array", + "rb_cBasicObject" => "BasicObject", "rb_cBignum" => "Bignum", "rb_cClass" => "Class", "rb_cData" => "Data", diff --git a/lib/rdoc/markup.rb b/lib/rdoc/markup.rb index 8176e90447..32c8179e0d 100644 --- a/lib/rdoc/markup.rb +++ b/lib/rdoc/markup.rb @@ -107,15 +107,13 @@ class RDoc::Markup end ## - # We take a string, split it into lines, work out the type of each line, - # and from there deduce groups of lines (for example all lines in a - # paragraph). We then invoke the output formatter using a Visitor to - # display the result. + # We take +text+, parse it then invoke the output +formatter+ using a + # Visitor to render the result. - def convert(str, op) - document = RDoc::Markup::Parser.parse str + def convert text, formatter + document = RDoc::Markup::Parser.parse text - document.accept op + document.accept formatter end end diff --git a/lib/rdoc/markup/formatter_test_case.rb b/lib/rdoc/markup/formatter_test_case.rb index 9b9d7cf000..26c8d63332 100644 --- a/lib/rdoc/markup/formatter_test_case.rb +++ b/lib/rdoc/markup/formatter_test_case.rb @@ -87,6 +87,18 @@ class RDoc::Markup::FormatterTestCase < MiniTest::Unit::TestCase accept_verbatim end + def test_accept_raw + @to.start_accepting + + @to.accept_raw @RM::Raw.new("", + "
NameCount", + "
a1", + "
b2", + "
") + + accept_raw + end + def test_accept_rule @to.start_accepting diff --git a/lib/rdoc/markup/paragraph.rb b/lib/rdoc/markup/paragraph.rb index bc23423dfc..a9923ed24d 100644 --- a/lib/rdoc/markup/paragraph.rb +++ b/lib/rdoc/markup/paragraph.rb @@ -1,66 +1,11 @@ ## # A Paragraph of text -class RDoc::Markup::Paragraph - - ## - # The component parts of the list - - attr_reader :parts - - ## - # Creates a new Paragraph containing +parts+ - - def initialize *parts - @parts = [] - @parts.push(*parts) - end - - ## - # Appends +text+ to the Paragraph - - def << text - @parts << text - end - - def == other # :nodoc: - self.class == other.class and text == other.text - end +class RDoc::Markup::Paragraph < RDoc::Markup::Raw def accept visitor visitor.accept_paragraph self end - ## - # Appends +other+'s parts into this Paragraph - - def merge other - @parts.push(*other.parts) - end - - def pretty_print q # :nodoc: - self.class.name =~ /.*::(\w{4})/i - - q.group 2, "[#{$1.downcase}: ", ']' do - q.seplist @parts do |part| - q.pp part - end - end - end - - ## - # Appends +texts+ onto this Paragraph - - def push *texts - self.parts.push(*texts) - end - - ## - # The text of this paragraph - - def text - @parts.join ' ' - end - end diff --git a/lib/rdoc/markup/parser.rb b/lib/rdoc/markup/parser.rb index 166d8f89f7..c214f74782 100644 --- a/lib/rdoc/markup/parser.rb +++ b/lib/rdoc/markup/parser.rb @@ -522,6 +522,7 @@ require 'rdoc/markup/document' require 'rdoc/markup/heading' require 'rdoc/markup/list' require 'rdoc/markup/list_item' +require 'rdoc/markup/raw' require 'rdoc/markup/paragraph' require 'rdoc/markup/rule' require 'rdoc/markup/verbatim' diff --git a/lib/rdoc/markup/preprocess.rb b/lib/rdoc/markup/preprocess.rb index f3925cc692..cefb498916 100644 --- a/lib/rdoc/markup/preprocess.rb +++ b/lib/rdoc/markup/preprocess.rb @@ -4,9 +4,30 @@ require 'rdoc/markup' # Handle common directives that can occur in a block of text: # # : include : filename +# +# RDoc plugin authors can register additional directives to be handled through +# RDoc::Markup::PreProcess::register class RDoc::Markup::PreProcess + @registered = {} + + ## + # Registers +directive+ as one handled by RDoc. If a block is given the + # directive will be replaced by the result of the block, otherwise the + # directive will be removed from the processed text. + + def self.register directive, &block + @registered[directive] = block + end + + ## + # Registered directives + + def self.registered + @registered + end + ## # Creates a new pre-processor for +input_file_name+ that will look for # included files in +include_path+ @@ -17,10 +38,20 @@ class RDoc::Markup::PreProcess end ## - # Look for common options in a chunk of text. Options that we don't handle - # are yielded to the caller. - - def handle(text) + # Look for directives in a chunk of +text+. + # + # Options that we don't handle are yielded. If the block returns false the + # directive is restored to the text. If the block returns nil or no block + # was given the directive is handled according to the registered directives. + # If a String was returned the directive is replaced with the string. + # + # If no matching directive was registered the directive is restored to the + # text. + # + # If +code_object+ is given and the param is set as metadata on the + # +code_object+. See RDoc::CodeObject#metadata + + def handle text, code_object = nil text.gsub!(/^([ \t]*#?[ \t]*):(\w+):([ \t]*)(.+)?\n/) do next $& if $3.empty? and $4 and $4[0, 1] == ':' @@ -34,11 +65,26 @@ class RDoc::Markup::PreProcess include_file filename, prefix else - result = yield directive, param - result = "#{prefix}:#{directive}: #{param}\n" unless result + result = yield directive, param if block_given? + + case result + when nil then + code_object.metadata[directive] = param if code_object + if RDoc::Markup::PreProcess.registered.include? directive then + handler = RDoc::Markup::PreProcess.registered[directive] + result = handler.call directive, param if handler + else + result = "#{prefix}:#{directive}: #{param}\n" + end + when false then + result = "#{prefix}:#{directive}: #{param}\n" + end + result end end + + text end ## @@ -46,7 +92,11 @@ class RDoc::Markup::PreProcess def include_file(name, indent) if full_name = find_include_file(name) then - content = File.binread full_name + content = if defined?(Encoding) then + File.binread full_name + else + File.read full_name + end # HACK determine content type and force encoding content = content.sub(/\A# .*coding[=:].*$/, '').lstrip diff --git a/lib/rdoc/markup/raw.rb b/lib/rdoc/markup/raw.rb new file mode 100644 index 0000000000..1124be7cc8 --- /dev/null +++ b/lib/rdoc/markup/raw.rb @@ -0,0 +1,65 @@ +## +# A section of text that is added to the output document as-is + +class RDoc::Markup::Raw + + ## + # The component parts of the list + + attr_reader :parts + + ## + # Creates a new Raw containing +parts+ + + def initialize *parts + @parts = [] + @parts.push(*parts) + end + + ## + # Appends +text+ + + def << text + @parts << text + end + + def == other # :nodoc: + self.class == other.class and text == other.text + end + + def accept visitor + visitor.accept_raw self + end + + ## + # Appends +other+'s parts + + def merge other + @parts.push(*other.parts) + end + + def pretty_print q # :nodoc: + self.class.name =~ /.*::(\w{4})/i + + q.group 2, "[#{$1.downcase}: ", ']' do + q.seplist @parts do |part| + q.pp part + end + end + end + + ## + # Appends +texts+ onto this Paragraph + + def push *texts + self.parts.push(*texts) + end + + ## + # The raw text + + def text + @parts.join ' ' + end + +end diff --git a/lib/rdoc/markup/to_html.rb b/lib/rdoc/markup/to_html.rb index 66c0ee3d30..74e3137eb2 100644 --- a/lib/rdoc/markup/to_html.rb +++ b/lib/rdoc/markup/to_html.rb @@ -227,6 +227,10 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter @res << convert_heading(heading.level, @am.flow(heading.text)) end + def accept_raw raw + @res << raw.parts.join("\n") + end + private ## diff --git a/lib/rdoc/markup/to_rdoc.rb b/lib/rdoc/markup/to_rdoc.rb index 97c7d0c984..867715bb1e 100644 --- a/lib/rdoc/markup/to_rdoc.rb +++ b/lib/rdoc/markup/to_rdoc.rb @@ -127,6 +127,10 @@ class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter wrap attributes(paragraph.text) end + def accept_raw raw + @res << raw.parts.join("\n") + end + def accept_rule rule use_prefix or @res << ' ' * @indent @res << '-' * (@width - @indent) diff --git a/lib/rdoc/markup/verbatim.rb b/lib/rdoc/markup/verbatim.rb index faf539a723..c684d78765 100644 --- a/lib/rdoc/markup/verbatim.rb +++ b/lib/rdoc/markup/verbatim.rb @@ -1,7 +1,7 @@ ## # A section of verbatim text -class RDoc::Markup::Verbatim < RDoc::Markup::Paragraph +class RDoc::Markup::Verbatim < RDoc::Markup::Raw def accept visitor visitor.accept_verbatim self diff --git a/lib/rdoc/options.rb b/lib/rdoc/options.rb index 7b3a23ca5c..90415f0aa4 100644 --- a/lib/rdoc/options.rb +++ b/lib/rdoc/options.rb @@ -366,6 +366,11 @@ Usage: #{opt.program_name} [options] [names...] end end + if @pipe and not argv.empty? then + @pipe = false + ignored << '-p (with files)' + end + unless ignored.empty? or quiet then $stderr.puts "invalid options: #{ignored.join ', '}" $stderr.puts '(invalid options are ignored)' diff --git a/lib/rdoc/parser/c.rb b/lib/rdoc/parser/c.rb index 05b1e77925..f30167aafc 100644 --- a/lib/rdoc/parser/c.rb +++ b/lib/rdoc/parser/c.rb @@ -661,7 +661,7 @@ class RDoc::Parser::C < RDoc::Parser def look_for_directives_in(context, comment) preprocess = RDoc::Markup::PreProcess.new @file_name, @options.rdoc_include - preprocess.handle comment do |directive, param| + preprocess.handle comment, context do |directive, param| case directive when 'main' then @options.main_page = param @@ -669,9 +669,6 @@ class RDoc::Parser::C < RDoc::Parser when 'title' then @options.title = param '' - else - context.metadata[directive] = param - false end end diff --git a/lib/rdoc/parser/ruby.rb b/lib/rdoc/parser/ruby.rb index c8bab57607..1876c339fa 100644 --- a/lib/rdoc/parser/ruby.rb +++ b/lib/rdoc/parser/ruby.rb @@ -379,7 +379,7 @@ class RDoc::Parser::Ruby < RDoc::Parser def look_for_directives_in(context, comment) preprocess = RDoc::Markup::PreProcess.new @file_name, @options.rdoc_include - preprocess.handle comment do |directive, param| + preprocess.handle comment, context do |directive, param| case directive when 'enddoc' then throw :enddoc @@ -403,9 +403,6 @@ class RDoc::Parser::Ruby < RDoc::Parser when 'title' then @options.title = param '' - else - @top_level.metadata[directive] = param - false end end diff --git a/lib/rdoc/parser/simple.rb b/lib/rdoc/parser/simple.rb index 25fa3c5159..e99d2d4319 100644 --- a/lib/rdoc/parser/simple.rb +++ b/lib/rdoc/parser/simple.rb @@ -17,10 +17,7 @@ class RDoc::Parser::Simple < RDoc::Parser preprocess = RDoc::Markup::PreProcess.new @file_name, @options.rdoc_include - preprocess.handle @content do |directive, param| - top_level.metadata[directive] = param - false - end + preprocess.handle @content, @top_level end ## -- cgit v1.2.3