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.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +187 -0
- data/LEGAL.rdoc +6 -0
- data/README.md +20 -3
- data/lib/rdoc/code_object/any_method.rb +15 -7
- data/lib/rdoc/code_object/class_module.rb +13 -0
- data/lib/rdoc/code_object/constant.rb +9 -0
- data/lib/rdoc/code_object/method_attr.rb +13 -1
- data/lib/rdoc/code_object/top_level.rb +13 -1
- data/lib/rdoc/generator/aliki.rb +124 -0
- data/lib/rdoc/generator/darkfish.rb +5 -1
- data/lib/rdoc/generator/template/aliki/_head.rhtml +4 -4
- data/lib/rdoc/generator/template/aliki/_icons.rhtml +208 -0
- data/lib/rdoc/generator/template/aliki/_sidebar_ancestors.rhtml +12 -2
- data/lib/rdoc/generator/template/aliki/_sidebar_classes.rhtml +12 -2
- data/lib/rdoc/generator/template/aliki/_sidebar_extends.rhtml +20 -10
- data/lib/rdoc/generator/template/aliki/_sidebar_includes.rhtml +20 -10
- data/lib/rdoc/generator/template/aliki/_sidebar_methods.rhtml +32 -12
- data/lib/rdoc/generator/template/aliki/_sidebar_pages.rhtml +58 -28
- data/lib/rdoc/generator/template/aliki/_sidebar_sections.rhtml +16 -6
- data/lib/rdoc/generator/template/aliki/class.rhtml +4 -5
- data/lib/rdoc/generator/template/aliki/css/rdoc.css +368 -36
- data/lib/rdoc/generator/template/aliki/index.rhtml +1 -0
- data/lib/rdoc/generator/template/aliki/js/aliki.js +18 -3
- data/lib/rdoc/generator/template/aliki/js/{search.js → search_controller.js} +6 -6
- data/lib/rdoc/generator/template/aliki/js/search_navigation.js +105 -0
- data/lib/rdoc/generator/template/aliki/js/search_ranker.js +239 -0
- data/lib/rdoc/generator/template/aliki/page.rhtml +1 -0
- data/lib/rdoc/generator/template/darkfish/class.rhtml +3 -5
- data/lib/rdoc/markup/to_ansi.rb +4 -0
- data/lib/rdoc/markup/to_bs.rb +4 -0
- data/lib/rdoc/markup/to_rdoc.rb +11 -3
- data/lib/rdoc/options.rb +1 -1
- data/lib/rdoc/rubygems_hook.rb +3 -3
- data/lib/rdoc/version.rb +1 -1
- data/rdoc.gemspec +1 -1
- metadata +9 -6
- 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
|
+
}
|
|
@@ -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>
|
data/lib/rdoc/markup/to_ansi.rb
CHANGED
data/lib/rdoc/markup/to_bs.rb
CHANGED
data/lib/rdoc/markup/to_rdoc.rb
CHANGED
|
@@ -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(
|
|
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.
|
|
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.
|
|
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
data/lib/rdoc/rubygems_hook.rb
CHANGED
|
@@ -118,7 +118,7 @@ class RDoc::RubyGemsHook
|
|
|
118
118
|
end
|
|
119
119
|
|
|
120
120
|
##
|
|
121
|
-
# Generates documentation using the named +generator+ ("
|
|
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/
|
|
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 '
|
|
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
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.
|
|
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:
|
|
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-
|
|
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.
|
|
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.
|
|
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/
|
|
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.
|
|
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: []
|