rdoc 6.4.1.1 → 6.5.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rdoc might be problematic. Click here for more details.

Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.rdoc +1 -2
  3. data/LEGAL.rdoc +1 -1
  4. data/exe/rdoc +0 -1
  5. data/lib/rdoc/any_method.rb +2 -2
  6. data/lib/rdoc/code_objects.rb +1 -2
  7. data/lib/rdoc/context/section.rb +2 -0
  8. data/lib/rdoc/context.rb +1 -3
  9. data/lib/rdoc/cross_reference.rb +17 -1
  10. data/lib/rdoc/generator/markup.rb +1 -1
  11. data/lib/rdoc/generator/template/darkfish/_head.rhtml +10 -10
  12. data/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +27 -3
  13. data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +22 -2
  14. data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +25 -4
  15. data/lib/rdoc/generator/template/darkfish/class.rhtml +22 -20
  16. data/lib/rdoc/generator/template/darkfish/css/rdoc.css +24 -1
  17. data/lib/rdoc/generator/template/darkfish/index.rhtml +1 -1
  18. data/lib/rdoc/generator/template/darkfish/js/darkfish.js +1 -1
  19. data/lib/rdoc/generator/template/darkfish/js/search.js +1 -1
  20. data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +2 -2
  21. data/lib/rdoc/generator.rb +5 -5
  22. data/lib/rdoc/i18n.rb +1 -1
  23. data/lib/rdoc/known_classes.rb +5 -4
  24. data/lib/rdoc/markdown/literals.rb +43 -66
  25. data/lib/rdoc/markdown.kpeg +25 -18
  26. data/lib/rdoc/markdown.rb +252 -194
  27. data/lib/rdoc/markup/attribute_manager.rb +29 -35
  28. data/lib/rdoc/markup/parser.rb +12 -6
  29. data/lib/rdoc/markup/to_html.rb +18 -14
  30. data/lib/rdoc/markup/to_label.rb +1 -1
  31. data/lib/rdoc/markup/to_rdoc.rb +3 -20
  32. data/lib/rdoc/markup.rb +35 -667
  33. data/lib/rdoc/method_attr.rb +1 -1
  34. data/lib/rdoc/normal_class.rb +1 -1
  35. data/lib/rdoc/normal_module.rb +1 -1
  36. data/lib/rdoc/options.rb +33 -18
  37. data/lib/rdoc/parser/c.rb +89 -101
  38. data/lib/rdoc/parser/ruby.rb +25 -10
  39. data/lib/rdoc/parser.rb +19 -2
  40. data/lib/rdoc/rd/block_parser.rb +14 -12
  41. data/lib/rdoc/rd/block_parser.ry +12 -8
  42. data/lib/rdoc/rd/inline_parser.rb +2 -4
  43. data/lib/rdoc/rd.rb +3 -4
  44. data/lib/rdoc/rdoc.rb +17 -3
  45. data/lib/rdoc/ri/driver.rb +11 -78
  46. data/lib/rdoc/ri.rb +4 -5
  47. data/lib/rdoc/rubygems_hook.rb +1 -1
  48. data/lib/rdoc/servlet.rb +1 -1
  49. data/lib/rdoc/single_class.rb +5 -0
  50. data/lib/rdoc/stats.rb +3 -4
  51. data/lib/rdoc/store.rb +19 -26
  52. data/lib/rdoc/task.rb +3 -3
  53. data/lib/rdoc/version.rb +3 -1
  54. data/lib/rdoc.rb +46 -46
  55. metadata +7 -9
  56. data/Gemfile +0 -12
  57. data/Rakefile +0 -107
  58. data/bin/console +0 -7
  59. data/bin/setup +0 -6
  60. data/rdoc.gemspec +0 -249
@@ -2,6 +2,17 @@
2
2
  ##
3
3
  # Manages changes of attributes in a block of text
4
4
 
5
+ unless MatchData.method_defined?(:match_length)
6
+ using Module.new {
7
+ refine(MatchData) {
8
+ def match_length(nth)
9
+ b, e = offset(nth)
10
+ e - b if b
11
+ end
12
+ }
13
+ }
14
+ end
15
+
5
16
  class RDoc::Markup::AttributeManager
6
17
 
7
18
  ##
@@ -147,27 +158,23 @@ class RDoc::Markup::AttributeManager
147
158
  def convert_attrs_matching_word_pairs(str, attrs, exclusive)
148
159
  # first do matching ones
149
160
  tags = @matching_word_pairs.select { |start, bitmap|
150
- if exclusive && exclusive?(bitmap)
151
- true
152
- elsif !exclusive && !exclusive?(bitmap)
153
- true
154
- else
155
- false
156
- end
161
+ exclusive == exclusive?(bitmap)
157
162
  }.keys
158
163
  return if tags.empty?
159
- all_tags = @matching_word_pairs.keys
164
+ tags = "[#{tags.join("")}](?!#{PROTECT_ATTR})"
165
+ all_tags = "[#{@matching_word_pairs.keys.join("")}](?!#{PROTECT_ATTR})"
160
166
 
161
- re = /(^|\W|[#{all_tags.join("")}])([#{tags.join("")}])(\2*[#\\]?[\w:.\/\[\]-]+?\S?)\2(?!\2)([#{all_tags.join("")}]|\W|$)/
167
+ re = /(?:^|\W|#{all_tags})\K(#{tags})(\1*[#\\]?[\w:#{PROTECT_ATTR}.\/\[\]-]+?\S?)\1(?!\1)(?=#{all_tags}|\W|$)/
162
168
 
163
169
  1 while str.gsub!(re) { |orig|
164
- attr = @matching_word_pairs[$2]
165
- attr_updated = attrs.set_attrs($`.length + $1.length + $2.length, $3.length, attr)
166
- if attr_updated
167
- $1 + NULL * $2.length + $3 + NULL * $2.length + $4
170
+ a, w = (m = $~).values_at(1, 2)
171
+ attr = @matching_word_pairs[a]
172
+ if attrs.set_attrs(m.begin(2), w.length, attr)
173
+ a = NULL * a.length
168
174
  else
169
- $1 + NON_PRINTING_START + $2 + NON_PRINTING_END + $3 + NON_PRINTING_START + $2 + NON_PRINTING_END + $4
175
+ a = NON_PRINTING_START + a + NON_PRINTING_END
170
176
  end
177
+ a + w + a
171
178
  }
172
179
  str.delete!(NON_PRINTING_START + NON_PRINTING_END)
173
180
  end
@@ -176,15 +183,12 @@ class RDoc::Markup::AttributeManager
176
183
  # then non-matching
177
184
  unless @word_pair_map.empty? then
178
185
  @word_pair_map.each do |regexp, attr|
179
- if !exclusive
180
- next if exclusive?(attr)
181
- else
182
- next if !exclusive?(attr)
183
- end
186
+ next unless exclusive == exclusive?(attr)
184
187
  1 while str.gsub!(regexp) { |orig|
185
- updated = attrs.set_attrs($`.length + $1.length, $2.length, attr)
188
+ w = (m = ($~))[2]
189
+ updated = attrs.set_attrs(m.begin(2), w.length, attr)
186
190
  if updated
187
- NULL * $1.length + $2 + NULL * $3.length
191
+ NULL * m.match_length(1) + w + NULL * m.match_length(3)
188
192
  else
189
193
  orig
190
194
  end
@@ -198,20 +202,14 @@ class RDoc::Markup::AttributeManager
198
202
 
199
203
  def convert_html(str, attrs, exclusive = false)
200
204
  tags = @html_tags.select { |start, bitmap|
201
- if exclusive && exclusive?(bitmap)
202
- true
203
- elsif !exclusive && !exclusive?(bitmap)
204
- true
205
- else
206
- false
207
- end
205
+ exclusive == exclusive?(bitmap)
208
206
  }.keys.join '|'
209
207
 
210
208
  1 while str.gsub!(/<(#{tags})>(.*?)<\/\1>/i) { |orig|
211
209
  attr = @html_tags[$1.downcase]
212
- html_length = $1.length + 2
210
+ html_length = $~.match_length(1) + 2 # "<>".length
213
211
  seq = NULL * html_length
214
- attrs.set_attrs($`.length + html_length, $2.length, attr)
212
+ attrs.set_attrs($~.begin(2), $~.match_length(2), attr)
215
213
  seq + $2 + seq + NULL
216
214
  }
217
215
  end
@@ -221,11 +219,7 @@ class RDoc::Markup::AttributeManager
221
219
 
222
220
  def convert_regexp_handlings str, attrs, exclusive = false
223
221
  @regexp_handlings.each do |regexp, attribute|
224
- if exclusive
225
- next if !exclusive?(attribute)
226
- else
227
- next if exclusive?(attribute)
228
- end
222
+ next unless exclusive == exclusive?(attribute)
229
223
  str.scan(regexp) do
230
224
  capture = $~.size == 1 ? 0 : 1
231
225
 
@@ -287,6 +287,12 @@ class RDoc::Markup::Parser
287
287
  line << ' ' * indent
288
288
  when :BREAK, :TEXT then
289
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
290
296
  else # *LIST_TOKENS
291
297
  list_marker = case type
292
298
  when :BULLET then data
@@ -372,11 +378,8 @@ class RDoc::Markup::Parser
372
378
  unget
373
379
  parse_text parent, indent
374
380
  when :BLOCKQUOTE then
375
- type, _, column = get
376
- if type == :NEWLINE
377
- type, _, column = get
378
- end
379
- unget if type
381
+ nil while (type, = get; type) and type != :NEWLINE
382
+ _, _, column, = peek_token
380
383
  bq = RDoc::Markup::BlockQuote.new
381
384
  p :blockquote_start => [data, column] if @debug
382
385
  parse bq, column
@@ -544,7 +547,10 @@ class RDoc::Markup::Parser
544
547
  [:NOTE, @s[1], *pos]
545
548
  # >>> followed by end of line => :BLOCKQUOTE
546
549
  when @s.scan(/>>> *(\w+)?$/) then
547
- [:BLOCKQUOTE, @s[1], *pos]
550
+ if word = @s[1]
551
+ @s.unscan(word)
552
+ end
553
+ [:BLOCKQUOTE, word, *pos]
548
554
  # anything else: :TEXT
549
555
  else
550
556
  @s.scan(/(.*?)( )?\r?$/)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- require 'cgi'
2
+ require 'cgi/util'
3
3
 
4
4
  ##
5
5
  # Outputs RDoc markup as HTML.
@@ -61,12 +61,14 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
61
61
  #
62
62
  # These methods are used by regexp handling markup added by RDoc::Markup#add_regexp_handling.
63
63
 
64
+ URL_CHARACTERS_REGEXP_STR = /[A-Za-z0-9\-._~:\/\?#\[\]@!$&'\(\)*+,;%=]/.source
65
+
64
66
  ##
65
67
  # Adds regexp handlings.
66
68
 
67
69
  def init_regexp_handlings
68
70
  # external links
69
- @markup.add_regexp_handling(/(?:link:|https?:|mailto:|ftp:|irc:|www\.)\S+\w/,
71
+ @markup.add_regexp_handling(/(?:link:|https?:|mailto:|ftp:|irc:|www\.)#{URL_CHARACTERS_REGEXP_STR}+\w/,
70
72
  :HYPERLINK)
71
73
  init_link_notation_regexp_handlings
72
74
  end
@@ -82,7 +84,7 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
82
84
  def handle_RDOCLINK url # :nodoc:
83
85
  case url
84
86
  when /^rdoc-ref:/
85
- $'
87
+ CGI.escapeHTML($')
86
88
  when /^rdoc-label:/
87
89
  text = $'
88
90
 
@@ -93,13 +95,11 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
93
95
  else text
94
96
  end
95
97
 
96
- gen_url url, text
98
+ gen_url CGI.escapeHTML(url), CGI.escapeHTML(text)
97
99
  when /^rdoc-image:/
98
- "<img src=\"#{$'}\">"
99
- else
100
- url =~ /\Ardoc-[a-z]+:/
101
-
102
- $'
100
+ %[<img src=\"#{CGI.escapeHTML($')}\">]
101
+ when /\Ardoc-[a-z]+:/
102
+ CGI.escapeHTML($')
103
103
  end
104
104
  end
105
105
 
@@ -123,7 +123,7 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
123
123
  # Reference to a local file relative to the output directory.
124
124
 
125
125
  def handle_regexp_HYPERLINK(target)
126
- url = target.text
126
+ url = CGI.escapeHTML(target.text)
127
127
 
128
128
  gen_url url, url
129
129
  end
@@ -152,9 +152,13 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
152
152
  text =~ /^\{(.*)\}\[(.*?)\]$/ or text =~ /^(\S+)\[(.*?)\]$/
153
153
 
154
154
  label = $1
155
- url = $2
155
+ url = CGI.escapeHTML($2)
156
156
 
157
- label = handle_RDOCLINK label if /^rdoc-image:/ =~ label
157
+ if /^rdoc-image:/ =~ label
158
+ label = handle_RDOCLINK(label)
159
+ else
160
+ label = CGI.escapeHTML(label)
161
+ end
158
162
 
159
163
  gen_url url, label
160
164
  end
@@ -322,7 +326,7 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
322
326
  header.zip(aligns) do |text, align|
323
327
  @res << '<th'
324
328
  @res << ' align="' << align << '"' if align
325
- @res << '>' << CGI.escapeHTML(text) << "</th>\n"
329
+ @res << '>' << to_html(text) << "</th>\n"
326
330
  end
327
331
  @res << "</tr>\n</thead>\n<tbody>\n"
328
332
  body.each do |row|
@@ -330,7 +334,7 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
330
334
  row.zip(aligns) do |text, align|
331
335
  @res << '<td'
332
336
  @res << ' align="' << align << '"' if align
333
- @res << '>' << CGI.escapeHTML(text) << "</td>\n"
337
+ @res << '>' << to_html(text) << "</td>\n"
334
338
  end
335
339
  @res << "</tr>\n"
336
340
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- require 'cgi'
2
+ require 'cgi/util'
3
3
 
4
4
  ##
5
5
  # Creates HTML-safe labels suitable for use in id attributes. Tidylinks are
@@ -330,31 +330,14 @@ class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter
330
330
 
331
331
  text_len = 20 if text_len < 20
332
332
 
333
- re = /^(.{0,#{text_len}})[ \n]/
334
333
  next_prefix = ' ' * @indent
335
334
 
336
335
  prefix = @prefix || next_prefix
337
336
  @prefix = nil
338
337
 
339
- @res << prefix
340
-
341
- while text.length > text_len
342
- if text =~ re then
343
- @res << $1
344
- text.slice!(0, $&.length)
345
- else
346
- @res << text.slice!(0, text_len)
347
- end
348
-
349
- @res << "\n" << next_prefix
350
- end
351
-
352
- if text.empty? then
353
- @res.pop
354
- @res.pop
355
- else
356
- @res << text
357
- @res << "\n"
338
+ text.scan(/\G(?:([^ \n]{#{text_len}})(?=[^ \n])|(.{1,#{text_len}})(?:[ \n]|\z))/) do
339
+ @res << prefix << ($1 || $2) << "\n"
340
+ prefix = next_prefix
358
341
  end
359
342
  end
360
343