rdoc 6.4.0 → 6.5.0

Sign up to get free protection for your applications and to get access to all the features.
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 +24 -8
  25. data/lib/rdoc/markdown.kpeg +25 -18
  26. data/lib/rdoc/markdown.rb +323 -226
  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 +13 -9
  41. data/lib/rdoc/rd/block_parser.ry +12 -8
  42. data/lib/rdoc/rd/inline_parser.rb +1 -1
  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 +4 -4
  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 +4 -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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d6c9787594ed9d69a7a9177e449d925063acbc6ace0273f7d0b1fc9ca6a31139
4
- data.tar.gz: 5f5afd10a18a1aeabc8319350c191eeaa137e5f715a2e95cbf2443f5dca7f96c
3
+ metadata.gz: acfa378032b35ef7563cf5255d5d3127b1fa8066dd5c5255088d7d13fdabb757
4
+ data.tar.gz: 0bbc31e7348fcc5227a9b4319dc48cfb5e40143eeaeeb471921a5b2c6b098220
5
5
  SHA512:
6
- metadata.gz: 94fbc007d81c0cc1774b44d5f174b5e011ef5ae3d998344b981a8b6170f1c630c3c80e45f87bcc4c05f97f51e34e9f3ede791846e0c01e4015c45cc8aab1b05e
7
- data.tar.gz: '068da922a56b61ca85fa7b61d5554cdbe1533c30caae11e7d81894e41fca58157971c18a76c55391538324c168a720c2cbbc8150a12dc276eab033e70fae0217'
6
+ metadata.gz: 7ad2f4cdcf3e7ffa7f81bc8d5795b1481d9c8f7feeba0f2a6455555cecbee603c5fb24e4e612929a7ff314ff027f69b561a0d8cf343c4099ea554db216ad3078
7
+ data.tar.gz: 93bf81edf3cd84b35db94038b5978abd548042919a1dd3cd039431a681736a3aafe098135c86abe0701dbf3f242bae8af64b293d2f908b2a258ce5075f1519b3
data/CONTRIBUTING.rdoc CHANGED
@@ -34,8 +34,7 @@ RDoc uses bundler for development. To get ready to work on RDoc run:
34
34
  This will install all the necessary dependencies for development with rake,
35
35
  generate documentation and run the tests for the first time.
36
36
 
37
- If the tests don't pass on the first run check the {Travis CI page for
38
- RDoc}[https://travis-ci.org/ruby/rdoc] to see if there are any known failures
37
+ If the tests don't pass on the first run check the {GitHub Actions page}[https://github.com/ruby/rdoc/actions] to see if there are any known failures
39
38
  (there shouldn't be).
40
39
 
41
40
  You can now use `rake` and `autotest` to run the tests.
data/LEGAL.rdoc CHANGED
@@ -5,7 +5,7 @@
5
5
  The files in this distribution are covered by the Ruby license (see LICENSE) except the features mentioned below:
6
6
 
7
7
  Darkfish::
8
- Darkfish was written by Michael Granger and is included under the MIT
8
+ Darkfish was written by Michael Granger and is included under the BSD 3-Clause
9
9
  license. Darkfish contains images from the Silk Icons set by Mark James.
10
10
 
11
11
  See lib/rdoc/generator/darkfish.rb for license information.
data/exe/rdoc CHANGED
@@ -41,4 +41,3 @@ rescue Exception => e
41
41
 
42
42
  exit 1
43
43
  end
44
-
@@ -350,12 +350,12 @@ class RDoc::AnyMethod < RDoc::MethodAttr
350
350
  ignore << is_alias_for.name
351
351
  ignore.concat is_alias_for.aliases.map(&:name)
352
352
  end
353
- ignore.map! { |n| n =~ /\A\[/ ? n[0, 1] : n}
353
+ ignore.map! { |n| n =~ /\A\[/ ? /\[.*\]/ : n}
354
354
  ignore.delete(method_name)
355
355
  ignore = Regexp.union(ignore)
356
356
 
357
357
  matching = entries.reject do |entry|
358
- entry =~ /^\w*\.?#{ignore}/ or
358
+ entry =~ /^\w*\.?#{ignore}[$\(\s]/ or
359
359
  entry =~ /\s#{ignore}\s/
360
360
  end
361
361
 
@@ -2,5 +2,4 @@
2
2
  # This file was used to load all the RDoc::CodeObject subclasses at once. Now
3
3
  # autoload handles this.
4
4
 
5
- require 'rdoc'
6
-
5
+ require_relative '../rdoc'
@@ -1,4 +1,6 @@
1
1
  # frozen_string_literal: true
2
+ require 'cgi/util'
3
+
2
4
  ##
3
5
  # A section of documentation like:
4
6
  #
data/lib/rdoc/context.rb CHANGED
@@ -1,6 +1,4 @@
1
1
  # frozen_string_literal: true
2
- require 'cgi'
3
-
4
2
  ##
5
3
  # A Context is something that can hold modules, classes, methods, attributes,
6
4
  # aliases, requires, and includes. Classes, modules, and files are all
@@ -1261,6 +1259,6 @@ class RDoc::Context < RDoc::CodeObject
1261
1259
  klass
1262
1260
  end
1263
1261
 
1264
- autoload :Section, 'rdoc/context/section'
1262
+ autoload :Section, "#{__dir__}/context/section"
1265
1263
 
1266
1264
  end
@@ -1,4 +1,7 @@
1
1
  # frozen_string_literal: true
2
+
3
+ require_relative 'markup/attribute_manager' # for PROTECT_ATTR
4
+
2
5
  ##
3
6
  # RDoc::CrossReference is a reusable way to create cross references for names.
4
7
 
@@ -14,12 +17,25 @@ class RDoc::CrossReference
14
17
 
15
18
  CLASS_REGEXP_STR = '\\\\?((?:\:{2})?[A-Z]\w*(?:\:\:\w+)*)'
16
19
 
20
+ ##
21
+ # Regular expression to match a single method argument.
22
+
23
+ METHOD_ARG_REGEXP_STR = '[\w.+*/=<>-]+'
24
+
25
+ ##
26
+ # Regular expression to match method arguments.
27
+
28
+ METHOD_ARGS_REGEXP_STR = /(?:\((?:#{METHOD_ARG_REGEXP_STR}(?:,\s*#{METHOD_ARG_REGEXP_STR})*)?\))?/.source
29
+
17
30
  ##
18
31
  # Regular expression to match method references.
19
32
  #
20
33
  # See CLASS_REGEXP_STR
21
34
 
22
- METHOD_REGEXP_STR = '([A-Za-z]\w*[!?=]?|%|===?|\[\]=?|<<|>>|\+@|-@|-|\+|\*)(?:\([\w.+*/=<>-]*\))?'
35
+ METHOD_REGEXP_STR = /(
36
+ (?!\d)[\w#{RDoc::Markup::AttributeManager::PROTECT_ATTR}]+[!?=]?|
37
+ %|=(?:==?|~)|![=~]|\[\]=?|<(?:<|=>?)?|>[>=]?|[-+!]@?|\*\*?|[\/%\`|&^~]
38
+ )#{METHOD_ARGS_REGEXP_STR}/.source.delete("\n ").freeze
23
39
 
24
40
  ##
25
41
  # Regular expressions matching text that should potentially have
@@ -109,7 +109,7 @@ class RDoc::MethodAttr
109
109
  lines.shift if src =~ /\A.*#\ *File/i # remove '# File' comment
110
110
  lines.each do |line|
111
111
  if line =~ /^ *(?=\S)/
112
- n = $&.length
112
+ n = $~.end(0)
113
113
  indent = n if n < indent
114
114
  break if n == 0
115
115
  end
@@ -3,18 +3,18 @@
3
3
  <title><%= h @title %></title>
4
4
 
5
5
  <script type="text/javascript">
6
- var rdoc_rel_prefix = "<%= asset_rel_prefix %>/";
7
- var index_rel_prefix = "<%= rel_prefix %>/";
6
+ var rdoc_rel_prefix = "<%= h asset_rel_prefix %>/";
7
+ var index_rel_prefix = "<%= h rel_prefix %>/";
8
8
  </script>
9
9
 
10
- <script src="<%= asset_rel_prefix %>/js/navigation.js" defer></script>
11
- <script src="<%= asset_rel_prefix %>/js/search.js" defer></script>
12
- <script src="<%= asset_rel_prefix %>/js/search_index.js" defer></script>
13
- <script src="<%= asset_rel_prefix %>/js/searcher.js" defer></script>
14
- <script src="<%= asset_rel_prefix %>/js/darkfish.js" defer></script>
10
+ <script src="<%= h asset_rel_prefix %>/js/navigation.js" defer></script>
11
+ <script src="<%= h asset_rel_prefix %>/js/search.js" defer></script>
12
+ <script src="<%= h asset_rel_prefix %>/js/search_index.js" defer></script>
13
+ <script src="<%= h asset_rel_prefix %>/js/searcher.js" defer></script>
14
+ <script src="<%= h asset_rel_prefix %>/js/darkfish.js" defer></script>
15
15
 
16
- <link href="<%= asset_rel_prefix %>/css/fonts.css" rel="stylesheet">
17
- <link href="<%= asset_rel_prefix %>/css/rdoc.css" rel="stylesheet">
16
+ <link href="<%= h asset_rel_prefix %>/css/fonts.css" rel="stylesheet">
17
+ <link href="<%= h asset_rel_prefix %>/css/rdoc.css" rel="stylesheet">
18
18
  <%- @options.template_stylesheets.each do |stylesheet| -%>
19
- <link href="<%= asset_rel_prefix %>/<%= File.basename stylesheet %>" rel="stylesheet">
19
+ <link href="<%= h asset_rel_prefix %>/<%= File.basename stylesheet %>" rel="stylesheet">
20
20
  <%- end -%>
@@ -1,9 +1,33 @@
1
1
  <div id="classindex-section" class="nav-section">
2
2
  <h3>Class and Module Index</h3>
3
3
 
4
+ <%-
5
+ all_classes = @classes.group_by do |klass|
6
+ klass.full_name[/\A[^:]++(?:::[^:]++(?=::))*+(?=::[^:]*+\z)/]
7
+ end.delete_if do |_, klasses|
8
+ !klasses.any?(&:display?)
9
+ end
10
+ link = proc do |index_klass, display = index_klass.display?|
11
+ if display
12
+ -%><code><a href="<%= rel_prefix %>/<%= index_klass.path %>"><%= index_klass.name %></a></code><%-
13
+ else
14
+ -%><code><%= index_klass.name %></code><%-
15
+ end
16
+ end
17
+ if top = all_classes[nil]
18
+ solo = top.one? {|klass| klass.display?}
19
+ traverse = proc do |klasses| -%>
4
20
  <ul class="link-list">
5
- <%- @modsort.each do |index_klass| -%>
6
- <li><a href="<%= rel_prefix %>/<%= index_klass.path %>"><%= index_klass.full_name %></a>
21
+ <%- klasses.each do |index_klass| -%>
22
+ <%- if children = all_classes[index_klass.full_name] -%>
23
+ <li><details<% if solo; solo = false %> open<% end %>><summary><% link.call(index_klass) %></summary>
24
+ <%- traverse.call(children) -%>
25
+ </ul></details>
26
+ <%- elsif index_klass.display? -%>
27
+ <li><% link.call(index_klass, true) %>
28
+ <%- end -%>
29
+ <%- end -%>
30
+ <%- end -%>
31
+ <%- traverse.call(top) -%>
7
32
  <%- end -%>
8
- </ul>
9
33
  </div>
@@ -1,11 +1,31 @@
1
1
  <%- simple_files = @files.select { |f| f.text? } %>
2
+ <%- if defined?(current) -%>
3
+ <%- dir = current.full_name[%r{\A[^/]+(?=/)}] || current.page_name -%>
4
+ <%- end -%>
2
5
  <%- unless simple_files.empty? then -%>
3
6
  <div id="fileindex-section" class="nav-section">
4
7
  <h3>Pages</h3>
5
8
 
6
9
  <ul class="link-list">
7
- <%- simple_files.each do |f| -%>
8
- <li><a href="<%= rel_prefix %>/<%= f.path %>"><%= h f.page_name %></a>
10
+ <%- simple_files.group_by do |f| -%>
11
+ <%- f.full_name[%r{\A[^/]+(?=/)}] || f.page_name -%>
12
+ <%- end.each do |n, files| -%>
13
+ <%- f = files.shift -%>
14
+ <%- if files.empty? -%>
15
+ <li><a href="<%= rel_prefix %>/<%= h f.path %>"><%= h f.page_name %></a>
16
+ <%- next -%>
17
+ <%- end -%>
18
+ <li><details<% if dir == n %> open<% end %>><summary><%
19
+ if n == f.page_name
20
+ %><a href="<%= rel_prefix %>/<%= h f.path %>"><%= h n %></a><%
21
+ else
22
+ %><%= h n %><% files.unshift(f)
23
+ end %></summary>
24
+ <ul class="link-list">
25
+ <%- files.each do |f| -%>
26
+ <li><a href="<%= rel_prefix %>/<%= h f.path %>"><%= h f.page_name %></a>
27
+ <%- end -%>
28
+ </ul></details>
9
29
  <%- end -%>
10
30
  </ul>
11
31
  </div>
@@ -3,16 +3,37 @@
3
3
  else
4
4
  current.comment
5
5
  end
6
- table = current.parse(comment).table_of_contents
6
+ table = current.parse(comment).table_of_contents.dup
7
7
 
8
8
  if table.length > 1 then %>
9
9
  <div class="nav-section">
10
10
  <h3>Table of Contents</h3>
11
11
 
12
+ <%- display_link = proc do |heading| -%>
13
+ <a href="#<%= heading.label current %>"><%= heading.plain_html %></a>
14
+ <%- end -%>
15
+
16
+ <%- list_siblings = proc do -%>
17
+ <%- level = table.first&.level -%>
18
+ <%- while table.first && table.first.level >= level -%>
19
+ <%- heading = table.shift -%>
20
+ <%- if table.first.nil? || table.first.level <= heading.level -%>
21
+ <li><% display_link.call heading -%>
22
+ <%- else -%>
23
+ <li>
24
+ <details open>
25
+ <summary><%- display_link.call heading -%></summary>
26
+ <ul class="link-list" role="directory">
27
+ <% list_siblings.call %>
28
+ </ul>
29
+ </details>
30
+ </li>
31
+ <%- end -%>
32
+ <%- end -%>
33
+ <%- end -%>
34
+
12
35
  <ul class="link-list" role="directory">
13
- <%- table.each do |heading| -%>
14
- <li><a href="#<%= heading.label current %>"><%= heading.plain_html %></a>
15
- <%- end -%>
36
+ <% list_siblings.call %>
16
37
  </ul>
17
38
  </div>
18
39
  <%- end -%>
@@ -98,28 +98,30 @@
98
98
 
99
99
  <%- methods.each do |method| -%>
100
100
  <div id="<%= method.aref %>" class="method-detail <%= method.is_alias_for ? "method-alias" : '' %>">
101
- <%- if (call_seq = method.call_seq) then -%>
102
- <%- call_seq.strip.split("\n").each_with_index do |call_seq, i| -%>
103
- <div class="method-heading">
104
- <span class="method-callseq">
105
- <%= h(call_seq.strip.
106
- gsub( /^\w+\./m, '')).
107
- gsub(/(.*)[-=]&gt;/, '\1&rarr;') %>
108
- </span>
109
- <%- if i == 0 and method.token_stream then -%>
110
- <span class="method-click-advice">click to toggle source</span>
111
- <%- end -%>
112
- </div>
113
- <%- end -%>
114
- <%- else -%>
115
- <div class="method-heading">
116
- <span class="method-name"><%= h method.name %></span><span
117
- class="method-args"><%= h method.param_seq %></span>
118
- <%- if method.token_stream then -%>
119
- <span class="method-click-advice">click to toggle source</span>
101
+ <div class="method-header">
102
+ <%- if (call_seq = method.call_seq) then -%>
103
+ <%- call_seq.strip.split("\n").each_with_index do |call_seq, i| -%>
104
+ <div class="method-heading">
105
+ <span class="method-callseq">
106
+ <%= h(call_seq.strip.
107
+ gsub( /^\w+\./m, '')).
108
+ gsub(/(.*)[-=]&gt;/, '\1&rarr;') %>
109
+ </span>
110
+ <%- if i == 0 and method.token_stream then -%>
111
+ <span class="method-click-advice">click to toggle source</span>
112
+ <%- end -%>
113
+ </div>
114
+ <%- end -%>
115
+ <%- else -%>
116
+ <div class="method-heading">
117
+ <span class="method-name"><%= h method.name %></span><span
118
+ class="method-args"><%= h method.param_seq %></span>
119
+ <%- if method.token_stream then -%>
120
+ <span class="method-click-advice">click to toggle source</span>
121
+ <%- end -%>
122
+ </div>
120
123
  <%- end -%>
121
124
  </div>
122
- <%- end -%>
123
125
 
124
126
  <div class="method-description">
125
127
  <%- if method.comment then -%>
@@ -186,6 +186,10 @@ nav {
186
186
  font-family: Helvetica, sans-serif;
187
187
  font-size: 14px;
188
188
  border-right: 1px solid #ccc;
189
+ position: sticky;
190
+ top: 0;
191
+ overflow: auto;
192
+ height: calc(100vh - 100px); /* reduce the footer height */
189
193
  }
190
194
 
191
195
  main {
@@ -305,6 +309,25 @@ dl.note-list dt {
305
309
  background: url(../images/arrow_up.png) no-repeat right center;
306
310
  }
307
311
 
312
+ .nav-section details summary {
313
+ display: block;
314
+ }
315
+
316
+ .nav-section details summary::-webkit-details-marker {
317
+ display: none;
318
+ }
319
+
320
+ .nav-section details summary:before {
321
+ content: "";
322
+ }
323
+
324
+ .nav-section details summary:after {
325
+ content: " \25B6"; /* BLACK RIGHT-POINTING TRIANGLE */
326
+ }
327
+ .nav-section details[open] > summary:after {
328
+ content: " \25BD"; /* WHITE DOWN-POINTING TRIANGLE */
329
+ }
330
+
308
331
  /* @end */
309
332
 
310
333
  /* @group Documentation Section */
@@ -482,7 +505,7 @@ main header h3 {
482
505
 
483
506
  main .method-source-code {
484
507
  max-height: 0;
485
- overflow: hidden;
508
+ overflow: auto;
486
509
  transition-duration: 200ms;
487
510
  transition-delay: 0ms;
488
511
  transition-property: all;
@@ -17,6 +17,6 @@
17
17
  main_page = @files.find { |f| f.full_name == @options.main_page } then %>
18
18
  <%= main_page.description %>
19
19
  <%- else -%>
20
- <p>This is the API documentation for <%= @title %>.
20
+ <p>This is the API documentation for <%= h @title %>.
21
21
  <%- end -%>
22
22
  </main>
@@ -54,7 +54,7 @@ function hookSearch() {
54
54
  var html = '';
55
55
 
56
56
  // TODO add relative path to <script> per-page
57
- html += '<p class="search-match"><a href="' + index_rel_prefix + result.path + '">' + this.hlt(result.title);
57
+ html += '<p class="search-match"><a href="' + index_rel_prefix + this.escapeHTML(result.path) + '">' + this.hlt(result.title);
58
58
  if (result.params)
59
59
  html += '<span class="params">' + result.params + '</span>';
60
60
  html += '</a>';
@@ -101,7 +101,7 @@ Search.prototype = Object.assign({}, Navigation, new function() {
101
101
  }
102
102
 
103
103
  this.escapeHTML = function(html) {
104
- return html.replace(/[&<>]/g, function(c) {
104
+ return html.replace(/[&<>"`']/g, function(c) {
105
105
  return '&#' + c.charCodeAt(0) + ';';
106
106
  });
107
107
  }
@@ -8,14 +8,14 @@
8
8
  <ul>
9
9
  <%- simple_files.sort.each do |file| -%>
10
10
  <li class="file">
11
- <a href="<%= file.path %>"><%= h file.page_name %></a>
11
+ <a href="<%= h file.path %>"><%= h file.page_name %></a>
12
12
  <%
13
13
  # HACK table_of_contents should not exist on Document
14
14
  table = file.parse(file.comment).table_of_contents
15
15
  unless table.empty? then %>
16
16
  <ul>
17
17
  <%- table.each do |heading| -%>
18
- <li><a href="<%= file.path %>#<%= heading.aref %>"><%= heading.plain_html %></a>
18
+ <li><a href="<%= h file.path %>#<%= heading.aref %>"><%= heading.plain_html %></a>
19
19
  <%- end -%>
20
20
  </ul>
21
21
  <%- end -%>
@@ -41,11 +41,11 @@
41
41
 
42
42
  module RDoc::Generator
43
43
 
44
- autoload :Markup, 'rdoc/generator/markup'
44
+ autoload :Markup, "#{__dir__}/generator/markup"
45
45
 
46
- autoload :Darkfish, 'rdoc/generator/darkfish'
47
- autoload :JsonIndex, 'rdoc/generator/json_index'
48
- autoload :RI, 'rdoc/generator/ri'
49
- autoload :POT, 'rdoc/generator/pot'
46
+ autoload :Darkfish, "#{__dir__}/generator/darkfish"
47
+ autoload :JsonIndex, "#{__dir__}/generator/json_index"
48
+ autoload :RI, "#{__dir__}/generator/ri"
49
+ autoload :POT, "#{__dir__}/generator/pot"
50
50
 
51
51
  end
data/lib/rdoc/i18n.rb CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  module RDoc::I18n
6
6
 
7
- autoload :Locale, 'rdoc/i18n/locale'
7
+ autoload :Locale, "#{__dir__}/i18n/locale"
8
8
  require_relative 'i18n/text'
9
9
 
10
10
  end
@@ -25,6 +25,7 @@ module RDoc
25
25
  "rb_cObject" => "Object",
26
26
  "rb_cProc" => "Proc",
27
27
  "rb_cRange" => "Range",
28
+ "rb_cRefinement" => "Refinement",
28
29
  "rb_cRegexp" => "Regexp",
29
30
  "rb_cRubyVM" => "RubyVM",
30
31
  "rb_cSocket" => "Socket",
@@ -35,7 +36,7 @@ module RDoc
35
36
  "rb_cTime" => "Time",
36
37
  "rb_cTrueClass" => "TrueClass",
37
38
 
38
- "rb_eArgError" => "ArgError",
39
+ "rb_eArgError" => "ArgumentError",
39
40
  "rb_eEOFError" => "EOFError",
40
41
  "rb_eException" => "Exception",
41
42
  "rb_eFatal" => "fatal",
@@ -45,8 +46,8 @@ module RDoc
45
46
  "rb_eInterrupt" => "Interrupt",
46
47
  "rb_eLoadError" => "LoadError",
47
48
  "rb_eNameError" => "NameError",
48
- "rb_eNoMemError" => "NoMemError",
49
- "rb_eNotImpError" => "NotImpError",
49
+ "rb_eNoMemError" => "NoMemoryError",
50
+ "rb_eNotImpError" => "NotImplementedError",
50
51
  "rb_eRangeError" => "RangeError",
51
52
  "rb_eRuntimeError" => "RuntimeError",
52
53
  "rb_eScriptError" => "ScriptError",
@@ -57,7 +58,7 @@ module RDoc
57
58
  "rb_eSystemCallError" => "SystemCallError",
58
59
  "rb_eSystemExit" => "SystemExit",
59
60
  "rb_eTypeError" => "TypeError",
60
- "rb_eZeroDivError" => "ZeroDivError",
61
+ "rb_eZeroDivError" => "ZeroDivisionError",
61
62
 
62
63
  "rb_mComparable" => "Comparable",
63
64
  "rb_mEnumerable" => "Enumerable",
@@ -29,6 +29,7 @@ class RDoc::Markdown::Literals
29
29
  @result = nil
30
30
  @failed_rule = nil
31
31
  @failing_rule_offset = -1
32
+ @line_offsets = nil
32
33
 
33
34
  setup_foreign_grammar
34
35
  end
@@ -45,17 +46,32 @@ class RDoc::Markdown::Literals
45
46
  target + 1
46
47
  end
47
48
 
48
- def current_line(target=pos)
49
- cur_offset = 0
50
- cur_line = 0
49
+ if [].respond_to? :bsearch_index
50
+ def current_line(target=pos)
51
+ unless @line_offsets
52
+ @line_offsets = []
53
+ total = 0
54
+ string.each_line do |line|
55
+ total += line.size
56
+ @line_offsets << total
57
+ end
58
+ end
51
59
 
52
- string.each_line do |line|
53
- cur_line += 1
54
- cur_offset += line.size
55
- return cur_line if cur_offset >= target
60
+ @line_offsets.bsearch_index {|x| x >= target } + 1 || -1
56
61
  end
62
+ else
63
+ def current_line(target=pos)
64
+ cur_offset = 0
65
+ cur_line = 0
66
+
67
+ string.each_line do |line|
68
+ cur_line += 1
69
+ cur_offset += line.size
70
+ return cur_line if cur_offset >= target
71
+ end
57
72
 
58
- -1
73
+ -1
74
+ end
59
75
  end
60
76
 
61
77
  def lines
@@ -187,11 +187,11 @@
187
187
 
188
188
  %% {
189
189
 
190
- require 'rdoc'
191
- require 'rdoc/markup/to_joined_paragraph'
192
- require 'rdoc/markdown/entities'
190
+ require_relative '../rdoc'
191
+ require_relative 'markup/to_joined_paragraph'
192
+ require_relative 'markdown/entities'
193
193
 
194
- require 'rdoc/markdown/literals'
194
+ require_relative 'markdown/literals'
195
195
 
196
196
  ##
197
197
  # Supported extensions
@@ -449,7 +449,7 @@
449
449
 
450
450
  @note_order.each_with_index do |ref, index|
451
451
  label = index + 1
452
- note = @footnotes[ref]
452
+ note = @footnotes[ref] or raise ParseError, "footnote [^#{ref}] not found"
453
453
 
454
454
  link = "{^#{label}}[rdoc-label:footmark-#{label}:foottext-#{label}] "
455
455
  note.parts.unshift link
@@ -1135,7 +1135,7 @@ StartList = &.
1135
1135
  { [] }
1136
1136
 
1137
1137
  Line = @RawLine:a { a }
1138
- RawLine = ( < (!"\r" !"\n" .)* @Newline >
1138
+ RawLine = ( < /[^\r\n]*/ @Newline >
1139
1139
  | < .+ > @Eof ) { text }
1140
1140
 
1141
1141
  SkipBlock = HtmlBlock
@@ -1179,7 +1179,7 @@ InlineNote = &{ notes? }
1179
1179
  Notes = ( Note | SkipBlock )*
1180
1180
 
1181
1181
  RawNoteBlock = @StartList:a
1182
- ( !@BlankLine OptionallyIndentedLine:l { a << l } )+
1182
+ ( !@BlankLine !RawNoteReference OptionallyIndentedLine:l { a << l } )+
1183
1183
  ( < @BlankLine* > { a << text } )
1184
1184
  { a }
1185
1185
 
@@ -1198,19 +1198,26 @@ CodeFence = &{ github? }
1198
1198
  }
1199
1199
 
1200
1200
  Table = &{ github? }
1201
- TableRow:header TableLine:line TableRow+:body
1201
+ TableHead:header TableLine:line TableRow+:body
1202
1202
  { table = RDoc::Markup::Table.new(header, line, body) }
1203
1203
 
1204
- TableRow = TableItem+:row "|" @Newline
1205
- { row }
1206
- TableItem = "|" < (!"|" !@Newline .)+ >
1207
- { text.strip }
1208
-
1209
- TableLine = TableColumn+:line "|" @Newline
1210
- { line }
1211
- TableColumn = "|" < ( "-"+ ":"? | ":" "-"* ) >
1212
- { text.start_with?(":") ? :left :
1213
- text.end_with?(":") ? :right : nil
1204
+ TableHead = TableItem2+:items "|"? @Newline
1205
+ { items }
1206
+
1207
+ TableRow = ( ( TableItem:item1 TableItem2*:items { [item1, *items] } ):row | TableItem2+:row ) "|"? @Newline
1208
+ { row }
1209
+ TableItem2 = "|" TableItem
1210
+ TableItem = < /(?:\\.|[^|\n])+/ >
1211
+ { text.strip.gsub(/\\(.)/, '\1') }
1212
+
1213
+ TableLine = ( ( TableAlign:align1 TableAlign2*:aligns {[align1, *aligns] } ):line | TableAlign2+:line ) "|"? @Newline
1214
+ { line }
1215
+ TableAlign2 = "|" @Sp TableAlign
1216
+ TableAlign = < /:?-+:?/ > @Sp
1217
+ {
1218
+ text.start_with?(":") ?
1219
+ (text.end_with?(":") ? :center : :left) :
1220
+ (text.end_with?(":") ? :right : nil)
1214
1221
  }
1215
1222
 
1216
1223
  DefinitionList = &{ definition_lists? }