rdoc 4.2.1 → 6.3.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rdoc might be problematic. Click here for more details.

Files changed (277) hide show
  1. checksums.yaml +5 -5
  2. data/CONTRIBUTING.rdoc +8 -7
  3. data/Gemfile +12 -0
  4. data/History.rdoc +48 -4
  5. data/LEGAL.rdoc +2 -2
  6. data/README.rdoc +5 -5
  7. data/Rakefile +73 -155
  8. data/bin/console +7 -0
  9. data/bin/setup +6 -0
  10. data/{bin → exe}/rdoc +0 -0
  11. data/{bin → exe}/ri +0 -0
  12. data/lib/rdoc/alias.rb +1 -0
  13. data/lib/rdoc/anon_class.rb +1 -0
  14. data/lib/rdoc/any_method.rb +59 -14
  15. data/lib/rdoc/attr.rb +1 -0
  16. data/lib/rdoc/class_module.rb +5 -2
  17. data/lib/rdoc/code_object.rb +3 -11
  18. data/lib/rdoc/code_objects.rb +1 -0
  19. data/lib/rdoc/comment.rb +32 -11
  20. data/lib/rdoc/constant.rb +3 -2
  21. data/lib/rdoc/context/section.rb +7 -13
  22. data/lib/rdoc/context.rb +78 -23
  23. data/lib/rdoc/cross_reference.rb +33 -14
  24. data/lib/rdoc/encoding.rb +92 -55
  25. data/lib/rdoc/erb_partial.rb +2 -1
  26. data/lib/rdoc/erbio.rb +8 -3
  27. data/lib/rdoc/extend.rb +1 -0
  28. data/lib/rdoc/generator/darkfish.rb +62 -32
  29. data/lib/rdoc/generator/json_index.rb +8 -5
  30. data/lib/rdoc/generator/markup.rb +3 -12
  31. data/lib/rdoc/generator/pot/message_extractor.rb +68 -0
  32. data/lib/rdoc/generator/pot/po.rb +84 -0
  33. data/lib/rdoc/generator/pot/po_entry.rb +141 -0
  34. data/lib/rdoc/generator/pot.rb +4 -3
  35. data/lib/rdoc/generator/ri.rb +1 -0
  36. data/lib/rdoc/generator/template/darkfish/_footer.rhtml +2 -2
  37. data/lib/rdoc/generator/template/darkfish/_head.rhtml +11 -8
  38. data/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml +2 -2
  39. data/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +2 -2
  40. data/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +7 -7
  41. data/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml +2 -2
  42. data/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +7 -7
  43. data/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +6 -6
  44. data/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml +5 -5
  45. data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +5 -5
  46. data/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml +5 -5
  47. data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +4 -4
  48. data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +4 -4
  49. data/lib/rdoc/generator/template/darkfish/class.rhtml +45 -47
  50. data/lib/rdoc/generator/template/darkfish/css/fonts.css +6 -6
  51. data/lib/rdoc/generator/template/darkfish/css/rdoc.css +55 -6
  52. data/lib/rdoc/generator/template/darkfish/index.rhtml +3 -4
  53. data/lib/rdoc/generator/template/darkfish/js/darkfish.js +23 -100
  54. data/lib/rdoc/generator/template/darkfish/js/search.js +32 -31
  55. data/lib/rdoc/generator/template/darkfish/servlet_root.rhtml +15 -16
  56. data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +16 -16
  57. data/lib/rdoc/generator/template/json_index/js/navigation.js +4 -41
  58. data/lib/rdoc/generator/template/json_index/js/searcher.js +7 -6
  59. data/lib/rdoc/generator.rb +1 -1
  60. data/lib/rdoc/ghost_method.rb +1 -0
  61. data/lib/rdoc/i18n/locale.rb +2 -1
  62. data/lib/rdoc/i18n/text.rb +5 -4
  63. data/lib/rdoc/i18n.rb +3 -2
  64. data/lib/rdoc/include.rb +1 -0
  65. data/lib/rdoc/known_classes.rb +1 -0
  66. data/lib/rdoc/markdown/entities.rb +1 -0
  67. data/lib/rdoc/markdown/{literals_1_9.kpeg → literals.kpeg} +1 -0
  68. data/lib/rdoc/markdown/{literals_1_9.rb → literals.rb} +1 -4
  69. data/lib/rdoc/markdown.kpeg +94 -51
  70. data/lib/rdoc/markdown.rb +1171 -619
  71. data/lib/rdoc/markup/attr_changer.rb +1 -0
  72. data/lib/rdoc/markup/attr_span.rb +9 -2
  73. data/lib/rdoc/markup/attribute_manager.rb +115 -49
  74. data/lib/rdoc/markup/attributes.rb +7 -6
  75. data/lib/rdoc/markup/blank_line.rb +1 -0
  76. data/lib/rdoc/markup/block_quote.rb +1 -0
  77. data/lib/rdoc/markup/document.rb +1 -0
  78. data/lib/rdoc/markup/formatter.rb +25 -23
  79. data/lib/rdoc/markup/hard_break.rb +1 -0
  80. data/lib/rdoc/markup/heading.rb +4 -3
  81. data/lib/rdoc/markup/include.rb +1 -0
  82. data/lib/rdoc/markup/indented_paragraph.rb +1 -0
  83. data/lib/rdoc/markup/list.rb +1 -0
  84. data/lib/rdoc/markup/list_item.rb +1 -0
  85. data/lib/rdoc/markup/paragraph.rb +1 -0
  86. data/lib/rdoc/markup/parser.rb +78 -61
  87. data/lib/rdoc/markup/pre_process.rb +12 -9
  88. data/lib/rdoc/markup/raw.rb +1 -0
  89. data/lib/rdoc/markup/regexp_handling.rb +41 -0
  90. data/lib/rdoc/markup/rule.rb +1 -0
  91. data/lib/rdoc/markup/to_ansi.rb +1 -0
  92. data/lib/rdoc/markup/to_bs.rb +4 -5
  93. data/lib/rdoc/markup/to_html.rb +71 -25
  94. data/lib/rdoc/markup/to_html_crossref.rb +41 -25
  95. data/lib/rdoc/markup/to_html_snippet.rb +10 -9
  96. data/lib/rdoc/markup/to_joined_paragraph.rb +7 -31
  97. data/lib/rdoc/markup/to_label.rb +10 -9
  98. data/lib/rdoc/markup/to_markdown.rb +9 -8
  99. data/lib/rdoc/markup/to_rdoc.rb +35 -6
  100. data/lib/rdoc/markup/to_table_of_contents.rb +2 -0
  101. data/lib/rdoc/markup/to_test.rb +1 -0
  102. data/lib/rdoc/markup/to_tt_only.rb +3 -2
  103. data/lib/rdoc/markup/verbatim.rb +1 -0
  104. data/lib/rdoc/markup.rb +14 -16
  105. data/lib/rdoc/meta_method.rb +1 -0
  106. data/lib/rdoc/method_attr.rb +2 -1
  107. data/lib/rdoc/mixin.rb +1 -0
  108. data/lib/rdoc/normal_class.rb +3 -2
  109. data/lib/rdoc/normal_module.rb +1 -0
  110. data/lib/rdoc/options.rb +92 -58
  111. data/lib/rdoc/parser/c.rb +219 -223
  112. data/lib/rdoc/parser/changelog.rb +155 -18
  113. data/lib/rdoc/parser/markdown.rb +1 -0
  114. data/lib/rdoc/parser/rd.rb +1 -0
  115. data/lib/rdoc/parser/ripper_state_lex.rb +590 -0
  116. data/lib/rdoc/parser/ruby.rb +635 -468
  117. data/lib/rdoc/parser/ruby_tools.rb +33 -33
  118. data/lib/rdoc/parser/simple.rb +3 -3
  119. data/lib/rdoc/parser/text.rb +1 -0
  120. data/lib/rdoc/parser.rb +17 -50
  121. data/lib/rdoc/rd/block_parser.rb +66 -65
  122. data/lib/rdoc/rd/block_parser.ry +3 -3
  123. data/lib/rdoc/rd/inline.rb +5 -4
  124. data/lib/rdoc/rd/inline_parser.rb +52 -51
  125. data/lib/rdoc/rd/inline_parser.ry +1 -1
  126. data/lib/rdoc/rd.rb +1 -0
  127. data/lib/rdoc/rdoc.rb +68 -63
  128. data/lib/rdoc/require.rb +1 -0
  129. data/lib/rdoc/ri/driver.rb +133 -58
  130. data/lib/rdoc/ri/formatter.rb +1 -0
  131. data/lib/rdoc/ri/paths.rb +4 -20
  132. data/lib/rdoc/ri/store.rb +1 -0
  133. data/lib/rdoc/ri/task.rb +71 -0
  134. data/lib/rdoc/ri.rb +1 -0
  135. data/lib/rdoc/rubygems_hook.rb +5 -12
  136. data/lib/rdoc/servlet.rb +24 -14
  137. data/lib/rdoc/single_class.rb +1 -0
  138. data/lib/rdoc/stats/normal.rb +20 -21
  139. data/lib/rdoc/stats/quiet.rb +1 -0
  140. data/lib/rdoc/stats/verbose.rb +1 -0
  141. data/lib/rdoc/stats.rb +1 -0
  142. data/lib/rdoc/store.rb +41 -41
  143. data/lib/rdoc/task.rb +2 -3
  144. data/lib/rdoc/text.rb +19 -38
  145. data/lib/rdoc/token_stream.rb +56 -32
  146. data/lib/rdoc/tom_doc.rb +17 -11
  147. data/lib/rdoc/top_level.rb +9 -2
  148. data/lib/rdoc/version.rb +8 -0
  149. data/lib/rdoc.rb +24 -10
  150. data/man/ri.1 +247 -0
  151. data/rdoc.gemspec +248 -0
  152. metadata +43 -236
  153. data/.autotest +0 -24
  154. data/.document +0 -5
  155. data/Manifest.txt +0 -306
  156. data/lib/gauntlet_rdoc.rb +0 -84
  157. data/lib/rdoc/generator/template/darkfish/js/jquery.js +0 -4
  158. data/lib/rdoc/markdown/literals_1_8.kpeg +0 -18
  159. data/lib/rdoc/markdown/literals_1_8.rb +0 -416
  160. data/lib/rdoc/markup/formatter_test_case.rb +0 -767
  161. data/lib/rdoc/markup/inline.rb +0 -1
  162. data/lib/rdoc/markup/special.rb +0 -40
  163. data/lib/rdoc/markup/text_formatter_test_case.rb +0 -114
  164. data/lib/rdoc/ruby_lex.rb +0 -1377
  165. data/lib/rdoc/ruby_token.rb +0 -460
  166. data/lib/rdoc/test_case.rb +0 -217
  167. data/test/MarkdownTest_1.0.3/Amps and angle encoding.text +0 -21
  168. data/test/MarkdownTest_1.0.3/Auto links.text +0 -13
  169. data/test/MarkdownTest_1.0.3/Backslash escapes.text +0 -120
  170. data/test/MarkdownTest_1.0.3/Blockquotes with code blocks.text +0 -11
  171. data/test/MarkdownTest_1.0.3/Code Blocks.text +0 -14
  172. data/test/MarkdownTest_1.0.3/Code Spans.text +0 -6
  173. data/test/MarkdownTest_1.0.3/Hard-wrapped paragraphs with list-like lines.text +0 -8
  174. data/test/MarkdownTest_1.0.3/Horizontal rules.text +0 -67
  175. data/test/MarkdownTest_1.0.3/Inline HTML (Advanced).text +0 -15
  176. data/test/MarkdownTest_1.0.3/Inline HTML (Simple).text +0 -69
  177. data/test/MarkdownTest_1.0.3/Inline HTML comments.text +0 -13
  178. data/test/MarkdownTest_1.0.3/Links, inline style.text +0 -12
  179. data/test/MarkdownTest_1.0.3/Links, reference style.text +0 -71
  180. data/test/MarkdownTest_1.0.3/Links, shortcut references.text +0 -20
  181. data/test/MarkdownTest_1.0.3/Literal quotes in titles.text +0 -7
  182. data/test/MarkdownTest_1.0.3/Markdown Documentation - Basics.text +0 -306
  183. data/test/MarkdownTest_1.0.3/Markdown Documentation - Syntax.text +0 -888
  184. data/test/MarkdownTest_1.0.3/Nested blockquotes.text +0 -5
  185. data/test/MarkdownTest_1.0.3/Ordered and unordered lists.text +0 -131
  186. data/test/MarkdownTest_1.0.3/Strong and em together.text +0 -7
  187. data/test/MarkdownTest_1.0.3/Tabs.text +0 -21
  188. data/test/MarkdownTest_1.0.3/Tidyness.text +0 -5
  189. data/test/README +0 -1
  190. data/test/binary.dat +0 -0
  191. data/test/hidden.zip.txt +0 -1
  192. data/test/test.ja.largedoc +0 -3
  193. data/test/test.ja.rdoc +0 -10
  194. data/test/test.ja.txt +0 -8
  195. data/test/test.txt +0 -1
  196. data/test/test_rdoc_alias.rb +0 -13
  197. data/test/test_rdoc_any_method.rb +0 -460
  198. data/test/test_rdoc_attr.rb +0 -190
  199. data/test/test_rdoc_class_module.rb +0 -1492
  200. data/test/test_rdoc_code_object.rb +0 -450
  201. data/test/test_rdoc_comment.rb +0 -504
  202. data/test/test_rdoc_constant.rb +0 -181
  203. data/test/test_rdoc_context.rb +0 -901
  204. data/test/test_rdoc_context_section.rb +0 -130
  205. data/test/test_rdoc_cross_reference.rb +0 -192
  206. data/test/test_rdoc_encoding.rb +0 -227
  207. data/test/test_rdoc_extend.rb +0 -94
  208. data/test/test_rdoc_generator_darkfish.rb +0 -229
  209. data/test/test_rdoc_generator_json_index.rb +0 -324
  210. data/test/test_rdoc_generator_markup.rb +0 -59
  211. data/test/test_rdoc_generator_pot.rb +0 -91
  212. data/test/test_rdoc_generator_pot_po.rb +0 -51
  213. data/test/test_rdoc_generator_pot_po_entry.rb +0 -139
  214. data/test/test_rdoc_generator_ri.rb +0 -78
  215. data/test/test_rdoc_i18n_locale.rb +0 -73
  216. data/test/test_rdoc_i18n_text.rb +0 -123
  217. data/test/test_rdoc_include.rb +0 -108
  218. data/test/test_rdoc_markdown.rb +0 -980
  219. data/test/test_rdoc_markdown_test.rb +0 -1884
  220. data/test/test_rdoc_markup.rb +0 -95
  221. data/test/test_rdoc_markup_attribute_manager.rb +0 -364
  222. data/test/test_rdoc_markup_attributes.rb +0 -39
  223. data/test/test_rdoc_markup_document.rb +0 -207
  224. data/test/test_rdoc_markup_formatter.rb +0 -175
  225. data/test/test_rdoc_markup_hard_break.rb +0 -31
  226. data/test/test_rdoc_markup_heading.rb +0 -29
  227. data/test/test_rdoc_markup_include.rb +0 -19
  228. data/test/test_rdoc_markup_indented_paragraph.rb +0 -53
  229. data/test/test_rdoc_markup_paragraph.rb +0 -32
  230. data/test/test_rdoc_markup_parser.rb +0 -1680
  231. data/test/test_rdoc_markup_pre_process.rb +0 -473
  232. data/test/test_rdoc_markup_raw.rb +0 -22
  233. data/test/test_rdoc_markup_to_ansi.rb +0 -369
  234. data/test/test_rdoc_markup_to_bs.rb +0 -366
  235. data/test/test_rdoc_markup_to_html.rb +0 -662
  236. data/test/test_rdoc_markup_to_html_crossref.rb +0 -225
  237. data/test/test_rdoc_markup_to_html_snippet.rb +0 -711
  238. data/test/test_rdoc_markup_to_joined_paragraph.rb +0 -32
  239. data/test/test_rdoc_markup_to_label.rb +0 -112
  240. data/test/test_rdoc_markup_to_markdown.rb +0 -389
  241. data/test/test_rdoc_markup_to_rdoc.rb +0 -377
  242. data/test/test_rdoc_markup_to_table_of_contents.rb +0 -126
  243. data/test/test_rdoc_markup_to_tt_only.rb +0 -246
  244. data/test/test_rdoc_markup_verbatim.rb +0 -29
  245. data/test/test_rdoc_method_attr.rb +0 -193
  246. data/test/test_rdoc_normal_class.rb +0 -47
  247. data/test/test_rdoc_normal_module.rb +0 -42
  248. data/test/test_rdoc_options.rb +0 -766
  249. data/test/test_rdoc_parser.rb +0 -327
  250. data/test/test_rdoc_parser_c.rb +0 -1896
  251. data/test/test_rdoc_parser_changelog.rb +0 -315
  252. data/test/test_rdoc_parser_markdown.rb +0 -61
  253. data/test/test_rdoc_parser_rd.rb +0 -55
  254. data/test/test_rdoc_parser_ruby.rb +0 -3322
  255. data/test/test_rdoc_parser_simple.rb +0 -115
  256. data/test/test_rdoc_rd.rb +0 -30
  257. data/test/test_rdoc_rd_block_parser.rb +0 -535
  258. data/test/test_rdoc_rd_inline.rb +0 -63
  259. data/test/test_rdoc_rd_inline_parser.rb +0 -177
  260. data/test/test_rdoc_rdoc.rb +0 -455
  261. data/test/test_rdoc_require.rb +0 -25
  262. data/test/test_rdoc_ri_driver.rb +0 -1436
  263. data/test/test_rdoc_ri_paths.rb +0 -155
  264. data/test/test_rdoc_ruby_lex.rb +0 -421
  265. data/test/test_rdoc_ruby_token.rb +0 -19
  266. data/test/test_rdoc_rubygems_hook.rb +0 -251
  267. data/test/test_rdoc_servlet.rb +0 -534
  268. data/test/test_rdoc_single_class.rb +0 -20
  269. data/test/test_rdoc_stats.rb +0 -722
  270. data/test/test_rdoc_store.rb +0 -993
  271. data/test/test_rdoc_task.rb +0 -173
  272. data/test/test_rdoc_text.rb +0 -557
  273. data/test/test_rdoc_token_stream.rb +0 -42
  274. data/test/test_rdoc_tom_doc.rb +0 -520
  275. data/test/test_rdoc_top_level.rb +0 -287
  276. data/test/xref_data.rb +0 -76
  277. data/test/xref_test_case.rb +0 -67
data/lib/rdoc/parser/c.rb CHANGED
@@ -1,16 +1,17 @@
1
+ # frozen_string_literal: true
1
2
  require 'tsort'
2
3
 
3
4
  ##
4
5
  # RDoc::Parser::C attempts to parse C extension files. It looks for
5
- # the standard patterns that you find in extensions: <tt>rb_define_class,
6
- # rb_define_method</tt> and so on. It tries to find the corresponding
6
+ # the standard patterns that you find in extensions: +rb_define_class+,
7
+ # +rb_define_method+ and so on. It tries to find the corresponding
7
8
  # C source for the methods and extract comments, but if we fail
8
9
  # we don't worry too much.
9
10
  #
10
11
  # The comments associated with a Ruby method are extracted from the C
11
12
  # comment block associated with the routine that _implements_ that
12
13
  # method, that is to say the method whose name is given in the
13
- # <tt>rb_define_method</tt> call. For example, you might write:
14
+ # +rb_define_method+ call. For example, you might write:
14
15
  #
15
16
  # /*
16
17
  # * Returns a new array that is a one-dimensional flattening of this
@@ -23,8 +24,7 @@ require 'tsort'
23
24
  # * a.flatten #=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
24
25
  # */
25
26
  # static VALUE
26
- # rb_ary_flatten(ary)
27
- # VALUE ary;
27
+ # rb_ary_flatten(VALUE ary)
28
28
  # {
29
29
  # ary = rb_obj_dup(ary);
30
30
  # rb_ary_flatten_bang(ary);
@@ -34,16 +34,16 @@ require 'tsort'
34
34
  # ...
35
35
  #
36
36
  # void
37
- # Init_Array()
37
+ # Init_Array(void)
38
38
  # {
39
39
  # ...
40
40
  # rb_define_method(rb_cArray, "flatten", rb_ary_flatten, 0);
41
41
  #
42
- # Here RDoc will determine from the rb_define_method line that there's a
42
+ # Here RDoc will determine from the +rb_define_method+ line that there's a
43
43
  # method called "flatten" in class Array, and will look for the implementation
44
- # in the method rb_ary_flatten. It will then use the comment from that
44
+ # in the method +rb_ary_flatten+. It will then use the comment from that
45
45
  # method in the HTML output. This method must be in the same source file
46
- # as the rb_define_method.
46
+ # as the +rb_define_method+.
47
47
  #
48
48
  # The comment blocks may include special directives:
49
49
  #
@@ -69,15 +69,15 @@ require 'tsort'
69
69
  # [Document-variable: +name+]
70
70
  # Documentation for the named +rb_define_variable+
71
71
  #
72
- # [Document-method: +method_name+]
72
+ # [Document-method\: +method_name+]
73
73
  # Documentation for the named method. Use this when the method name is
74
74
  # unambiguous.
75
75
  #
76
- # [Document-method: <tt>ClassName::method_name<tt>]
76
+ # [Document-method\: <tt>ClassName::method_name</tt>]
77
77
  # Documentation for a singleton method in the given class. Use this when
78
78
  # the method name alone is ambiguous.
79
79
  #
80
- # [Document-method: <tt>ClassName#method_name<tt>]
80
+ # [Document-method\: <tt>ClassName#method_name</tt>]
81
81
  # Documentation for a instance method in the given class. Use this when the
82
82
  # method name alone is ambiguous.
83
83
  #
@@ -209,47 +209,6 @@ class RDoc::Parser::C < RDoc::Parser
209
209
  end
210
210
  end
211
211
 
212
- ##
213
- # Removes duplicate call-seq entries for methods using the same
214
- # implementation.
215
-
216
- def deduplicate_call_seq
217
- @methods.each do |var_name, functions|
218
- class_name = @known_classes[var_name]
219
- class_obj = find_class var_name, class_name
220
-
221
- functions.each_value do |method_names|
222
- next if method_names.length == 1
223
-
224
- method_names.each do |method_name|
225
- deduplicate_method_name class_obj, method_name
226
- end
227
- end
228
- end
229
- end
230
-
231
- ##
232
- # If two ruby methods share a C implementation (and comment) this
233
- # deduplicates the examples in the call_seq for the method to reduce
234
- # confusion in the output.
235
-
236
- def deduplicate_method_name class_obj, method_name # :nodoc:
237
- return unless
238
- method = class_obj.method_list.find { |m| m.name == method_name }
239
- return unless call_seq = method.call_seq
240
-
241
- method_name = method_name[0, 1] if method_name =~ /\A\[/
242
-
243
- entries = call_seq.split "\n"
244
-
245
- matching = entries.select do |entry|
246
- entry =~ /^\w*\.?#{Regexp.escape method_name}/ or
247
- entry =~ /\s#{Regexp.escape method_name}\s/
248
- end
249
-
250
- method.call_seq = matching.join "\n"
251
- end
252
-
253
212
  ##
254
213
  # Scans #content for rb_define_alias
255
214
 
@@ -268,23 +227,29 @@ class RDoc::Parser::C < RDoc::Parser
268
227
  end
269
228
 
270
229
  class_obj = find_class var_name, class_name
271
-
272
- al = RDoc::Alias.new '', old_name, new_name, ''
273
- al.singleton = @singleton_classes.key? var_name
274
-
275
230
  comment = find_alias_comment var_name, new_name, old_name
276
-
277
231
  comment.normalize
278
-
279
- al.comment = comment
280
-
281
- al.record_location @top_level
282
-
283
- class_obj.add_alias al
284
- @stats.add_alias al
232
+ if comment.to_s.empty? and existing_method = class_obj.method_list.find { |m| m.name == old_name}
233
+ comment = existing_method.comment
234
+ end
235
+ add_alias(var_name, class_obj, old_name, new_name, comment)
285
236
  end
286
237
  end
287
238
 
239
+ ##
240
+ # Add alias, either from a direct alias definition, or from two
241
+ # method that reference the same function.
242
+
243
+ def add_alias(var_name, class_obj, old_name, new_name, comment)
244
+ al = RDoc::Alias.new '', old_name, new_name, ''
245
+ al.singleton = @singleton_classes.key? var_name
246
+ al.comment = comment
247
+ al.record_location @top_level
248
+ class_obj.add_alias al
249
+ @stats.add_alias al
250
+ al
251
+ end
252
+
288
253
  ##
289
254
  # Scans #content for rb_attr and rb_define_attr
290
255
 
@@ -323,12 +288,100 @@ class RDoc::Parser::C < RDoc::Parser
323
288
  # Scans #content for rb_define_class, boot_defclass, rb_define_class_under
324
289
  # and rb_singleton_class
325
290
 
326
- def do_classes
327
- do_boot_defclass
328
- do_define_class
329
- do_define_class_under
330
- do_singleton_class
331
- do_struct_define_without_accessor
291
+ def do_classes_and_modules
292
+ do_boot_defclass if @file_name == "class.c"
293
+
294
+ @content.scan(
295
+ %r(
296
+ (?<var_name>[\w\.]+)\s* =
297
+ \s*rb_(?:
298
+ define_(?:
299
+ class(?: # rb_define_class(class_name_1, parent_name_1)
300
+ \s*\(
301
+ \s*"(?<class_name_1>\w+)",
302
+ \s*(?<parent_name_1>\w+)\s*
303
+ \)
304
+ |
305
+ _under\s*\( # rb_define_class_under(class_under, class_name2, parent_name2...)
306
+ \s* (?<class_under>\w+),
307
+ \s* "(?<class_name_2>\w+)",
308
+ \s*
309
+ (?:
310
+ (?<parent_name_2>[\w\*\s\(\)\.\->]+) |
311
+ rb_path2class\("(?<path>[\w:]+)"\)
312
+ )
313
+ \s*\)
314
+ )
315
+ |
316
+ module(?: # rb_define_module(module_name_1)
317
+ \s*\(
318
+ \s*"(?<module_name_1>\w+)"\s*
319
+ \)
320
+ |
321
+ _under\s*\( # rb_define_module_under(module_under, module_name_2)
322
+ \s*(?<module_under>\w+),
323
+ \s*"(?<module_name_2>\w+)"
324
+ \s*\)
325
+ )
326
+ )
327
+ |
328
+ struct_define_without_accessor\s*\( # rb_struct_define_without_accessor(class_name_3, parent_name_3, ...)
329
+ \s*"(?<class_name_3>\w+)",
330
+ \s*(?<parent_name_3>\w+),
331
+ \s*\w+, # Allocation function
332
+ (?:\s*"\w+",)* # Attributes
333
+ \s*NULL
334
+ \)
335
+ |
336
+ singleton_class\s*\( # rb_singleton_class(target_class_name)
337
+ \s*(?<target_class_name>\w+)
338
+ \)
339
+ )
340
+ )mx
341
+ ) do
342
+ class_name = $~[:class_name_1]
343
+ type = :class
344
+ if class_name
345
+ # rb_define_class(class_name_1, parent_name_1)
346
+ parent_name = $~[:parent_name_1]
347
+ #under = nil
348
+ else
349
+ class_name = $~[:class_name_2]
350
+ if class_name
351
+ # rb_define_class_under(class_under, class_name2, parent_name2...)
352
+ parent_name = $~[:parent_name_2] || $~[:path]
353
+ under = $~[:class_under]
354
+ else
355
+ class_name = $~[:class_name_3]
356
+ if class_name
357
+ # rb_struct_define_without_accessor(class_name_3, parent_name_3, ...)
358
+ parent_name = $~[:parent_name_3]
359
+ #under = nil
360
+ else
361
+ type = :module
362
+ class_name = $~[:module_name_1]
363
+ #parent_name = nil
364
+ if class_name
365
+ # rb_define_module(module_name_1)
366
+ #under = nil
367
+ else
368
+ class_name = $~[:module_name_2]
369
+ if class_name
370
+ # rb_define_module_under(module_under, module_name_1)
371
+ under = $~[:module_under]
372
+ else
373
+ # rb_singleton_class(target_class_name)
374
+ target_class_name = $~[:target_class_name]
375
+ handle_singleton $~[:var_name], target_class_name
376
+ next
377
+ end
378
+ end
379
+ end
380
+ end
381
+ end
382
+
383
+ handle_class_module($~[:var_name], type, class_name, parent_name, under)
384
+ end
332
385
  end
333
386
 
334
387
  ##
@@ -377,65 +430,6 @@ class RDoc::Parser::C < RDoc::Parser
377
430
  end
378
431
  end
379
432
 
380
- ##
381
- # Scans #content for rb_define_class
382
-
383
- def do_define_class
384
- # The '.' lets us handle SWIG-generated files
385
- @content.scan(/([\w\.]+)\s* = \s*rb_define_class\s*
386
- \(
387
- \s*"(\w+)",
388
- \s*(\w+)\s*
389
- \)/mx) do |var_name, class_name, parent|
390
- handle_class_module(var_name, :class, class_name, parent, nil)
391
- end
392
- end
393
-
394
- ##
395
- # Scans #content for rb_define_class_under
396
-
397
- def do_define_class_under
398
- @content.scan(/([\w\.]+)\s* = # var_name
399
- \s*rb_define_class_under\s*
400
- \(
401
- \s* (\w+), # under
402
- \s* "(\w+)", # class_name
403
- \s*
404
- (?:
405
- ([\w\*\s\(\)\.\->]+) | # parent_name
406
- rb_path2class\("([\w:]+)"\) # path
407
- )
408
- \s*
409
- \)
410
- /mx) do |var_name, under, class_name, parent_name, path|
411
- parent = path || parent_name
412
-
413
- handle_class_module var_name, :class, class_name, parent, under
414
- end
415
- end
416
-
417
- ##
418
- # Scans #content for rb_define_module
419
-
420
- def do_define_module
421
- @content.scan(/(\w+)\s* = \s*rb_define_module\s*\(\s*"(\w+)"\s*\)/mx) do
422
- |var_name, class_name|
423
- handle_class_module(var_name, :module, class_name, nil, nil)
424
- end
425
- end
426
-
427
- ##
428
- # Scans #content for rb_define_module_under
429
-
430
- def do_define_module_under
431
- @content.scan(/(\w+)\s* = \s*rb_define_module_under\s*
432
- \(
433
- \s*(\w+),
434
- \s*"(\w+)"
435
- \s*\)/mx) do |var_name, in_module, class_name|
436
- handle_class_module(var_name, :module, class_name, nil, in_module)
437
- end
438
- end
439
433
 
440
434
  ##
441
435
  # Scans #content for rb_include_module
@@ -445,7 +439,7 @@ class RDoc::Parser::C < RDoc::Parser
445
439
  next unless cls = @classes[c]
446
440
  m = @known_classes[m] || m
447
441
 
448
- comment = RDoc::Comment.new '', @top_level
442
+ comment = RDoc::Comment.new '', @top_level, :c
449
443
  incl = cls.add_include RDoc::Include.new(m, comment)
450
444
  incl.record_location @top_level
451
445
  end
@@ -517,42 +511,6 @@ class RDoc::Parser::C < RDoc::Parser
517
511
  end
518
512
  end
519
513
 
520
- ##
521
- # Scans #content for rb_define_module and rb_define_module_under
522
-
523
- def do_modules
524
- do_define_module
525
- do_define_module_under
526
- end
527
-
528
- ##
529
- # Scans #content for rb_singleton_class
530
-
531
- def do_singleton_class
532
- @content.scan(/([\w\.]+)\s* = \s*rb_singleton_class\s*
533
- \(
534
- \s*(\w+)
535
- \s*\)/mx) do |sclass_var, class_var|
536
- handle_singleton sclass_var, class_var
537
- end
538
- end
539
-
540
- ##
541
- # Scans #content for struct_define_without_accessor
542
-
543
- def do_struct_define_without_accessor
544
- @content.scan(/([\w\.]+)\s* = \s*rb_struct_define_without_accessor\s*
545
- \(
546
- \s*"(\w+)", # Class name
547
- \s*(\w+), # Parent class
548
- \s*\w+, # Allocation function
549
- (\s*"\w+",)* # Attributes
550
- \s*NULL
551
- \)/mx) do |var_name, class_name, parent|
552
- handle_class_module(var_name, :class, class_name, parent, nil)
553
- end
554
- end
555
-
556
514
  ##
557
515
  # Finds the comment for an alias on +class_name+ from +new_name+ to
558
516
  # +old_name+
@@ -563,7 +521,7 @@ class RDoc::Parser::C < RDoc::Parser
563
521
  \s*"#{Regexp.escape new_name}"\s*,
564
522
  \s*"#{Regexp.escape old_name}"\s*\);%xm
565
523
 
566
- RDoc::Comment.new($1 || '', @top_level)
524
+ RDoc::Comment.new($1 || '', @top_level, :c)
567
525
  end
568
526
 
569
527
  ##
@@ -602,21 +560,49 @@ class RDoc::Parser::C < RDoc::Parser
602
560
  ''
603
561
  end
604
562
 
605
- RDoc::Comment.new comment, @top_level
563
+ RDoc::Comment.new comment, @top_level, :c
564
+ end
565
+
566
+ ##
567
+ # Generate a Ruby-method table
568
+
569
+ def gen_body_table file_content
570
+ table = {}
571
+ file_content.scan(%r{
572
+ ((?>/\*.*?\*/\s*)?)
573
+ ((?:(?:\w+)\s+)?
574
+ (?:intern\s+)?VALUE\s+(\w+)
575
+ \s*(?:\([^)]*\))(?:[^\);]|$))
576
+ | ((?>/\*.*?\*/\s*))^\s*(\#\s*define\s+(\w+)\s+(\w+))
577
+ | ^\s*\#\s*define\s+(\w+)\s+(\w+)
578
+ }xm) do
579
+ case
580
+ when $1
581
+ table[$3] = [:func_def, $1, $2, $~.offset(2)] if !table[$3] || table[$3][0] != :func_def
582
+ when $4
583
+ table[$6] = [:macro_def, $4, $5, $~.offset(5), $7] if !table[$6] || table[$6][0] == :macro_alias
584
+ when $8
585
+ table[$8] ||= [:macro_alias, $9]
586
+ end
587
+ end
588
+ table
606
589
  end
607
590
 
608
591
  ##
609
592
  # Find the C code corresponding to a Ruby method
610
593
 
611
594
  def find_body class_name, meth_name, meth_obj, file_content, quiet = false
612
- case file_content
613
- when %r%((?>/\*.*?\*/\s*)?)
614
- ((?:(?:\w+)\s+)?
615
- (?:intern\s+)?VALUE\s+#{meth_name}
616
- \s*(\([^)]*\))([^;]|$))%xm then
617
- comment = RDoc::Comment.new $1, @top_level
618
- body = $2
619
- offset, = $~.offset(2)
595
+ if file_content
596
+ @body_table ||= {}
597
+ @body_table[file_content] ||= gen_body_table file_content
598
+ type, *args = @body_table[file_content][meth_name]
599
+ end
600
+
601
+ case type
602
+ when :func_def
603
+ comment = RDoc::Comment.new args[0], @top_level, :c
604
+ body = args[1]
605
+ offset, = args[2]
620
606
 
621
607
  comment.remove_private if comment
622
608
 
@@ -637,38 +623,34 @@ class RDoc::Parser::C < RDoc::Parser
637
623
 
638
624
  #meth_obj.params = params
639
625
  meth_obj.start_collecting_tokens
640
- tk = RDoc::RubyToken::Token.new nil, 1, 1
641
- tk.set_text body
626
+ tk = { :line_no => 1, :char_no => 1, :text => body }
642
627
  meth_obj.add_token tk
643
628
  meth_obj.comment = comment
644
- meth_obj.offset = offset
645
629
  meth_obj.line = file_content[0, offset].count("\n") + 1
646
630
 
647
631
  body
648
- when %r%((?>/\*.*?\*/\s*))^\s*(\#\s*define\s+#{meth_name}\s+(\w+))%m then
649
- comment = RDoc::Comment.new $1, @top_level
650
- body = $2
651
- offset = $~.offset(2).first
632
+ when :macro_def
633
+ comment = RDoc::Comment.new args[0], @top_level, :c
634
+ body = args[1]
635
+ offset, = args[2]
652
636
 
653
- find_body class_name, $3, meth_obj, file_content, true
637
+ find_body class_name, args[3], meth_obj, file_content, true
654
638
 
655
639
  comment.normalize
656
640
  find_modifiers comment, meth_obj
657
641
 
658
642
  meth_obj.start_collecting_tokens
659
- tk = RDoc::RubyToken::Token.new nil, 1, 1
660
- tk.set_text body
643
+ tk = { :line_no => 1, :char_no => 1, :text => body }
661
644
  meth_obj.add_token tk
662
645
  meth_obj.comment = comment
663
- meth_obj.offset = offset
664
646
  meth_obj.line = file_content[0, offset].count("\n") + 1
665
647
 
666
648
  body
667
- when %r%^\s*\#\s*define\s+#{meth_name}\s+(\w+)%m then
649
+ when :macro_alias
668
650
  # with no comment we hope the aliased definition has it and use it's
669
651
  # definition
670
652
 
671
- body = find_body(class_name, $1, meth_obj, file_content, true)
653
+ body = find_body(class_name, args[0], meth_obj, file_content, true)
672
654
 
673
655
  return body if body
674
656
 
@@ -755,7 +737,7 @@ class RDoc::Parser::C < RDoc::Parser
755
737
  comment = ''
756
738
  end
757
739
 
758
- comment = RDoc::Comment.new comment, @top_level
740
+ comment = RDoc::Comment.new comment, @top_level, :c
759
741
  comment.normalize
760
742
 
761
743
  look_for_directives_in class_mod, comment
@@ -763,30 +745,44 @@ class RDoc::Parser::C < RDoc::Parser
763
745
  class_mod.add_comment comment, @top_level
764
746
  end
765
747
 
748
+ ##
749
+ # Generate a const table
750
+
751
+ def gen_const_table file_content
752
+ table = {}
753
+ @content.scan(%r{
754
+ ((?>^\s*/\*.*?\*/\s+))
755
+ rb_define_(\w+)\((?:\s*(?:\w+),)?\s*
756
+ "(\w+)"\s*,
757
+ .*?\)\s*;
758
+ | Document-(?:const|global|variable):\s
759
+ ((?:\w+::)*\w+)
760
+ \s*?\n((?>.*?\*/))
761
+ }mxi) do
762
+ case
763
+ when $1 then table[[$2, $3]] = $1
764
+ when $4 then table[$4] = "/*\n" + $5
765
+ end
766
+ end
767
+ table
768
+ end
769
+
766
770
  ##
767
771
  # Finds a comment matching +type+ and +const_name+ either above the
768
772
  # comment or in the matching Document- section.
769
773
 
770
774
  def find_const_comment(type, const_name, class_name = nil)
771
- comment = if @content =~ %r%((?>^\s*/\*.*?\*/\s+))
772
- rb_define_#{type}\((?:\s*(\w+),)?\s*
773
- "#{const_name}"\s*,
774
- .*?\)\s*;%xmi then
775
- $1
776
- elsif class_name and
777
- @content =~ %r%Document-(?:const|global|variable):\s
778
- #{class_name}::#{const_name}
779
- \s*?\n((?>.*?\*/))%xm then
780
- "/*\n#{$1}"
781
- elsif @content =~ %r%Document-(?:const|global|variable):
782
- \s#{const_name}
783
- \s*?\n((?>.*?\*/))%xm then
784
- "/*\n#{$1}"
785
- else
786
- ''
787
- end
775
+ @const_table ||= {}
776
+ @const_table[@content] ||= gen_const_table @content
777
+ table = @const_table[@content]
788
778
 
789
- RDoc::Comment.new comment, @top_level
779
+ comment =
780
+ table[[type, const_name]] ||
781
+ (class_name && table[class_name + "::" + const_name]) ||
782
+ table[const_name] ||
783
+ ''
784
+
785
+ RDoc::Comment.new comment, @top_level, :c
790
786
  end
791
787
 
792
788
  ##
@@ -817,7 +813,7 @@ class RDoc::Parser::C < RDoc::Parser
817
813
 
818
814
  return unless comment
819
815
 
820
- RDoc::Comment.new comment, @top_level
816
+ RDoc::Comment.new comment, @top_level, :c
821
817
  end
822
818
 
823
819
  ##
@@ -826,8 +822,8 @@ class RDoc::Parser::C < RDoc::Parser
826
822
 
827
823
  def handle_attr(var_name, attr_name, read, write)
828
824
  rw = ''
829
- rw << 'R' if '1' == read
830
- rw << 'W' if '1' == write
825
+ rw += 'R' if '1' == read
826
+ rw += 'W' if '1' == write
831
827
 
832
828
  class_name = @known_classes[var_name]
833
829
 
@@ -840,7 +836,7 @@ class RDoc::Parser::C < RDoc::Parser
840
836
  comment = find_attr_comment var_name, attr_name
841
837
  comment.normalize
842
838
 
843
- name = attr_name.gsub(/rb_intern\("([^"]+)"\)/, '\1')
839
+ name = attr_name.gsub(/rb_intern(?:_const)?\("([^"]+)"\)/, '\1')
844
840
 
845
841
  attr = RDoc::Attr.new '', name, rw, comment
846
842
 
@@ -913,7 +909,7 @@ class RDoc::Parser::C < RDoc::Parser
913
909
  # can override the C value of the comment to give a friendly definition.
914
910
  #
915
911
  # /* 300: The perfect score in bowling */
916
- # rb_define_const(cFoo, "PERFECT", INT2FIX(300);
912
+ # rb_define_const(cFoo, "PERFECT", INT2FIX(300));
917
913
  #
918
914
  # Will override <tt>INT2FIX(300)</tt> with the value +300+ in the output
919
915
  # RDoc. Values may include quotes and escaped colons (\:).
@@ -943,15 +939,15 @@ class RDoc::Parser::C < RDoc::Parser
943
939
  if new_definition.empty? then # Default to literal C definition
944
940
  new_definition = definition
945
941
  else
946
- new_definition.gsub!("\:", ":")
947
- new_definition.gsub!("\\", '\\')
942
+ new_definition = new_definition.gsub("\:", ":")
943
+ new_definition = new_definition.gsub("\\", '\\')
948
944
  end
949
945
 
950
946
  new_definition.sub!(/\A(\s+)/, '')
951
947
 
952
948
  new_comment = "#{$1}#{new_comment.lstrip}"
953
949
 
954
- new_comment = RDoc::Comment.new new_comment, @top_level
950
+ new_comment = RDoc::Comment.new new_comment, @top_level, :c
955
951
 
956
952
  con = RDoc::Constant.new const_name, new_definition, new_comment
957
953
  else
@@ -989,6 +985,10 @@ class RDoc::Parser::C < RDoc::Parser
989
985
 
990
986
  class_obj = find_class var_name, class_name
991
987
 
988
+ if existing_method = class_obj.method_list.find { |m| m.c_function == function }
989
+ add_alias(var_name, class_obj, existing_method.name, meth_name, existing_method.comment)
990
+ end
991
+
992
992
  if class_obj then
993
993
  if meth_name == 'initialize' then
994
994
  meth_name = 'new'
@@ -1198,7 +1198,7 @@ class RDoc::Parser::C < RDoc::Parser
1198
1198
  # when scanning for classes and methods
1199
1199
 
1200
1200
  def remove_commented_out_lines
1201
- @content.gsub!(%r%//.*rb_define_%, '//')
1201
+ @content = @content.gsub(%r%//.*rb_define_%, '//')
1202
1202
  end
1203
1203
 
1204
1204
  ##
@@ -1208,8 +1208,7 @@ class RDoc::Parser::C < RDoc::Parser
1208
1208
  def scan
1209
1209
  remove_commented_out_lines
1210
1210
 
1211
- do_modules
1212
- do_classes
1211
+ do_classes_and_modules
1213
1212
  do_missing
1214
1213
 
1215
1214
  do_constants
@@ -1218,12 +1217,9 @@ class RDoc::Parser::C < RDoc::Parser
1218
1217
  do_aliases
1219
1218
  do_attrs
1220
1219
 
1221
- deduplicate_call_seq
1222
-
1223
1220
  @store.add_c_variables self
1224
1221
 
1225
1222
  @top_level
1226
1223
  end
1227
1224
 
1228
1225
  end
1229
-