* 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
This commit is contained in:
drbrain 2011-06-28 02:28:25 +00:00
Родитель 41ab31e67a
Коммит 84ece95163
10 изменённых файлов: 201 добавлений и 111 удалений

Просмотреть файл

@ -1,3 +1,8 @@
Tue Jun 28 11:17:28 2011 Eric Hodel <drbrain@segment7.net>
* lib/rdoc: Update to RDoc 3.7 (final)
* NEWS: ditto
Tue Jun 28 10:18:42 2011 NARUSE, Yui <naruse@ruby-lang.org>
* process.c (rb_daemon): fix wrong #endif position.

2
NEWS
Просмотреть файл

@ -199,7 +199,7 @@ with all sufficient information, see the ChangeLog file.
https://github.com/jimweirich/rake/blob/master/CHANGES
* RDoc
* RDoc has been upgraded from 2.5.8 to 3.6.1. For full release notes see
* RDoc has been upgraded from 2.5.8 to 3.7. For full release notes see
http://docs.seattlerb.org/rdoc/History_txt.html
* rexml

Просмотреть файл

@ -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

Просмотреть файл

@ -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
##

Просмотреть файл

@ -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

Просмотреть файл

@ -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
##

Просмотреть файл

@ -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
@ -504,6 +504,70 @@ Options may also be set in the 'RI' environment variable.
def class_cache # :nodoc:
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
@ -523,6 +587,29 @@ Options may also be set in the 'RI' environment variable.
@classes
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
@ -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.
@ -1003,6 +998,40 @@ Options may also be set in the 'RI' environment variable.
found.reject do |path, methods| methods.empty? end
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+

Просмотреть файл

@ -56,5 +56,36 @@ the time
assert_equal expected, out
end
def test_convert_document
doc = RDoc::Markup::Parser.parse <<-STR
now is
the time
hello
dave
1. l1
2. l2
STR
m = RDoc::Markup.new
tt = RDoc::Markup::ToTest.new m
out = m.convert doc, tt
expected = [
"now is the time",
"\n",
" hello\n dave\n",
"1: ",
"l1",
"1: ",
"l2",
]
assert_equal expected, out
end
end

Просмотреть файл

@ -55,6 +55,12 @@ class TestRDocMarkupDocument < MiniTest::Unit::TestCase
refute_empty @d
end
def test_empty_eh_document
d = @RM::Document.new @d
assert_empty d
end
def test_equals2
d2 = @RM::Document.new

Просмотреть файл

@ -43,7 +43,7 @@ contents of a string.
# FIXME 1.9 fix on windoze
# preprocessor uses binread, so line endings are \r\n
expected.gsub!("\n", "\r\n") if
RUBY_VERSION =~ /^1.9/ && RUBY_PLATFORM =~ /mswin|mingw/
RUBY_VERSION < "1.9.3" && RUBY_PLATFORM =~ /mswin|mingw/
assert_equal expected, content
end
@ -67,7 +67,7 @@ contents of a string.
# FIXME 1.9 fix on windoze
# preprocessor uses binread, so line endings are \r\n
expected.gsub!("\n", "\r\n") if
RUBY_VERSION =~ /^1.9/ && RUBY_PLATFORM =~ /mswin|mingw/
RUBY_VERSION < "1.9.3" && RUBY_PLATFORM =~ /mswin|mingw/
assert_equal expected, content
end