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/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 +- 8 files changed, 145 insertions(+), 64 deletions(-) create mode 100644 lib/rdoc/markup/raw.rb (limited to 'lib/rdoc/markup') 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 -- cgit v1.2.3