rdoc 6.16.1 → 7.0.0

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 (38) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +187 -0
  3. data/LEGAL.rdoc +6 -0
  4. data/README.md +20 -3
  5. data/lib/rdoc/code_object/any_method.rb +15 -7
  6. data/lib/rdoc/code_object/class_module.rb +13 -0
  7. data/lib/rdoc/code_object/constant.rb +9 -0
  8. data/lib/rdoc/code_object/method_attr.rb +13 -1
  9. data/lib/rdoc/code_object/top_level.rb +13 -1
  10. data/lib/rdoc/generator/aliki.rb +124 -0
  11. data/lib/rdoc/generator/darkfish.rb +5 -1
  12. data/lib/rdoc/generator/template/aliki/_head.rhtml +4 -4
  13. data/lib/rdoc/generator/template/aliki/_icons.rhtml +208 -0
  14. data/lib/rdoc/generator/template/aliki/_sidebar_ancestors.rhtml +12 -2
  15. data/lib/rdoc/generator/template/aliki/_sidebar_classes.rhtml +12 -2
  16. data/lib/rdoc/generator/template/aliki/_sidebar_extends.rhtml +20 -10
  17. data/lib/rdoc/generator/template/aliki/_sidebar_includes.rhtml +20 -10
  18. data/lib/rdoc/generator/template/aliki/_sidebar_methods.rhtml +32 -12
  19. data/lib/rdoc/generator/template/aliki/_sidebar_pages.rhtml +58 -28
  20. data/lib/rdoc/generator/template/aliki/_sidebar_sections.rhtml +16 -6
  21. data/lib/rdoc/generator/template/aliki/class.rhtml +4 -5
  22. data/lib/rdoc/generator/template/aliki/css/rdoc.css +368 -36
  23. data/lib/rdoc/generator/template/aliki/index.rhtml +1 -0
  24. data/lib/rdoc/generator/template/aliki/js/aliki.js +18 -3
  25. data/lib/rdoc/generator/template/aliki/js/{search.js → search_controller.js} +6 -6
  26. data/lib/rdoc/generator/template/aliki/js/search_navigation.js +105 -0
  27. data/lib/rdoc/generator/template/aliki/js/search_ranker.js +239 -0
  28. data/lib/rdoc/generator/template/aliki/page.rhtml +1 -0
  29. data/lib/rdoc/generator/template/darkfish/class.rhtml +3 -5
  30. data/lib/rdoc/markup/to_ansi.rb +4 -0
  31. data/lib/rdoc/markup/to_bs.rb +4 -0
  32. data/lib/rdoc/markup/to_rdoc.rb +11 -3
  33. data/lib/rdoc/options.rb +1 -1
  34. data/lib/rdoc/rubygems_hook.rb +3 -3
  35. data/lib/rdoc/version.rb +1 -1
  36. data/rdoc.gemspec +1 -1
  37. metadata +9 -6
  38. data/CONTRIBUTING.rdoc +0 -219
@@ -0,0 +1,105 @@
1
+ /*
2
+ * SearchNavigation allows movement using the arrow keys through the search results.
3
+ *
4
+ * When using this library you will need to set scrollIntoView to the
5
+ * appropriate function for your layout. Use scrollInWindow if the container
6
+ * is not scrollable and scrollInElement if the container is a separate
7
+ * scrolling region.
8
+ */
9
+ SearchNavigation = new function() {
10
+ this.initNavigation = function() {
11
+ var _this = this;
12
+
13
+ document.addEventListener('keydown', function(e) {
14
+ _this.onkeydown(e);
15
+ });
16
+
17
+ this.navigationActive = true;
18
+ }
19
+
20
+ this.setNavigationActive = function(state) {
21
+ this.navigationActive = state;
22
+ }
23
+
24
+ this.onkeydown = function(e) {
25
+ if (!this.navigationActive) return;
26
+ switch(e.key) {
27
+ case 'ArrowLeft':
28
+ if (this.moveLeft()) e.preventDefault();
29
+ break;
30
+ case 'ArrowUp':
31
+ if (e.key == 'ArrowUp' || e.ctrlKey) {
32
+ if (this.moveUp()) e.preventDefault();
33
+ }
34
+ break;
35
+ case 'ArrowRight':
36
+ if (this.moveRight()) e.preventDefault();
37
+ break;
38
+ case 'ArrowDown':
39
+ if (e.key == 'ArrowDown' || e.ctrlKey) {
40
+ if (this.moveDown()) e.preventDefault();
41
+ }
42
+ break;
43
+ case 'Enter':
44
+ if (this.current) e.preventDefault();
45
+ this.select(this.current);
46
+ break;
47
+ }
48
+ if (e.ctrlKey && e.shiftKey) this.select(this.current);
49
+ }
50
+
51
+ this.moveRight = function() {
52
+ }
53
+
54
+ this.moveLeft = function() {
55
+ }
56
+
57
+ this.move = function(isDown) {
58
+ }
59
+
60
+ this.moveUp = function() {
61
+ return this.move(false);
62
+ }
63
+
64
+ this.moveDown = function() {
65
+ return this.move(true);
66
+ }
67
+
68
+ /*
69
+ * Scrolls to the given element in the scrollable element view.
70
+ */
71
+ this.scrollInElement = function(element, view) {
72
+ var offset, viewHeight, viewScroll, height;
73
+ offset = element.offsetTop;
74
+ height = element.offsetHeight;
75
+ viewHeight = view.offsetHeight;
76
+ viewScroll = view.scrollTop;
77
+
78
+ if (offset - viewScroll + height > viewHeight) {
79
+ view.scrollTop = offset - viewHeight + height;
80
+ }
81
+ if (offset < viewScroll) {
82
+ view.scrollTop = offset;
83
+ }
84
+ }
85
+
86
+ /*
87
+ * Scrolls to the given element in the window. The second argument is
88
+ * ignored
89
+ */
90
+ this.scrollInWindow = function(element, ignored) {
91
+ var offset, viewHeight, viewScroll, height;
92
+ offset = element.offsetTop;
93
+ height = element.offsetHeight;
94
+ viewHeight = window.innerHeight;
95
+ viewScroll = window.scrollY;
96
+
97
+ if (offset - viewScroll + height > viewHeight) {
98
+ window.scrollTo(window.scrollX, offset - viewHeight + height);
99
+ }
100
+ if (offset < viewScroll) {
101
+ window.scrollTo(window.scrollX, offset);
102
+ }
103
+ }
104
+ }
105
+
@@ -0,0 +1,239 @@
1
+ /**
2
+ * Aliki Search Implementation
3
+ *
4
+ * Search algorithm with the following priorities:
5
+ * 1. Exact full_name match always wins (for namespace/method queries)
6
+ * 2. Exact name match gets high priority
7
+ * 3. Match types:
8
+ * - Namespace queries (::) and method queries (# or .) match against full_name
9
+ * - Regular queries match against unqualified name
10
+ * - Prefix (10000) > substring (5000) > fuzzy (1000)
11
+ * 4. First character determines type priority:
12
+ * - Starts with lowercase: methods first
13
+ * - Starts with uppercase: classes/modules/constants first
14
+ * 5. Within same type priority:
15
+ * - Unqualified match > qualified match
16
+ * - Shorter name > longer name
17
+ * 6. Class methods > instance methods
18
+ * 7. Result limit: 30
19
+ * 8. Minimum query length: 1 character
20
+ */
21
+
22
+ var MAX_RESULTS = 30;
23
+ var MIN_QUERY_LENGTH = 1;
24
+
25
+ /*
26
+ * Scoring constants - organized in tiers where each tier dominates lower tiers.
27
+ * This ensures match type always beats type priority, etc.
28
+ *
29
+ * Tier 0: Exact matches (immediate return)
30
+ * Tier 1: Match type (prefix > substring > fuzzy)
31
+ * Tier 2: Exact name bonus
32
+ * Tier 3: Type priority (method vs class based on query case)
33
+ * Tier 4: Minor bonuses (top-level, class method, name length)
34
+ */
35
+ var SCORE_EXACT_FULL_NAME = 1000000; // Tier 0: Query exactly matches full_name
36
+ var SCORE_MATCH_PREFIX = 10000; // Tier 1: Query is prefix of name
37
+ var SCORE_MATCH_SUBSTRING = 5000; // Tier 1: Query is substring of name
38
+ var SCORE_MATCH_FUZZY = 1000; // Tier 1: Query chars appear in order
39
+ var SCORE_EXACT_NAME = 500; // Tier 2: Name exactly equals query
40
+ var SCORE_TYPE_PRIORITY = 100; // Tier 3: Preferred type (method/class)
41
+ var SCORE_TOP_LEVEL = 50; // Tier 4: Top-level over namespaced
42
+ var SCORE_CLASS_METHOD = 10; // Tier 4: Class method over instance method
43
+
44
+ /**
45
+ * Check if all characters in query appear in order in target
46
+ * e.g., "addalias" fuzzy matches "add_foo_alias"
47
+ */
48
+ function fuzzyMatch(target, query) {
49
+ var ti = 0;
50
+ for (var qi = 0; qi < query.length; qi++) {
51
+ ti = target.indexOf(query[qi], ti);
52
+ if (ti === -1) return false;
53
+ ti++;
54
+ }
55
+ return true;
56
+ }
57
+
58
+ /**
59
+ * Parse and normalize a search query
60
+ * @param {string} query - The raw search query
61
+ * @returns {Object} Parsed query with normalized form and flags
62
+ */
63
+ function parseQuery(query) {
64
+ // Lowercase for case-insensitive matching (so "hash" finds both Hash class and #hash methods)
65
+ var normalized = query.toLowerCase();
66
+ var isNamespaceQuery = query.includes('::');
67
+ var isMethodQuery = query.includes('#') || query.includes('.');
68
+
69
+ // Normalize . to :: (RDoc uses :: for class methods in full_name)
70
+ if (query.includes('.')) {
71
+ normalized = normalized.replace(/\./g, '::');
72
+ }
73
+
74
+ return {
75
+ original: query,
76
+ normalized: normalized,
77
+ isNamespaceQuery: isNamespaceQuery,
78
+ isMethodQuery: isMethodQuery,
79
+ // Namespace and method queries match against full_name instead of name
80
+ matchesFullName: isNamespaceQuery || isMethodQuery,
81
+ // If query starts with lowercase, prioritize methods; otherwise prioritize classes/modules/constants
82
+ prioritizeMethod: !/^[A-Z]/.test(query)
83
+ };
84
+ }
85
+
86
+ /**
87
+ * Main search function
88
+ * @param {string} query - The search query
89
+ * @param {Array} index - The search index to search in
90
+ * @returns {Array} Array of matching entries, sorted by relevance
91
+ */
92
+ function search(query, index) {
93
+ if (!query || query.length < MIN_QUERY_LENGTH) {
94
+ return [];
95
+ }
96
+
97
+ var q = parseQuery(query);
98
+ var results = [];
99
+
100
+ for (var i = 0; i < index.length; i++) {
101
+ var entry = index[i];
102
+ var score = computeScore(entry, q);
103
+
104
+ if (score !== null) {
105
+ results.push({ entry: entry, score: score });
106
+ }
107
+ }
108
+
109
+ results.sort(function(a, b) {
110
+ return b.score - a.score;
111
+ });
112
+
113
+ return results.slice(0, MAX_RESULTS).map(function(r) {
114
+ return r.entry;
115
+ });
116
+ }
117
+
118
+ /**
119
+ * Compute the relevance score for an entry
120
+ * @param {Object} entry - The search index entry
121
+ * @param {Object} q - Parsed query from parseQuery()
122
+ * @returns {number|null} Score or null if no match
123
+ */
124
+ function computeScore(entry, q) {
125
+ var name = entry.name;
126
+ var fullName = entry.full_name;
127
+ var type = entry.type;
128
+
129
+ var nameLower = name.toLowerCase();
130
+ var fullNameLower = fullName.toLowerCase();
131
+
132
+ // Exact full_name match (e.g., "Array#filter" matches Array#filter)
133
+ if (q.matchesFullName && fullNameLower === q.normalized) {
134
+ return SCORE_EXACT_FULL_NAME;
135
+ }
136
+
137
+ var matchScore = 0;
138
+ var target = q.matchesFullName ? fullNameLower : nameLower;
139
+
140
+ if (target.startsWith(q.normalized)) {
141
+ matchScore = SCORE_MATCH_PREFIX; // Prefix (e.g., "Arr" matches "Array")
142
+ } else if (target.includes(q.normalized)) {
143
+ matchScore = SCORE_MATCH_SUBSTRING; // Substring (e.g., "ray" matches "Array")
144
+ } else if (fuzzyMatch(target, q.normalized)) {
145
+ matchScore = SCORE_MATCH_FUZZY; // Fuzzy (e.g., "addalias" matches "add_foo_alias")
146
+ } else {
147
+ return null;
148
+ }
149
+
150
+ var score = matchScore;
151
+ var isMethod = (type === 'instance_method' || type === 'class_method');
152
+
153
+ if (q.prioritizeMethod ? isMethod : !isMethod) {
154
+ score += SCORE_TYPE_PRIORITY;
155
+ }
156
+
157
+ if (type === 'class_method') score += SCORE_CLASS_METHOD;
158
+ if (name === fullName) score += SCORE_TOP_LEVEL; // Top-level (Hash) > namespaced (Foo::Hash)
159
+ if (nameLower === q.normalized) score += SCORE_EXACT_NAME; // Exact name match
160
+ score -= name.length;
161
+
162
+ return score;
163
+ }
164
+
165
+ /**
166
+ * SearchRanker class for compatibility with the Search UI
167
+ * Provides ready() and find() interface
168
+ */
169
+ function SearchRanker(index) {
170
+ this.index = index;
171
+ this.handlers = [];
172
+ }
173
+
174
+ SearchRanker.prototype.ready = function(fn) {
175
+ this.handlers.push(fn);
176
+ };
177
+
178
+ SearchRanker.prototype.find = function(query) {
179
+ var q = parseQuery(query);
180
+ var rawResults = search(query, this.index);
181
+ var results = rawResults.map(function(entry) {
182
+ return formatResult(entry, q);
183
+ });
184
+
185
+ var _this = this;
186
+ this.handlers.forEach(function(fn) {
187
+ fn.call(_this, results, true);
188
+ });
189
+ };
190
+
191
+ /**
192
+ * Format a search result entry for display
193
+ */
194
+ function formatResult(entry, q) {
195
+ var result = {
196
+ title: highlightMatch(entry.full_name, q),
197
+ path: entry.path,
198
+ type: entry.type
199
+ };
200
+
201
+ if (entry.snippet) {
202
+ result.snippet = entry.snippet;
203
+ }
204
+
205
+ return result;
206
+ }
207
+
208
+ /**
209
+ * Add highlight markers (\u0001 and \u0002) to matching portions of text
210
+ * @param {string} text - The text to highlight
211
+ * @param {Object} q - Parsed query from parseQuery()
212
+ */
213
+ function highlightMatch(text, q) {
214
+ if (!text || !q) return text;
215
+
216
+ var textLower = text.toLowerCase();
217
+ var query = q.normalized;
218
+
219
+ // Try contiguous match first (prefix or substring)
220
+ var matchIndex = textLower.indexOf(query);
221
+ if (matchIndex !== -1) {
222
+ return text.substring(0, matchIndex) +
223
+ '\u0001' + text.substring(matchIndex, matchIndex + query.length) + '\u0002' +
224
+ text.substring(matchIndex + query.length);
225
+ }
226
+
227
+ // Fall back to fuzzy highlight (highlight each matched character)
228
+ var result = '';
229
+ var ti = 0;
230
+ for (var qi = 0; qi < query.length; qi++) {
231
+ var charIndex = textLower.indexOf(query[qi], ti);
232
+ if (charIndex === -1) return text;
233
+ result += text.substring(ti, charIndex);
234
+ result += '\u0001' + text[charIndex] + '\u0002';
235
+ ti = charIndex + 1;
236
+ }
237
+ result += text.substring(ti);
238
+ return result;
239
+ }
@@ -1,4 +1,5 @@
1
1
  <body role="document" class="file has-toc">
2
+ <%= render '_icons.rhtml' %>
2
3
  <%= render '_header.rhtml' %>
3
4
  <%= render '_sidebar_toggle.rhtml' %>
4
5
 
@@ -163,15 +163,13 @@
163
163
  <summary>Source</summary>
164
164
  </details>
165
165
  </div>
166
+ <div class="method-source-code" id="<%= method.html_name %>-source">
167
+ <pre><%= method.markup_code %></pre>
168
+ </div>
166
169
  <%- end %>
167
170
 
168
171
  <%- unless method.skip_description? then %>
169
172
  <div class="method-description">
170
- <%- if method.token_stream then %>
171
- <div class="method-source-code" id="<%= method.html_name %>-source">
172
- <pre><%= method.markup_code %></pre>
173
- </div>
174
- <%- end %>
175
173
  <%- if method.mixin_from then %>
176
174
  <div class="mixin-from">
177
175
  <%= method.singleton ? "Extended" : "Included" %> from <a href="<%= klass.aref_to(method.mixin_from.path) %>"><%= method.mixin_from.full_name %></a>
@@ -81,6 +81,10 @@ class RDoc::Markup::ToAnsi < RDoc::Markup::ToRdoc
81
81
  end
82
82
  end
83
83
 
84
+ def calculate_text_width(text)
85
+ text.gsub(/\e\[[\d;]*m/, '').size
86
+ end
87
+
84
88
  ##
85
89
  # Starts accepting with a reset screen
86
90
 
@@ -65,6 +65,10 @@ class RDoc::Markup::ToBs < RDoc::Markup::ToRdoc
65
65
  end
66
66
  end
67
67
 
68
+ def calculate_text_width(text)
69
+ text.gsub(/_\x08/, '').gsub(/\x08./, '').size
70
+ end
71
+
68
72
  ##
69
73
  # Turns on or off regexp handling for +convert_string+
70
74
 
@@ -250,8 +250,10 @@ class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter
250
250
  # Adds +table+ to the output
251
251
 
252
252
  def accept_table(header, body, aligns)
253
+ header = header.map { |h| attributes h }
254
+ body = body.map { |row| row.map { |t| attributes t } }
253
255
  widths = header.zip(*body).map do |cols|
254
- cols.map(&:size).max
256
+ cols.map { |col| calculate_text_width(col) }.max
255
257
  end
256
258
  aligns = aligns.map do |a|
257
259
  case a
@@ -264,16 +266,22 @@ class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter
264
266
  end
265
267
  end
266
268
  @res << header.zip(widths, aligns).map do |h, w, a|
267
- h.__send__(a, w)
269
+ extra_width = h.size - calculate_text_width(h)
270
+ h.__send__(a, w + extra_width)
268
271
  end.join("|").rstrip << "\n"
269
272
  @res << widths.map {|w| "-" * w }.join("|") << "\n"
270
273
  body.each do |row|
271
274
  @res << row.zip(widths, aligns).map do |t, w, a|
272
- t.__send__(a, w)
275
+ extra_width = t.size - calculate_text_width(t)
276
+ t.__send__(a, w + extra_width)
273
277
  end.join("|").rstrip << "\n"
274
278
  end
275
279
  end
276
280
 
281
+ def calculate_text_width(text)
282
+ text.size
283
+ end
284
+
277
285
  ##
278
286
  # Applies attribute-specific markup to +text+ using RDoc::AttributeManager
279
287
 
data/lib/rdoc/options.rb CHANGED
@@ -411,7 +411,7 @@ class RDoc::Options
411
411
  @files = nil
412
412
  @force_output = false
413
413
  @force_update = true
414
- @generator_name = "darkfish"
414
+ @generator_name = "aliki"
415
415
  @generators = RDoc::RDoc::GENERATORS
416
416
  @generator_options = []
417
417
  @hyperlink_all = false
@@ -118,7 +118,7 @@ class RDoc::RubyGemsHook
118
118
  end
119
119
 
120
120
  ##
121
- # Generates documentation using the named +generator+ ("darkfish" or "ri")
121
+ # Generates documentation using the named +generator+ ("aliki" or "ri")
122
122
  # and following the given +options+.
123
123
  #
124
124
  # Documentation will be generated into +destination+
@@ -190,7 +190,7 @@ class RDoc::RubyGemsHook
190
190
 
191
191
  Dir.chdir @spec.full_gem_path do
192
192
  # RDoc::Options#finish must be called before parse_files.
193
- # RDoc::Options#finish is also called after ri/darkfish generator setup.
193
+ # RDoc::Options#finish is also called after ri/aliki generator setup.
194
194
  # We need to dup the options to avoid modifying it after finish is called.
195
195
  parse_options = options.dup
196
196
  parse_options.finish
@@ -202,7 +202,7 @@ class RDoc::RubyGemsHook
202
202
  document 'ri', options, @ri_dir if
203
203
  @generate_ri and (@force or not File.exist? @ri_dir)
204
204
 
205
- document 'darkfish', options, @rdoc_dir if
205
+ document 'aliki', options, @rdoc_dir if
206
206
  @generate_rdoc and (@force or not File.exist? @rdoc_dir)
207
207
  end
208
208
 
data/lib/rdoc/version.rb CHANGED
@@ -5,6 +5,6 @@ module RDoc
5
5
  ##
6
6
  # RDoc version you are using
7
7
 
8
- VERSION = '6.16.1'
8
+ VERSION = '7.0.0'
9
9
 
10
10
  end
data/rdoc.gemspec CHANGED
@@ -38,7 +38,7 @@ RDoc includes the +rdoc+ and +ri+ tools for generating and displaying documentat
38
38
  # for ruby core repository. It was generated by
39
39
  # `git ls-files -z`.split("\x0").each {|f| puts " #{f.dump}," unless f.start_with?(*%W[test/ spec/ features/ .]) }
40
40
  non_lib_files = [
41
- "CONTRIBUTING.rdoc",
41
+ "CONTRIBUTING.md",
42
42
  "CVE-2013-0256.rdoc",
43
43
  "ExampleMarkdown.md",
44
44
  "ExampleRDoc.rdoc",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rdoc
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.16.1
4
+ version: 7.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Hodel
@@ -13,7 +13,7 @@ authors:
13
13
  - ITOYANAGI Sakura
14
14
  bindir: exe
15
15
  cert_chain: []
16
- date: 2025-11-28 00:00:00.000000000 Z
16
+ date: 2025-12-18 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: psych
@@ -73,7 +73,7 @@ executables:
73
73
  - ri
74
74
  extensions: []
75
75
  extra_rdoc_files:
76
- - CONTRIBUTING.rdoc
76
+ - CONTRIBUTING.md
77
77
  - CVE-2013-0256.rdoc
78
78
  - ExampleMarkdown.md
79
79
  - ExampleRDoc.rdoc
@@ -84,7 +84,7 @@ extra_rdoc_files:
84
84
  - RI.md
85
85
  - TODO.rdoc
86
86
  files:
87
- - CONTRIBUTING.rdoc
87
+ - CONTRIBUTING.md
88
88
  - CVE-2013-0256.rdoc
89
89
  - ExampleMarkdown.md
90
90
  - ExampleRDoc.rdoc
@@ -137,6 +137,7 @@ files:
137
137
  - lib/rdoc/generator/template/aliki/_footer.rhtml
138
138
  - lib/rdoc/generator/template/aliki/_head.rhtml
139
139
  - lib/rdoc/generator/template/aliki/_header.rhtml
140
+ - lib/rdoc/generator/template/aliki/_icons.rhtml
140
141
  - lib/rdoc/generator/template/aliki/_sidebar_ancestors.rhtml
141
142
  - lib/rdoc/generator/template/aliki/_sidebar_classes.rhtml
142
143
  - lib/rdoc/generator/template/aliki/_sidebar_extends.rhtml
@@ -152,7 +153,9 @@ files:
152
153
  - lib/rdoc/generator/template/aliki/index.rhtml
153
154
  - lib/rdoc/generator/template/aliki/js/aliki.js
154
155
  - lib/rdoc/generator/template/aliki/js/c_highlighter.js
155
- - lib/rdoc/generator/template/aliki/js/search.js
156
+ - lib/rdoc/generator/template/aliki/js/search_controller.js
157
+ - lib/rdoc/generator/template/aliki/js/search_navigation.js
158
+ - lib/rdoc/generator/template/aliki/js/search_ranker.js
156
159
  - lib/rdoc/generator/template/aliki/js/theme-toggle.js
157
160
  - lib/rdoc/generator/template/aliki/page.rhtml
158
161
  - lib/rdoc/generator/template/aliki/servlet_not_found.rhtml
@@ -321,7 +324,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
321
324
  - !ruby/object:Gem::Version
322
325
  version: '2.2'
323
326
  requirements: []
324
- rubygems_version: 3.6.7
327
+ rubygems_version: 3.6.9
325
328
  specification_version: 4
326
329
  summary: RDoc produces HTML and command-line documentation for Ruby projects
327
330
  test_files: []