sibilant 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/js/sibilant/include/macros.sibilant +6 -1
- data/js/sibilant/lib/browser.js +61 -105
- data/js/sibilant/lib/cli.js +1 -11
- data/js/sibilant/lib/options.js +2 -25
- data/js/sibilant/lib/repl.js +0 -2
- data/js/sibilant/lib/sibilant.js +57 -104
- data/js/sibilant/misc/sibilant-mode.el +1 -1
- data/js/sibilant/package.json +6 -3
- data/js/sibilant/package.sibilant +4 -3
- data/js/sibilant/public/javascripts/browser.js +61 -105
- data/js/sibilant/public/javascripts/macros.sibilant +6 -1
- data/js/sibilant/src/core.sibilant +25 -24
- data/js/sibilant/test/test.sibilant +24 -5
- data/lib/sibilant/version.rb +1 -1
- data/lib/sibilant.rb +6 -0
- data/spec/sibilant_spec.rb +4 -0
- metadata +2 -2
@@ -228,7 +228,7 @@
|
|
228
228
|
(concat "(!!(" (translate expr) "))"))
|
229
229
|
|
230
230
|
(defmacro chain (object &rest calls)
|
231
|
-
(concat (translate object)
|
231
|
+
(concat (translate object)
|
232
232
|
(indent (join "\n"
|
233
233
|
(map calls
|
234
234
|
(lambda (call, index)
|
@@ -237,6 +237,11 @@
|
|
237
237
|
(concat "." (translate method)
|
238
238
|
"(" (join ", " (map args translate)) ")")))))))
|
239
239
|
|
240
|
+
(defmacro chainable (&rest names)
|
241
|
+
(each (name) names
|
242
|
+
(macros.defmacro name ['target "&rest" 'calls]
|
243
|
+
['apply 'macros.chain ['cons ['macros.call ['quote name] 'target] 'calls]])))
|
244
|
+
|
240
245
|
(defmacro try (tryblock catchblock)
|
241
246
|
(concat
|
242
247
|
"(function() {"
|
data/js/sibilant/lib/browser.js
CHANGED
@@ -1,12 +1,10 @@
|
|
1
1
|
(function() {
|
2
2
|
var sibilant = { };
|
3
3
|
var error = (function(str) {
|
4
|
-
// str:required
|
5
4
|
throw new Error (str);
|
6
5
|
});
|
7
6
|
;
|
8
7
|
var inspect = (function(item) {
|
9
|
-
// item:required
|
10
8
|
return (function() {
|
11
9
|
if (item.toSource) {
|
12
10
|
return item.toSource();
|
@@ -19,7 +17,6 @@
|
|
19
17
|
(window)["sibilant"] = sibilant;
|
20
18
|
var exports = { };
|
21
19
|
var bulkMap = (function(arr, fn) {
|
22
|
-
// arr:required fn:required
|
23
20
|
var index = 0,
|
24
21
|
groupSize = fn.length,
|
25
22
|
retArr = [ ];
|
@@ -37,12 +34,10 @@
|
|
37
34
|
});
|
38
35
|
|
39
36
|
var inject = (function(start, items, fn) {
|
40
|
-
// start:required items:required fn:required
|
41
37
|
var value = start;
|
42
38
|
(function() {
|
43
39
|
if ((items) && (items).constructor.name === "Array") {
|
44
40
|
return items.forEach((function(item, index) {
|
45
|
-
// item:required index:required
|
46
41
|
return value = fn(value, item, index);
|
47
42
|
}));
|
48
43
|
}
|
@@ -51,18 +46,14 @@
|
|
51
46
|
});
|
52
47
|
|
53
48
|
var map = (function(items, fn) {
|
54
|
-
// items:required fn:required
|
55
49
|
return inject([ ], items, (function(collector, item, index) {
|
56
|
-
// collector:required item:required index:required
|
57
50
|
collector.push(fn(item, index));
|
58
51
|
return collector;
|
59
52
|
}));
|
60
53
|
});
|
61
54
|
|
62
55
|
var select = (function(items, fn) {
|
63
|
-
// items:required fn:required
|
64
56
|
return inject([ ], items, (function(collector, item, index) {
|
65
|
-
// collector:required item:required index:required
|
66
57
|
(function() {
|
67
58
|
if (fn(item, index)) {
|
68
59
|
return collector.push(item);
|
@@ -73,7 +64,6 @@
|
|
73
64
|
});
|
74
65
|
|
75
66
|
var detect = (function(items, fn) {
|
76
|
-
// items:required fn:required
|
77
67
|
var returnItem = undefined,
|
78
68
|
index = 0,
|
79
69
|
items = items;
|
@@ -94,7 +84,6 @@
|
|
94
84
|
});
|
95
85
|
|
96
86
|
var reject = (function(items, fn) {
|
97
|
-
// items:required fn:required
|
98
87
|
var args = [ items, fn ];
|
99
88
|
return select(items, (function() {
|
100
89
|
return (!fn.apply(undefined, arguments));
|
@@ -102,19 +91,15 @@
|
|
102
91
|
});
|
103
92
|
|
104
93
|
var compact = (function(arr) {
|
105
|
-
// arr:required
|
106
94
|
return select(arr, (function(item) {
|
107
|
-
// item:required
|
108
95
|
return (!!(item));
|
109
96
|
}));
|
110
97
|
});
|
111
98
|
|
112
99
|
var flatten = (function(items) {
|
113
|
-
// items:rest
|
114
100
|
var items = Array.prototype.slice.call(arguments, 0);
|
115
101
|
|
116
102
|
return inject([ ], items, (function(collector, item) {
|
117
|
-
// collector:required item:required
|
118
103
|
return collector.concat((function() {
|
119
104
|
if ((item) && (item).constructor.name === "Array") {
|
120
105
|
return flatten.apply(undefined, item);
|
@@ -141,12 +126,10 @@
|
|
141
126
|
(sibilant.tokens)["specialLiteral"] = (sibilant.tokens.special + sibilant.tokens.literal);
|
142
127
|
(sibilant)["tokenPrecedence"] = [ "regex", "comment", "string", "number", "specialLiteral", "otherChar", "specialOpenParen", "closeParen", "alternativeParens" ];
|
143
128
|
var tokenize = sibilant.tokenize = (function(string) {
|
144
|
-
// string:required
|
145
129
|
var tokens = [ ],
|
146
130
|
parseStack = [ tokens ],
|
147
131
|
specials = [ ];
|
148
132
|
var acceptToken = (function(token) {
|
149
|
-
// token:required
|
150
133
|
return (parseStack)[0].push(token);
|
151
134
|
});
|
152
135
|
;
|
@@ -167,7 +150,6 @@
|
|
167
150
|
});
|
168
151
|
;
|
169
152
|
var handleToken = (function(token) {
|
170
|
-
// token:required
|
171
153
|
var special = (token)[0],
|
172
154
|
token = token;
|
173
155
|
(function() {
|
@@ -216,11 +198,10 @@
|
|
216
198
|
});
|
217
199
|
;
|
218
200
|
var orderedRegexen = map(sibilant.tokenPrecedence, (function(x) {
|
219
|
-
// x:required
|
220
201
|
return (sibilant.tokens)[x];
|
221
202
|
})),
|
222
203
|
masterRegex = (new RegExp((orderedRegexen).join("|"), "g"));
|
223
|
-
string
|
204
|
+
string
|
224
205
|
.match(masterRegex)
|
225
206
|
.forEach(handleToken)
|
226
207
|
;
|
@@ -232,10 +213,9 @@
|
|
232
213
|
return tokens;
|
233
214
|
});
|
234
215
|
var indent = (function(args) {
|
235
|
-
// args:rest
|
236
216
|
var args = Array.prototype.slice.call(arguments, 0);
|
237
217
|
|
238
|
-
return (compact(args)
|
218
|
+
return (compact(args)
|
239
219
|
.join("\n")
|
240
220
|
.replace(/^/, "\n")
|
241
221
|
.replace(/\n/g, "\n ")
|
@@ -243,9 +223,7 @@
|
|
243
223
|
});
|
244
224
|
|
245
225
|
var constructHash = (function(arrayOfArrays) {
|
246
|
-
// arrayOfArrays:required
|
247
226
|
return inject({ }, arrayOfArrays, (function(object, item) {
|
248
|
-
// object:required item:required
|
249
227
|
(object)[(item)[0]] = (object)[(item)[1]];
|
250
228
|
return object;
|
251
229
|
}));
|
@@ -254,7 +232,6 @@
|
|
254
232
|
var macros = { };
|
255
233
|
(sibilant)["macros"] = macros;
|
256
234
|
(macros)["return"] = (function(token) {
|
257
|
-
// token:required
|
258
235
|
var defaultReturn = ("return " + translate(token));
|
259
236
|
return (function() {
|
260
237
|
if ((token) && (token).constructor.name === "Array") {
|
@@ -308,41 +285,39 @@
|
|
308
285
|
})();
|
309
286
|
});
|
310
287
|
var asStatement = (function(string) {
|
311
|
-
|
312
|
-
return string // chain
|
288
|
+
return string
|
313
289
|
.toString()
|
314
290
|
.replace(/;*\s*$/, ";")
|
315
291
|
;
|
316
292
|
});
|
317
293
|
|
318
294
|
macros.statement = (function(args) {
|
319
|
-
// args:rest
|
320
295
|
var args = Array.prototype.slice.call(arguments, 0);
|
321
296
|
|
322
297
|
return (macros.call.apply(undefined, args) + ";\n");
|
323
298
|
});
|
324
299
|
|
325
300
|
macros.progn = (function(body) {
|
326
|
-
// body:rest
|
327
301
|
var body = Array.prototype.slice.call(arguments, 0);
|
328
302
|
|
329
303
|
var lastIndex = Math.max(0, (body.length - 1));
|
330
304
|
(body)[lastIndex] = [ "return", (body)[lastIndex] ];
|
331
305
|
return (map(body, (function(arg) {
|
332
|
-
// arg:required
|
333
306
|
return (asStatement(translate(arg)));
|
334
307
|
}))).join("\n");
|
335
308
|
});
|
336
309
|
|
310
|
+
macros.emptyList = (function() {
|
311
|
+
return "null";
|
312
|
+
});
|
313
|
+
|
337
314
|
macros.call = (function(fnName, args) {
|
338
|
-
// fnName:required args:rest
|
339
315
|
var args = Array.prototype.slice.call(arguments, 1);
|
340
316
|
|
341
317
|
return (translate(fnName) + "(" + (map(args, translate)).join(", ") + ")");
|
342
318
|
});
|
343
319
|
|
344
320
|
macros.defun = (function(fnName, argsAndBody) {
|
345
|
-
// fnName:required argsAndBody:rest
|
346
321
|
var argsAndBody = Array.prototype.slice.call(arguments, 1);
|
347
322
|
|
348
323
|
var fnNameTr = translate(fnName),
|
@@ -357,7 +332,6 @@
|
|
357
332
|
});
|
358
333
|
|
359
334
|
macros.defmacro = (function(name, argsAndBody) {
|
360
|
-
// name:required argsAndBody:rest
|
361
335
|
var argsAndBody = Array.prototype.slice.call(arguments, 1);
|
362
336
|
|
363
337
|
var js = macros.lambda.apply(undefined, argsAndBody),
|
@@ -373,18 +347,15 @@
|
|
373
347
|
});
|
374
348
|
|
375
349
|
macros.concat = (function(args) {
|
376
|
-
// args:rest
|
377
350
|
var args = Array.prototype.slice.call(arguments, 0);
|
378
351
|
|
379
352
|
return ("(" + (map(args, translate)).join(" + ") + ")");
|
380
353
|
});
|
381
354
|
|
382
355
|
var transformArgs = (function(arglist) {
|
383
|
-
// arglist:required
|
384
356
|
var last = undefined,
|
385
357
|
args = [ ];
|
386
358
|
arglist.forEach((function(arg) {
|
387
|
-
// arg:required
|
388
359
|
return (function() {
|
389
360
|
if (((arg)[0] === "&")) {
|
390
361
|
return last = arg.slice(1);
|
@@ -403,10 +374,8 @@
|
|
403
374
|
});
|
404
375
|
|
405
376
|
macros.reverse = (function(arr) {
|
406
|
-
// arr:required
|
407
377
|
var reversed = [ ];
|
408
378
|
arr.forEach((function(item) {
|
409
|
-
// item:required
|
410
379
|
return reversed.unshift(item);
|
411
380
|
}));
|
412
381
|
return reversed;
|
@@ -414,17 +383,14 @@
|
|
414
383
|
|
415
384
|
var reverse = macros.reverse;
|
416
385
|
var buildArgsString = (function(args, rest) {
|
417
|
-
// args:required rest:required
|
418
386
|
var argsString = "",
|
419
387
|
optionalCount = 0;
|
420
388
|
args.forEach((function(arg, optionIndex) {
|
421
|
-
// arg:required optionIndex:required
|
422
389
|
return (function() {
|
423
390
|
if (((arg)[0] === "optional")) {
|
424
|
-
argsString = (argsString + "if (arguments.length < " + (args.length - optionalCount) + ")" +
|
425
|
-
// arg:required argIndex:required
|
391
|
+
argsString = (argsString + "if (arguments.length < " + (args.length - optionalCount) + ")" + indent(("var " + map(args.slice((optionIndex + 1)), (function(arg, argIndex) {
|
426
392
|
return (translate((arg)[1]) + " = " + translate(((args)[(optionIndex + argIndex)])[1]));
|
427
|
-
}))
|
393
|
+
}))
|
428
394
|
.reverse()
|
429
395
|
.concat((translate((arg)[1]) + " = undefined"))
|
430
396
|
.join(", ")
|
@@ -442,28 +408,11 @@
|
|
442
408
|
})();
|
443
409
|
});
|
444
410
|
|
445
|
-
var buildCommentString = (function(args) {
|
446
|
-
// args:required
|
447
|
-
return (function() {
|
448
|
-
if (((args).length === 0)) {
|
449
|
-
return "";
|
450
|
-
} else {
|
451
|
-
return ("// " + (map(args, (function(arg) {
|
452
|
-
// arg:required
|
453
|
-
return (translate((arg)[1]) + ":" + (arg)[0]);
|
454
|
-
}))).join(" "));
|
455
|
-
}
|
456
|
-
})();
|
457
|
-
});
|
458
|
-
|
459
|
-
// brain 'splode
|
460
411
|
macros.lambda = (function(arglist, body) {
|
461
|
-
// arglist:required body:rest
|
462
412
|
var body = Array.prototype.slice.call(arguments, 1);
|
463
413
|
|
464
414
|
var args = transformArgs(arglist),
|
465
415
|
rest = (select(args, (function(arg) {
|
466
|
-
// arg:required
|
467
416
|
return ("rest" === (arg)[0]);
|
468
417
|
})))[0],
|
469
418
|
docString = undefined;
|
@@ -480,13 +429,10 @@
|
|
480
429
|
return args;
|
481
430
|
}
|
482
431
|
})(),
|
483
|
-
argsString = buildArgsString(noRestArgs, rest)
|
484
|
-
commentString = buildCommentString(args);
|
432
|
+
argsString = buildArgsString(noRestArgs, rest);
|
485
433
|
return ("(function(" + (map(args, (function(arg) {
|
486
|
-
// arg:required
|
487
434
|
return translate((arg)[1]);
|
488
|
-
}))).join(", ") + ") {" + indent(
|
489
|
-
// stmt:required
|
435
|
+
}))).join(", ") + ") {" + indent(docString, argsString, (map(body, (function(stmt) {
|
490
436
|
var tstmt = translate(stmt);
|
491
437
|
return (tstmt + (function() {
|
492
438
|
if (((tstmt.slice(-1))[0] === ";")) {
|
@@ -499,7 +445,6 @@
|
|
499
445
|
});
|
500
446
|
|
501
447
|
macros.quote = (function(item) {
|
502
|
-
// item:required
|
503
448
|
return (function() {
|
504
449
|
if (("Array" === item.constructor.name)) {
|
505
450
|
return ("[ " + (map(item, macros.quote)).join(", ") + " ]");
|
@@ -516,7 +461,6 @@
|
|
516
461
|
});
|
517
462
|
|
518
463
|
macros.hash = (function(pairs) {
|
519
|
-
// pairs:rest
|
520
464
|
var pairs = Array.prototype.slice.call(arguments, 0);
|
521
465
|
|
522
466
|
(function() {
|
@@ -525,7 +469,6 @@
|
|
525
469
|
}
|
526
470
|
})();
|
527
471
|
var pairStrings = bulkMap(pairs, (function(key, value) {
|
528
|
-
// key:required value:required
|
529
472
|
return (translate(key) + ": " + translate(value));
|
530
473
|
}));
|
531
474
|
return (function() {
|
@@ -538,19 +481,57 @@
|
|
538
481
|
});
|
539
482
|
|
540
483
|
var literal = (function(string) {
|
541
|
-
|
542
|
-
return inject(string // chain
|
484
|
+
return inject(string
|
543
485
|
.replace(/\*/g, "_")
|
544
486
|
.replace(/\?$/, "__QUERY")
|
545
487
|
.replace(/!$/, "__BANG")
|
546
488
|
, string.match(/-(.)/g), (function(returnString, match) {
|
547
|
-
// returnString:required match:required
|
548
489
|
return returnString.replace(match, (match)[1].toUpperCase());
|
549
490
|
}));
|
550
491
|
});
|
551
492
|
|
493
|
+
var translateListToken = (function(token, hint) {
|
494
|
+
return (function() {
|
495
|
+
if (((token).length === 0)) {
|
496
|
+
return macros.emptyList();
|
497
|
+
} else {
|
498
|
+
return (function() {
|
499
|
+
if (typeof((macros)[translate((token)[0])]) !== 'undefined') {
|
500
|
+
return (macros)[translate((token)[0])].apply(undefined, token.slice(1));
|
501
|
+
} else {
|
502
|
+
return (macros)[(hint || "call")].apply(undefined, token);
|
503
|
+
}
|
504
|
+
})();
|
505
|
+
}
|
506
|
+
})();
|
507
|
+
});
|
508
|
+
|
509
|
+
var translateStringToken = (function(token, hint) {
|
510
|
+
return (function() {
|
511
|
+
if (token.match((new RegExp(("^" + sibilant.tokens.literal + "$"), undefined)))) {
|
512
|
+
return literal(token);
|
513
|
+
} else {
|
514
|
+
return (function() {
|
515
|
+
if (token.match((new RegExp("^;", undefined)))) {
|
516
|
+
return token.replace((new RegExp("^;+", undefined)), "//");
|
517
|
+
} else {
|
518
|
+
return (function() {
|
519
|
+
if (("\"" === (token)[0] &&
|
520
|
+
"\"" === (token.slice(-1))[0])) {
|
521
|
+
return token
|
522
|
+
.split("\n")
|
523
|
+
.join("\\n\" +\n\"");
|
524
|
+
} else {
|
525
|
+
return token;
|
526
|
+
}
|
527
|
+
})();
|
528
|
+
}
|
529
|
+
})();
|
530
|
+
}
|
531
|
+
})();
|
532
|
+
});
|
533
|
+
|
552
534
|
var translate = (function(token, hint) {
|
553
|
-
// token:required hint:required
|
554
535
|
var hint = hint;
|
555
536
|
(function() {
|
556
537
|
if ((hint && typeof((macros)[hint]) === 'undefined')) {
|
@@ -568,34 +549,13 @@
|
|
568
549
|
try {
|
569
550
|
return (function() {
|
570
551
|
if ((token) && (token).constructor.name === "Array") {
|
571
|
-
return (
|
572
|
-
if (typeof((macros)[translate((token)[0])]) !== 'undefined') {
|
573
|
-
return (macros)[translate((token)[0])].apply(undefined, token.slice(1));
|
574
|
-
} else {
|
575
|
-
return (macros)[(hint || "call")].apply(undefined, token);
|
576
|
-
}
|
577
|
-
})();
|
552
|
+
return translateListToken(token, hint);
|
578
553
|
} else {
|
579
554
|
return (function() {
|
580
|
-
if (
|
581
|
-
return
|
555
|
+
if (typeof(token) === "string") {
|
556
|
+
return translateStringToken(token, hint);
|
582
557
|
} else {
|
583
|
-
return
|
584
|
-
if ((typeof(token) === "string" && token.match((new RegExp("^;", undefined))))) {
|
585
|
-
return token.replace((new RegExp("^;+", undefined)), "//");
|
586
|
-
} else {
|
587
|
-
return (function() {
|
588
|
-
if ((typeof(token) === "string" && ("\"" === (token)[0] &&
|
589
|
-
"\"" === (token.slice(-1))[0]))) {
|
590
|
-
return token // chain
|
591
|
-
.split("\n")
|
592
|
-
.join("\\n\" +\n\"");
|
593
|
-
} else {
|
594
|
-
return token;
|
595
|
-
}
|
596
|
-
})();
|
597
|
-
}
|
598
|
-
})();
|
558
|
+
return token;
|
599
559
|
}
|
600
560
|
})();
|
601
561
|
}
|
@@ -610,10 +570,8 @@
|
|
610
570
|
|
611
571
|
(sibilant)["translate"] = translate;
|
612
572
|
var translateAll = (function(contents) {
|
613
|
-
// contents:required
|
614
573
|
var buffer = "";
|
615
574
|
tokenize(contents).forEach((function(token) {
|
616
|
-
// token:required
|
617
575
|
var line = translate(token, "statement");
|
618
576
|
return (function() {
|
619
577
|
if (line) {
|
@@ -630,7 +588,6 @@
|
|
630
588
|
var sibilant = window.sibilant,
|
631
589
|
scripts = [ ];
|
632
590
|
var evalWithTryCatch = (function(js) {
|
633
|
-
// js:required
|
634
591
|
return (function() {
|
635
592
|
try {
|
636
593
|
return eval(js);
|
@@ -646,13 +603,13 @@
|
|
646
603
|
js = null;
|
647
604
|
return (function() {
|
648
605
|
if ((!sibilant.loadNextScript())) {
|
649
|
-
return $("script[type=\"text/sibilant\"]:not([src])")
|
606
|
+
return $("script[type=\"text/sibilant\"]:not([src])")
|
650
607
|
.each((function() {
|
651
|
-
lisp = $(this)
|
608
|
+
lisp = $(this)
|
652
609
|
.text()
|
653
610
|
.replace(/(^\s*\/\/\<!\[CDATA\[)|(\/\/\]\]>\s*$)/g, "");
|
654
611
|
js = sibilant.translateAll(lisp);
|
655
|
-
$(this)
|
612
|
+
$(this)
|
656
613
|
.data("js", js)
|
657
614
|
;
|
658
615
|
return evalWithTryCatch(js);
|
@@ -661,7 +618,7 @@
|
|
661
618
|
})();
|
662
619
|
});
|
663
620
|
;
|
664
|
-
scripts = $.makeArray($("script[type=\"text/sibilant\"][src]")
|
621
|
+
scripts = $.makeArray($("script[type=\"text/sibilant\"][src]")
|
665
622
|
.map((function() {
|
666
623
|
return this.src;
|
667
624
|
}))
|
@@ -671,7 +628,6 @@
|
|
671
628
|
return (function() {
|
672
629
|
if (typeof(nextScript) !== 'undefined') {
|
673
630
|
$.get(nextScript, (function(data) {
|
674
|
-
// data:required
|
675
631
|
evalWithTryCatch(sibilant.translateAll(data));
|
676
632
|
return sibilant.scriptLoaded();
|
677
633
|
}));
|
data/js/sibilant/lib/cli.js
CHANGED
@@ -17,8 +17,7 @@ var createContext = (function() {
|
|
17
17
|
});
|
18
18
|
|
19
19
|
var runInSandbox = (function(js, inputPath) {
|
20
|
-
|
21
|
-
if (arguments.length < 2) // if inputPath is missing
|
20
|
+
if (arguments.length < 2)
|
22
21
|
var inputPath = undefined;
|
23
22
|
|
24
23
|
(function() {
|
@@ -54,18 +53,15 @@ cli.version = (function() {
|
|
54
53
|
});
|
55
54
|
|
56
55
|
cli.repl = (function(args) {
|
57
|
-
// args:required
|
58
56
|
return require("../lib/repl");
|
59
57
|
});
|
60
58
|
|
61
59
|
var readStdin = (function(fn) {
|
62
|
-
// fn:required
|
63
60
|
var stdin = process.stdin,
|
64
61
|
data = "";
|
65
62
|
stdin.resume();
|
66
63
|
stdin.setEncoding("utf8");
|
67
64
|
stdin.on("data", (function(chunk) {
|
68
|
-
// chunk:required
|
69
65
|
return data = (data + chunk);
|
70
66
|
}));
|
71
67
|
return stdin.on("end", (function() {
|
@@ -74,15 +70,12 @@ var readStdin = (function(fn) {
|
|
74
70
|
});
|
75
71
|
|
76
72
|
cli.eval = (function(args, options) {
|
77
|
-
// args:required options:required
|
78
73
|
(options)["execute"] = true;
|
79
74
|
return cli.input(args, options);
|
80
75
|
});
|
81
76
|
|
82
77
|
cli.input = (function(args, options) {
|
83
|
-
// args:required options:required
|
84
78
|
var process = (function(sibilantCode) {
|
85
|
-
// sibilantCode:required
|
86
79
|
var jsCode = sibilant.translateAll(sibilantCode);
|
87
80
|
return (function() {
|
88
81
|
if (options.execute) {
|
@@ -103,9 +96,7 @@ cli.input = (function(args, options) {
|
|
103
96
|
});
|
104
97
|
|
105
98
|
cli.help = (function(args, options) {
|
106
|
-
// args:required options:required
|
107
99
|
return fs.readFile((__dirname + "/../cli-help"), { encoding: "utf8" }, (function(err, data) {
|
108
|
-
// err:required data:required
|
109
100
|
(function() {
|
110
101
|
if (err) {
|
111
102
|
throw new Error (err);
|
@@ -132,7 +123,6 @@ var outputDir = (function() {
|
|
132
123
|
}
|
133
124
|
})();
|
134
125
|
(cliOptions.file || [ ]).forEach((function(inputFile) {
|
135
|
-
// inputFile:required
|
136
126
|
var inputPath = path.join(process.cwd(), inputFile),
|
137
127
|
translated = sibilant.translateFile(inputPath);
|
138
128
|
return (function() {
|
data/js/sibilant/lib/options.js
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
var bulkMap = (function(arr, fn) {
|
2
|
-
// arr:required fn:required
|
3
2
|
var index = 0,
|
4
3
|
groupSize = fn.length,
|
5
4
|
retArr = [ ];
|
@@ -17,12 +16,10 @@ var bulkMap = (function(arr, fn) {
|
|
17
16
|
});
|
18
17
|
|
19
18
|
var inject = (function(start, items, fn) {
|
20
|
-
// start:required items:required fn:required
|
21
19
|
var value = start;
|
22
20
|
(function() {
|
23
21
|
if ((items) && (items).constructor.name === "Array") {
|
24
22
|
return items.forEach((function(item, index) {
|
25
|
-
// item:required index:required
|
26
23
|
return value = fn(value, item, index);
|
27
24
|
}));
|
28
25
|
}
|
@@ -31,18 +28,14 @@ var inject = (function(start, items, fn) {
|
|
31
28
|
});
|
32
29
|
|
33
30
|
var map = (function(items, fn) {
|
34
|
-
// items:required fn:required
|
35
31
|
return inject([ ], items, (function(collector, item, index) {
|
36
|
-
// collector:required item:required index:required
|
37
32
|
collector.push(fn(item, index));
|
38
33
|
return collector;
|
39
34
|
}));
|
40
35
|
});
|
41
36
|
|
42
37
|
var select = (function(items, fn) {
|
43
|
-
// items:required fn:required
|
44
38
|
return inject([ ], items, (function(collector, item, index) {
|
45
|
-
// collector:required item:required index:required
|
46
39
|
(function() {
|
47
40
|
if (fn(item, index)) {
|
48
41
|
return collector.push(item);
|
@@ -53,7 +46,6 @@ var select = (function(items, fn) {
|
|
53
46
|
});
|
54
47
|
|
55
48
|
var detect = (function(items, fn) {
|
56
|
-
// items:required fn:required
|
57
49
|
var returnItem = undefined,
|
58
50
|
index = 0,
|
59
51
|
items = items;
|
@@ -74,7 +66,6 @@ var detect = (function(items, fn) {
|
|
74
66
|
});
|
75
67
|
|
76
68
|
var reject = (function(items, fn) {
|
77
|
-
// items:required fn:required
|
78
69
|
var args = [ items, fn ];
|
79
70
|
return select(items, (function() {
|
80
71
|
return (!fn.apply(undefined, arguments));
|
@@ -82,19 +73,15 @@ var reject = (function(items, fn) {
|
|
82
73
|
});
|
83
74
|
|
84
75
|
var compact = (function(arr) {
|
85
|
-
// arr:required
|
86
76
|
return select(arr, (function(item) {
|
87
|
-
// item:required
|
88
77
|
return (!!(item));
|
89
78
|
}));
|
90
79
|
});
|
91
80
|
|
92
81
|
var flatten = (function(items) {
|
93
|
-
// items:rest
|
94
82
|
var items = Array.prototype.slice.call(arguments, 0);
|
95
83
|
|
96
84
|
return inject([ ], items, (function(collector, item) {
|
97
|
-
// collector:required item:required
|
98
85
|
return collector.concat((function() {
|
99
86
|
if ((item) && (item).constructor.name === "Array") {
|
100
87
|
return flatten.apply(undefined, item);
|
@@ -107,8 +94,7 @@ var flatten = (function(items) {
|
|
107
94
|
|
108
95
|
|
109
96
|
var extractOptions = (function(config, args) {
|
110
|
-
|
111
|
-
if (arguments.length < 2) // if args is missing
|
97
|
+
if (arguments.length < 2)
|
112
98
|
var args = undefined;
|
113
99
|
|
114
100
|
var args = (args || process.argv.slice(2)),
|
@@ -118,12 +104,10 @@ var extractOptions = (function(config, args) {
|
|
118
104
|
config = (config || { }),
|
119
105
|
unlabeled = [ ];
|
120
106
|
var label__QUERY = (function(item) {
|
121
|
-
// item:required
|
122
107
|
return (typeof(item) === "string" && /^-/.test(item));
|
123
108
|
});
|
124
109
|
;
|
125
110
|
var synonymLookup = (function(item) {
|
126
|
-
// item:required
|
127
111
|
var configEntry = (config)[item];
|
128
112
|
return (function() {
|
129
113
|
if (typeof(configEntry) === "string") {
|
@@ -135,19 +119,16 @@ var extractOptions = (function(config, args) {
|
|
135
119
|
});
|
136
120
|
;
|
137
121
|
var takesArgs__QUERY = (function(item) {
|
138
|
-
// item:required
|
139
122
|
return (false !== (config)[labelFor(item)]);
|
140
123
|
});
|
141
124
|
;
|
142
125
|
defaultLabel = synonymLookup(defaultLabel);
|
143
126
|
currentLabel = defaultLabel;
|
144
127
|
var labelFor = (function(item) {
|
145
|
-
// item:required
|
146
128
|
return synonymLookup(item.replace(/^-+/, ""));
|
147
129
|
});
|
148
130
|
;
|
149
131
|
var addValue = (function(hash, key, value) {
|
150
|
-
// hash:required key:required value:required
|
151
132
|
var currentValue = (hash)[key];
|
152
133
|
(function() {
|
153
134
|
if (typeof(currentValue) === 'undefined') {
|
@@ -167,7 +148,6 @@ var extractOptions = (function(config, args) {
|
|
167
148
|
});
|
168
149
|
;
|
169
150
|
return inject({ }, args, (function(returnHash, item, index) {
|
170
|
-
// returnHash:required item:required index:required
|
171
151
|
(function() {
|
172
152
|
if (("--" === item)) {
|
173
153
|
return afterBreak = true;
|
@@ -199,15 +179,13 @@ var extractOptions = (function(config, args) {
|
|
199
179
|
});
|
200
180
|
|
201
181
|
var processOptions = (function(config) {
|
202
|
-
|
203
|
-
if (arguments.length < 1) // if config is missing
|
182
|
+
if (arguments.length < 1)
|
204
183
|
var config = undefined;
|
205
184
|
|
206
185
|
var options = extractOptions(config);
|
207
186
|
(function() {
|
208
187
|
if (config) {
|
209
188
|
var handlePair = (function(key, value) {
|
210
|
-
// key:required value:required
|
211
189
|
var handle = (config)[key];
|
212
190
|
(function() {
|
213
191
|
if (typeof(handle) === "string") {
|
@@ -221,7 +199,6 @@ var processOptions = (function(config) {
|
|
221
199
|
})();
|
222
200
|
});
|
223
201
|
return Object.keys(options).forEach((function(key) {
|
224
|
-
// key:required
|
225
202
|
return handlePair(key, (options)[key]);
|
226
203
|
}));
|
227
204
|
}
|