rdoc 6.4.0 → 6.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.rdoc +1 -2
  3. data/LEGAL.rdoc +1 -1
  4. data/README.rdoc +2 -2
  5. data/TODO.rdoc +1 -1
  6. data/exe/rdoc +0 -1
  7. data/lib/rdoc/alias.rb +0 -1
  8. data/lib/rdoc/anon_class.rb +0 -1
  9. data/lib/rdoc/any_method.rb +17 -2
  10. data/lib/rdoc/attr.rb +0 -1
  11. data/lib/rdoc/class_module.rb +0 -1
  12. data/lib/rdoc/code_objects.rb +1 -2
  13. data/lib/rdoc/comment.rb +20 -41
  14. data/lib/rdoc/constant.rb +0 -1
  15. data/lib/rdoc/context/section.rb +2 -1
  16. data/lib/rdoc/context.rb +1 -3
  17. data/lib/rdoc/cross_reference.rb +17 -2
  18. data/lib/rdoc/encoding.rb +1 -6
  19. data/lib/rdoc/erb_partial.rb +0 -1
  20. data/lib/rdoc/erbio.rb +2 -7
  21. data/lib/rdoc/extend.rb +0 -1
  22. data/lib/rdoc/generator/darkfish.rb +2 -6
  23. data/lib/rdoc/generator/json_index.rb +2 -2
  24. data/lib/rdoc/generator/markup.rb +1 -2
  25. data/lib/rdoc/generator/ri.rb +0 -1
  26. data/lib/rdoc/generator/template/darkfish/_head.rhtml +10 -10
  27. data/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +27 -3
  28. data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +22 -2
  29. data/lib/rdoc/generator/template/darkfish/_sidebar_search.rhtml +1 -1
  30. data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +25 -4
  31. data/lib/rdoc/generator/template/darkfish/class.rhtml +28 -20
  32. data/lib/rdoc/generator/template/darkfish/css/rdoc.css +44 -7
  33. data/lib/rdoc/generator/template/darkfish/index.rhtml +1 -1
  34. data/lib/rdoc/generator/template/darkfish/js/darkfish.js +14 -1
  35. data/lib/rdoc/generator/template/darkfish/js/search.js +4 -4
  36. data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +7 -6
  37. data/lib/rdoc/generator/template/json_index/js/navigation.js +8 -8
  38. data/lib/rdoc/generator.rb +5 -5
  39. data/lib/rdoc/ghost_method.rb +0 -1
  40. data/lib/rdoc/i18n.rb +1 -1
  41. data/lib/rdoc/include.rb +0 -1
  42. data/lib/rdoc/known_classes.rb +5 -4
  43. data/lib/rdoc/markdown/entities.rb +0 -1
  44. data/lib/rdoc/markdown/literals.rb +98 -40
  45. data/lib/rdoc/markdown.kpeg +26 -19
  46. data/lib/rdoc/markdown.rb +326 -227
  47. data/lib/rdoc/markup/attr_changer.rb +0 -1
  48. data/lib/rdoc/markup/attr_span.rb +0 -1
  49. data/lib/rdoc/markup/attribute_manager.rb +29 -36
  50. data/lib/rdoc/markup/attributes.rb +0 -1
  51. data/lib/rdoc/markup/blank_line.rb +0 -1
  52. data/lib/rdoc/markup/block_quote.rb +0 -1
  53. data/lib/rdoc/markup/document.rb +0 -1
  54. data/lib/rdoc/markup/formatter.rb +0 -1
  55. data/lib/rdoc/markup/hard_break.rb +0 -1
  56. data/lib/rdoc/markup/heading.rb +0 -1
  57. data/lib/rdoc/markup/include.rb +0 -1
  58. data/lib/rdoc/markup/indented_paragraph.rb +0 -1
  59. data/lib/rdoc/markup/list.rb +0 -1
  60. data/lib/rdoc/markup/list_item.rb +0 -1
  61. data/lib/rdoc/markup/paragraph.rb +0 -1
  62. data/lib/rdoc/markup/parser.rb +12 -6
  63. data/lib/rdoc/markup/raw.rb +0 -1
  64. data/lib/rdoc/markup/regexp_handling.rb +0 -1
  65. data/lib/rdoc/markup/rule.rb +0 -1
  66. data/lib/rdoc/markup/to_ansi.rb +0 -1
  67. data/lib/rdoc/markup/to_html.rb +21 -16
  68. data/lib/rdoc/markup/to_html_crossref.rb +0 -1
  69. data/lib/rdoc/markup/to_html_snippet.rb +0 -1
  70. data/lib/rdoc/markup/to_joined_paragraph.rb +2 -3
  71. data/lib/rdoc/markup/to_label.rb +1 -2
  72. data/lib/rdoc/markup/to_markdown.rb +0 -1
  73. data/lib/rdoc/markup/to_rdoc.rb +3 -21
  74. data/lib/rdoc/markup/to_table_of_contents.rb +0 -1
  75. data/lib/rdoc/markup/to_test.rb +0 -1
  76. data/lib/rdoc/markup/to_tt_only.rb +0 -1
  77. data/lib/rdoc/markup/verbatim.rb +0 -1
  78. data/lib/rdoc/markup.rb +35 -667
  79. data/lib/rdoc/meta_method.rb +0 -1
  80. data/lib/rdoc/method_attr.rb +1 -2
  81. data/lib/rdoc/mixin.rb +0 -1
  82. data/lib/rdoc/normal_class.rb +1 -2
  83. data/lib/rdoc/normal_module.rb +1 -2
  84. data/lib/rdoc/options.rb +36 -20
  85. data/lib/rdoc/parser/c.rb +89 -101
  86. data/lib/rdoc/parser/changelog.rb +0 -1
  87. data/lib/rdoc/parser/markdown.rb +0 -2
  88. data/lib/rdoc/parser/rd.rb +0 -1
  89. data/lib/rdoc/parser/ripper_state_lex.rb +1 -1
  90. data/lib/rdoc/parser/ruby.rb +29 -14
  91. data/lib/rdoc/parser/ruby_tools.rb +0 -2
  92. data/lib/rdoc/parser/text.rb +0 -1
  93. data/lib/rdoc/parser.rb +19 -2
  94. data/lib/rdoc/rd/block_parser.rb +666 -12
  95. data/lib/rdoc/rd/block_parser.ry +13 -9
  96. data/lib/rdoc/rd/inline.rb +0 -1
  97. data/lib/rdoc/rd/inline_parser.rb +3 -1
  98. data/lib/rdoc/rd.rb +3 -4
  99. data/lib/rdoc/rdoc.rb +19 -7
  100. data/lib/rdoc/require.rb +0 -1
  101. data/lib/rdoc/ri/driver.rb +20 -86
  102. data/lib/rdoc/ri/store.rb +0 -1
  103. data/lib/rdoc/ri.rb +4 -5
  104. data/lib/rdoc/rubygems_hook.rb +1 -1
  105. data/lib/rdoc/servlet.rb +1 -1
  106. data/lib/rdoc/single_class.rb +5 -1
  107. data/lib/rdoc/stats/quiet.rb +0 -1
  108. data/lib/rdoc/stats/verbose.rb +0 -2
  109. data/lib/rdoc/stats.rb +3 -4
  110. data/lib/rdoc/store.rb +4 -4
  111. data/lib/rdoc/task.rb +31 -5
  112. data/lib/rdoc/token_stream.rb +0 -1
  113. data/lib/rdoc/top_level.rb +0 -1
  114. data/lib/rdoc/version.rb +3 -1
  115. data/lib/rdoc.rb +46 -46
  116. metadata +9 -11
  117. data/Gemfile +0 -12
  118. data/Rakefile +0 -107
  119. data/bin/console +0 -7
  120. data/bin/setup +0 -6
  121. data/rdoc.gemspec +0 -249
@@ -4,4 +4,3 @@
4
4
 
5
5
  class RDoc::MetaMethod < RDoc::AnyMethod
6
6
  end
7
-
@@ -289,7 +289,7 @@ class RDoc::MethodAttr < RDoc::CodeObject
289
289
  # HTML id-friendly method/attribute name
290
290
 
291
291
  def html_name
292
- require 'cgi'
292
+ require 'cgi/util'
293
293
 
294
294
  CGI.escape(@name.gsub('-', '-2D')).gsub('%','-').sub(/^-/, '')
295
295
  end
@@ -416,4 +416,3 @@ class RDoc::MethodAttr < RDoc::CodeObject
416
416
  end
417
417
 
418
418
  end
419
-
data/lib/rdoc/mixin.rb CHANGED
@@ -118,4 +118,3 @@ class RDoc::Mixin < RDoc::CodeObject
118
118
  end
119
119
 
120
120
  end
121
-
@@ -56,7 +56,7 @@ class RDoc::NormalClass < RDoc::ClassModule
56
56
  def pretty_print q # :nodoc:
57
57
  superclass = @superclass ? " < #{@superclass}" : nil
58
58
 
59
- q.group 2, "[class #{full_name}#{superclass} ", "]" do
59
+ q.group 2, "[class #{full_name}#{superclass}", "]" do
60
60
  q.breakable
61
61
  q.text "includes:"
62
62
  q.breakable
@@ -90,4 +90,3 @@ class RDoc::NormalClass < RDoc::ClassModule
90
90
  end
91
91
 
92
92
  end
93
-
@@ -30,7 +30,7 @@ class RDoc::NormalModule < RDoc::ClassModule
30
30
  end
31
31
 
32
32
  def pretty_print q # :nodoc:
33
- q.group 2, "[module #{full_name}: ", "]" do
33
+ q.group 2, "[module #{full_name}:", "]" do
34
34
  q.breakable
35
35
  q.text "includes:"
36
36
  q.breakable
@@ -71,4 +71,3 @@ class RDoc::NormalModule < RDoc::ClassModule
71
71
  end
72
72
 
73
73
  end
74
-
data/lib/rdoc/options.rb CHANGED
@@ -106,6 +106,7 @@ class RDoc::Options
106
106
  generator_options
107
107
  generators
108
108
  op_dir
109
+ page_dir
109
110
  option_parser
110
111
  pipe
111
112
  rdoc_include
@@ -338,6 +339,10 @@ class RDoc::Options
338
339
 
339
340
  attr_reader :visibility
340
341
 
342
+ ##
343
+ # Indicates if files of test suites should be skipped
344
+ attr_accessor :skip_tests
345
+
341
346
  def initialize loaded_options = nil # :nodoc:
342
347
  init_ivars
343
348
  override loaded_options if loaded_options
@@ -385,6 +390,7 @@ class RDoc::Options
385
390
  @write_options = false
386
391
  @encoding = Encoding::UTF_8
387
392
  @charset = @encoding.name
393
+ @skip_tests = true
388
394
  end
389
395
 
390
396
  def init_with map # :nodoc:
@@ -434,6 +440,7 @@ class RDoc::Options
434
440
  @main_page = map['main_page'] if map.has_key?('main_page')
435
441
  @markup = map['markup'] if map.has_key?('markup')
436
442
  @op_dir = map['op_dir'] if map.has_key?('op_dir')
443
+ @page_dir = map['page_dir'] if map.has_key?('page_dir')
437
444
  @show_hash = map['show_hash'] if map.has_key?('show_hash')
438
445
  @tab_width = map['tab_width'] if map.has_key?('tab_width')
439
446
  @template_dir = map['template_dir'] if map.has_key?('template_dir')
@@ -513,19 +520,22 @@ class RDoc::Options
513
520
  ##
514
521
  # For dumping YAML
515
522
 
516
- def encode_with coder # :nodoc:
523
+ def to_yaml(*options) # :nodoc:
517
524
  encoding = @encoding ? @encoding.name : nil
518
525
 
519
- coder.add 'encoding', encoding
520
- coder.add 'static_path', sanitize_path(@static_path)
521
- coder.add 'rdoc_include', sanitize_path(@rdoc_include)
526
+ yaml = {}
527
+ yaml['encoding'] = encoding
528
+ yaml['static_path'] = sanitize_path(@static_path)
529
+ yaml['rdoc_include'] = sanitize_path(@rdoc_include)
530
+ yaml['page_dir'] = (sanitize_path([@page_dir]).first if @page_dir)
522
531
 
523
532
  ivars = instance_variables.map { |ivar| ivar.to_s[1..-1] }
524
533
  ivars -= SPECIAL
525
534
 
526
535
  ivars.sort.each do |ivar|
527
- coder.add ivar, instance_variable_get("@#{ivar}")
536
+ yaml[ivar] = instance_variable_get("@#{ivar}")
528
537
  end
538
+ yaml.to_yaml
529
539
  end
530
540
 
531
541
  ##
@@ -548,11 +558,17 @@ class RDoc::Options
548
558
  # #template.
549
559
 
550
560
  def finish
561
+ if @write_options then
562
+ write_options
563
+ exit
564
+ end
565
+
551
566
  @op_dir ||= 'doc'
552
567
 
553
- @rdoc_include << "." if @rdoc_include.empty?
554
568
  root = @root.to_s
555
- @rdoc_include << root unless @rdoc_include.include?(root)
569
+ if @rdoc_include.empty? || !@rdoc_include.include?(root)
570
+ @rdoc_include << root
571
+ end
556
572
 
557
573
  @exclude = self.exclude
558
574
 
@@ -585,14 +601,14 @@ class RDoc::Options
585
601
  def finish_page_dir
586
602
  return unless @page_dir
587
603
 
588
- @files << @page_dir.to_s
604
+ @files << @page_dir
589
605
 
590
- page_dir = nil
606
+ page_dir = Pathname(@page_dir)
591
607
  begin
592
- page_dir = @page_dir.expand_path.relative_path_from @root
608
+ page_dir = page_dir.expand_path.relative_path_from @root
593
609
  rescue ArgumentError
594
610
  # On Windows, sometimes crosses different drive letters.
595
- page_dir = @page_dir.expand_path
611
+ page_dir = page_dir.expand_path
596
612
  end
597
613
 
598
614
  @page_dir = page_dir
@@ -768,6 +784,13 @@ Usage: #{opt.program_name} [options] [names...]
768
784
 
769
785
  opt.separator nil
770
786
 
787
+ opt.on("--no-skipping-tests", nil,
788
+ "Don't skip generating documentation for test and spec files") do |value|
789
+ @skip_tests = false
790
+ end
791
+
792
+ opt.separator nil
793
+
771
794
  opt.on("--extension=NEW=OLD", "-E",
772
795
  "Treat files ending with .new as if they",
773
796
  "ended with .old. Using '-E cgi=rb' will",
@@ -847,7 +870,7 @@ Usage: #{opt.program_name} [options] [names...]
847
870
  "such files at your project root.",
848
871
  "NOTE: Do not use the same file name in",
849
872
  "the page dir and the root of your project") do |page_dir|
850
- @page_dir = Pathname(page_dir)
873
+ @page_dir = page_dir
851
874
  end
852
875
 
853
876
  opt.separator nil
@@ -1159,13 +1182,6 @@ Usage: #{opt.program_name} [options] [names...]
1159
1182
 
1160
1183
  @files = argv.dup
1161
1184
 
1162
- finish
1163
-
1164
- if @write_options then
1165
- write_options
1166
- exit
1167
- end
1168
-
1169
1185
  self
1170
1186
  end
1171
1187
 
@@ -1278,7 +1294,7 @@ Usage: #{opt.program_name} [options] [names...]
1278
1294
  File.open '.rdoc_options', 'w' do |io|
1279
1295
  io.set_encoding Encoding::UTF_8
1280
1296
 
1281
- YAML.dump self, io
1297
+ io.print to_yaml
1282
1298
  end
1283
1299
  end
1284
1300
 
data/lib/rdoc/parser/c.rb CHANGED
@@ -122,6 +122,11 @@ class RDoc::Parser::C < RDoc::Parser
122
122
 
123
123
  include RDoc::Text
124
124
 
125
+ # :stopdoc:
126
+ BOOL_ARG_PATTERN = /\s*+\b([01]|Q?(?:true|false)|TRUE|FALSE)\b\s*/
127
+ TRUE_VALUES = ['1', 'TRUE', 'true', 'Qtrue'].freeze
128
+ # :startdoc:
129
+
125
130
  ##
126
131
  # Maps C variable names to names of Ruby classes or modules
127
132
 
@@ -259,18 +264,18 @@ class RDoc::Parser::C < RDoc::Parser
259
264
  @content.scan(/rb_attr\s*\(
260
265
  \s*(\w+),
261
266
  \s*([\w"()]+),
262
- \s*([01]),
263
- \s*([01]),
264
- \s*\w+\);/xm) do |var_name, attr_name, read, write|
267
+ #{BOOL_ARG_PATTERN},
268
+ #{BOOL_ARG_PATTERN},
269
+ \s*\w+\);/xmo) do |var_name, attr_name, read, write|
265
270
  handle_attr var_name, attr_name, read, write
266
271
  end
267
272
 
268
273
  @content.scan(%r%rb_define_attr\(
269
274
  \s*([\w\.]+),
270
275
  \s*"([^"]+)",
271
- \s*(\d+),
272
- \s*(\d+)\s*\);
273
- %xm) do |var_name, attr_name, read, write|
276
+ #{BOOL_ARG_PATTERN},
277
+ #{BOOL_ARG_PATTERN}\);
278
+ %xmo) do |var_name, attr_name, read, write|
274
279
  handle_attr var_name, attr_name, read, write
275
280
  end
276
281
  end
@@ -295,94 +300,92 @@ class RDoc::Parser::C < RDoc::Parser
295
300
 
296
301
  @content.scan(
297
302
  %r(
303
+ (?<open>\s*\(\s*) {0}
304
+ (?<close>\s*\)\s*) {0}
305
+ (?<name>\s*"(?<class_name>\w+)") {0}
306
+ (?<parent>\s*(?:
307
+ (?<parent_name>[\w\*\s\(\)\.\->]+) |
308
+ rb_path2class\s*\(\s*"(?<path>[\w:]+)"\s*\)
309
+ )) {0}
310
+ (?<under>\w+) {0}
311
+
298
312
  (?<var_name>[\w\.]+)\s* =
299
313
  \s*rb_(?:
300
314
  define_(?:
301
- class(?: # rb_define_class(class_name_1, parent_name_1)
302
- \s*\(
303
- \s*"(?<class_name_1>\w+)",
304
- \s*(?<parent_name_1>\w+)\s*
305
- \)
306
- |
307
- _under\s*\( # rb_define_class_under(class_under, class_name2, parent_name2...)
308
- \s* (?<class_under>\w+),
309
- \s* "(?<class_name_2>\w+)",
310
- \s*
311
- (?:
312
- (?<parent_name_2>[\w\*\s\(\)\.\->]+) |
313
- rb_path2class\("(?<path>[\w:]+)"\)
314
- )
315
+ class(?: # rb_define_class(name, parent_name)
316
+ \(\s*
317
+ \g<name>,
318
+ \g<parent>
315
319
  \s*\)
320
+ |
321
+ _under\g<open> # rb_define_class_under(under, name, parent_name...)
322
+ \g<under>,
323
+ \g<name>,
324
+ \g<parent>
325
+ \g<close>
316
326
  )
317
327
  |
318
- module(?: # rb_define_module(module_name_1)
319
- \s*\(
320
- \s*"(?<module_name_1>\w+)"\s*
321
- \)
328
+ (?<module>)
329
+ module(?: # rb_define_module(name)
330
+ \g<open>
331
+ \g<name>
332
+ \g<close>
322
333
  |
323
- _under\s*\( # rb_define_module_under(module_under, module_name_2)
324
- \s*(?<module_under>\w+),
325
- \s*"(?<module_name_2>\w+)"
326
- \s*\)
334
+ _under\g<open> # rb_define_module_under(under, name)
335
+ \g<under>,
336
+ \g<name>
337
+ \g<close>
327
338
  )
328
339
  )
329
340
  |
330
- struct_define_without_accessor\s*\( # rb_struct_define_without_accessor(class_name_3, parent_name_3, ...)
331
- \s*"(?<class_name_3>\w+)",
332
- \s*(?<parent_name_3>\w+),
333
- \s*\w+, # Allocation function
334
- (?:\s*"\w+",)* # Attributes
335
- \s*NULL
336
- \)
341
+ (?<attributes>(?:\s*"\w+",)*\s*NULL\s*) {0}
342
+ struct_define(?:
343
+ \g<open> # rb_struct_define(name, ...)
344
+ \g<name>,
345
+ |
346
+ _under\g<open> # rb_struct_define_under(under, name, ...)
347
+ \g<under>,
348
+ \g<name>,
349
+ |
350
+ _without_accessor(?:
351
+ \g<open> # rb_struct_define_without_accessor(name, parent_name, ...)
352
+ |
353
+ _under\g<open> # rb_struct_define_without_accessor_under(under, name, parent_name, ...)
354
+ \g<under>,
355
+ )
356
+ \g<name>,
357
+ \g<parent>,
358
+ \s*\w+, # Allocation function
359
+ )
360
+ \g<attributes>
361
+ \g<close>
337
362
  |
338
- singleton_class\s*\( # rb_singleton_class(target_class_name)
339
- \s*(?<target_class_name>\w+)
340
- \)
363
+ singleton_class\g<open> # rb_singleton_class(target_class_name)
364
+ (?<target_class_name>\w+)
365
+ \g<close>
341
366
  )
342
367
  )mx
343
368
  ) do
344
- class_name = $~[:class_name_1]
345
- type = :class
346
- if class_name
347
- # rb_define_class(class_name_1, parent_name_1)
348
- parent_name = $~[:parent_name_1]
349
- #under = nil
350
- else
351
- class_name = $~[:class_name_2]
352
- if class_name
353
- # rb_define_class_under(class_under, class_name2, parent_name2...)
354
- parent_name = $~[:parent_name_2] || $~[:path]
355
- under = $~[:class_under]
356
- else
357
- class_name = $~[:class_name_3]
358
- if class_name
359
- # rb_struct_define_without_accessor(class_name_3, parent_name_3, ...)
360
- parent_name = $~[:parent_name_3]
361
- #under = nil
362
- else
363
- type = :module
364
- class_name = $~[:module_name_1]
365
- #parent_name = nil
366
- if class_name
367
- # rb_define_module(module_name_1)
368
- #under = nil
369
- else
370
- class_name = $~[:module_name_2]
371
- if class_name
372
- # rb_define_module_under(module_under, module_name_1)
373
- under = $~[:module_under]
374
- else
375
- # rb_singleton_class(target_class_name)
376
- target_class_name = $~[:target_class_name]
377
- handle_singleton $~[:var_name], target_class_name
378
- next
379
- end
380
- end
381
- end
382
- end
369
+ if target_class_name = $~[:target_class_name]
370
+ # rb_singleton_class(target_class_name)
371
+ handle_singleton $~[:var_name], target_class_name
372
+ next
383
373
  end
384
374
 
385
- handle_class_module($~[:var_name], type, class_name, parent_name, under)
375
+ var_name = $~[:var_name]
376
+ type = $~[:module] ? :module : :class
377
+ class_name = $~[:class_name]
378
+ parent_name = $~[:parent_name] || $~[:path]
379
+ under = $~[:under]
380
+ attributes = $~[:attributes]
381
+
382
+ handle_class_module(var_name, type, class_name, parent_name, under)
383
+ if attributes and !parent_name # rb_struct_define *not* without_accessor
384
+ true_flag = 'Qtrue'
385
+ attributes.scan(/"\K\w+(?=")/) do |attr_name|
386
+ handle_attr var_name, attr_name, true_flag, true_flag
387
+ end
388
+ end
386
389
  end
387
390
  end
388
391
 
@@ -677,13 +680,14 @@ class RDoc::Parser::C < RDoc::Parser
677
680
  ##
678
681
  # Finds a RDoc::NormalClass or RDoc::NormalModule for +raw_name+
679
682
 
680
- def find_class(raw_name, name)
683
+ def find_class(raw_name, name, base_name = nil)
681
684
  unless @classes[raw_name]
682
685
  if raw_name =~ /^rb_m/
683
686
  container = @top_level.add_module RDoc::NormalModule, name
684
687
  else
685
688
  container = @top_level.add_class RDoc::NormalClass, name
686
689
  end
690
+ container.name = base_name if base_name
687
691
 
688
692
  container.record_location @top_level
689
693
  @classes[raw_name] = container
@@ -724,7 +728,7 @@ class RDoc::Parser::C < RDoc::Parser
724
728
  ((?>/\*.*?\*/\s+))
725
729
  (static\s+)?
726
730
  void\s+
727
- Init_#{class_name}\s*(?:_\(\s*)?\(\s*(?:void\s*)?\)%xmi then
731
+ Init(?:VM)?_(?i:#{class_name})\s*(?:_\(\s*)?\(\s*(?:void\s*)?\)%xm then
728
732
  comment = $1.sub(%r%Document-(?:class|module):\s+#{class_name}%, '')
729
733
  elsif @content =~ %r%Document-(?:class|module):\s+#{class_name}\s*?
730
734
  (?:<\s+[:,\w]+)?\n((?>.*?\*/))%xm then
@@ -824,8 +828,8 @@ class RDoc::Parser::C < RDoc::Parser
824
828
 
825
829
  def handle_attr(var_name, attr_name, read, write)
826
830
  rw = ''
827
- rw += 'R' if '1' == read
828
- rw += 'W' if '1' == write
831
+ rw += 'R' if TRUE_VALUES.include?(read)
832
+ rw += 'W' if TRUE_VALUES.include?(write)
829
833
 
830
834
  class_name = @known_classes[var_name]
831
835
 
@@ -921,7 +925,7 @@ class RDoc::Parser::C < RDoc::Parser
921
925
 
922
926
  return unless class_name
923
927
 
924
- class_obj = find_class var_name, class_name
928
+ class_obj = find_class var_name, class_name, class_name[/::\K[^:]+\z/]
925
929
 
926
930
  unless class_obj then
927
931
  @options.warn 'Enclosing class or module %p is not known' % [const_name]
@@ -1025,7 +1029,8 @@ class RDoc::Parser::C < RDoc::Parser
1025
1029
  elsif p_count == -1 then # argc, argv
1026
1030
  rb_scan_args body
1027
1031
  else
1028
- "(#{(1..p_count).map { |i| "p#{i}" }.join ', '})"
1032
+ args = (1..p_count).map { |i| "p#{i}" }
1033
+ "(#{args.join ', '})"
1029
1034
  end
1030
1035
 
1031
1036
 
@@ -1052,23 +1057,6 @@ class RDoc::Parser::C < RDoc::Parser
1052
1057
  @singleton_classes[sclass_var] = class_name
1053
1058
  end
1054
1059
 
1055
- ##
1056
- # Normalizes tabs in +body+
1057
-
1058
- def handle_tab_width(body)
1059
- if /\t/ =~ body
1060
- tab_width = @options.tab_width
1061
- body.split(/\n/).map do |line|
1062
- 1 while line.gsub!(/\t+/) do
1063
- ' ' * (tab_width * $&.length - $`.length % tab_width)
1064
- end && $~
1065
- line
1066
- end.join "\n"
1067
- else
1068
- body
1069
- end
1070
- end
1071
-
1072
1060
  ##
1073
1061
  # Loads the variable map with the given +name+ from the RDoc::Store, if
1074
1062
  # present.
@@ -332,4 +332,3 @@ class RDoc::Parser::ChangeLog < RDoc::Parser
332
332
  end
333
333
  end
334
334
  end
335
-
@@ -20,5 +20,3 @@ class RDoc::Parser::Markdown < RDoc::Parser
20
20
  end
21
21
 
22
22
  end
23
-
24
-
@@ -20,4 +20,3 @@ class RDoc::Parser::RD < RDoc::Parser
20
20
  end
21
21
 
22
22
  end
23
-
@@ -368,7 +368,7 @@ class RDoc::Parser::RipperStateLex
368
368
  private def get_symbol_tk(tk)
369
369
  is_symbol = true
370
370
  symbol_tk = Token.new(tk.line_no, tk.char_no, :on_symbol)
371
- if ":'" == tk[:text] or ':"' == tk[:text]
371
+ if ":'" == tk[:text] or ':"' == tk[:text] or tk[:text].start_with?('%s')
372
372
  tk1 = get_string_tk(tk)
373
373
  symbol_tk[:text] = tk1[:text]
374
374
  symbol_tk[:state] = tk1[:state]
@@ -8,6 +8,9 @@
8
8
  # by Keiju ISHITSUKA (Nippon Rational Inc.)
9
9
  #
10
10
 
11
+ require 'ripper'
12
+ require_relative 'ripper_state_lex'
13
+
11
14
  ##
12
15
  # Extracts code elements from a source file returning a TopLevel object
13
16
  # containing the constituent file elements.
@@ -138,9 +141,6 @@
138
141
  # Note that by default, the :method: directive will be ignored if there is a
139
142
  # standard rdocable item following it.
140
143
 
141
- require 'ripper'
142
- require_relative 'ripper_state_lex'
143
-
144
144
  class RDoc::Parser::Ruby < RDoc::Parser
145
145
 
146
146
  parse_files_matching(/\.rbw?$/)
@@ -164,15 +164,7 @@ class RDoc::Parser::Ruby < RDoc::Parser
164
164
  def initialize(top_level, file_name, content, options, stats)
165
165
  super
166
166
 
167
- if /\t/ =~ content then
168
- tab_width = @options.tab_width
169
- content = content.split(/\n/).map do |line|
170
- 1 while line.gsub!(/\t+/) {
171
- ' ' * (tab_width*$&.length - $`.length % tab_width)
172
- } && $~
173
- line
174
- end.join("\n")
175
- end
167
+ content = handle_tab_width(content)
176
168
 
177
169
  @size = 0
178
170
  @token_listeners = nil
@@ -399,6 +391,29 @@ class RDoc::Parser::Ruby < RDoc::Parser
399
391
  return [container, name_t, given_name, new_modules]
400
392
  end
401
393
 
394
+ ##
395
+ # Skip opening parentheses and yield the block.
396
+ # Skip closing parentheses too when exists.
397
+
398
+ def skip_parentheses(&block)
399
+ left_tk = peek_tk
400
+
401
+ if :on_lparen == left_tk[:kind]
402
+ get_tk
403
+
404
+ ret = skip_parentheses(&block)
405
+
406
+ right_tk = peek_tk
407
+ if :on_rparen == right_tk[:kind]
408
+ get_tk
409
+ end
410
+
411
+ ret
412
+ else
413
+ yield
414
+ end
415
+ end
416
+
402
417
  ##
403
418
  # Return a superclass, which can be either a constant of an expression
404
419
 
@@ -833,7 +848,7 @@ class RDoc::Parser::Ruby < RDoc::Parser
833
848
  cls = parse_class_regular container, declaration_context, single,
834
849
  name_t, given_name, comment
835
850
  elsif name_t[:kind] == :on_op && name_t[:text] == '<<'
836
- case name = get_class_specification
851
+ case name = skip_parentheses { get_class_specification }
837
852
  when 'self', container.name
838
853
  read_documentation_modifiers cls, RDoc::CLASS_MODIFIERS
839
854
  parse_statements container, SINGLE
@@ -2119,7 +2134,7 @@ class RDoc::Parser::Ruby < RDoc::Parser
2119
2134
  if :on_nl == tk[:kind] or (:on_kw == tk[:kind] && 'def' == tk[:text]) then
2120
2135
  return
2121
2136
  elsif :on_comment == tk[:kind] or :on_embdoc == tk[:kind] then
2122
- return unless tk[:text] =~ /\s*:?([\w-]+):\s*(.*)/
2137
+ return unless tk[:text] =~ /:?\b([\w-]+):\s*(.*)/
2123
2138
 
2124
2139
  directive = $1.downcase
2125
2140
 
@@ -163,5 +163,3 @@ module RDoc::Parser::RubyTools
163
163
  end
164
164
 
165
165
  end
166
-
167
-
@@ -9,4 +9,3 @@
9
9
 
10
10
  module RDoc::Parser::Text
11
11
  end
12
-
data/lib/rdoc/parser.rb CHANGED
@@ -263,9 +263,26 @@ class RDoc::Parser
263
263
  @preprocess.options = @options
264
264
  end
265
265
 
266
- autoload :RubyTools, 'rdoc/parser/ruby_tools'
267
- autoload :Text, 'rdoc/parser/text'
266
+ autoload :RubyTools, "#{__dir__}/parser/ruby_tools"
267
+ autoload :Text, "#{__dir__}/parser/text"
268
268
 
269
+ ##
270
+ # Normalizes tabs in +body+
271
+
272
+ def handle_tab_width(body)
273
+ if /\t/ =~ body
274
+ tab_width = @options.tab_width
275
+ body.split(/\n/).map do |line|
276
+ 1 while line.gsub!(/\t+/) do
277
+ b, e = $~.offset(0)
278
+ ' ' * (tab_width * (e-b) - b % tab_width)
279
+ end
280
+ line
281
+ end.join "\n"
282
+ else
283
+ body
284
+ end
285
+ end
269
286
  end
270
287
 
271
288
  # simple must come first in order to show up last in the parsers list