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,5 +1,5 @@
1
- # frozen_string_literal: false
2
- require 'cgi'
1
+ # frozen_string_literal: true
2
+ require 'cgi/util'
3
3
 
4
4
  ##
5
5
  # Outputs RDoc markup as HTML.
@@ -52,24 +52,40 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
52
52
  @th = nil
53
53
  @hard_break = "<br>\n"
54
54
 
55
- # external links
56
- @markup.add_special(/(?:link:|https?:|mailto:|ftp:|irc:|www\.)\S+\w/,
57
- :HYPERLINK)
58
-
59
- add_special_RDOCLINK
60
- add_special_TIDYLINK
55
+ init_regexp_handlings
61
56
 
62
57
  init_tags
63
58
  end
64
59
 
65
- # :section: Special Handling
60
+ # :section: Regexp Handling
66
61
  #
67
- # These methods handle special markup added by RDoc::Markup#add_special.
62
+ # These methods are used by regexp handling markup added by RDoc::Markup#add_regexp_handling.
63
+
64
+ # :nodoc:
65
+ URL_CHARACTERS_REGEXP_STR = /[A-Za-z0-9\-._~:\/\?#\[\]@!$&'\(\)*+,;%=]/.source
66
+
67
+ ##
68
+ # Adds regexp handlings.
69
+
70
+ def init_regexp_handlings
71
+ # external links
72
+ @markup.add_regexp_handling(/(?:link:|https?:|mailto:|ftp:|irc:|www\.)#{URL_CHARACTERS_REGEXP_STR}+\w/,
73
+ :HYPERLINK)
74
+ init_link_notation_regexp_handlings
75
+ end
76
+
77
+ ##
78
+ # Adds regexp handlings about link notations.
79
+
80
+ def init_link_notation_regexp_handlings
81
+ add_regexp_handling_RDOCLINK
82
+ add_regexp_handling_TIDYLINK
83
+ end
68
84
 
69
85
  def handle_RDOCLINK url # :nodoc:
70
86
  case url
71
87
  when /^rdoc-ref:/
72
- $'
88
+ CGI.escapeHTML($')
73
89
  when /^rdoc-label:/
74
90
  text = $'
75
91
 
@@ -80,25 +96,28 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
80
96
  else text
81
97
  end
82
98
 
83
- gen_url url, text
99
+ gen_url CGI.escapeHTML(url), CGI.escapeHTML(text)
84
100
  when /^rdoc-image:/
85
- "<img src=\"#{$'}\">"
86
- else
87
- url =~ /\Ardoc-[a-z]+:/
88
-
89
- $'
101
+ url, alt = $'.split(":", 2) # Split the string after "rdoc-image:" into url and alt
102
+ if alt && !alt.empty?
103
+ %[<img src="#{CGI.escapeHTML(url)}" alt="#{CGI.escapeHTML(alt)}">]
104
+ else
105
+ %[<img src="#{CGI.escapeHTML(url)}">]
106
+ end
107
+ when /\Ardoc-[a-z]+:/
108
+ CGI.escapeHTML($')
90
109
  end
91
110
  end
92
111
 
93
112
  ##
94
- # +special+ is a <code><br></code>
113
+ # +target+ is a <code><br></code>
95
114
 
96
- def handle_special_HARD_BREAK special
115
+ def handle_regexp_HARD_BREAK target
97
116
  '<br>'
98
117
  end
99
118
 
100
119
  ##
101
- # +special+ is a potential link. The following schemes are handled:
120
+ # +target+ is a potential link. The following schemes are handled:
102
121
  #
103
122
  # <tt>mailto:</tt>::
104
123
  # Inserted as-is.
@@ -109,14 +128,14 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
109
128
  # <tt>link:</tt>::
110
129
  # Reference to a local file relative to the output directory.
111
130
 
112
- def handle_special_HYPERLINK(special)
113
- url = special.text
131
+ def handle_regexp_HYPERLINK(target)
132
+ url = CGI.escapeHTML(target.text)
114
133
 
115
134
  gen_url url, url
116
135
  end
117
136
 
118
137
  ##
119
- # +special+ is an rdoc-schemed link that will be converted into a hyperlink.
138
+ # +target+ is an rdoc-schemed link that will be converted into a hyperlink.
120
139
  #
121
140
  # For the +rdoc-ref+ scheme the named reference will be returned without
122
141
  # creating a link.
@@ -124,24 +143,28 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
124
143
  # For the +rdoc-label+ scheme the footnote and label prefixes are stripped
125
144
  # when creating a link. All other contents will be linked verbatim.
126
145
 
127
- def handle_special_RDOCLINK special
128
- handle_RDOCLINK special.text
146
+ def handle_regexp_RDOCLINK target
147
+ handle_RDOCLINK target.text
129
148
  end
130
149
 
131
150
  ##
132
- # This +special+ is a link where the label is different from the URL
151
+ # This +target+ is a link where the label is different from the URL
133
152
  # <tt>label[url]</tt> or <tt>{long label}[url]</tt>
134
153
 
135
- def handle_special_TIDYLINK(special)
136
- text = special.text
154
+ def handle_regexp_TIDYLINK(target)
155
+ text = target.text
137
156
 
138
157
  return text unless
139
158
  text =~ /^\{(.*)\}\[(.*?)\]$/ or text =~ /^(\S+)\[(.*?)\]$/
140
159
 
141
160
  label = $1
142
- url = $2
161
+ url = CGI.escapeHTML($2)
143
162
 
144
- label = handle_RDOCLINK label if /^rdoc-image:/ =~ label
163
+ if /^rdoc-image:/ =~ label
164
+ label = handle_RDOCLINK(label)
165
+ else
166
+ label = CGI.escapeHTML(label)
167
+ end
145
168
 
146
169
  gen_url url, label
147
170
  end
@@ -185,8 +208,10 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
185
208
  def accept_paragraph paragraph
186
209
  @res << "\n<p>"
187
210
  text = paragraph.text @hard_break
188
- text = text.gsub(/\r?\n/, ' ')
189
- @res << wrap(to_html(text))
211
+ text = text.gsub(/(#{SPACE_SEPARATED_LETTER_CLASS})?\K\r?\n(?=(?(1)(#{SPACE_SEPARATED_LETTER_CLASS})?))/o) {
212
+ defined?($2) && ' '
213
+ }
214
+ @res << to_html(text)
190
215
  @res << "</p>\n"
191
216
  end
192
217
 
@@ -200,11 +225,13 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
200
225
 
201
226
  content = if verbatim.ruby? or parseable? text then
202
227
  begin
203
- tokens = RDoc::RubyLex.tokenize text, @options
228
+ tokens = RDoc::Parser::RipperStateLex.parse text
204
229
  klass = ' class="ruby"'
205
230
 
206
- RDoc::TokenStream.to_html tokens
207
- rescue RDoc::RubyLex::Error
231
+ result = RDoc::TokenStream.to_html tokens
232
+ result = result + "\n" unless "\n" == result[-1]
233
+ result
234
+ rescue
208
235
  CGI.escapeHTML text
209
236
  end
210
237
  else
@@ -212,7 +239,7 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
212
239
  end
213
240
 
214
241
  if @options.pipe then
215
- @res << "\n<pre><code>#{CGI.escapeHTML text}</code></pre>\n"
242
+ @res << "\n<pre><code>#{CGI.escapeHTML text}\n</code></pre>\n"
216
243
  else
217
244
  @res << "\n<pre#{klass}>#{content}</pre>\n"
218
245
  end
@@ -299,6 +326,29 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
299
326
  @res << raw.parts.join("\n")
300
327
  end
301
328
 
329
+ ##
330
+ # Adds +table+ to the output
331
+
332
+ def accept_table header, body, aligns
333
+ @res << "\n<table role=\"table\">\n<thead>\n<tr>\n"
334
+ header.zip(aligns) do |text, align|
335
+ @res << '<th'
336
+ @res << ' align="' << align << '"' if align
337
+ @res << '>' << to_html(text) << "</th>\n"
338
+ end
339
+ @res << "</tr>\n</thead>\n<tbody>\n"
340
+ body.each do |row|
341
+ @res << "<tr>\n"
342
+ row.zip(aligns) do |text, align|
343
+ @res << '<td'
344
+ @res << ' align="' << align << '"' if align
345
+ @res << '>' << to_html(text) << "</td>\n"
346
+ end
347
+ @res << "</tr>\n"
348
+ end
349
+ @res << "</tbody>\n</table>\n"
350
+ end
351
+
302
352
  # :section: Utilities
303
353
 
304
354
  ##
@@ -310,7 +360,7 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
310
360
 
311
361
  ##
312
362
  # Generate a link to +url+ with content +text+. Handles the special cases
313
- # for img: and link: described under handle_special_HYPERLINK
363
+ # for img: and link: described under handle_regexp_HYPERLINK
314
364
 
315
365
  def gen_url url, text
316
366
  scheme, url, id = parse_url url
@@ -319,6 +369,10 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
319
369
  url =~ /\.(gif|png|jpg|jpeg|bmp)$/ then
320
370
  "<img src=\"#{url}\" />"
321
371
  else
372
+ if scheme != 'link' and %r%\A((?!https?:)(?:[^/#]*/)*+)([^/#]+)\.(rb|rdoc|md)(?=\z|#)%i =~ url
373
+ url = "#$1#{$2.tr('.', '_')}_#$3.html#$'"
374
+ end
375
+
322
376
  text = text.sub %r%^#{scheme}:/*%i, ''
323
377
  text = text.sub %r%^[*\^](\d+)$%, '\1'
324
378
 
@@ -358,7 +412,7 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
358
412
  "<li>"
359
413
  when :LABEL, :NOTE then
360
414
  Array(list_item.label).map do |label|
361
- "<dt>#{to_html label}\n"
415
+ "<dt>#{to_html label}</dt>\n"
362
416
  end.join << "<dd>"
363
417
  else
364
418
  raise RDoc::Error, "Invalid list type: #{list_type.inspect}"
@@ -384,7 +438,9 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
384
438
 
385
439
  def parseable? text
386
440
  verbose, $VERBOSE = $VERBOSE, nil
387
- eval("BEGIN {return true}\n#{text}")
441
+ catch(:valid) do
442
+ eval("BEGIN { throw :valid, true }\n#{text}")
443
+ end
388
444
  rescue SyntaxError
389
445
  false
390
446
  ensure
@@ -399,4 +455,3 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
399
455
  end
400
456
 
401
457
  end
402
-
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  ##
3
3
  # Subclass of the RDoc::Markup::ToHtml class that supports looking up method
4
4
  # names, classes, etc to create links. RDoc::CrossReference is used to
@@ -39,26 +39,38 @@ class RDoc::Markup::ToHtmlCrossref < RDoc::Markup::ToHtml
39
39
  @hyperlink_all = @options.hyperlink_all
40
40
  @show_hash = @options.show_hash
41
41
 
42
- crossref_re = @hyperlink_all ? ALL_CROSSREF_REGEXP : CROSSREF_REGEXP
43
- @markup.add_special crossref_re, :CROSSREF
44
-
45
42
  @cross_reference = RDoc::CrossReference.new @context
46
43
  end
47
44
 
45
+ # :nodoc:
46
+ def init_link_notation_regexp_handlings
47
+ add_regexp_handling_RDOCLINK
48
+
49
+ # The crossref must be linked before tidylink because Klass.method[:sym]
50
+ # will be processed as a tidylink first and will be broken.
51
+ crossref_re = @options.hyperlink_all ? ALL_CROSSREF_REGEXP : CROSSREF_REGEXP
52
+ @markup.add_regexp_handling crossref_re, :CROSSREF
53
+
54
+ add_regexp_handling_TIDYLINK
55
+ end
56
+
48
57
  ##
49
58
  # Creates a link to the reference +name+ if the name exists. If +text+ is
50
59
  # given it is used as the link text, otherwise +name+ is used.
51
60
 
52
- def cross_reference name, text = nil
61
+ def cross_reference name, text = nil, code = true, rdoc_ref: false
53
62
  lookup = name
54
63
 
55
64
  name = name[1..-1] unless @show_hash if name[0, 1] == '#'
56
65
 
57
- name = "#{CGI.unescape $'} at #{$1}" if name =~ /(.*[^#:])@/
58
-
59
- text = name unless text
66
+ if !(name.end_with?('+@', '-@')) and name =~ /(.*[^#:])?@/
67
+ text ||= [CGI.unescape($'), (" at <code>#{$1}</code>" if $~.begin(1))].join("")
68
+ code = false
69
+ else
70
+ text ||= name
71
+ end
60
72
 
61
- link lookup, text
73
+ link lookup, text, code, rdoc_ref: rdoc_ref
62
74
  end
63
75
 
64
76
  ##
@@ -68,8 +80,10 @@ class RDoc::Markup::ToHtmlCrossref < RDoc::Markup::ToHtml
68
80
  # example, ToHtml is found, even without the <tt>RDoc::Markup::</tt> prefix,
69
81
  # because we look for it in module Markup first.
70
82
 
71
- def handle_special_CROSSREF(special)
72
- name = special.text
83
+ def handle_regexp_CROSSREF(target)
84
+ name = target.text
85
+
86
+ return name if @options.autolink_excluded_words&.include?(name)
73
87
 
74
88
  return name if name =~ /@[\w-]+\.[\w-]/ # labels that look like emails
75
89
 
@@ -80,33 +94,38 @@ class RDoc::Markup::ToHtmlCrossref < RDoc::Markup::ToHtml
80
94
  return name if name =~ /\A[a-z]*\z/
81
95
  end
82
96
 
83
- cross_reference name
97
+ cross_reference name, rdoc_ref: false
84
98
  end
85
99
 
86
100
  ##
87
101
  # Handles <tt>rdoc-ref:</tt> scheme links and allows RDoc::Markup::ToHtml to
88
102
  # handle other schemes.
89
103
 
90
- def handle_special_HYPERLINK special
91
- return cross_reference $' if special.text =~ /\Ardoc-ref:/
104
+ def handle_regexp_HYPERLINK target
105
+ url = target.text
92
106
 
93
- super
107
+ case url
108
+ when /\Ardoc-ref:/
109
+ cross_reference $', rdoc_ref: true
110
+ else
111
+ super
112
+ end
94
113
  end
95
114
 
96
115
  ##
97
- # +special+ is an rdoc-schemed link that will be converted into a hyperlink.
116
+ # +target+ is an rdoc-schemed link that will be converted into a hyperlink.
98
117
  # For the rdoc-ref scheme the cross-reference will be looked up and the
99
118
  # given name will be used.
100
119
  #
101
120
  # All other contents are handled by
102
- # {the superclass}[rdoc-ref:RDoc::Markup::ToHtml#handle_special_RDOCLINK]
121
+ # {the superclass}[rdoc-ref:RDoc::Markup::ToHtml#handle_regexp_RDOCLINK]
103
122
 
104
- def handle_special_RDOCLINK special
105
- url = special.text
123
+ def handle_regexp_RDOCLINK target
124
+ url = target.text
106
125
 
107
126
  case url
108
- when /\Ardoc-ref:/ then
109
- cross_reference $'
127
+ when /\Ardoc-ref:/
128
+ cross_reference $', rdoc_ref: true
110
129
  else
111
130
  super
112
131
  end
@@ -117,45 +136,91 @@ class RDoc::Markup::ToHtmlCrossref < RDoc::Markup::ToHtml
117
136
  # RDoc::Markup::ToHtml to handle other schemes.
118
137
 
119
138
  def gen_url url, text
120
- return super unless url =~ /\Ardoc-ref:/
121
-
122
- cross_reference $', text
139
+ if url =~ /\Ardoc-ref:/
140
+ name = $'
141
+ cross_reference name, text, name == text, rdoc_ref: true
142
+ else
143
+ super
144
+ end
123
145
  end
124
146
 
125
147
  ##
126
148
  # Creates an HTML link to +name+ with the given +text+.
127
149
 
128
- def link name, text
129
- original_name = name
130
-
131
- if name =~ /(.*[^#:])@/ then
150
+ def link name, text, code = true, rdoc_ref: false
151
+ if !(name.end_with?('+@', '-@')) and name =~ /(.*[^#:])?@/
132
152
  name = $1
133
153
  label = $'
134
154
  end
135
155
 
136
- ref = @cross_reference.resolve name, text
137
-
138
- text = ref.output_name @context if
139
- RDoc::MethodAttr === ref and text == original_name
156
+ ref = @cross_reference.resolve name, text if name
140
157
 
141
158
  case ref
142
159
  when String then
160
+ if rdoc_ref && @options.warn_missing_rdoc_ref
161
+ puts "#{@from_path}: `rdoc-ref:#{name}` can't be resolved for `#{text}`"
162
+ end
143
163
  ref
144
164
  else
145
- path = ref.as_href @from_path
146
-
147
- if path =~ /#/ then
148
- path << "-label-#{label}"
149
- elsif ref.sections and
150
- ref.sections.any? { |section| label == section.title } then
151
- path << "##{label}"
152
- else
153
- path << "#label-#{label}"
154
- end if label
165
+ path = ref ? ref.as_href(@from_path) : +""
166
+
167
+ if code and RDoc::CodeObject === ref and !(RDoc::TopLevel === ref)
168
+ text = "<code>#{CGI.escapeHTML text}</code>"
169
+ end
170
+
171
+ if label
172
+ if path =~ /#/
173
+ path << "-label-#{label}"
174
+ elsif ref&.sections&.any? { |section| label == section.title }
175
+ path << "##{label}"
176
+ elsif ref.respond_to?(:aref)
177
+ path << "##{ref.aref}-label-#{label}"
178
+ else
179
+ path << "#label-#{label}"
180
+ end
181
+ end
155
182
 
156
183
  "<a href=\"#{path}\">#{text}</a>"
157
184
  end
158
185
  end
159
186
 
160
- end
187
+ def convert_flow(flow)
188
+ res = []
189
+
190
+ i = 0
191
+ while i < flow.size
192
+ item = flow[i]
193
+ i += 1
194
+ case item
195
+ when RDoc::Markup::AttrChanger then
196
+ # Make "+Class#method+" a cross reference
197
+ if tt_tag?(item.turn_on) and
198
+ String === (str = flow[i]) and
199
+ RDoc::Markup::AttrChanger === flow[i+1] and
200
+ tt_tag?(flow[i+1].turn_off, true) and
201
+ (@options.hyperlink_all ? ALL_CROSSREF_REGEXP : CROSSREF_REGEXP).match?(str) and
202
+ (text = cross_reference str) != str
203
+ then
204
+ text = yield text, res if defined?(yield)
205
+ res << text
206
+ i += 2
207
+ next
208
+ end
209
+ off_tags res, item
210
+ on_tags res, item
211
+ when String then
212
+ text = convert_string(item)
213
+ text = yield text, res if defined?(yield)
214
+ res << text
215
+ when RDoc::Markup::RegexpHandling then
216
+ text = convert_regexp_handling(item)
217
+ text = yield text, res if defined?(yield)
218
+ res << text
219
+ else
220
+ raise "Unknown flow element: #{item.inspect}"
221
+ end
222
+ end
161
223
 
224
+ res.join('')
225
+ end
226
+ end
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  ##
3
3
  # Outputs RDoc markup as paragraphs with inline markup only.
4
4
 
@@ -44,7 +44,7 @@ class RDoc::Markup::ToHtmlSnippet < RDoc::Markup::ToHtml
44
44
  @mask = 0
45
45
  @paragraphs = 0
46
46
 
47
- @markup.add_special RDoc::CrossReference::CROSSREF_REGEXP, :CROSSREF
47
+ @markup.add_regexp_handling RDoc::CrossReference::CROSSREF_REGEXP, :CROSSREF
48
48
  end
49
49
 
50
50
  ##
@@ -66,12 +66,15 @@ class RDoc::Markup::ToHtmlSnippet < RDoc::Markup::ToHtml
66
66
 
67
67
  alias accept_rule ignore
68
68
 
69
+ ##
70
+ # Adds +paragraph+ to the output
71
+
69
72
  def accept_paragraph paragraph
70
73
  para = @in_list_entry.last || "<p>"
71
74
 
72
75
  text = paragraph.text @hard_break
73
76
 
74
- @res << "#{para}#{wrap to_html text}\n"
77
+ @res << "#{para}#{to_html text}\n"
75
78
 
76
79
  add_paragraph
77
80
  end
@@ -123,16 +126,16 @@ class RDoc::Markup::ToHtmlSnippet < RDoc::Markup::ToHtml
123
126
  end
124
127
 
125
128
  ##
126
- # Removes escaping from the cross-references in +special+
129
+ # Removes escaping from the cross-references in +target+
127
130
 
128
- def handle_special_CROSSREF special
129
- special.text.sub(/\A\\/, '')
131
+ def handle_regexp_CROSSREF target
132
+ target.text.sub(/\A\\/, '')
130
133
  end
131
134
 
132
135
  ##
133
- # +special+ is a <code><br></code>
136
+ # +target+ is a <code><br></code>
134
137
 
135
- def handle_special_HARD_BREAK special
138
+ def handle_regexp_HARD_BREAK target
136
139
  @characters -= 4
137
140
  '<br>'
138
141
  end
@@ -226,8 +229,8 @@ class RDoc::Markup::ToHtmlSnippet < RDoc::Markup::ToHtml
226
229
  when String then
227
230
  text = convert_string item
228
231
  res << truncate(text)
229
- when RDoc::Markup::Special then
230
- text = convert_special item
232
+ when RDoc::Markup::RegexpHandling then
233
+ text = convert_regexp_handling item
231
234
  res << truncate(text)
232
235
  else
233
236
  raise "Unknown flow element: #{item.inspect}"
@@ -282,4 +285,3 @@ class RDoc::Markup::ToHtmlSnippet < RDoc::Markup::ToHtml
282
285
  end
283
286
 
284
287
  end
285
-
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  ##
3
3
  # Joins the parts of an RDoc::Markup::Paragraph into a single String.
4
4
  #
@@ -23,38 +23,12 @@ class RDoc::Markup::ToJoinedParagraph < RDoc::Markup::Formatter
23
23
  # Converts the parts of +paragraph+ to a single entry.
24
24
 
25
25
  def accept_paragraph paragraph
26
- parts = []
27
- string = false
28
-
29
- paragraph.parts.each do |part|
30
- if String === part then
31
- if string then
32
- string << part
33
- else
34
- parts << part
35
- string = part
36
- end
37
- else
38
- parts << part
39
- string = false
40
- end
41
- end
42
-
43
- parts = parts.map do |part|
44
- if String === part then
45
- part.rstrip
46
- else
47
- part
48
- end
26
+ parts = paragraph.parts.chunk do |part|
27
+ String === part
28
+ end.flat_map do |string, chunk|
29
+ string ? chunk.join.rstrip : chunk
49
30
  end
50
31
 
51
- # TODO use Enumerable#chunk when Ruby 1.8 support is dropped
52
- #parts = paragraph.parts.chunk do |part|
53
- # String === part
54
- #end.map do |string, chunk|
55
- # string ? chunk.join.rstrip : chunk
56
- #end.flatten
57
-
58
32
  paragraph.parts.replace parts
59
33
  end
60
34
 
@@ -67,6 +41,6 @@ class RDoc::Markup::ToJoinedParagraph < RDoc::Markup::Formatter
67
41
  alias accept_raw ignore
68
42
  alias accept_rule ignore
69
43
  alias accept_verbatim ignore
44
+ alias accept_table ignore
70
45
 
71
46
  end
72
-
@@ -1,5 +1,5 @@
1
- # frozen_string_literal: false
2
- require 'cgi'
1
+ # frozen_string_literal: true
2
+ require 'cgi/util'
3
3
 
4
4
  ##
5
5
  # Creates HTML-safe labels suitable for use in id attributes. Tidylinks are
@@ -16,8 +16,8 @@ class RDoc::Markup::ToLabel < RDoc::Markup::Formatter
16
16
  def initialize markup = nil
17
17
  super nil, markup
18
18
 
19
- @markup.add_special RDoc::CrossReference::CROSSREF_REGEXP, :CROSSREF
20
- @markup.add_special(/(((\{.*?\})|\b\S+?)\[\S+?\])/, :TIDYLINK)
19
+ @markup.add_regexp_handling RDoc::CrossReference::CROSSREF_REGEXP, :CROSSREF
20
+ @markup.add_regexp_handling(/(((\{.*?\})|\b\S+?)\[\S+?\])/, :TIDYLINK)
21
21
 
22
22
  add_tag :BOLD, '', ''
23
23
  add_tag :TT, '', ''
@@ -36,20 +36,20 @@ class RDoc::Markup::ToLabel < RDoc::Markup::Formatter
36
36
  end
37
37
 
38
38
  ##
39
- # Converts the CROSSREF +special+ to plain text, removing the suppression
39
+ # Converts the CROSSREF +target+ to plain text, removing the suppression
40
40
  # marker, if any
41
41
 
42
- def handle_special_CROSSREF special
43
- text = special.text
42
+ def handle_regexp_CROSSREF target
43
+ text = target.text
44
44
 
45
45
  text.sub(/^\\/, '')
46
46
  end
47
47
 
48
48
  ##
49
- # Converts the TIDYLINK +special+ to just the text part
49
+ # Converts the TIDYLINK +target+ to just the text part
50
50
 
51
- def handle_special_TIDYLINK special
52
- text = special.text
51
+ def handle_regexp_TIDYLINK target
52
+ text = target.text
53
53
 
54
54
  return text unless text =~ /\{(.*?)\}\[(.*?)\]/ or text =~ /(\S+)\[(.*?)\]/
55
55
 
@@ -68,8 +68,7 @@ class RDoc::Markup::ToLabel < RDoc::Markup::Formatter
68
68
  alias accept_rule ignore
69
69
  alias accept_verbatim ignore
70
70
  alias end_accepting ignore
71
- alias handle_special_HARD_BREAK ignore
71
+ alias handle_regexp_HARD_BREAK ignore
72
72
  alias start_accepting ignore
73
73
 
74
74
  end
75
-