summaryrefslogtreecommitdiff
path: root/lib/rdoc
diff options
context:
space:
mode:
authordrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-06-28 02:28:25 +0000
committerdrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-06-28 02:28:25 +0000
commit84ece951630c61eddab8be47b80fc1a7f774175f (patch)
treec843f17ba485f0263f39d797d8a3b1517d1ddb8b /lib/rdoc
parent41ab31e67a747e5db91a7ef4502a54cdf0525163 (diff)
* lib/rdoc: Update to RDoc 3.7 (final)
* NEWS: ditto git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32264 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rdoc')
-rw-r--r--lib/rdoc/markup.rb13
-rw-r--r--lib/rdoc/markup/document.rb11
-rw-r--r--lib/rdoc/markup/inline.rb9
-rw-r--r--lib/rdoc/markup/to_ansi.rb6
-rw-r--r--lib/rdoc/ri/driver.rb225
5 files changed, 156 insertions, 108 deletions
diff --git a/lib/rdoc/markup.rb b/lib/rdoc/markup.rb
index bc28522615..6122fcac65 100644
--- a/lib/rdoc/markup.rb
+++ b/lib/rdoc/markup.rb
@@ -616,11 +616,16 @@ class RDoc::Markup
end
##
- # We take +text+, parse it then invoke the output +formatter+ using a
- # Visitor to render the result.
+ # We take +input+, parse it if necessary, then invoke the output +formatter+
+ # using a Visitor to render the result.
- def convert text, formatter
- document = RDoc::Markup::Parser.parse text
+ def convert input, formatter
+ document = case input
+ when RDoc::Markup::Document then
+ input
+ else
+ RDoc::Markup::Parser.parse input
+ end
document.accept formatter
end
diff --git a/lib/rdoc/markup/document.rb b/lib/rdoc/markup/document.rb
index b4e070285e..6fbef33ae3 100644
--- a/lib/rdoc/markup/document.rb
+++ b/lib/rdoc/markup/document.rb
@@ -56,7 +56,12 @@ class RDoc::Markup::Document
visitor.start_accepting
@parts.each do |item|
- item.accept visitor
+ case item
+ when RDoc::Markup::Document then # HACK
+ visitor.accept_document item
+ else
+ item.accept visitor
+ end
end
visitor.end_accepting
@@ -66,7 +71,9 @@ class RDoc::Markup::Document
# Does this document have no parts?
def empty?
- @parts.empty?
+ @parts.empty? or
+ (@parts.length == 1 and RDoc::Markup::Document === @parts.first and
+ @parts.first.empty?)
end
##
diff --git a/lib/rdoc/markup/inline.rb b/lib/rdoc/markup/inline.rb
index 932ed536b7..cf598d1583 100644
--- a/lib/rdoc/markup/inline.rb
+++ b/lib/rdoc/markup/inline.rb
@@ -60,7 +60,14 @@ class RDoc::Markup
class AttrChanger
def to_s # :nodoc:
- "Attr: +#{Attribute.as_string turn_on}/-#{Attribute.as_string turn_on}"
+ "Attr: +#{Attribute.as_string turn_on}/-#{Attribute.as_string turn_off}"
+ end
+
+ def inspect # :nodoc:
+ "+%s/-%s" % [
+ Attribute.as_string(turn_on),
+ Attribute.as_string(turn_off),
+ ]
end
end
diff --git a/lib/rdoc/markup/to_ansi.rb b/lib/rdoc/markup/to_ansi.rb
index 108a038075..1e8a0289d9 100644
--- a/lib/rdoc/markup/to_ansi.rb
+++ b/lib/rdoc/markup/to_ansi.rb
@@ -12,9 +12,9 @@ class RDoc::Markup::ToAnsi < RDoc::Markup::ToRdoc
super
@headings.clear
- @headings[1] = ["\e[1;32m", "\e[m"]
- @headings[2] = ["\e[4;32m", "\e[m"]
- @headings[3] = ["\e[32m", "\e[m"]
+ @headings[1] = ["\e[1;32m", "\e[m"] # bold
+ @headings[2] = ["\e[4;32m", "\e[m"] # underline
+ @headings[3] = ["\e[32m", "\e[m"] # just green
end
##
diff --git a/lib/rdoc/ri/driver.rb b/lib/rdoc/ri/driver.rb
index 2c6f2f48e2..a99f96cb56 100644
--- a/lib/rdoc/ri/driver.rb
+++ b/lib/rdoc/ri/driver.rb
@@ -344,8 +344,8 @@ Options may also be set in the 'RI' environment variable.
@stores = []
RDoc::RI::Paths.each(options[:use_system], options[:use_site],
- options[:use_home], options[:use_gems],
- *options[:extra_doc_dirs]) do |path, type|
+ options[:use_home], options[:use_gems],
+ *options[:extra_doc_dirs]) do |path, type|
@doc_dirs << path
store = RDoc::RI::Store.new path, type
@@ -505,6 +505,70 @@ Options may also be set in the 'RI' environment variable.
end
##
+ # Builds a RDoc::Markup::Document from +found+, +klasess+ and +includes+
+
+ def class_document name, found, klasses, includes
+ also_in = []
+
+ out = RDoc::Markup::Document.new
+
+ add_class out, name, klasses
+
+ add_includes out, includes
+
+ found.each do |store, klass|
+ comment = klass.comment
+ class_methods = store.class_methods[klass.full_name]
+ instance_methods = store.instance_methods[klass.full_name]
+ attributes = store.attributes[klass.full_name]
+
+ if comment.empty? and !(instance_methods or class_methods) then
+ also_in << store
+ next
+ end
+
+ add_from out, store
+
+ unless comment.empty? then
+ out << RDoc::Markup::Rule.new(1)
+ out << comment
+ end
+
+ if class_methods or instance_methods or not klass.constants.empty? then
+ out << RDoc::Markup::Rule.new(1)
+ end
+
+ unless klass.constants.empty? then
+ out << RDoc::Markup::Heading.new(1, "Constants:")
+ out << RDoc::Markup::BlankLine.new
+ list = RDoc::Markup::List.new :NOTE
+
+ constants = klass.constants.sort_by { |constant| constant.name }
+
+ list.push(*constants.map do |constant|
+ parts = constant.comment.parts if constant.comment
+ parts << RDoc::Markup::Paragraph.new('[not documented]') if
+ parts.empty?
+
+ RDoc::Markup::ListItem.new(constant.name, *parts)
+ end)
+
+ out << list
+ end
+
+ add_method_list out, class_methods, 'Class methods'
+ add_method_list out, instance_methods, 'Instance methods'
+ add_method_list out, attributes, 'Attributes'
+
+ out << RDoc::Markup::BlankLine.new
+ end
+
+ add_also_in out, also_in
+
+ out
+ end
+
+ ##
# Hash mapping a known class or module to the stores it can be loaded from
def classes
@@ -524,6 +588,29 @@ Options may also be set in the 'RI' environment variable.
end
##
+ # Returns the stores wherin +name+ is found along with the classes and
+ # includes that match it
+
+ def classes_and_includes_for name
+ klasses = []
+ includes = []
+
+ found = @stores.map do |store|
+ begin
+ klass = store.load_class name
+ klasses << klass
+ includes << [klass.includes, store] if klass.includes
+ [store, klass]
+ rescue Errno::ENOENT
+ end
+ end.compact
+
+ includes.reject! do |modules,| modules.empty? end
+
+ [found, klasses, includes]
+ end
+
+ ##
# Completes +name+ based on the caches. For Readline
def complete name
@@ -582,79 +669,11 @@ Options may also be set in the 'RI' environment variable.
def display_class name
return if name =~ /#|\./
- klasses = []
- includes = []
-
- found = @stores.map do |store|
- begin
- klass = store.load_class name
- klasses << klass
- includes << [klass.includes, store] if klass.includes
- [store, klass]
- rescue Errno::ENOENT
- end
- end.compact
+ found, klasses, includes = classes_and_includes_for name
return if found.empty?
- also_in = []
-
- includes.reject! do |modules,| modules.empty? end
-
- out = RDoc::Markup::Document.new
-
- add_class out, name, klasses
-
- add_includes out, includes
-
- found.each do |store, klass|
- comment = klass.comment
- class_methods = store.class_methods[klass.full_name]
- instance_methods = store.instance_methods[klass.full_name]
- attributes = store.attributes[klass.full_name]
-
- if comment.empty? and !(instance_methods or class_methods) then
- also_in << store
- next
- end
-
- add_from out, store
-
- unless comment.empty? then
- out << RDoc::Markup::Rule.new(1)
- out << comment
- end
-
- if class_methods or instance_methods or not klass.constants.empty? then
- out << RDoc::Markup::Rule.new(1)
- end
-
- unless klass.constants.empty? then
- out << RDoc::Markup::Heading.new(1, "Constants:")
- out << RDoc::Markup::BlankLine.new
- list = RDoc::Markup::List.new :NOTE
-
- constants = klass.constants.sort_by { |constant| constant.name }
-
- list.push(*constants.map do |constant|
- parts = constant.comment.parts if constant.comment
- parts << RDoc::Markup::Paragraph.new('[not documented]') if
- parts.empty?
-
- RDoc::Markup::ListItem.new(constant.name, *parts)
- end)
-
- out << list
- end
-
- add_method_list out, class_methods, 'Class methods'
- add_method_list out, instance_methods, 'Instance methods'
- add_method_list out, attributes, 'Attributes'
-
- out << RDoc::Markup::BlankLine.new
- end
-
- add_also_in out, also_in
+ out = class_document name, found, klasses, includes
display out
end
@@ -669,32 +688,7 @@ Options may also be set in the 'RI' environment variable.
filtered = filter_methods found, name
- out = RDoc::Markup::Document.new
-
- out << RDoc::Markup::Heading.new(1, name)
- out << RDoc::Markup::BlankLine.new
-
- filtered.each do |store, methods|
- methods.each do |method|
- out << RDoc::Markup::Paragraph.new("(from #{store.friendly_path})")
-
- unless name =~ /^#{Regexp.escape method.parent_name}/ then
- out << RDoc::Markup::Heading.new(3, "Implementation from #{method.parent_name}")
- end
- out << RDoc::Markup::Rule.new(1)
-
- if method.arglists then
- arglists = method.arglists.chomp.split "\n"
- arglists = arglists.map { |line| line + "\n" }
- out << RDoc::Markup::Verbatim.new(*arglists)
- out << RDoc::Markup::Rule.new(1)
- end
-
- out << RDoc::Markup::BlankLine.new
- out << method.comment
- out << RDoc::Markup::BlankLine.new
- end
- end
+ out = method_document name, filtered
display out
end
@@ -736,6 +730,7 @@ Options may also be set in the 'RI' environment variable.
display_name name
end
end
+
##
# Expands abbreviated klass +klass+ into a fully-qualified class. "Zl::Da"
# will be expanded to Zlib::DataError.
@@ -1004,6 +999,40 @@ Options may also be set in the 'RI' environment variable.
end
##
+ # Builds a RDoc::Markup::Document from +found+, +klasess+ and +includes+
+
+ def method_document name, filtered
+ out = RDoc::Markup::Document.new
+
+ out << RDoc::Markup::Heading.new(1, name)
+ out << RDoc::Markup::BlankLine.new
+
+ filtered.each do |store, methods|
+ methods.each do |method|
+ out << RDoc::Markup::Paragraph.new("(from #{store.friendly_path})")
+
+ unless name =~ /^#{Regexp.escape method.parent_name}/ then
+ out << RDoc::Markup::Heading.new(3, "Implementation from #{method.parent_name}")
+ end
+ out << RDoc::Markup::Rule.new(1)
+
+ if method.arglists then
+ arglists = method.arglists.chomp.split "\n"
+ arglists = arglists.map { |line| line + "\n" }
+ out << RDoc::Markup::Verbatim.new(*arglists)
+ out << RDoc::Markup::Rule.new(1)
+ end
+
+ out << RDoc::Markup::BlankLine.new
+ out << method.comment
+ out << RDoc::Markup::BlankLine.new
+ end
+ end
+
+ out
+ end
+
+ ##
# Returns the type of method (:both, :instance, :class) for +selector+
def method_type selector