@@ -96,8 +96,21 @@ class RDoc::Parser::C < RDoc::Parser
9696
9797 parse_files_matching ( /\. (?:([CcHh])\1 ?|c([+xp])\2 |y)\z / )
9898
99- @@enclosure_classes = { }
100- @@known_bodies = { }
99+ ##
100+ # C file the parser is parsing
101+
102+ attr_accessor :content
103+
104+ ##
105+ # Resets cross-file state. Call when parsing different projects that need
106+ # separate documentation.
107+
108+ def self . reset
109+ @@enclosure_classes = { }
110+ @@known_bodies = { }
111+ end
112+
113+ reset
101114
102115 ##
103116 # Prepare to parse a C file
@@ -365,25 +378,18 @@ def find_class(raw_name, name)
365378
366379 def find_class_comment ( class_name , class_meth )
367380 comment = nil
381+
368382 if @content =~ %r{((?>/\* .*?\* /\s +))
369383 (static\s +)?void\s +Init_#{ class_name } \s *(?:_\( \s *)?\( \s *(?:void\s *)\) }xmi then
370384 comment = $1
371- elsif @content =~ %r{Document-(?:class|module):\s #{ class_name } \s *?(?:<\s +[:,\w ]+)?\n ((?>.*?\* /))}m
385+ elsif @content =~ %r{Document-(?:class|module):\s +#{ class_name } \s *?(?:<\s +[:,\w ]+)?\n ((?>.*?\* /))}m then
386+ comment = $1
387+ elsif @content =~ %r{((?>/\* .*?\* /\s +))
388+ ([\w \. \s ]+\s * = \s +)?rb_define_(class|module).*?"(#{ class_name } )"}xm then
372389 comment = $1
373- else
374- if @content =~ /rb_define_(class|module)/m then
375- class_name = class_name . split ( "::" ) . last
376- comments = [ ]
377- @content . split ( /(\/ \* .*?\* \/ )\s *?\n /m ) . each_with_index do |chunk , index |
378- comments [ index ] = chunk
379- if chunk =~ /rb_define_(class|module).*?"(#{ class_name } )"/m then
380- comment = comments [ index -1 ]
381- break
382- end
383- end
384- end
385390 end
386- class_meth . comment = mangle_comment ( comment ) if comment
391+
392+ class_meth . comment = mangle_comment comment if comment
387393 end
388394
389395 ##
@@ -492,9 +498,10 @@ def handle_class_module(var_name, class_mod, class_name, parent, in_module)
492498 @stats . add_module cm
493499 end
494500
495- cm . record_location ( enclosure . toplevel )
501+ cm . record_location enclosure . toplevel
502+
503+ find_class_comment cm . full_name , cm
496504
497- find_class_comment ( cm . full_name , cm )
498505 @classes [ var_name ] = cm
499506 @@enclosure_classes [ var_name ] = cm
500507 @known_classes [ var_name ] = cm . full_name
0 commit comments