rdoc 5.1.0 → 6.13.1

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 (179) hide show
  1. checksums.yaml +5 -5
  2. data/CONTRIBUTING.rdoc +5 -6
  3. data/ExampleMarkdown.md +2 -0
  4. data/ExampleRDoc.rdoc +2 -0
  5. data/History.rdoc +68 -66
  6. data/LEGAL.rdoc +1 -1
  7. data/LICENSE.rdoc +2 -0
  8. data/README.rdoc +18 -6
  9. data/RI.md +842 -0
  10. data/TODO.rdoc +8 -7
  11. data/exe/rdoc +0 -1
  12. data/lib/rdoc/{alias.rb → code_object/alias.rb} +4 -12
  13. data/lib/rdoc/{anon_class.rb → code_object/anon_class.rb} +1 -2
  14. data/lib/rdoc/{any_method.rb → code_object/any_method.rb} +83 -26
  15. data/lib/rdoc/{attr.rb → code_object/attr.rb} +5 -9
  16. data/lib/rdoc/{class_module.rb → code_object/class_module.rb} +112 -24
  17. data/lib/rdoc/{constant.rb → code_object/constant.rb} +4 -5
  18. data/lib/rdoc/{context → code_object/context}/section.rb +13 -83
  19. data/lib/rdoc/{context.rb → code_object/context.rb} +69 -70
  20. data/lib/rdoc/{extend.rb → code_object/extend.rb} +1 -2
  21. data/lib/rdoc/{ghost_method.rb → code_object/ghost_method.rb} +1 -2
  22. data/lib/rdoc/{include.rb → code_object/include.rb} +1 -2
  23. data/lib/rdoc/{meta_method.rb → code_object/meta_method.rb} +1 -2
  24. data/lib/rdoc/{method_attr.rb → code_object/method_attr.rb} +22 -31
  25. data/lib/rdoc/{mixin.rb → code_object/mixin.rb} +1 -2
  26. data/lib/rdoc/{normal_class.rb → code_object/normal_class.rb} +4 -5
  27. data/lib/rdoc/{normal_module.rb → code_object/normal_module.rb} +2 -3
  28. data/lib/rdoc/{require.rb → code_object/require.rb} +2 -3
  29. data/lib/rdoc/{single_class.rb → code_object/single_class.rb} +6 -2
  30. data/lib/rdoc/{top_level.rb → code_object/top_level.rb} +22 -32
  31. data/lib/rdoc/code_object.rb +8 -41
  32. data/lib/rdoc/code_objects.rb +2 -3
  33. data/lib/rdoc/comment.rb +48 -41
  34. data/lib/rdoc/cross_reference.rb +77 -33
  35. data/lib/rdoc/encoding.rb +50 -38
  36. data/lib/rdoc/erb_partial.rb +2 -3
  37. data/lib/rdoc/erbio.rb +4 -5
  38. data/lib/rdoc/generator/darkfish.rb +178 -125
  39. data/lib/rdoc/generator/json_index.rb +9 -22
  40. data/lib/rdoc/generator/markup.rb +6 -17
  41. data/lib/rdoc/generator/pot/message_extractor.rb +4 -4
  42. data/lib/rdoc/generator/pot/po.rb +3 -3
  43. data/lib/rdoc/generator/pot/po_entry.rb +12 -12
  44. data/lib/rdoc/generator/pot.rb +4 -8
  45. data/lib/rdoc/generator/ri.rb +1 -2
  46. data/lib/rdoc/generator/template/darkfish/_footer.rhtml +2 -2
  47. data/lib/rdoc/generator/template/darkfish/_head.rhtml +35 -12
  48. data/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +1 -5
  49. data/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +7 -7
  50. data/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +7 -7
  51. data/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +6 -6
  52. data/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml +19 -10
  53. data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +26 -6
  54. data/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml +4 -9
  55. data/lib/rdoc/generator/template/darkfish/_sidebar_search.rhtml +1 -1
  56. data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +4 -4
  57. data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +27 -6
  58. data/lib/rdoc/generator/template/darkfish/_sidebar_toggle.rhtml +3 -0
  59. data/lib/rdoc/generator/template/darkfish/class.rhtml +125 -78
  60. data/lib/rdoc/generator/template/darkfish/css/rdoc.css +430 -339
  61. data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttf +0 -0
  62. data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttf +0 -0
  63. data/lib/rdoc/generator/template/darkfish/index.rhtml +13 -13
  64. data/lib/rdoc/generator/template/darkfish/js/darkfish.js +51 -92
  65. data/lib/rdoc/generator/template/darkfish/js/search.js +35 -34
  66. data/lib/rdoc/generator/template/darkfish/page.rhtml +5 -5
  67. data/lib/rdoc/generator/template/darkfish/servlet_not_found.rhtml +10 -8
  68. data/lib/rdoc/generator/template/darkfish/servlet_root.rhtml +20 -18
  69. data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +32 -20
  70. data/lib/rdoc/generator/template/json_index/js/navigation.js +12 -49
  71. data/lib/rdoc/generator/template/json_index/js/searcher.js +6 -6
  72. data/lib/rdoc/generator.rb +6 -6
  73. data/lib/rdoc/i18n/locale.rb +1 -1
  74. data/lib/rdoc/i18n/text.rb +5 -5
  75. data/lib/rdoc/i18n.rb +4 -4
  76. data/lib/rdoc/known_classes.rb +6 -5
  77. data/lib/rdoc/markdown/entities.rb +1 -2
  78. data/lib/rdoc/markdown/literals.kpeg +1 -2
  79. data/lib/rdoc/markdown/literals.rb +99 -50
  80. data/lib/rdoc/markdown.kpeg +115 -58
  81. data/lib/rdoc/markdown.rb +1584 -902
  82. data/lib/rdoc/markup/attr_changer.rb +1 -2
  83. data/lib/rdoc/markup/attr_span.rb +9 -4
  84. data/lib/rdoc/markup/attribute_manager.rb +118 -57
  85. data/lib/rdoc/markup/attributes.rb +7 -8
  86. data/lib/rdoc/markup/blank_line.rb +1 -2
  87. data/lib/rdoc/markup/block_quote.rb +1 -2
  88. data/lib/rdoc/markup/document.rb +1 -2
  89. data/lib/rdoc/markup/formatter.rb +44 -37
  90. data/lib/rdoc/markup/hard_break.rb +1 -2
  91. data/lib/rdoc/markup/heading.rb +11 -6
  92. data/lib/rdoc/markup/include.rb +1 -2
  93. data/lib/rdoc/markup/indented_paragraph.rb +1 -2
  94. data/lib/rdoc/markup/list.rb +1 -2
  95. data/lib/rdoc/markup/list_item.rb +1 -2
  96. data/lib/rdoc/markup/paragraph.rb +1 -2
  97. data/lib/rdoc/markup/parser.rb +90 -48
  98. data/lib/rdoc/markup/pre_process.rb +38 -11
  99. data/lib/rdoc/markup/raw.rb +1 -2
  100. data/lib/rdoc/markup/regexp_handling.rb +40 -0
  101. data/lib/rdoc/markup/rule.rb +1 -2
  102. data/lib/rdoc/markup/table.rb +56 -0
  103. data/lib/rdoc/markup/to_ansi.rb +1 -2
  104. data/lib/rdoc/markup/to_bs.rb +30 -5
  105. data/lib/rdoc/markup/to_html.rb +95 -40
  106. data/lib/rdoc/markup/to_html_crossref.rb +108 -43
  107. data/lib/rdoc/markup/to_html_snippet.rb +13 -11
  108. data/lib/rdoc/markup/to_joined_paragraph.rb +6 -32
  109. data/lib/rdoc/markup/to_label.rb +11 -12
  110. data/lib/rdoc/markup/to_markdown.rb +13 -14
  111. data/lib/rdoc/markup/to_rdoc.rb +49 -31
  112. data/lib/rdoc/markup/to_table_of_contents.rb +2 -2
  113. data/lib/rdoc/markup/to_test.rb +1 -2
  114. data/lib/rdoc/markup/to_tt_only.rb +3 -4
  115. data/lib/rdoc/markup/verbatim.rb +1 -2
  116. data/lib/rdoc/markup.rb +64 -694
  117. data/lib/rdoc/options.rb +226 -44
  118. data/lib/rdoc/parser/c.rb +231 -246
  119. data/lib/rdoc/parser/changelog.rb +169 -23
  120. data/lib/rdoc/parser/markdown.rb +1 -3
  121. data/lib/rdoc/parser/prism_ruby.rb +1092 -0
  122. data/lib/rdoc/parser/rd.rb +1 -2
  123. data/lib/rdoc/parser/ripper_state_lex.rb +302 -0
  124. data/lib/rdoc/parser/ruby.rb +695 -478
  125. data/lib/rdoc/parser/ruby_tools.rb +33 -36
  126. data/lib/rdoc/parser/simple.rb +4 -4
  127. data/lib/rdoc/parser/text.rb +1 -2
  128. data/lib/rdoc/parser.rb +37 -42
  129. data/lib/rdoc/rd/block_parser.rb +708 -57
  130. data/lib/rdoc/rd/block_parser.ry +15 -11
  131. data/lib/rdoc/rd/inline.rb +5 -6
  132. data/lib/rdoc/rd/inline_parser.rb +787 -140
  133. data/lib/rdoc/rd/inline_parser.ry +1 -1
  134. data/lib/rdoc/rd.rb +4 -5
  135. data/lib/rdoc/rdoc.rb +72 -87
  136. data/lib/rdoc/ri/driver.rb +236 -152
  137. data/lib/rdoc/ri/formatter.rb +1 -1
  138. data/lib/rdoc/ri/paths.rb +4 -18
  139. data/lib/rdoc/ri/store.rb +1 -2
  140. data/lib/rdoc/ri/task.rb +2 -2
  141. data/lib/rdoc/ri.rb +5 -6
  142. data/lib/rdoc/rubygems_hook.rb +98 -20
  143. data/lib/rdoc/servlet.rb +30 -20
  144. data/lib/rdoc/stats/normal.rb +24 -18
  145. data/lib/rdoc/stats/quiet.rb +1 -2
  146. data/lib/rdoc/stats/verbose.rb +1 -3
  147. data/lib/rdoc/stats.rb +6 -7
  148. data/lib/rdoc/store.rb +84 -55
  149. data/lib/rdoc/task.rb +35 -10
  150. data/lib/rdoc/text.rb +40 -27
  151. data/lib/rdoc/token_stream.rb +56 -34
  152. data/lib/rdoc/tom_doc.rb +18 -19
  153. data/lib/rdoc/version.rb +10 -0
  154. data/lib/rdoc.rb +80 -56
  155. data/lib/rubygems_plugin.rb +23 -0
  156. data/man/ri.1 +247 -0
  157. metadata +45 -99
  158. data/.document +0 -5
  159. data/.gitignore +0 -13
  160. data/.travis.yml +0 -24
  161. data/Gemfile +0 -3
  162. data/RI.rdoc +0 -57
  163. data/Rakefile +0 -133
  164. data/bin/console +0 -7
  165. data/bin/setup +0 -6
  166. data/lib/gauntlet_rdoc.rb +0 -82
  167. data/lib/rdoc/generator/template/darkfish/.document +0 -0
  168. data/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml +0 -19
  169. data/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml +0 -9
  170. data/lib/rdoc/generator/template/darkfish/js/jquery.js +0 -4
  171. data/lib/rdoc/generator/template/json_index/.document +0 -1
  172. data/lib/rdoc/markup/formatter_test_case.rb +0 -764
  173. data/lib/rdoc/markup/inline.rb +0 -2
  174. data/lib/rdoc/markup/special.rb +0 -41
  175. data/lib/rdoc/markup/text_formatter_test_case.rb +0 -115
  176. data/lib/rdoc/ruby_lex.rb +0 -1367
  177. data/lib/rdoc/ruby_token.rb +0 -461
  178. data/lib/rdoc/test_case.rb +0 -204
  179. data/rdoc.gemspec +0 -57
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  ##
3
3
  # A Paragraph of text
4
4
 
@@ -26,4 +26,3 @@ class RDoc::Markup::Paragraph < RDoc::Markup::Raw
26
26
  end
27
27
 
28
28
  end
29
-
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  require 'strscan'
3
3
 
4
4
  ##
@@ -9,8 +9,9 @@ require 'strscan'
9
9
  # RDoc::Markup::ToHTML.
10
10
  #
11
11
  # The parser only handles the block-level constructs Paragraph, List,
12
- # ListItem, Heading, Verbatim, BlankLine and Rule. Inline markup such as
13
- # <tt>\+blah\+</tt> is handled separately by RDoc::Markup::AttributeManager.
12
+ # ListItem, Heading, Verbatim, BlankLine, Rule and BlockQuote.
13
+ # Inline markup such as <tt>\+blah\+</tt> is handled separately by
14
+ # RDoc::Markup::AttributeManager.
14
15
  #
15
16
  # To see what markup the Parser implements read RDoc. To see how to use
16
17
  # RDoc markup to format text in your program read RDoc::Markup.
@@ -79,10 +80,6 @@ class RDoc::Markup::Parser
79
80
  @binary_input = nil
80
81
  @current_token = nil
81
82
  @debug = false
82
- @input = nil
83
- @input_encoding = nil
84
- @line = 0
85
- @line_pos = 0
86
83
  @s = nil
87
84
  @tokens = []
88
85
  end
@@ -221,7 +218,7 @@ class RDoc::Markup::Parser
221
218
 
222
219
  break if peek_token.first == :BREAK
223
220
 
224
- data << ' ' if skip :NEWLINE
221
+ data << ' ' if skip :NEWLINE and /#{SPACE_SEPARATED_LETTER_CLASS}\z/o.match?(data)
225
222
  else
226
223
  unget
227
224
  break
@@ -249,7 +246,7 @@ class RDoc::Markup::Parser
249
246
 
250
247
  min_indent = nil
251
248
  generate_leading_spaces = true
252
- line = ''
249
+ line = ''.dup
253
250
 
254
251
  until @tokens.empty? do
255
252
  type, data, column, = get
@@ -257,7 +254,7 @@ class RDoc::Markup::Parser
257
254
  if type == :NEWLINE then
258
255
  line << data
259
256
  verbatim << line
260
- line = ''
257
+ line = ''.dup
261
258
  generate_leading_spaces = true
262
259
  next
263
260
  end
@@ -290,6 +287,12 @@ class RDoc::Markup::Parser
290
287
  line << ' ' * indent
291
288
  when :BREAK, :TEXT then
292
289
  line << data
290
+ when :BLOCKQUOTE then
291
+ line << '>>>'
292
+ peek_type, _, peek_column = peek_token
293
+ if peek_type != :NEWLINE and peek_column
294
+ line << ' ' * (peek_column - column - 3)
295
+ end
293
296
  else # *LIST_TOKENS
294
297
  list_marker = case type
295
298
  when :BULLET then data
@@ -318,13 +321,6 @@ class RDoc::Markup::Parser
318
321
  verbatim
319
322
  end
320
323
 
321
- ##
322
- # The character offset for the input string at the given +byte_offset+
323
-
324
- def char_pos byte_offset
325
- @input.byteslice(0, byte_offset).length
326
- end
327
-
328
324
  ##
329
325
  # Pulls the next token from the stream.
330
326
 
@@ -381,6 +377,14 @@ class RDoc::Markup::Parser
381
377
  when :TEXT then
382
378
  unget
383
379
  parse_text parent, indent
380
+ when :BLOCKQUOTE then
381
+ nil while (type, = get; type) and type != :NEWLINE
382
+ _, _, column, = peek_token
383
+ bq = RDoc::Markup::BlockQuote.new
384
+ p :blockquote_start => [data, column] if @debug
385
+ parse bq, column
386
+ p :blockquote_end => indent if @debug
387
+ parent << bq
384
388
  when *LIST_TOKENS then
385
389
  unget
386
390
  parent << build_list(indent)
@@ -412,15 +416,57 @@ class RDoc::Markup::Parser
412
416
  token
413
417
  end
414
418
 
419
+ ##
420
+ # A simple wrapper of StringScanner that is aware of the current column and lineno
421
+
422
+ class MyStringScanner
423
+ # :stopdoc:
424
+
425
+ def initialize(input)
426
+ @line = @column = 0
427
+ @s = StringScanner.new input
428
+ end
429
+
430
+ def scan(re)
431
+ ret = @s.scan(re)
432
+ @column += ret.length if ret
433
+ ret
434
+ end
435
+
436
+ def unscan(s)
437
+ @s.pos -= s.bytesize
438
+ @column -= s.length
439
+ end
440
+
441
+ def pos
442
+ [@column, @line]
443
+ end
444
+
445
+ def newline!
446
+ @column = 0
447
+ @line += 1
448
+ end
449
+
450
+ def eos?
451
+ @s.eos?
452
+ end
453
+
454
+ def matched
455
+ @s.matched
456
+ end
457
+
458
+ def [](i)
459
+ @s[i]
460
+ end
461
+
462
+ #:startdoc:
463
+ end
464
+
415
465
  ##
416
466
  # Creates the StringScanner
417
467
 
418
468
  def setup_scanner input
419
- @line = 0
420
- @line_pos = 0
421
- @input = input.dup
422
-
423
- @s = StringScanner.new input
469
+ @s = MyStringScanner.new input
424
470
  end
425
471
 
426
472
  ##
@@ -455,31 +501,30 @@ class RDoc::Markup::Parser
455
501
  @tokens << case
456
502
  # [CR]LF => :NEWLINE
457
503
  when @s.scan(/\r?\n/) then
458
- token = [:NEWLINE, @s.matched, *token_pos(pos)]
459
- @line_pos = char_pos @s.pos
460
- @line += 1
504
+ token = [:NEWLINE, @s.matched, *pos]
505
+ @s.newline!
461
506
  token
462
507
  # === text => :HEADER then :TEXT
463
508
  when @s.scan(/(=+)(\s*)/) then
464
509
  level = @s[1].length
465
- header = [:HEADER, level, *token_pos(pos)]
510
+ header = [:HEADER, level, *pos]
466
511
 
467
512
  if @s[2] =~ /^\r?\n/ then
468
- @s.pos -= @s[2].length
513
+ @s.unscan(@s[2])
469
514
  header
470
515
  else
471
516
  pos = @s.pos
472
517
  @s.scan(/.*/)
473
518
  @tokens << header
474
- [:TEXT, @s.matched.sub(/\r$/, ''), *token_pos(pos)]
519
+ [:TEXT, @s.matched.sub(/\r$/, ''), *pos]
475
520
  end
476
521
  # --- (at least 3) and nothing else on the line => :RULE
477
522
  when @s.scan(/(-{3,}) *\r?$/) then
478
- [:RULE, @s[1].length - 2, *token_pos(pos)]
523
+ [:RULE, @s[1].length - 2, *pos]
479
524
  # * or - followed by white space and text => :BULLET
480
525
  when @s.scan(/([*-]) +(\S)/) then
481
- @s.pos -= @s[2].bytesize # unget \S
482
- [:BULLET, @s[1], *token_pos(pos)]
526
+ @s.unscan(@s[2])
527
+ [:BULLET, @s[1], *pos]
483
528
  # A. text, a. text, 12. text => :UALPHA, :LALPHA, :NUMBER
484
529
  when @s.scan(/([a-z]|\d+)\. +(\S)/i) then
485
530
  # FIXME if tab(s), the column will be wrong
@@ -488,7 +533,7 @@ class RDoc::Markup::Parser
488
533
  # before (and provide a check for that at least in debug
489
534
  # mode)
490
535
  list_label = @s[1]
491
- @s.pos -= @s[2].bytesize # unget \S
536
+ @s.unscan(@s[2])
492
537
  list_type =
493
538
  case list_label
494
539
  when /[a-z]/ then :LALPHA
@@ -497,20 +542,27 @@ class RDoc::Markup::Parser
497
542
  else
498
543
  raise ParseError, "BUG token #{list_label}"
499
544
  end
500
- [list_type, list_label, *token_pos(pos)]
545
+ [list_type, list_label, *pos]
501
546
  # [text] followed by spaces or end of line => :LABEL
502
547
  when @s.scan(/\[(.*?)\]( +|\r?$)/) then
503
- [:LABEL, @s[1], *token_pos(pos)]
548
+ [:LABEL, @s[1], *pos]
504
549
  # text:: followed by spaces or end of line => :NOTE
505
550
  when @s.scan(/(.*?)::( +|\r?$)/) then
506
- [:NOTE, @s[1], *token_pos(pos)]
551
+ [:NOTE, @s[1], *pos]
552
+ # >>> followed by end of line => :BLOCKQUOTE
553
+ when @s.scan(/>>> *(\w+)?$/) then
554
+ if word = @s[1]
555
+ @s.unscan(word)
556
+ end
557
+ [:BLOCKQUOTE, word, *pos]
507
558
  # anything else: :TEXT
508
- else @s.scan(/(.*?)( )?\r?$/)
509
- token = [:TEXT, @s[1], *token_pos(pos)]
559
+ else
560
+ @s.scan(/(.*?)( )?\r?$/)
561
+ token = [:TEXT, @s[1], *pos]
510
562
 
511
563
  if @s[2] then
512
564
  @tokens << token
513
- [:BREAK, @s[2], *token_pos(pos + @s[1].length)]
565
+ [:BREAK, @s[2], pos[0] + @s[1].length, pos[1]]
514
566
  else
515
567
  token
516
568
  end
@@ -520,16 +572,6 @@ class RDoc::Markup::Parser
520
572
  self
521
573
  end
522
574
 
523
- ##
524
- # Calculates the column (by character) and line of the current token based
525
- # on +byte_offset+.
526
-
527
- def token_pos byte_offset
528
- offset = char_pos byte_offset
529
-
530
- [offset - @line_pos, @line]
531
- end
532
-
533
575
  ##
534
576
  # Returns the current token to the token stream
535
577
 
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  ##
3
3
  # Handle common directives that can occur in a block of text:
4
4
  #
@@ -97,15 +97,18 @@ class RDoc::Markup::PreProcess
97
97
  # RDoc::CodeObject#metadata for details.
98
98
 
99
99
  def handle text, code_object = nil, &block
100
+ first_line = 1
100
101
  if RDoc::Comment === text then
101
102
  comment = text
102
103
  text = text.text
104
+ first_line = comment.line || 1
103
105
  end
104
106
 
105
107
  # regexp helper (square brackets for optional)
106
108
  # $1 $2 $3 $4 $5
107
109
  # [prefix][\]:directive:[spaces][param]newline
108
- text.gsub!(/^([ \t]*(?:#|\/?\*)?[ \t]*)(\\?):(\w+):([ \t]*)(.+)?(\r?\n|$)/) do
110
+ text = text.lines.map.with_index(first_line) do |line, num|
111
+ next line unless line =~ /\A([ \t]*(?:#|\/?\*)?[ \t]*)(\\?):([\w-]+):([ \t]*)(.+)?(\r?\n|$)/
109
112
  # skip something like ':toto::'
110
113
  next $& if $4.empty? and $5 and $5[0, 1] == ':'
111
114
 
@@ -120,10 +123,14 @@ class RDoc::Markup::PreProcess
120
123
  next "#{$1.strip}\n"
121
124
  end
122
125
 
123
- handle_directive $1, $3, $5, code_object, text.encoding, &block
124
- end
126
+ handle_directive $1, $3, $5, code_object, text.encoding, num, &block
127
+ end.join
125
128
 
126
- comment = text unless comment
129
+ if comment then
130
+ comment.text = text
131
+ else
132
+ comment = text
133
+ end
127
134
 
128
135
  self.class.post_processors.each do |handler|
129
136
  handler.call comment, code_object
@@ -144,13 +151,13 @@ class RDoc::Markup::PreProcess
144
151
  # When 1.8.7 support is ditched prefix can be defaulted to ''
145
152
 
146
153
  def handle_directive prefix, directive, param, code_object = nil,
147
- encoding = nil
154
+ encoding = nil, line = nil
148
155
  blankline = "#{prefix.strip}\n"
149
156
  directive = directive.downcase
150
157
 
151
158
  case directive
152
159
  when 'arg', 'args' then
153
- return "#{prefix}:#{directive}: #{param}\n" unless code_object
160
+ return "#{prefix}:#{directive}: #{param}\n" unless code_object && code_object.kind_of?(RDoc::AnyMethod)
154
161
 
155
162
  code_object.params = param
156
163
 
@@ -159,6 +166,8 @@ class RDoc::Markup::PreProcess
159
166
  if RDoc::Context === code_object then
160
167
  section = code_object.add_section param
161
168
  code_object.temporary_section = section
169
+ elsif RDoc::AnyMethod === code_object then
170
+ code_object.section_title = param
162
171
  end
163
172
 
164
173
  blankline # ignore category if we're not on an RDoc::Context
@@ -174,10 +183,18 @@ class RDoc::Markup::PreProcess
174
183
 
175
184
  blankline
176
185
  when 'include' then
177
- filename = param.split.first
186
+ filename = param.split(' ', 2).first
178
187
  include_file filename, prefix, encoding
179
188
  when 'main' then
180
189
  @options.main_page = param if @options.respond_to? :main_page
190
+ warn <<~MSG
191
+ The :main: directive is deprecated and will be removed in RDoc 7.
192
+
193
+ You can use these options to specify the initial page displayed instead:
194
+ - `--main=#{param}` via the command line
195
+ - `rdoc.main = "#{param}"` if you use `RDoc::Task`
196
+ - `main_page: #{param}` in your `.rdoc_options` file
197
+ MSG
181
198
 
182
199
  blankline
183
200
  when 'nodoc' then
@@ -208,17 +225,26 @@ class RDoc::Markup::PreProcess
208
225
  when 'title' then
209
226
  @options.default_title = param if @options.respond_to? :default_title=
210
227
 
228
+ warn <<~MSG
229
+ The :title: directive is deprecated and will be removed in RDoc 7.
230
+
231
+ You can use these options to specify the title displayed instead:
232
+ - `--title=#{param}` via the command line
233
+ - `rdoc.title = "#{param}"` if you use `RDoc::Task`
234
+ - `title: #{param}` in your `.rdoc_options` file
235
+ MSG
236
+
211
237
  blankline
212
238
  when 'yield', 'yields' then
213
239
  return blankline unless code_object
214
240
  # remove parameter &block
215
- code_object.params.sub!(/,?\s*&\w+/, '') if code_object.params
241
+ code_object.params = code_object.params.sub(/,?\s*&\w+/, '') if code_object.params
216
242
 
217
- code_object.block_params = param
243
+ code_object.block_params = param || ''
218
244
 
219
245
  blankline
220
246
  else
221
- result = yield directive, param if block_given?
247
+ result = yield directive, param, line if block_given?
222
248
 
223
249
  case result
224
250
  when nil then
@@ -262,6 +288,7 @@ class RDoc::Markup::PreProcess
262
288
  end
263
289
 
264
290
  content = RDoc::Encoding.read_file full_name, encoding, true
291
+ content = RDoc::Encoding.remove_magic_comment content
265
292
 
266
293
  # strip magic comment
267
294
  content = content.sub(/\A# .*coding[=:].*$/, '').lstrip
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  ##
3
3
  # A section of text that is added to the output document as-is
4
4
 
@@ -67,4 +67,3 @@ class RDoc::Markup::Raw
67
67
  end
68
68
 
69
69
  end
70
-
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+ ##
3
+ # Hold details of a regexp handling sequence
4
+
5
+ class RDoc::Markup::RegexpHandling
6
+
7
+ ##
8
+ # Regexp handling type
9
+
10
+ attr_reader :type
11
+
12
+ ##
13
+ # Regexp handling text
14
+
15
+ attr_accessor :text
16
+
17
+ ##
18
+ # Creates a new regexp handling sequence of +type+ with +text+
19
+
20
+ def initialize(type, text)
21
+ @type, @text = type, text
22
+ end
23
+
24
+ ##
25
+ # Regexp handlings are equal when the have the same text and type
26
+
27
+ def ==(o)
28
+ self.text == o.text && self.type == o.type
29
+ end
30
+
31
+ def inspect # :nodoc:
32
+ "#<RDoc::Markup::RegexpHandling:0x%x @type=%p, @text=%p>" % [
33
+ object_id, @type, text.dump]
34
+ end
35
+
36
+ def to_s # :nodoc:
37
+ "RegexpHandling: type=#{type} text=#{text.dump}"
38
+ end
39
+
40
+ end
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  ##
3
3
  # A horizontal rule with a weight
4
4
 
@@ -18,4 +18,3 @@ class RDoc::Markup::Rule < Struct.new :weight
18
18
  end
19
19
 
20
20
  end
21
-
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+ ##
3
+ # A section of table
4
+
5
+ class RDoc::Markup::Table
6
+ # headers of each column
7
+ attr_accessor :header
8
+
9
+ # alignments of each column
10
+ attr_accessor :align
11
+
12
+ # body texts of each column
13
+ attr_accessor :body
14
+
15
+ # Creates new instance
16
+ def initialize header, align, body
17
+ @header, @align, @body = header, align, body
18
+ end
19
+
20
+ # :stopdoc:
21
+ def == other
22
+ self.class == other.class and
23
+ @header == other.header and
24
+ @align == other.align and
25
+ @body == other.body
26
+ end
27
+
28
+ def accept visitor
29
+ visitor.accept_table @header, @body, @align
30
+ end
31
+
32
+ def pretty_print q
33
+ q.group 2, '[Table: ', ']' do
34
+ q.group 2, '[Head: ', ']' do
35
+ q.seplist @header.zip(@align) do |text, align|
36
+ q.pp text
37
+ if align
38
+ q.text ":"
39
+ q.breakable
40
+ q.text align.to_s
41
+ end
42
+ end
43
+ end
44
+ q.breakable
45
+ q.group 2, '[Body: ', ']' do
46
+ q.seplist @body do |body|
47
+ q.group 2, '[', ']' do
48
+ q.seplist body do |text|
49
+ q.pp text
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  ##
3
3
  # Outputs RDoc markup with vibrant ANSI color!
4
4
 
@@ -91,4 +91,3 @@ class RDoc::Markup::ToAnsi < RDoc::Markup::ToRdoc
91
91
  end
92
92
 
93
93
  end
94
-
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  ##
3
3
  # Outputs RDoc markup with hot backspace action! You will probably need a
4
4
  # pager to use this output format.
@@ -24,7 +24,7 @@ class RDoc::Markup::ToBs < RDoc::Markup::ToRdoc
24
24
  def init_tags
25
25
  add_tag :BOLD, '+b', '-b'
26
26
  add_tag :EM, '+_', '-_'
27
- add_tag :TT, '' , '' # we need in_tt information maintained
27
+ add_tag :TT, '', '' # we need in_tt information maintained
28
28
  end
29
29
 
30
30
  ##
@@ -41,7 +41,32 @@ class RDoc::Markup::ToBs < RDoc::Markup::ToRdoc
41
41
  end
42
42
 
43
43
  ##
44
- # Turns on or off special handling for +convert_string+
44
+ # Prepares the visitor for consuming +list_item+
45
+
46
+ def accept_list_item_start list_item
47
+ type = @list_type.last
48
+
49
+ case type
50
+ when :NOTE, :LABEL then
51
+ bullets = Array(list_item.label).map do |label|
52
+ attributes(label).strip
53
+ end.join "\n"
54
+
55
+ bullets << ":\n" unless bullets.empty?
56
+
57
+ @prefix = ' ' * @indent
58
+ @indent += 2
59
+ @prefix << bullets + (' ' * @indent)
60
+ else
61
+ bullet = type == :BULLET ? '*' : @list_index.last.to_s + '.'
62
+ @prefix = (' ' * @indent) + bullet.ljust(bullet.length + 1)
63
+ width = bullet.length + 1
64
+ @indent += width
65
+ end
66
+ end
67
+
68
+ ##
69
+ # Turns on or off regexp handling for +convert_string+
45
70
 
46
71
  def annotate tag
47
72
  case tag
@@ -54,9 +79,9 @@ class RDoc::Markup::ToBs < RDoc::Markup::ToRdoc
54
79
  end
55
80
 
56
81
  ##
57
- # Calls convert_string on the result of convert_special
82
+ # Calls convert_string on the result of convert_regexp_handling
58
83
 
59
- def convert_special special
84
+ def convert_regexp_handling target
60
85
  convert_string super
61
86
  end
62
87