rdoc 6.4.0 → 6.6.0

Sign up to get free protection for your applications and to get access to all the features.
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