sibilant 0.0.1 → 0.0.2
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.
- data/README.md +8 -4
- data/js/sibilant/.gitignore +4 -0
- data/js/sibilant/.travis.yml +6 -0
- data/js/sibilant/LICENSE +20 -0
- data/js/sibilant/README.md +70 -0
- data/js/sibilant/bin/sibilant +3 -0
- data/js/sibilant/cli-help +79 -0
- data/js/sibilant/include/functional.sibilant +57 -0
- data/js/sibilant/include/macros.sibilant +374 -0
- data/js/sibilant/include/node.sibilant +2 -0
- data/js/sibilant/lib/browser.js +685 -0
- data/js/sibilant/lib/cli.js +153 -0
- data/js/sibilant/lib/options.js +232 -0
- data/js/sibilant/lib/repl.js +78 -0
- data/js/sibilant/lib/sibilant.js +688 -0
- data/js/sibilant/misc/sibilant-mode.el +129 -0
- data/js/sibilant/package.json +19 -0
- data/js/sibilant/package.sibilant +16 -0
- data/js/sibilant/public/index.html +502 -0
- data/js/sibilant/public/javascripts/browser.js +685 -0
- data/js/sibilant/public/javascripts/jquery-ui.js +392 -0
- data/js/sibilant/public/javascripts/jquery.js +154 -0
- data/js/sibilant/public/javascripts/macros.sibilant +374 -0
- data/js/sibilant/public/javascripts/sibilant.info.sibilant +77 -0
- data/js/sibilant/public/sass/_mixins.sass +98 -0
- data/js/sibilant/public/sass/sibilant.sass +156 -0
- data/js/sibilant/public/stylesheets/Anonymous_Pro-webfont.eot +0 -0
- data/js/sibilant/public/stylesheets/Anonymous_Pro-webfont.svg +241 -0
- data/js/sibilant/public/stylesheets/Anonymous_Pro-webfont.ttf +0 -0
- data/js/sibilant/public/stylesheets/Anonymous_Pro-webfont.woff +0 -0
- data/js/sibilant/public/stylesheets/sibilant.css +166 -0
- data/js/sibilant/src/browser.sibilant +45 -0
- data/js/sibilant/src/cli.sibilant +93 -0
- data/js/sibilant/src/core.sibilant +338 -0
- data/js/sibilant/src/options.sibilant +65 -0
- data/js/sibilant/src/repl.sibilant +59 -0
- data/js/sibilant/src/sibilant.sibilant +78 -0
- data/js/sibilant/test/defvar.sibilant +5 -0
- data/js/sibilant/test/includeFile1.sibilant +1 -0
- data/js/sibilant/test/includeFile2.sibilant +1 -0
- data/js/sibilant/test/node.sibilant +10 -0
- data/js/sibilant/test/slice.sibilant +3 -0
- data/js/sibilant/test/test.sibilant +464 -0
- data/js/sibilant/test/testHelper.sibilant +80 -0
- data/lib/sibilant/version.rb +1 -1
- data/sibilant.gemspec +3 -1
- metadata +44 -1
@@ -0,0 +1,153 @@
|
|
1
|
+
var sibilant = require("./sibilant"),
|
2
|
+
path = require("path"),
|
3
|
+
options = require("../lib/options"),
|
4
|
+
fs = require("fs"),
|
5
|
+
vm = require("vm"),
|
6
|
+
context = vm.createContext();
|
7
|
+
var createContext = (function() {
|
8
|
+
context.initialized__QUERY = true;
|
9
|
+
(module)["filename"] = (process.cwd() + "/exec");
|
10
|
+
(context)["module"] = module;
|
11
|
+
(context)["require"] = require;
|
12
|
+
return (function() {
|
13
|
+
for (var key in global) (function() {
|
14
|
+
return (context)[key] = (global)[key];
|
15
|
+
})();
|
16
|
+
})();
|
17
|
+
});
|
18
|
+
|
19
|
+
var runInSandbox = (function(js, inputPath) {
|
20
|
+
// js:required inputPath:optional
|
21
|
+
if (arguments.length < 2) // if inputPath is missing
|
22
|
+
var inputPath = undefined;
|
23
|
+
|
24
|
+
(function() {
|
25
|
+
if ((!context.initialized__QUERY)) {
|
26
|
+
return createContext();
|
27
|
+
}
|
28
|
+
})();
|
29
|
+
(function() {
|
30
|
+
if (typeof(inputPath) !== 'undefined') {
|
31
|
+
(process.argv)[1] = inputPath;
|
32
|
+
(context)["__dirname"] = path.dirname(inputPath);
|
33
|
+
return (module)["filename"] = inputPath;
|
34
|
+
}
|
35
|
+
})();
|
36
|
+
return vm.runInContext(js, context, "sibilant");
|
37
|
+
});
|
38
|
+
|
39
|
+
var cli = {
|
40
|
+
v: "version",
|
41
|
+
h: "help",
|
42
|
+
unhandled: "help",
|
43
|
+
f: "file",
|
44
|
+
o: "output",
|
45
|
+
x: "execute",
|
46
|
+
e: "eval",
|
47
|
+
i: "input",
|
48
|
+
afterBreak: false,
|
49
|
+
execute: false,
|
50
|
+
unlabeled: "file"
|
51
|
+
};
|
52
|
+
cli.version = (function() {
|
53
|
+
return console.log(sibilant.versionString());
|
54
|
+
});
|
55
|
+
|
56
|
+
cli.repl = (function(args) {
|
57
|
+
// args:required
|
58
|
+
return require("../lib/repl");
|
59
|
+
});
|
60
|
+
|
61
|
+
var readStdin = (function(fn) {
|
62
|
+
// fn:required
|
63
|
+
var stdin = process.stdin,
|
64
|
+
data = "";
|
65
|
+
stdin.resume();
|
66
|
+
stdin.setEncoding("utf8");
|
67
|
+
stdin.on("data", (function(chunk) {
|
68
|
+
// chunk:required
|
69
|
+
return data = (data + chunk);
|
70
|
+
}));
|
71
|
+
return stdin.on("end", (function() {
|
72
|
+
return fn(data);
|
73
|
+
}));
|
74
|
+
});
|
75
|
+
|
76
|
+
cli.eval = (function(args, options) {
|
77
|
+
// args:required options:required
|
78
|
+
(options)["execute"] = true;
|
79
|
+
return cli.input(args, options);
|
80
|
+
});
|
81
|
+
|
82
|
+
cli.input = (function(args, options) {
|
83
|
+
// args:required options:required
|
84
|
+
var process = (function(sibilantCode) {
|
85
|
+
// sibilantCode:required
|
86
|
+
var jsCode = sibilant.translateAll(sibilantCode);
|
87
|
+
return (function() {
|
88
|
+
if (options.execute) {
|
89
|
+
return runInSandbox(jsCode);
|
90
|
+
} else {
|
91
|
+
return console.log(jsCode);
|
92
|
+
}
|
93
|
+
})();
|
94
|
+
});
|
95
|
+
;
|
96
|
+
return (function() {
|
97
|
+
if (((args).length === 0)) {
|
98
|
+
return readStdin(process);
|
99
|
+
} else {
|
100
|
+
return process((args)[0]);
|
101
|
+
}
|
102
|
+
})();
|
103
|
+
});
|
104
|
+
|
105
|
+
cli.help = (function(args, options) {
|
106
|
+
// args:required options:required
|
107
|
+
return fs.readFile((__dirname + "/../cli-help"), { encoding: "utf8" }, (function(err, data) {
|
108
|
+
// err:required data:required
|
109
|
+
(function() {
|
110
|
+
if (err) {
|
111
|
+
throw new Error (err);
|
112
|
+
}
|
113
|
+
})();
|
114
|
+
return console.log(data);
|
115
|
+
}));
|
116
|
+
});
|
117
|
+
|
118
|
+
var cliOptions = options(cli);
|
119
|
+
var args = (cliOptions.afterBreak || [ ]);
|
120
|
+
args.unshift((process.argv)[1], "FILENAME");
|
121
|
+
|
122
|
+
(process)["argv"] = args;
|
123
|
+
(process)["ARGV"] = args;
|
124
|
+
(function() {
|
125
|
+
if (((Object.keys(cliOptions)).length === 0)) {
|
126
|
+
return cli.repl();
|
127
|
+
}
|
128
|
+
})()
|
129
|
+
var outputDir = (function() {
|
130
|
+
if (cliOptions.output) {
|
131
|
+
return (cliOptions.output)[0];
|
132
|
+
}
|
133
|
+
})();
|
134
|
+
(cliOptions.file || [ ]).forEach((function(inputFile) {
|
135
|
+
// inputFile:required
|
136
|
+
var inputPath = path.join(process.cwd(), inputFile),
|
137
|
+
translated = sibilant.translateFile(inputPath);
|
138
|
+
return (function() {
|
139
|
+
if (outputDir) {
|
140
|
+
var inputBasename = path.basename(inputPath, ".sibilant"),
|
141
|
+
outputPath = (path.join(outputDir, inputBasename) + ".js");
|
142
|
+
return fs.writeFile(outputPath, translated);
|
143
|
+
} else {
|
144
|
+
return (function() {
|
145
|
+
if (cliOptions.execute) {
|
146
|
+
return runInSandbox(translated, inputPath);
|
147
|
+
} else {
|
148
|
+
return console.log(translated);
|
149
|
+
}
|
150
|
+
})();
|
151
|
+
}
|
152
|
+
})();
|
153
|
+
}))
|
@@ -0,0 +1,232 @@
|
|
1
|
+
var bulkMap = (function(arr, fn) {
|
2
|
+
// arr:required fn:required
|
3
|
+
var index = 0,
|
4
|
+
groupSize = fn.length,
|
5
|
+
retArr = [ ];
|
6
|
+
(function() {
|
7
|
+
var __returnValue__ = undefined;
|
8
|
+
while ((index < arr.length)) {
|
9
|
+
__returnValue__ = (function() {
|
10
|
+
retArr.push(fn.apply(undefined, arr.slice(index, (index + groupSize))));
|
11
|
+
return index += groupSize;
|
12
|
+
})();
|
13
|
+
};
|
14
|
+
return __returnValue__;
|
15
|
+
})();
|
16
|
+
return retArr;
|
17
|
+
});
|
18
|
+
|
19
|
+
var inject = (function(start, items, fn) {
|
20
|
+
// start:required items:required fn:required
|
21
|
+
var value = start;
|
22
|
+
(function() {
|
23
|
+
if ((items) && (items).constructor.name === "Array") {
|
24
|
+
return items.forEach((function(item, index) {
|
25
|
+
// item:required index:required
|
26
|
+
return value = fn(value, item, index);
|
27
|
+
}));
|
28
|
+
}
|
29
|
+
})();
|
30
|
+
return value;
|
31
|
+
});
|
32
|
+
|
33
|
+
var map = (function(items, fn) {
|
34
|
+
// items:required fn:required
|
35
|
+
return inject([ ], items, (function(collector, item, index) {
|
36
|
+
// collector:required item:required index:required
|
37
|
+
collector.push(fn(item, index));
|
38
|
+
return collector;
|
39
|
+
}));
|
40
|
+
});
|
41
|
+
|
42
|
+
var select = (function(items, fn) {
|
43
|
+
// items:required fn:required
|
44
|
+
return inject([ ], items, (function(collector, item, index) {
|
45
|
+
// collector:required item:required index:required
|
46
|
+
(function() {
|
47
|
+
if (fn(item, index)) {
|
48
|
+
return collector.push(item);
|
49
|
+
}
|
50
|
+
})();
|
51
|
+
return collector;
|
52
|
+
}));
|
53
|
+
});
|
54
|
+
|
55
|
+
var detect = (function(items, fn) {
|
56
|
+
// items:required fn:required
|
57
|
+
var returnItem = undefined,
|
58
|
+
index = 0,
|
59
|
+
items = items;
|
60
|
+
return (function() {
|
61
|
+
var __returnValue__ = undefined;
|
62
|
+
while ((!((items.length === index) || returnItem))) {
|
63
|
+
__returnValue__ = (function() {
|
64
|
+
(function() {
|
65
|
+
if (fn((items)[index], index)) {
|
66
|
+
return returnItem = (items)[index];
|
67
|
+
}
|
68
|
+
})();
|
69
|
+
return ((index)++);
|
70
|
+
})();
|
71
|
+
};
|
72
|
+
return __returnValue__;
|
73
|
+
})();
|
74
|
+
});
|
75
|
+
|
76
|
+
var reject = (function(items, fn) {
|
77
|
+
// items:required fn:required
|
78
|
+
var args = [ items, fn ];
|
79
|
+
return select(items, (function() {
|
80
|
+
return (!fn.apply(undefined, arguments));
|
81
|
+
}));
|
82
|
+
});
|
83
|
+
|
84
|
+
var compact = (function(arr) {
|
85
|
+
// arr:required
|
86
|
+
return select(arr, (function(item) {
|
87
|
+
// item:required
|
88
|
+
return (!!(item));
|
89
|
+
}));
|
90
|
+
});
|
91
|
+
|
92
|
+
var flatten = (function(items) {
|
93
|
+
// items:rest
|
94
|
+
var items = Array.prototype.slice.call(arguments, 0);
|
95
|
+
|
96
|
+
return inject([ ], items, (function(collector, item) {
|
97
|
+
// collector:required item:required
|
98
|
+
return collector.concat((function() {
|
99
|
+
if ((item) && (item).constructor.name === "Array") {
|
100
|
+
return flatten.apply(undefined, item);
|
101
|
+
} else {
|
102
|
+
return item;
|
103
|
+
}
|
104
|
+
})());
|
105
|
+
}));
|
106
|
+
});
|
107
|
+
|
108
|
+
|
109
|
+
var extractOptions = (function(config, args) {
|
110
|
+
// config:required args:optional
|
111
|
+
if (arguments.length < 2) // if args is missing
|
112
|
+
var args = undefined;
|
113
|
+
|
114
|
+
var args = (args || process.argv.slice(2)),
|
115
|
+
defaultLabel = "unlabeled",
|
116
|
+
currentLabel = defaultLabel,
|
117
|
+
afterBreak = false,
|
118
|
+
config = (config || { }),
|
119
|
+
unlabeled = [ ];
|
120
|
+
var label__QUERY = (function(item) {
|
121
|
+
// item:required
|
122
|
+
return (typeof(item) === "string" && /^-/.test(item));
|
123
|
+
});
|
124
|
+
;
|
125
|
+
var synonymLookup = (function(item) {
|
126
|
+
// item:required
|
127
|
+
var configEntry = (config)[item];
|
128
|
+
return (function() {
|
129
|
+
if (typeof(configEntry) === "string") {
|
130
|
+
return synonymLookup(configEntry);
|
131
|
+
} else {
|
132
|
+
return item;
|
133
|
+
}
|
134
|
+
})();
|
135
|
+
});
|
136
|
+
;
|
137
|
+
var takesArgs__QUERY = (function(item) {
|
138
|
+
// item:required
|
139
|
+
return (false !== (config)[labelFor(item)]);
|
140
|
+
});
|
141
|
+
;
|
142
|
+
defaultLabel = synonymLookup(defaultLabel);
|
143
|
+
currentLabel = defaultLabel;
|
144
|
+
var labelFor = (function(item) {
|
145
|
+
// item:required
|
146
|
+
return synonymLookup(item.replace(/^-+/, ""));
|
147
|
+
});
|
148
|
+
;
|
149
|
+
var addValue = (function(hash, key, value) {
|
150
|
+
// hash:required key:required value:required
|
151
|
+
var currentValue = (hash)[key];
|
152
|
+
(function() {
|
153
|
+
if (typeof(currentValue) === 'undefined') {
|
154
|
+
currentValue = [ ];
|
155
|
+
return (hash)[key] = currentValue;
|
156
|
+
}
|
157
|
+
})();
|
158
|
+
return (function() {
|
159
|
+
if ((true !== value)) {
|
160
|
+
return currentValue.push(value);
|
161
|
+
}
|
162
|
+
})();
|
163
|
+
});
|
164
|
+
;
|
165
|
+
var resetLabel = (function() {
|
166
|
+
return currentLabel = defaultLabel;
|
167
|
+
});
|
168
|
+
;
|
169
|
+
return inject({ }, args, (function(returnHash, item, index) {
|
170
|
+
// returnHash:required item:required index:required
|
171
|
+
(function() {
|
172
|
+
if (("--" === item)) {
|
173
|
+
return afterBreak = true;
|
174
|
+
} else {
|
175
|
+
return (function() {
|
176
|
+
if (afterBreak) {
|
177
|
+
return addValue(returnHash, "afterBreak", item);
|
178
|
+
} else {
|
179
|
+
return (function() {
|
180
|
+
if (label__QUERY(item)) {
|
181
|
+
currentLabel = labelFor(item);
|
182
|
+
addValue(returnHash, currentLabel, true);
|
183
|
+
return (function() {
|
184
|
+
if ((!takesArgs__QUERY(item))) {
|
185
|
+
return resetLabel();
|
186
|
+
}
|
187
|
+
})();
|
188
|
+
} else {
|
189
|
+
addValue(returnHash, currentLabel, item);
|
190
|
+
return resetLabel();
|
191
|
+
}
|
192
|
+
})();
|
193
|
+
}
|
194
|
+
})();
|
195
|
+
}
|
196
|
+
})();
|
197
|
+
return returnHash;
|
198
|
+
}));
|
199
|
+
});
|
200
|
+
|
201
|
+
var processOptions = (function(config) {
|
202
|
+
// config:optional
|
203
|
+
if (arguments.length < 1) // if config is missing
|
204
|
+
var config = undefined;
|
205
|
+
|
206
|
+
var options = extractOptions(config);
|
207
|
+
(function() {
|
208
|
+
if (config) {
|
209
|
+
var handlePair = (function(key, value) {
|
210
|
+
// key:required value:required
|
211
|
+
var handle = (config)[key];
|
212
|
+
(function() {
|
213
|
+
if (typeof(handle) === "string") {
|
214
|
+
return handlePair(handle, value);
|
215
|
+
}
|
216
|
+
})();
|
217
|
+
return (function() {
|
218
|
+
if (typeof(handle) === 'function') {
|
219
|
+
return handle(value, options);
|
220
|
+
}
|
221
|
+
})();
|
222
|
+
});
|
223
|
+
return Object.keys(options).forEach((function(key) {
|
224
|
+
// key:required
|
225
|
+
return handlePair(key, (options)[key]);
|
226
|
+
}));
|
227
|
+
}
|
228
|
+
})();
|
229
|
+
return options;
|
230
|
+
});
|
231
|
+
|
232
|
+
(module)["exports"] = processOptions;
|
@@ -0,0 +1,78 @@
|
|
1
|
+
var input = process.openStdin(),
|
2
|
+
output = process.stdout,
|
3
|
+
vm = require("vm"),
|
4
|
+
readline = require("readline").createInterface(input, output),
|
5
|
+
sibilant = require("./sibilant"),
|
6
|
+
context = undefined,
|
7
|
+
cmdBuffer = "",
|
8
|
+
util = require("util");
|
9
|
+
var createContext = (function() {
|
10
|
+
var context = vm.createContext();
|
11
|
+
(module)["filename"] = (process.cwd() + "/exec");
|
12
|
+
(context)["module"] = module;
|
13
|
+
(context)["require"] = require;
|
14
|
+
(function() {
|
15
|
+
for (var key in global) (function() {
|
16
|
+
return (context)[key] = (global)[key];
|
17
|
+
})();
|
18
|
+
})();
|
19
|
+
return context;
|
20
|
+
});
|
21
|
+
|
22
|
+
context = createContext();
|
23
|
+
var displayPrompt = (function() {
|
24
|
+
readline.setPrompt(((function() {
|
25
|
+
if ((cmdBuffer.length > 10)) {
|
26
|
+
return ("..." + cmdBuffer.slice(-10));
|
27
|
+
} else {
|
28
|
+
return (function() {
|
29
|
+
if ((cmdBuffer.length > 0)) {
|
30
|
+
return cmdBuffer;
|
31
|
+
} else {
|
32
|
+
return "sibilant";
|
33
|
+
}
|
34
|
+
})();
|
35
|
+
}
|
36
|
+
})() + "> "));
|
37
|
+
return readline.prompt();
|
38
|
+
});
|
39
|
+
|
40
|
+
readline.on("line", (function(cmd) {
|
41
|
+
// cmd:required
|
42
|
+
var jsLine = "";
|
43
|
+
(function() {
|
44
|
+
try {
|
45
|
+
cmdBuffer = (cmdBuffer + cmd);
|
46
|
+
sibilant.tokenize(cmdBuffer).forEach((function(stmt) {
|
47
|
+
// stmt:required
|
48
|
+
return jsLine = (jsLine + sibilant.translate(stmt, "statement"));
|
49
|
+
}));
|
50
|
+
var result = vm.runInContext(jsLine, context, "sibilant-repl");
|
51
|
+
(readline.history)[0] = cmdBuffer;
|
52
|
+
(function() {
|
53
|
+
if (typeof(result) !== 'undefined') {
|
54
|
+
return output.write(("result: " + util.inspect(result) + "\n"));
|
55
|
+
}
|
56
|
+
})();
|
57
|
+
(context)["_"] = result;
|
58
|
+
return cmdBuffer = "";
|
59
|
+
} catch (e) {
|
60
|
+
return (function() {
|
61
|
+
if (e.message.match(/unexpected EOF/)) {
|
62
|
+
cmdBuffer = (cmdBuffer + " ");
|
63
|
+
return readline.history.shift();
|
64
|
+
} else {
|
65
|
+
(readline.history)[0] = cmdBuffer;
|
66
|
+
output.write((e.stack + "\n"));
|
67
|
+
return cmdBuffer = "";
|
68
|
+
}
|
69
|
+
})();
|
70
|
+
}
|
71
|
+
})();
|
72
|
+
return displayPrompt();
|
73
|
+
}));
|
74
|
+
|
75
|
+
readline.on("close", input.destroy);
|
76
|
+
|
77
|
+
displayPrompt();
|
78
|
+
|