summaryrefslogtreecommitdiff
path: root/lib/rdoc/parsers
diff options
context:
space:
mode:
authordave <dave@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-04-02 01:20:58 +0000
committerdave <dave@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-04-02 01:20:58 +0000
commit354d68f80b1e92f58c13004e13dec48b179d2b4d (patch)
tree90dc42fcaf210fab6d590538d642a90da03c37c3 /lib/rdoc/parsers
parent88e112024905251acaf8dacd0a1ef254060f4a52 (diff)
Fix parse bug with toplevel methods. Allow RDoc in =begin rdoc/=end comments (experimental)
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@6066 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rdoc/parsers')
-rw-r--r--lib/rdoc/parsers/parse_rb.rb55
1 files changed, 33 insertions, 22 deletions
diff --git a/lib/rdoc/parsers/parse_rb.rb b/lib/rdoc/parsers/parse_rb.rb
index e5276bf6c9..9988b71337 100644
--- a/lib/rdoc/parsers/parse_rb.rb
+++ b/lib/rdoc/parsers/parse_rb.rb
@@ -624,7 +624,14 @@ class RubyLex
ungetc
@ltype = nil
- Token(TkRD_COMMENT).set_text(str)
+
+ if str =~ /\A=begin\s+rdoc/i
+ str.sub!(/\A=begin.*\n/, '')
+ str.sub!(/^=end.*/m, '')
+ Token(TkCOMMENT).set_text(str)
+ else
+ Token(TkRD_COMMENT)#.set_text(str)
+ end
end
@OP.def_rule("\n") do
@@ -1394,7 +1401,7 @@ module RDoc
@read = []
catch(:eof) do
begin
- parse_statements(@top_level)
+ parse_toplevel_statements(@top_level)
rescue Exception => e
$stderr.puts "\n\n"
$stderr.puts "RDoc failure in #@input_file_name at or around " +
@@ -1546,26 +1553,30 @@ module RDoc
res
end
- def parse_statements(container, single=NORMAL, current_method = nil)
+ def parse_toplevel_statements(container)
+ comment = collect_first_comment
+ look_for_directives_in(container, comment)
+ container.comment = comment unless comment.empty?
+ parse_statements(container, NORMAL, nil, comment)
+ end
+
+ def parse_statements(container, single=NORMAL, current_method=nil, comment='')
nest = 1
save_visibility = container.visibility
-
- if container.kind_of?(TopLevel)
- comment = collect_first_comment
- look_for_directives_in(container, comment)
- container.comment = comment unless comment.empty?
- else
- comment = ''
- end
+
+# if container.kind_of?(TopLevel)
+# else
+# comment = ''
+# end
non_comment_seen = true
-
+
while tk = get_tk
-
+
keep_comment = false
-
+
non_comment_seen = true unless tk.kind_of?(TkCOMMENT)
-
+
# $stderr.puts "===== #{tk.inspect}"
# blank_line_seen = true
# while tk.kind_of?(TkNL)
@@ -1713,7 +1724,7 @@ module RDoc
end
end
-
+
def parse_class(container, single, tk, comment, &block)
progress("c")
@@ -1867,7 +1878,7 @@ module RDoc
@stats.num_methods += 1
line_no = tk.line_no
column = tk.char_no
-
+
start_collecting_tokens
add_token(tk)
add_token_listener(self)
@@ -1949,20 +1960,20 @@ module RDoc
meth.visibility = :public
end
end
-
+
parse_statements(container, single, meth)
-
+
remove_token_listener(meth)
-
+
meth.comment = comment
end
-
+
def skip_method(container)
meth = AnyMethod.new("", "anon")
parse_method_parameters(meth)
parse_statements(container, false, meth)
end
-
+
# Capture the method's parameters. Along the way,
# look for a comment containing
#