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.
- checksums.yaml +5 -5
- data/CONTRIBUTING.rdoc +8 -7
- data/Gemfile +12 -0
- data/History.rdoc +48 -4
- data/LEGAL.rdoc +2 -2
- data/README.rdoc +5 -5
- data/Rakefile +73 -155
- data/bin/console +7 -0
- data/bin/setup +6 -0
- data/{bin → exe}/rdoc +0 -0
- data/{bin → exe}/ri +0 -0
- data/lib/rdoc/alias.rb +1 -0
- data/lib/rdoc/anon_class.rb +1 -0
- data/lib/rdoc/any_method.rb +59 -14
- data/lib/rdoc/attr.rb +1 -0
- data/lib/rdoc/class_module.rb +5 -2
- data/lib/rdoc/code_object.rb +3 -11
- data/lib/rdoc/code_objects.rb +1 -0
- data/lib/rdoc/comment.rb +32 -11
- data/lib/rdoc/constant.rb +3 -2
- data/lib/rdoc/context/section.rb +7 -13
- data/lib/rdoc/context.rb +78 -23
- data/lib/rdoc/cross_reference.rb +33 -14
- data/lib/rdoc/encoding.rb +92 -55
- data/lib/rdoc/erb_partial.rb +2 -1
- data/lib/rdoc/erbio.rb +8 -3
- data/lib/rdoc/extend.rb +1 -0
- data/lib/rdoc/generator/darkfish.rb +62 -32
- data/lib/rdoc/generator/json_index.rb +8 -5
- data/lib/rdoc/generator/markup.rb +3 -12
- data/lib/rdoc/generator/pot/message_extractor.rb +68 -0
- data/lib/rdoc/generator/pot/po.rb +84 -0
- data/lib/rdoc/generator/pot/po_entry.rb +141 -0
- data/lib/rdoc/generator/pot.rb +4 -3
- data/lib/rdoc/generator/ri.rb +1 -0
- data/lib/rdoc/generator/template/darkfish/_footer.rhtml +2 -2
- data/lib/rdoc/generator/template/darkfish/_head.rhtml +11 -8
- data/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml +2 -2
- data/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +2 -2
- data/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +7 -7
- data/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml +2 -2
- data/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +7 -7
- data/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +6 -6
- data/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml +5 -5
- data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +5 -5
- data/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml +5 -5
- data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +4 -4
- data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +4 -4
- data/lib/rdoc/generator/template/darkfish/class.rhtml +45 -47
- data/lib/rdoc/generator/template/darkfish/css/fonts.css +6 -6
- data/lib/rdoc/generator/template/darkfish/css/rdoc.css +55 -6
- data/lib/rdoc/generator/template/darkfish/index.rhtml +3 -4
- data/lib/rdoc/generator/template/darkfish/js/darkfish.js +23 -100
- data/lib/rdoc/generator/template/darkfish/js/search.js +32 -31
- data/lib/rdoc/generator/template/darkfish/servlet_root.rhtml +15 -16
- data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +16 -16
- data/lib/rdoc/generator/template/json_index/js/navigation.js +4 -41
- data/lib/rdoc/generator/template/json_index/js/searcher.js +7 -6
- data/lib/rdoc/generator.rb +1 -1
- data/lib/rdoc/ghost_method.rb +1 -0
- data/lib/rdoc/i18n/locale.rb +2 -1
- data/lib/rdoc/i18n/text.rb +5 -4
- data/lib/rdoc/i18n.rb +3 -2
- data/lib/rdoc/include.rb +1 -0
- data/lib/rdoc/known_classes.rb +1 -0
- data/lib/rdoc/markdown/entities.rb +1 -0
- data/lib/rdoc/markdown/{literals_1_9.kpeg → literals.kpeg} +1 -0
- data/lib/rdoc/markdown/{literals_1_9.rb → literals.rb} +1 -4
- data/lib/rdoc/markdown.kpeg +94 -51
- data/lib/rdoc/markdown.rb +1171 -619
- data/lib/rdoc/markup/attr_changer.rb +1 -0
- data/lib/rdoc/markup/attr_span.rb +9 -2
- data/lib/rdoc/markup/attribute_manager.rb +115 -49
- data/lib/rdoc/markup/attributes.rb +7 -6
- data/lib/rdoc/markup/blank_line.rb +1 -0
- data/lib/rdoc/markup/block_quote.rb +1 -0
- data/lib/rdoc/markup/document.rb +1 -0
- data/lib/rdoc/markup/formatter.rb +25 -23
- data/lib/rdoc/markup/hard_break.rb +1 -0
- data/lib/rdoc/markup/heading.rb +4 -3
- data/lib/rdoc/markup/include.rb +1 -0
- data/lib/rdoc/markup/indented_paragraph.rb +1 -0
- data/lib/rdoc/markup/list.rb +1 -0
- data/lib/rdoc/markup/list_item.rb +1 -0
- data/lib/rdoc/markup/paragraph.rb +1 -0
- data/lib/rdoc/markup/parser.rb +78 -61
- data/lib/rdoc/markup/pre_process.rb +12 -9
- data/lib/rdoc/markup/raw.rb +1 -0
- data/lib/rdoc/markup/regexp_handling.rb +41 -0
- data/lib/rdoc/markup/rule.rb +1 -0
- data/lib/rdoc/markup/to_ansi.rb +1 -0
- data/lib/rdoc/markup/to_bs.rb +4 -5
- data/lib/rdoc/markup/to_html.rb +71 -25
- data/lib/rdoc/markup/to_html_crossref.rb +41 -25
- data/lib/rdoc/markup/to_html_snippet.rb +10 -9
- data/lib/rdoc/markup/to_joined_paragraph.rb +7 -31
- data/lib/rdoc/markup/to_label.rb +10 -9
- data/lib/rdoc/markup/to_markdown.rb +9 -8
- data/lib/rdoc/markup/to_rdoc.rb +35 -6
- data/lib/rdoc/markup/to_table_of_contents.rb +2 -0
- data/lib/rdoc/markup/to_test.rb +1 -0
- data/lib/rdoc/markup/to_tt_only.rb +3 -2
- data/lib/rdoc/markup/verbatim.rb +1 -0
- data/lib/rdoc/markup.rb +14 -16
- data/lib/rdoc/meta_method.rb +1 -0
- data/lib/rdoc/method_attr.rb +2 -1
- data/lib/rdoc/mixin.rb +1 -0
- data/lib/rdoc/normal_class.rb +3 -2
- data/lib/rdoc/normal_module.rb +1 -0
- data/lib/rdoc/options.rb +92 -58
- data/lib/rdoc/parser/c.rb +219 -223
- data/lib/rdoc/parser/changelog.rb +155 -18
- data/lib/rdoc/parser/markdown.rb +1 -0
- data/lib/rdoc/parser/rd.rb +1 -0
- data/lib/rdoc/parser/ripper_state_lex.rb +590 -0
- data/lib/rdoc/parser/ruby.rb +635 -468
- data/lib/rdoc/parser/ruby_tools.rb +33 -33
- data/lib/rdoc/parser/simple.rb +3 -3
- data/lib/rdoc/parser/text.rb +1 -0
- data/lib/rdoc/parser.rb +17 -50
- data/lib/rdoc/rd/block_parser.rb +66 -65
- data/lib/rdoc/rd/block_parser.ry +3 -3
- data/lib/rdoc/rd/inline.rb +5 -4
- data/lib/rdoc/rd/inline_parser.rb +52 -51
- data/lib/rdoc/rd/inline_parser.ry +1 -1
- data/lib/rdoc/rd.rb +1 -0
- data/lib/rdoc/rdoc.rb +68 -63
- data/lib/rdoc/require.rb +1 -0
- data/lib/rdoc/ri/driver.rb +133 -58
- data/lib/rdoc/ri/formatter.rb +1 -0
- data/lib/rdoc/ri/paths.rb +4 -20
- data/lib/rdoc/ri/store.rb +1 -0
- data/lib/rdoc/ri/task.rb +71 -0
- data/lib/rdoc/ri.rb +1 -0
- data/lib/rdoc/rubygems_hook.rb +5 -12
- data/lib/rdoc/servlet.rb +24 -14
- data/lib/rdoc/single_class.rb +1 -0
- data/lib/rdoc/stats/normal.rb +20 -21
- data/lib/rdoc/stats/quiet.rb +1 -0
- data/lib/rdoc/stats/verbose.rb +1 -0
- data/lib/rdoc/stats.rb +1 -0
- data/lib/rdoc/store.rb +41 -41
- data/lib/rdoc/task.rb +2 -3
- data/lib/rdoc/text.rb +19 -38
- data/lib/rdoc/token_stream.rb +56 -32
- data/lib/rdoc/tom_doc.rb +17 -11
- data/lib/rdoc/top_level.rb +9 -2
- data/lib/rdoc/version.rb +8 -0
- data/lib/rdoc.rb +24 -10
- data/man/ri.1 +247 -0
- data/rdoc.gemspec +248 -0
- metadata +43 -236
- data/.autotest +0 -24
- data/.document +0 -5
- data/Manifest.txt +0 -306
- data/lib/gauntlet_rdoc.rb +0 -84
- data/lib/rdoc/generator/template/darkfish/js/jquery.js +0 -4
- data/lib/rdoc/markdown/literals_1_8.kpeg +0 -18
- data/lib/rdoc/markdown/literals_1_8.rb +0 -416
- data/lib/rdoc/markup/formatter_test_case.rb +0 -767
- data/lib/rdoc/markup/inline.rb +0 -1
- data/lib/rdoc/markup/special.rb +0 -40
- data/lib/rdoc/markup/text_formatter_test_case.rb +0 -114
- data/lib/rdoc/ruby_lex.rb +0 -1377
- data/lib/rdoc/ruby_token.rb +0 -460
- data/lib/rdoc/test_case.rb +0 -217
- data/test/MarkdownTest_1.0.3/Amps and angle encoding.text +0 -21
- data/test/MarkdownTest_1.0.3/Auto links.text +0 -13
- data/test/MarkdownTest_1.0.3/Backslash escapes.text +0 -120
- data/test/MarkdownTest_1.0.3/Blockquotes with code blocks.text +0 -11
- data/test/MarkdownTest_1.0.3/Code Blocks.text +0 -14
- data/test/MarkdownTest_1.0.3/Code Spans.text +0 -6
- data/test/MarkdownTest_1.0.3/Hard-wrapped paragraphs with list-like lines.text +0 -8
- data/test/MarkdownTest_1.0.3/Horizontal rules.text +0 -67
- data/test/MarkdownTest_1.0.3/Inline HTML (Advanced).text +0 -15
- data/test/MarkdownTest_1.0.3/Inline HTML (Simple).text +0 -69
- data/test/MarkdownTest_1.0.3/Inline HTML comments.text +0 -13
- data/test/MarkdownTest_1.0.3/Links, inline style.text +0 -12
- data/test/MarkdownTest_1.0.3/Links, reference style.text +0 -71
- data/test/MarkdownTest_1.0.3/Links, shortcut references.text +0 -20
- data/test/MarkdownTest_1.0.3/Literal quotes in titles.text +0 -7
- data/test/MarkdownTest_1.0.3/Markdown Documentation - Basics.text +0 -306
- data/test/MarkdownTest_1.0.3/Markdown Documentation - Syntax.text +0 -888
- data/test/MarkdownTest_1.0.3/Nested blockquotes.text +0 -5
- data/test/MarkdownTest_1.0.3/Ordered and unordered lists.text +0 -131
- data/test/MarkdownTest_1.0.3/Strong and em together.text +0 -7
- data/test/MarkdownTest_1.0.3/Tabs.text +0 -21
- data/test/MarkdownTest_1.0.3/Tidyness.text +0 -5
- data/test/README +0 -1
- data/test/binary.dat +0 -0
- data/test/hidden.zip.txt +0 -1
- data/test/test.ja.largedoc +0 -3
- data/test/test.ja.rdoc +0 -10
- data/test/test.ja.txt +0 -8
- data/test/test.txt +0 -1
- data/test/test_rdoc_alias.rb +0 -13
- data/test/test_rdoc_any_method.rb +0 -460
- data/test/test_rdoc_attr.rb +0 -190
- data/test/test_rdoc_class_module.rb +0 -1492
- data/test/test_rdoc_code_object.rb +0 -450
- data/test/test_rdoc_comment.rb +0 -504
- data/test/test_rdoc_constant.rb +0 -181
- data/test/test_rdoc_context.rb +0 -901
- data/test/test_rdoc_context_section.rb +0 -130
- data/test/test_rdoc_cross_reference.rb +0 -192
- data/test/test_rdoc_encoding.rb +0 -227
- data/test/test_rdoc_extend.rb +0 -94
- data/test/test_rdoc_generator_darkfish.rb +0 -229
- data/test/test_rdoc_generator_json_index.rb +0 -324
- data/test/test_rdoc_generator_markup.rb +0 -59
- data/test/test_rdoc_generator_pot.rb +0 -91
- data/test/test_rdoc_generator_pot_po.rb +0 -51
- data/test/test_rdoc_generator_pot_po_entry.rb +0 -139
- data/test/test_rdoc_generator_ri.rb +0 -78
- data/test/test_rdoc_i18n_locale.rb +0 -73
- data/test/test_rdoc_i18n_text.rb +0 -123
- data/test/test_rdoc_include.rb +0 -108
- data/test/test_rdoc_markdown.rb +0 -980
- data/test/test_rdoc_markdown_test.rb +0 -1884
- data/test/test_rdoc_markup.rb +0 -95
- data/test/test_rdoc_markup_attribute_manager.rb +0 -364
- data/test/test_rdoc_markup_attributes.rb +0 -39
- data/test/test_rdoc_markup_document.rb +0 -207
- data/test/test_rdoc_markup_formatter.rb +0 -175
- data/test/test_rdoc_markup_hard_break.rb +0 -31
- data/test/test_rdoc_markup_heading.rb +0 -29
- data/test/test_rdoc_markup_include.rb +0 -19
- data/test/test_rdoc_markup_indented_paragraph.rb +0 -53
- data/test/test_rdoc_markup_paragraph.rb +0 -32
- data/test/test_rdoc_markup_parser.rb +0 -1680
- data/test/test_rdoc_markup_pre_process.rb +0 -473
- data/test/test_rdoc_markup_raw.rb +0 -22
- data/test/test_rdoc_markup_to_ansi.rb +0 -369
- data/test/test_rdoc_markup_to_bs.rb +0 -366
- data/test/test_rdoc_markup_to_html.rb +0 -662
- data/test/test_rdoc_markup_to_html_crossref.rb +0 -225
- data/test/test_rdoc_markup_to_html_snippet.rb +0 -711
- data/test/test_rdoc_markup_to_joined_paragraph.rb +0 -32
- data/test/test_rdoc_markup_to_label.rb +0 -112
- data/test/test_rdoc_markup_to_markdown.rb +0 -389
- data/test/test_rdoc_markup_to_rdoc.rb +0 -377
- data/test/test_rdoc_markup_to_table_of_contents.rb +0 -126
- data/test/test_rdoc_markup_to_tt_only.rb +0 -246
- data/test/test_rdoc_markup_verbatim.rb +0 -29
- data/test/test_rdoc_method_attr.rb +0 -193
- data/test/test_rdoc_normal_class.rb +0 -47
- data/test/test_rdoc_normal_module.rb +0 -42
- data/test/test_rdoc_options.rb +0 -766
- data/test/test_rdoc_parser.rb +0 -327
- data/test/test_rdoc_parser_c.rb +0 -1896
- data/test/test_rdoc_parser_changelog.rb +0 -315
- data/test/test_rdoc_parser_markdown.rb +0 -61
- data/test/test_rdoc_parser_rd.rb +0 -55
- data/test/test_rdoc_parser_ruby.rb +0 -3322
- data/test/test_rdoc_parser_simple.rb +0 -115
- data/test/test_rdoc_rd.rb +0 -30
- data/test/test_rdoc_rd_block_parser.rb +0 -535
- data/test/test_rdoc_rd_inline.rb +0 -63
- data/test/test_rdoc_rd_inline_parser.rb +0 -177
- data/test/test_rdoc_rdoc.rb +0 -455
- data/test/test_rdoc_require.rb +0 -25
- data/test/test_rdoc_ri_driver.rb +0 -1436
- data/test/test_rdoc_ri_paths.rb +0 -155
- data/test/test_rdoc_ruby_lex.rb +0 -421
- data/test/test_rdoc_ruby_token.rb +0 -19
- data/test/test_rdoc_rubygems_hook.rb +0 -251
- data/test/test_rdoc_servlet.rb +0 -534
- data/test/test_rdoc_single_class.rb +0 -20
- data/test/test_rdoc_stats.rb +0 -722
- data/test/test_rdoc_store.rb +0 -993
- data/test/test_rdoc_task.rb +0 -173
- data/test/test_rdoc_text.rb +0 -557
- data/test/test_rdoc_token_stream.rb +0 -42
- data/test/test_rdoc_tom_doc.rb +0 -520
- data/test/test_rdoc_top_level.rb +0 -287
- data/test/xref_data.rb +0 -76
- 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:
|
6
|
-
# rb_define_method
|
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
|
-
#
|
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
|
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
|
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
|
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
|
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
|
-
|
280
|
-
|
281
|
-
|
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
|
327
|
-
do_boot_defclass
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
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
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
|
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 =
|
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
|
649
|
-
comment = RDoc::Comment.new
|
650
|
-
body =
|
651
|
-
offset =
|
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,
|
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 =
|
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
|
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,
|
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
|
-
|
772
|
-
|
773
|
-
|
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
|
-
|
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
|
830
|
-
rw
|
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
|
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
|
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
|
-
|
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
|
-
|