esolang 0.1.2 → 0.1.4
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/README.md +55 -0
- data/doc/Esolang/Interpreters/BaseInterpreter.html +339 -0
- data/doc/Esolang/Interpreters/Boolfuck.html +383 -0
- data/doc/Esolang/Interpreters/Brainfuck.html +391 -0
- data/doc/Esolang/Interpreters/Ook.html +391 -0
- data/doc/Esolang/Interpreters/Paintfuck.html +419 -0
- data/doc/Esolang/Interpreters/Smallfuck.html +369 -0
- data/doc/Esolang/Interpreters.html +117 -0
- data/doc/Esolang/Refinements.html +120 -0
- data/doc/Esolang.html +778 -0
- data/doc/_index.html +211 -0
- data/doc/class_list.html +51 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +58 -0
- data/doc/css/style.css +497 -0
- data/doc/file.README.html +127 -0
- data/doc/file_list.html +56 -0
- data/doc/frames.html +17 -0
- data/doc/index.html +127 -0
- data/doc/js/app.js +314 -0
- data/doc/js/full_list.js +216 -0
- data/doc/js/jquery.js +4 -0
- data/doc/method_list.html +187 -0
- data/doc/top-level-namespace.html +110 -0
- metadata +32 -7
data/doc/frames.html
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<title>Documentation by YARD 0.9.34</title>
|
6
|
+
</head>
|
7
|
+
<script type="text/javascript">
|
8
|
+
var match = unescape(window.location.hash).match(/^#!(.+)/);
|
9
|
+
var name = match ? match[1] : 'index.html';
|
10
|
+
name = name.replace(/^(\w+):\/\//, '').replace(/^\/\//, '');
|
11
|
+
window.top.location = name;
|
12
|
+
</script>
|
13
|
+
<noscript>
|
14
|
+
<h1>Oops!</h1>
|
15
|
+
<h2>YARD requires JavaScript!</h2>
|
16
|
+
</noscript>
|
17
|
+
</html>
|
data/doc/index.html
ADDED
@@ -0,0 +1,127 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="UTF-8">
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6
|
+
<title>
|
7
|
+
File: README
|
8
|
+
|
9
|
+
— Documentation by YARD 0.9.34
|
10
|
+
|
11
|
+
</title>
|
12
|
+
|
13
|
+
<link rel="stylesheet" href="css/style.css" type="text/css" />
|
14
|
+
|
15
|
+
<link rel="stylesheet" href="css/common.css" type="text/css" />
|
16
|
+
|
17
|
+
<script type="text/javascript">
|
18
|
+
pathId = "README";
|
19
|
+
relpath = '';
|
20
|
+
</script>
|
21
|
+
|
22
|
+
|
23
|
+
<script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
|
24
|
+
|
25
|
+
<script type="text/javascript" charset="utf-8" src="js/app.js"></script>
|
26
|
+
|
27
|
+
|
28
|
+
</head>
|
29
|
+
<body>
|
30
|
+
<div class="nav_wrap">
|
31
|
+
<iframe id="nav" src="class_list.html?1"></iframe>
|
32
|
+
<div id="resizer"></div>
|
33
|
+
</div>
|
34
|
+
|
35
|
+
<div id="main" tabindex="-1">
|
36
|
+
<div id="header">
|
37
|
+
<div id="menu">
|
38
|
+
|
39
|
+
<a href="_index.html">Index</a> »
|
40
|
+
<span class="title">File: README</span>
|
41
|
+
|
42
|
+
</div>
|
43
|
+
|
44
|
+
<div id="search">
|
45
|
+
|
46
|
+
<a class="full_list_link" id="class_list_link"
|
47
|
+
href="class_list.html">
|
48
|
+
|
49
|
+
<svg width="24" height="24">
|
50
|
+
<rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
|
51
|
+
<rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
|
52
|
+
<rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
|
53
|
+
</svg>
|
54
|
+
</a>
|
55
|
+
|
56
|
+
</div>
|
57
|
+
<div class="clear"></div>
|
58
|
+
</div>
|
59
|
+
|
60
|
+
<div id="content"><div id='filecontents'>
|
61
|
+
<h1 id="label-esolang">esolang</h1>
|
62
|
+
|
63
|
+
<p>A Ruby gem for interpreting esoteric programming languages.</p>
|
64
|
+
|
65
|
+
<p>Supported at the moment: Smallfuck, Boolfuck, Paintfuck, Brainfuck, Ook! (with method to feet the memory pointer with bananas)</p>
|
66
|
+
|
67
|
+
<p>This gem is inspired by <a href="https://www.codewars.com/kata/esolang-interpreters-number-1-introduction-to-esolangs-and-my-first-interpreter-ministringfuck">this</a> Kata Series on Codewars that ignited my passion for esolangs. Special thanks to the author <a href="https://www.codewars.com/users/donaldsebleung">donaldsebleung</a>.</p>
|
68
|
+
|
69
|
+
<p>Codesnippets for tests and examples are copies or variations from <a href="https://esolangs.org/">Esolangs wiki</a> or <a href="https://www.wikipedia.org/">Wikipedia</a></p>
|
70
|
+
|
71
|
+
<p>This is an ongoing fun and educational project, and the author assumes no liability for the accuracy and completeness of the implementations.</p>
|
72
|
+
|
73
|
+
<h2 id="label-Installation">Installation</h2>
|
74
|
+
|
75
|
+
<p>To use the <code>esolang</code> gem, you can install it via:</p>
|
76
|
+
|
77
|
+
<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_gem'>gem</span> <span class='id identifier rubyid_install'>install</span> <span class='id identifier rubyid_esolang'>esolang</span>
|
78
|
+
</code></pre>
|
79
|
+
|
80
|
+
<h2 id="label-Example+Usage">Example Usage</h2>
|
81
|
+
|
82
|
+
<pre class="code ruby"><code class="ruby">require 'esolang'
|
83
|
+
using Esolang::Refinements
|
84
|
+
|
85
|
+
code = ";;;+;+;;+;+;
|
86
|
+
+;+;+;+;;+;;+;
|
87
|
+
;;+;;+;+;;+;
|
88
|
+
;;+;;+;+;;+;
|
89
|
+
+;;;;+;+;;+;
|
90
|
+
;;+;;+;+;+;;
|
91
|
+
;;;;;+;+;;
|
92
|
+
+;;;+;+;;;+;
|
93
|
+
+;;;;+;+;;+;
|
94
|
+
;+;+;;+;;;+;
|
95
|
+
;;+;;+;+;;+;
|
96
|
+
;;+;+;;+;;+;
|
97
|
+
+;+;;;;+;+;;
|
98
|
+
;+;+;+;
|
99
|
+
|
100
|
+
puts code.boolfuck
|
101
|
+
</code></pre>
|
102
|
+
|
103
|
+
<p>This gem adds string refinements. You can use the <code>boolfuck</code> method directly on a string:</p>
|
104
|
+
|
105
|
+
<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>esolang</span><span class='tstring_end'>'</span></span>
|
106
|
+
<span class='id identifier rubyid_using'>using</span> <span class='const'><span class='object_link'><a href="Esolang.html" title="Esolang (module)">Esolang</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Esolang/Refinements.html" title="Esolang::Refinements (module)">Refinements</a></span></span>
|
107
|
+
|
108
|
+
<span class='id identifier rubyid_code'>code</span><span class='period'>.</span><span class='id identifier rubyid_boolfuck'>boolfuck</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>user_input</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span>
|
109
|
+
</code></pre>
|
110
|
+
|
111
|
+
<p>Alternatively, you can use the <code>Esolang</code> module:</p>
|
112
|
+
|
113
|
+
<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>esolang</span><span class='tstring_end'>'</span></span>
|
114
|
+
|
115
|
+
<span class='const'><span class='object_link'><a href="Esolang.html" title="Esolang (module)">Esolang</a></span></span><span class='period'>.</span><span class='id identifier rubyid_boolfuck'><span class='object_link'><a href="Esolang.html#boolfuck-class_method" title="Esolang.boolfuck (method)">boolfuck</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_code'>code</span><span class='comma'>,</span> <span class='id identifier rubyid_input'>input</span><span class='rparen'>)</span>
|
116
|
+
</code></pre>
|
117
|
+
</div></div>
|
118
|
+
|
119
|
+
<div id="footer">
|
120
|
+
Generated on Mon Jan 22 14:49:08 2024 by
|
121
|
+
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
122
|
+
0.9.34 (ruby-3.1.2).
|
123
|
+
</div>
|
124
|
+
|
125
|
+
</div>
|
126
|
+
</body>
|
127
|
+
</html>
|
data/doc/js/app.js
ADDED
@@ -0,0 +1,314 @@
|
|
1
|
+
(function() {
|
2
|
+
|
3
|
+
var localStorage = {}, sessionStorage = {};
|
4
|
+
try { localStorage = window.localStorage; } catch (e) { }
|
5
|
+
try { sessionStorage = window.sessionStorage; } catch (e) { }
|
6
|
+
|
7
|
+
function createSourceLinks() {
|
8
|
+
$('.method_details_list .source_code').
|
9
|
+
before("<span class='showSource'>[<a href='#' class='toggleSource'>View source</a>]</span>");
|
10
|
+
$('.toggleSource').toggle(function() {
|
11
|
+
$(this).parent().nextAll('.source_code').slideDown(100);
|
12
|
+
$(this).text("Hide source");
|
13
|
+
},
|
14
|
+
function() {
|
15
|
+
$(this).parent().nextAll('.source_code').slideUp(100);
|
16
|
+
$(this).text("View source");
|
17
|
+
});
|
18
|
+
}
|
19
|
+
|
20
|
+
function createDefineLinks() {
|
21
|
+
var tHeight = 0;
|
22
|
+
$('.defines').after(" <a href='#' class='toggleDefines'>more...</a>");
|
23
|
+
$('.toggleDefines').toggle(function() {
|
24
|
+
tHeight = $(this).parent().prev().height();
|
25
|
+
$(this).prev().css('display', 'inline');
|
26
|
+
$(this).parent().prev().height($(this).parent().height());
|
27
|
+
$(this).text("(less)");
|
28
|
+
},
|
29
|
+
function() {
|
30
|
+
$(this).prev().hide();
|
31
|
+
$(this).parent().prev().height(tHeight);
|
32
|
+
$(this).text("more...");
|
33
|
+
});
|
34
|
+
}
|
35
|
+
|
36
|
+
function createFullTreeLinks() {
|
37
|
+
var tHeight = 0;
|
38
|
+
$('.inheritanceTree').toggle(function() {
|
39
|
+
tHeight = $(this).parent().prev().height();
|
40
|
+
$(this).parent().toggleClass('showAll');
|
41
|
+
$(this).text("(hide)");
|
42
|
+
$(this).parent().prev().height($(this).parent().height());
|
43
|
+
},
|
44
|
+
function() {
|
45
|
+
$(this).parent().toggleClass('showAll');
|
46
|
+
$(this).parent().prev().height(tHeight);
|
47
|
+
$(this).text("show all");
|
48
|
+
});
|
49
|
+
}
|
50
|
+
|
51
|
+
function searchFrameButtons() {
|
52
|
+
$('.full_list_link').click(function() {
|
53
|
+
toggleSearchFrame(this, $(this).attr('href'));
|
54
|
+
return false;
|
55
|
+
});
|
56
|
+
window.addEventListener('message', function(e) {
|
57
|
+
if (e.data === 'navEscape') {
|
58
|
+
$('#nav').slideUp(100);
|
59
|
+
$('#search a').removeClass('active inactive');
|
60
|
+
$(window).focus();
|
61
|
+
}
|
62
|
+
});
|
63
|
+
|
64
|
+
$(window).resize(function() {
|
65
|
+
if ($('#search:visible').length === 0) {
|
66
|
+
$('#nav').removeAttr('style');
|
67
|
+
$('#search a').removeClass('active inactive');
|
68
|
+
$(window).focus();
|
69
|
+
}
|
70
|
+
});
|
71
|
+
}
|
72
|
+
|
73
|
+
function toggleSearchFrame(id, link) {
|
74
|
+
var frame = $('#nav');
|
75
|
+
$('#search a').removeClass('active').addClass('inactive');
|
76
|
+
if (frame.attr('src') === link && frame.css('display') !== "none") {
|
77
|
+
frame.slideUp(100);
|
78
|
+
$('#search a').removeClass('active inactive');
|
79
|
+
}
|
80
|
+
else {
|
81
|
+
$(id).addClass('active').removeClass('inactive');
|
82
|
+
if (frame.attr('src') !== link) frame.attr('src', link);
|
83
|
+
frame.slideDown(100);
|
84
|
+
}
|
85
|
+
}
|
86
|
+
|
87
|
+
function linkSummaries() {
|
88
|
+
$('.summary_signature').click(function() {
|
89
|
+
document.location = $(this).find('a').attr('href');
|
90
|
+
});
|
91
|
+
}
|
92
|
+
|
93
|
+
function summaryToggle() {
|
94
|
+
$('.summary_toggle').click(function(e) {
|
95
|
+
e.preventDefault();
|
96
|
+
localStorage.summaryCollapsed = $(this).text();
|
97
|
+
$('.summary_toggle').each(function() {
|
98
|
+
$(this).text($(this).text() == "collapse" ? "expand" : "collapse");
|
99
|
+
var next = $(this).parent().parent().nextAll('ul.summary').first();
|
100
|
+
if (next.hasClass('compact')) {
|
101
|
+
next.toggle();
|
102
|
+
next.nextAll('ul.summary').first().toggle();
|
103
|
+
}
|
104
|
+
else if (next.hasClass('summary')) {
|
105
|
+
var list = $('<ul class="summary compact" />');
|
106
|
+
list.html(next.html());
|
107
|
+
list.find('.summary_desc, .note').remove();
|
108
|
+
list.find('a').each(function() {
|
109
|
+
$(this).html($(this).find('strong').html());
|
110
|
+
$(this).parent().html($(this)[0].outerHTML);
|
111
|
+
});
|
112
|
+
next.before(list);
|
113
|
+
next.toggle();
|
114
|
+
}
|
115
|
+
});
|
116
|
+
return false;
|
117
|
+
});
|
118
|
+
if (localStorage.summaryCollapsed == "collapse") {
|
119
|
+
$('.summary_toggle').first().click();
|
120
|
+
} else { localStorage.summaryCollapsed = "expand"; }
|
121
|
+
}
|
122
|
+
|
123
|
+
function constantSummaryToggle() {
|
124
|
+
$('.constants_summary_toggle').click(function(e) {
|
125
|
+
e.preventDefault();
|
126
|
+
localStorage.summaryCollapsed = $(this).text();
|
127
|
+
$('.constants_summary_toggle').each(function() {
|
128
|
+
$(this).text($(this).text() == "collapse" ? "expand" : "collapse");
|
129
|
+
var next = $(this).parent().parent().nextAll('dl.constants').first();
|
130
|
+
if (next.hasClass('compact')) {
|
131
|
+
next.toggle();
|
132
|
+
next.nextAll('dl.constants').first().toggle();
|
133
|
+
}
|
134
|
+
else if (next.hasClass('constants')) {
|
135
|
+
var list = $('<dl class="constants compact" />');
|
136
|
+
list.html(next.html());
|
137
|
+
list.find('dt').each(function() {
|
138
|
+
$(this).addClass('summary_signature');
|
139
|
+
$(this).text( $(this).text().split('=')[0]);
|
140
|
+
if ($(this).has(".deprecated").length) {
|
141
|
+
$(this).addClass('deprecated');
|
142
|
+
};
|
143
|
+
});
|
144
|
+
// Add the value of the constant as "Tooltip" to the summary object
|
145
|
+
list.find('pre.code').each(function() {
|
146
|
+
console.log($(this).parent());
|
147
|
+
var dt_element = $(this).parent().prev();
|
148
|
+
var tooltip = $(this).text();
|
149
|
+
if (dt_element.hasClass("deprecated")) {
|
150
|
+
tooltip = 'Deprecated. ' + tooltip;
|
151
|
+
};
|
152
|
+
dt_element.attr('title', tooltip);
|
153
|
+
});
|
154
|
+
list.find('.docstring, .tags, dd').remove();
|
155
|
+
next.before(list);
|
156
|
+
next.toggle();
|
157
|
+
}
|
158
|
+
});
|
159
|
+
return false;
|
160
|
+
});
|
161
|
+
if (localStorage.summaryCollapsed == "collapse") {
|
162
|
+
$('.constants_summary_toggle').first().click();
|
163
|
+
} else { localStorage.summaryCollapsed = "expand"; }
|
164
|
+
}
|
165
|
+
|
166
|
+
function generateTOC() {
|
167
|
+
if ($('#filecontents').length === 0) return;
|
168
|
+
var _toc = $('<ol class="top"></ol>');
|
169
|
+
var show = false;
|
170
|
+
var toc = _toc;
|
171
|
+
var counter = 0;
|
172
|
+
var tags = ['h2', 'h3', 'h4', 'h5', 'h6'];
|
173
|
+
var i;
|
174
|
+
var curli;
|
175
|
+
if ($('#filecontents h1').length > 1) tags.unshift('h1');
|
176
|
+
for (i = 0; i < tags.length; i++) { tags[i] = '#filecontents ' + tags[i]; }
|
177
|
+
var lastTag = parseInt(tags[0][1], 10);
|
178
|
+
$(tags.join(', ')).each(function() {
|
179
|
+
if ($(this).parents('.method_details .docstring').length != 0) return;
|
180
|
+
if (this.id == "filecontents") return;
|
181
|
+
show = true;
|
182
|
+
var thisTag = parseInt(this.tagName[1], 10);
|
183
|
+
if (this.id.length === 0) {
|
184
|
+
var proposedId = $(this).attr('toc-id');
|
185
|
+
if (typeof(proposedId) != "undefined") this.id = proposedId;
|
186
|
+
else {
|
187
|
+
var proposedId = $(this).text().replace(/[^a-z0-9-]/ig, '_');
|
188
|
+
if ($('#' + proposedId).length > 0) { proposedId += counter; counter++; }
|
189
|
+
this.id = proposedId;
|
190
|
+
}
|
191
|
+
}
|
192
|
+
if (thisTag > lastTag) {
|
193
|
+
for (i = 0; i < thisTag - lastTag; i++) {
|
194
|
+
if ( typeof(curli) == "undefined" ) {
|
195
|
+
curli = $('<li/>');
|
196
|
+
toc.append(curli);
|
197
|
+
}
|
198
|
+
toc = $('<ol/>');
|
199
|
+
curli.append(toc);
|
200
|
+
curli = undefined;
|
201
|
+
}
|
202
|
+
}
|
203
|
+
if (thisTag < lastTag) {
|
204
|
+
for (i = 0; i < lastTag - thisTag; i++) {
|
205
|
+
toc = toc.parent();
|
206
|
+
toc = toc.parent();
|
207
|
+
}
|
208
|
+
}
|
209
|
+
var title = $(this).attr('toc-title');
|
210
|
+
if (typeof(title) == "undefined") title = $(this).text();
|
211
|
+
curli =$('<li><a href="#' + this.id + '">' + title + '</a></li>');
|
212
|
+
toc.append(curli);
|
213
|
+
lastTag = thisTag;
|
214
|
+
});
|
215
|
+
if (!show) return;
|
216
|
+
html = '<div id="toc"><p class="title hide_toc"><a href="#"><strong>Table of Contents</strong></a></p></div>';
|
217
|
+
$('#content').prepend(html);
|
218
|
+
$('#toc').append(_toc);
|
219
|
+
$('#toc .hide_toc').toggle(function() {
|
220
|
+
$('#toc .top').slideUp('fast');
|
221
|
+
$('#toc').toggleClass('hidden');
|
222
|
+
$('#toc .title small').toggle();
|
223
|
+
}, function() {
|
224
|
+
$('#toc .top').slideDown('fast');
|
225
|
+
$('#toc').toggleClass('hidden');
|
226
|
+
$('#toc .title small').toggle();
|
227
|
+
});
|
228
|
+
}
|
229
|
+
|
230
|
+
function navResizeFn(e) {
|
231
|
+
if (e.which !== 1) {
|
232
|
+
navResizeFnStop();
|
233
|
+
return;
|
234
|
+
}
|
235
|
+
|
236
|
+
sessionStorage.navWidth = e.pageX.toString();
|
237
|
+
$('.nav_wrap').css('width', e.pageX);
|
238
|
+
$('.nav_wrap').css('-ms-flex', 'inherit');
|
239
|
+
}
|
240
|
+
|
241
|
+
function navResizeFnStop() {
|
242
|
+
$(window).unbind('mousemove', navResizeFn);
|
243
|
+
window.removeEventListener('message', navMessageFn, false);
|
244
|
+
}
|
245
|
+
|
246
|
+
function navMessageFn(e) {
|
247
|
+
if (e.data.action === 'mousemove') navResizeFn(e.data.event);
|
248
|
+
if (e.data.action === 'mouseup') navResizeFnStop();
|
249
|
+
}
|
250
|
+
|
251
|
+
function navResizer() {
|
252
|
+
$('#resizer').mousedown(function(e) {
|
253
|
+
e.preventDefault();
|
254
|
+
$(window).mousemove(navResizeFn);
|
255
|
+
window.addEventListener('message', navMessageFn, false);
|
256
|
+
});
|
257
|
+
$(window).mouseup(navResizeFnStop);
|
258
|
+
|
259
|
+
if (sessionStorage.navWidth) {
|
260
|
+
navResizeFn({which: 1, pageX: parseInt(sessionStorage.navWidth, 10)});
|
261
|
+
}
|
262
|
+
}
|
263
|
+
|
264
|
+
function navExpander() {
|
265
|
+
var done = false, timer = setTimeout(postMessage, 500);
|
266
|
+
function postMessage() {
|
267
|
+
if (done) return;
|
268
|
+
clearTimeout(timer);
|
269
|
+
var opts = { action: 'expand', path: pathId };
|
270
|
+
document.getElementById('nav').contentWindow.postMessage(opts, '*');
|
271
|
+
done = true;
|
272
|
+
}
|
273
|
+
|
274
|
+
window.addEventListener('message', function(event) {
|
275
|
+
if (event.data === 'navReady') postMessage();
|
276
|
+
return false;
|
277
|
+
}, false);
|
278
|
+
}
|
279
|
+
|
280
|
+
function mainFocus() {
|
281
|
+
var hash = window.location.hash;
|
282
|
+
if (hash !== '' && $(hash)[0]) {
|
283
|
+
$(hash)[0].scrollIntoView();
|
284
|
+
}
|
285
|
+
|
286
|
+
setTimeout(function() { $('#main').focus(); }, 10);
|
287
|
+
}
|
288
|
+
|
289
|
+
function navigationChange() {
|
290
|
+
// This works around the broken anchor navigation with the YARD template.
|
291
|
+
window.onpopstate = function() {
|
292
|
+
var hash = window.location.hash;
|
293
|
+
if (hash !== '' && $(hash)[0]) {
|
294
|
+
$(hash)[0].scrollIntoView();
|
295
|
+
}
|
296
|
+
};
|
297
|
+
}
|
298
|
+
|
299
|
+
$(document).ready(function() {
|
300
|
+
navResizer();
|
301
|
+
navExpander();
|
302
|
+
createSourceLinks();
|
303
|
+
createDefineLinks();
|
304
|
+
createFullTreeLinks();
|
305
|
+
searchFrameButtons();
|
306
|
+
linkSummaries();
|
307
|
+
summaryToggle();
|
308
|
+
constantSummaryToggle();
|
309
|
+
generateTOC();
|
310
|
+
mainFocus();
|
311
|
+
navigationChange();
|
312
|
+
});
|
313
|
+
|
314
|
+
})();
|
data/doc/js/full_list.js
ADDED
@@ -0,0 +1,216 @@
|
|
1
|
+
(function() {
|
2
|
+
|
3
|
+
var $clicked = $(null);
|
4
|
+
var searchTimeout = null;
|
5
|
+
var searchCache = [];
|
6
|
+
var caseSensitiveMatch = false;
|
7
|
+
var ignoreKeyCodeMin = 8;
|
8
|
+
var ignoreKeyCodeMax = 46;
|
9
|
+
var commandKey = 91;
|
10
|
+
|
11
|
+
RegExp.escape = function(text) {
|
12
|
+
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
|
13
|
+
}
|
14
|
+
|
15
|
+
function escapeShortcut() {
|
16
|
+
$(document).keydown(function(evt) {
|
17
|
+
if (evt.which == 27) {
|
18
|
+
window.parent.postMessage('navEscape', '*');
|
19
|
+
}
|
20
|
+
});
|
21
|
+
}
|
22
|
+
|
23
|
+
function navResizer() {
|
24
|
+
$(window).mousemove(function(e) {
|
25
|
+
window.parent.postMessage({
|
26
|
+
action: 'mousemove', event: {pageX: e.pageX, which: e.which}
|
27
|
+
}, '*');
|
28
|
+
}).mouseup(function(e) {
|
29
|
+
window.parent.postMessage({action: 'mouseup'}, '*');
|
30
|
+
});
|
31
|
+
window.parent.postMessage("navReady", "*");
|
32
|
+
}
|
33
|
+
|
34
|
+
function clearSearchTimeout() {
|
35
|
+
clearTimeout(searchTimeout);
|
36
|
+
searchTimeout = null;
|
37
|
+
}
|
38
|
+
|
39
|
+
function enableLinks() {
|
40
|
+
// load the target page in the parent window
|
41
|
+
$('#full_list li').on('click', function(evt) {
|
42
|
+
$('#full_list li').removeClass('clicked');
|
43
|
+
$clicked = $(this);
|
44
|
+
$clicked.addClass('clicked');
|
45
|
+
evt.stopPropagation();
|
46
|
+
|
47
|
+
if (evt.target.tagName === 'A') return true;
|
48
|
+
|
49
|
+
var elem = $clicked.find('> .item .object_link a')[0];
|
50
|
+
var e = evt.originalEvent;
|
51
|
+
var newEvent = new MouseEvent(evt.originalEvent.type);
|
52
|
+
newEvent.initMouseEvent(e.type, e.canBubble, e.cancelable, e.view, e.detail, e.screenX, e.screenY, e.clientX, e.clientY, e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, e.button, e.relatedTarget);
|
53
|
+
elem.dispatchEvent(newEvent);
|
54
|
+
evt.preventDefault();
|
55
|
+
return false;
|
56
|
+
});
|
57
|
+
}
|
58
|
+
|
59
|
+
function enableToggles() {
|
60
|
+
// show/hide nested classes on toggle click
|
61
|
+
$('#full_list a.toggle').on('click', function(evt) {
|
62
|
+
evt.stopPropagation();
|
63
|
+
evt.preventDefault();
|
64
|
+
$(this).parent().parent().toggleClass('collapsed');
|
65
|
+
highlight();
|
66
|
+
});
|
67
|
+
}
|
68
|
+
|
69
|
+
function populateSearchCache() {
|
70
|
+
$('#full_list li .item').each(function() {
|
71
|
+
var $node = $(this);
|
72
|
+
var $link = $node.find('.object_link a');
|
73
|
+
if ($link.length > 0) {
|
74
|
+
searchCache.push({
|
75
|
+
node: $node,
|
76
|
+
link: $link,
|
77
|
+
name: $link.text(),
|
78
|
+
fullName: $link.attr('title').split(' ')[0]
|
79
|
+
});
|
80
|
+
}
|
81
|
+
});
|
82
|
+
}
|
83
|
+
|
84
|
+
function enableSearch() {
|
85
|
+
$('#search input').keyup(function(event) {
|
86
|
+
if (ignoredKeyPress(event)) return;
|
87
|
+
if (this.value === "") {
|
88
|
+
clearSearch();
|
89
|
+
} else {
|
90
|
+
performSearch(this.value);
|
91
|
+
}
|
92
|
+
});
|
93
|
+
|
94
|
+
$('#full_list').after("<div id='noresults' style='display:none'></div>");
|
95
|
+
}
|
96
|
+
|
97
|
+
function ignoredKeyPress(event) {
|
98
|
+
if (
|
99
|
+
(event.keyCode > ignoreKeyCodeMin && event.keyCode < ignoreKeyCodeMax) ||
|
100
|
+
(event.keyCode == commandKey)
|
101
|
+
) {
|
102
|
+
return true;
|
103
|
+
} else {
|
104
|
+
return false;
|
105
|
+
}
|
106
|
+
}
|
107
|
+
|
108
|
+
function clearSearch() {
|
109
|
+
clearSearchTimeout();
|
110
|
+
$('#full_list .found').removeClass('found').each(function() {
|
111
|
+
var $link = $(this).find('.object_link a');
|
112
|
+
$link.text($link.text());
|
113
|
+
});
|
114
|
+
$('#full_list, #content').removeClass('insearch');
|
115
|
+
$clicked.parents().removeClass('collapsed');
|
116
|
+
highlight();
|
117
|
+
}
|
118
|
+
|
119
|
+
function performSearch(searchString) {
|
120
|
+
clearSearchTimeout();
|
121
|
+
$('#full_list, #content').addClass('insearch');
|
122
|
+
$('#noresults').text('').hide();
|
123
|
+
partialSearch(searchString, 0);
|
124
|
+
}
|
125
|
+
|
126
|
+
function partialSearch(searchString, offset) {
|
127
|
+
var lastRowClass = '';
|
128
|
+
var i = null;
|
129
|
+
for (i = offset; i < Math.min(offset + 50, searchCache.length); i++) {
|
130
|
+
var item = searchCache[i];
|
131
|
+
var searchName = (searchString.indexOf('::') != -1 ? item.fullName : item.name);
|
132
|
+
var matchString = buildMatchString(searchString);
|
133
|
+
var matchRegexp = new RegExp(matchString, caseSensitiveMatch ? "" : "i");
|
134
|
+
if (searchName.match(matchRegexp) == null) {
|
135
|
+
item.node.removeClass('found');
|
136
|
+
item.link.text(item.link.text());
|
137
|
+
}
|
138
|
+
else {
|
139
|
+
item.node.addClass('found');
|
140
|
+
item.node.removeClass(lastRowClass).addClass(lastRowClass == 'r1' ? 'r2' : 'r1');
|
141
|
+
lastRowClass = item.node.hasClass('r1') ? 'r1' : 'r2';
|
142
|
+
item.link.html(item.name.replace(matchRegexp, "<strong>$&</strong>"));
|
143
|
+
}
|
144
|
+
}
|
145
|
+
if(i == searchCache.length) {
|
146
|
+
searchDone();
|
147
|
+
} else {
|
148
|
+
searchTimeout = setTimeout(function() {
|
149
|
+
partialSearch(searchString, i);
|
150
|
+
}, 0);
|
151
|
+
}
|
152
|
+
}
|
153
|
+
|
154
|
+
function searchDone() {
|
155
|
+
searchTimeout = null;
|
156
|
+
highlight();
|
157
|
+
if ($('#full_list li:visible').size() === 0) {
|
158
|
+
$('#noresults').text('No results were found.').hide().fadeIn();
|
159
|
+
} else {
|
160
|
+
$('#noresults').text('').hide();
|
161
|
+
}
|
162
|
+
$('#content').removeClass('insearch');
|
163
|
+
}
|
164
|
+
|
165
|
+
function buildMatchString(searchString, event) {
|
166
|
+
caseSensitiveMatch = searchString.match(/[A-Z]/) != null;
|
167
|
+
var regexSearchString = RegExp.escape(searchString);
|
168
|
+
if (caseSensitiveMatch) {
|
169
|
+
regexSearchString += "|" +
|
170
|
+
$.map(searchString.split(''), function(e) { return RegExp.escape(e); }).
|
171
|
+
join('.+?');
|
172
|
+
}
|
173
|
+
return regexSearchString;
|
174
|
+
}
|
175
|
+
|
176
|
+
function highlight() {
|
177
|
+
$('#full_list li:visible').each(function(n) {
|
178
|
+
$(this).removeClass('even odd').addClass(n % 2 == 0 ? 'odd' : 'even');
|
179
|
+
});
|
180
|
+
}
|
181
|
+
|
182
|
+
/**
|
183
|
+
* Expands the tree to the target element and its immediate
|
184
|
+
* children.
|
185
|
+
*/
|
186
|
+
function expandTo(path) {
|
187
|
+
var $target = $(document.getElementById('object_' + path));
|
188
|
+
$target.addClass('clicked');
|
189
|
+
$target.removeClass('collapsed');
|
190
|
+
$target.parentsUntil('#full_list', 'li').removeClass('collapsed');
|
191
|
+
if($target[0]) {
|
192
|
+
window.scrollTo(window.scrollX, $target.offset().top - 250);
|
193
|
+
highlight();
|
194
|
+
}
|
195
|
+
}
|
196
|
+
|
197
|
+
function windowEvents(event) {
|
198
|
+
var msg = event.data;
|
199
|
+
if (msg.action === "expand") {
|
200
|
+
expandTo(msg.path);
|
201
|
+
}
|
202
|
+
return false;
|
203
|
+
}
|
204
|
+
|
205
|
+
window.addEventListener("message", windowEvents, false);
|
206
|
+
|
207
|
+
$(document).ready(function() {
|
208
|
+
escapeShortcut();
|
209
|
+
navResizer();
|
210
|
+
enableLinks();
|
211
|
+
enableToggles();
|
212
|
+
populateSearchCache();
|
213
|
+
enableSearch();
|
214
|
+
});
|
215
|
+
|
216
|
+
})();
|