sibilant 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/README.md +8 -4
  2. data/js/sibilant/.gitignore +4 -0
  3. data/js/sibilant/.travis.yml +6 -0
  4. data/js/sibilant/LICENSE +20 -0
  5. data/js/sibilant/README.md +70 -0
  6. data/js/sibilant/bin/sibilant +3 -0
  7. data/js/sibilant/cli-help +79 -0
  8. data/js/sibilant/include/functional.sibilant +57 -0
  9. data/js/sibilant/include/macros.sibilant +374 -0
  10. data/js/sibilant/include/node.sibilant +2 -0
  11. data/js/sibilant/lib/browser.js +685 -0
  12. data/js/sibilant/lib/cli.js +153 -0
  13. data/js/sibilant/lib/options.js +232 -0
  14. data/js/sibilant/lib/repl.js +78 -0
  15. data/js/sibilant/lib/sibilant.js +688 -0
  16. data/js/sibilant/misc/sibilant-mode.el +129 -0
  17. data/js/sibilant/package.json +19 -0
  18. data/js/sibilant/package.sibilant +16 -0
  19. data/js/sibilant/public/index.html +502 -0
  20. data/js/sibilant/public/javascripts/browser.js +685 -0
  21. data/js/sibilant/public/javascripts/jquery-ui.js +392 -0
  22. data/js/sibilant/public/javascripts/jquery.js +154 -0
  23. data/js/sibilant/public/javascripts/macros.sibilant +374 -0
  24. data/js/sibilant/public/javascripts/sibilant.info.sibilant +77 -0
  25. data/js/sibilant/public/sass/_mixins.sass +98 -0
  26. data/js/sibilant/public/sass/sibilant.sass +156 -0
  27. data/js/sibilant/public/stylesheets/Anonymous_Pro-webfont.eot +0 -0
  28. data/js/sibilant/public/stylesheets/Anonymous_Pro-webfont.svg +241 -0
  29. data/js/sibilant/public/stylesheets/Anonymous_Pro-webfont.ttf +0 -0
  30. data/js/sibilant/public/stylesheets/Anonymous_Pro-webfont.woff +0 -0
  31. data/js/sibilant/public/stylesheets/sibilant.css +166 -0
  32. data/js/sibilant/src/browser.sibilant +45 -0
  33. data/js/sibilant/src/cli.sibilant +93 -0
  34. data/js/sibilant/src/core.sibilant +338 -0
  35. data/js/sibilant/src/options.sibilant +65 -0
  36. data/js/sibilant/src/repl.sibilant +59 -0
  37. data/js/sibilant/src/sibilant.sibilant +78 -0
  38. data/js/sibilant/test/defvar.sibilant +5 -0
  39. data/js/sibilant/test/includeFile1.sibilant +1 -0
  40. data/js/sibilant/test/includeFile2.sibilant +1 -0
  41. data/js/sibilant/test/node.sibilant +10 -0
  42. data/js/sibilant/test/slice.sibilant +3 -0
  43. data/js/sibilant/test/test.sibilant +464 -0
  44. data/js/sibilant/test/testHelper.sibilant +80 -0
  45. data/lib/sibilant/version.rb +1 -1
  46. data/sibilant.gemspec +3 -1
  47. metadata +44 -1
@@ -0,0 +1,688 @@
1
+ var sibilant = exports,
2
+ util = require("util"),
3
+ path = require("path"),
4
+ fs = require("fs"),
5
+ error = (function(str) {
6
+ // str:required
7
+ throw new Error (str);
8
+ }),
9
+ inspect = util.inspect;
10
+ var bulkMap = (function(arr, fn) {
11
+ // arr:required fn:required
12
+ var index = 0,
13
+ groupSize = fn.length,
14
+ retArr = [ ];
15
+ (function() {
16
+ var __returnValue__ = undefined;
17
+ while ((index < arr.length)) {
18
+ __returnValue__ = (function() {
19
+ retArr.push(fn.apply(undefined, arr.slice(index, (index + groupSize))));
20
+ return index += groupSize;
21
+ })();
22
+ };
23
+ return __returnValue__;
24
+ })();
25
+ return retArr;
26
+ });
27
+
28
+ var inject = (function(start, items, fn) {
29
+ // start:required items:required fn:required
30
+ var value = start;
31
+ (function() {
32
+ if ((items) && (items).constructor.name === "Array") {
33
+ return items.forEach((function(item, index) {
34
+ // item:required index:required
35
+ return value = fn(value, item, index);
36
+ }));
37
+ }
38
+ })();
39
+ return value;
40
+ });
41
+
42
+ var map = (function(items, fn) {
43
+ // items:required fn:required
44
+ return inject([ ], items, (function(collector, item, index) {
45
+ // collector:required item:required index:required
46
+ collector.push(fn(item, index));
47
+ return collector;
48
+ }));
49
+ });
50
+
51
+ var select = (function(items, fn) {
52
+ // items:required fn:required
53
+ return inject([ ], items, (function(collector, item, index) {
54
+ // collector:required item:required index:required
55
+ (function() {
56
+ if (fn(item, index)) {
57
+ return collector.push(item);
58
+ }
59
+ })();
60
+ return collector;
61
+ }));
62
+ });
63
+
64
+ var detect = (function(items, fn) {
65
+ // items:required fn:required
66
+ var returnItem = undefined,
67
+ index = 0,
68
+ items = items;
69
+ return (function() {
70
+ var __returnValue__ = undefined;
71
+ while ((!((items.length === index) || returnItem))) {
72
+ __returnValue__ = (function() {
73
+ (function() {
74
+ if (fn((items)[index], index)) {
75
+ return returnItem = (items)[index];
76
+ }
77
+ })();
78
+ return ((index)++);
79
+ })();
80
+ };
81
+ return __returnValue__;
82
+ })();
83
+ });
84
+
85
+ var reject = (function(items, fn) {
86
+ // items:required fn:required
87
+ var args = [ items, fn ];
88
+ return select(items, (function() {
89
+ return (!fn.apply(undefined, arguments));
90
+ }));
91
+ });
92
+
93
+ var compact = (function(arr) {
94
+ // arr:required
95
+ return select(arr, (function(item) {
96
+ // item:required
97
+ return (!!(item));
98
+ }));
99
+ });
100
+
101
+ var flatten = (function(items) {
102
+ // items:rest
103
+ var items = Array.prototype.slice.call(arguments, 0);
104
+
105
+ return inject([ ], items, (function(collector, item) {
106
+ // collector:required item:required
107
+ return collector.concat((function() {
108
+ if ((item) && (item).constructor.name === "Array") {
109
+ return flatten.apply(undefined, item);
110
+ } else {
111
+ return item;
112
+ }
113
+ })());
114
+ }));
115
+ });
116
+
117
+
118
+ sibilant.packageInfo = (function() {
119
+ var fs = require("fs");
120
+ return JSON.parse(fs.readFileSync((__dirname + "/../package.json")));
121
+ });
122
+
123
+ sibilant.versionString = (function() {
124
+ var package = sibilant.packageInfo(),
125
+ path = require("path");
126
+ return (package.name + " version " + package.version + "\n(at " + path.join(__dirname, "..") + ")");
127
+ });
128
+
129
+ sibilant.stripShebang = (function(data) {
130
+ // data:required
131
+ return data.replace(/^#!.*\n/, "");
132
+ });
133
+
134
+ (sibilant)["file"] = "eval.sibilant";
135
+ (sibilant)["dir"] = process.cwd();
136
+ var withDirAndFile = (function(dir, file, fn) {
137
+ // dir:required file:required fn:required
138
+ var before = {
139
+ dir: sibilant.dir,
140
+ file: sibilant.file
141
+ };
142
+ (sibilant)["dir"] = dir;
143
+ (sibilant)["file"] = file;
144
+ var retval = fn();
145
+ (sibilant)["dir"] = before.dir;
146
+ (sibilant)["file"] = before.file;
147
+ return retval;
148
+ });
149
+
150
+ sibilant.translateFile = (function(fileName) {
151
+ // fileName:required
152
+ return withDirAndFile(path.dirname(fileName), fileName, (function() {
153
+ return sibilant.translateAll(sibilant.stripShebang(fs.readFileSync(fileName, "utf8")));
154
+ }));
155
+ });
156
+
157
+ sibilant.version = (function() {
158
+ return (sibilant.packageInfo())["version"];
159
+ });
160
+
161
+ (require.extensions)[".sibilant"] = (function(module, filename) {
162
+ // module:required filename:required
163
+ var content = sibilant.translateFile(filename);
164
+ return module._compile(content, filename);
165
+ });
166
+ sibilant.include = (function(file) {
167
+ // file:required
168
+ (function() {
169
+ if ((!file.match((new RegExp(".sibilant$", undefined))))) {
170
+ return file = (file + ".sibilant");
171
+ }
172
+ })();
173
+ (function() {
174
+ if (file.match((new RegExp("^\.\.?/", undefined)))) {
175
+ return file = (sibilant.dir + "/" + file);
176
+ }
177
+ })();
178
+ var resolved = require.resolve(file);
179
+ return sibilant.translateFile(resolved);
180
+ });
181
+
182
+ (sibilant)["tokens"] = { };
183
+ (sibilant.tokens)["regex"] = "(\\/(\\\\\\\/|[^\\/\\n])+\\/[glim]*)";
184
+ (sibilant.tokens)["comment"] = "(;.*)";
185
+ (sibilant.tokens)["string"] = "(\"(([^\"]|(\\\\\"))*[^\\\\])?\")";
186
+ (sibilant.tokens)["number"] = "(-?[0-9][0-9.,]*)";
187
+ (sibilant.tokens)["literal"] = "(-?[*.$a-zA-Z][*.a-zA-Z0-9-]*(\\?|!)?)";
188
+ (sibilant.tokens)["special"] = "([&']?)";
189
+ (sibilant.tokens)["otherChar"] = "([><=!\\+\\/\\*-]+)";
190
+ (sibilant.tokens)["openParen"] = "(\\()";
191
+ (sibilant.tokens)["specialOpenParen"] = "('?\\()";
192
+ (sibilant.tokens)["closeParen"] = "(\\))";
193
+ (sibilant.tokens)["alternativeParens"] = "\\{|\\[|\\}|\\]";
194
+ (sibilant.tokens)["specialLiteral"] = (sibilant.tokens.special + sibilant.tokens.literal);
195
+ (sibilant)["tokenPrecedence"] = [ "regex", "comment", "string", "number", "specialLiteral", "otherChar", "specialOpenParen", "closeParen", "alternativeParens" ];
196
+ var tokenize = sibilant.tokenize = (function(string) {
197
+ // string:required
198
+ var tokens = [ ],
199
+ parseStack = [ tokens ],
200
+ specials = [ ];
201
+ var acceptToken = (function(token) {
202
+ // token:required
203
+ return (parseStack)[0].push(token);
204
+ });
205
+ ;
206
+ var increaseNesting = (function() {
207
+ var newArr = [ ];
208
+ acceptToken(newArr);
209
+ return parseStack.unshift(newArr);
210
+ });
211
+ ;
212
+ var decreaseNesting = (function() {
213
+ specials.shift();
214
+ parseStack.shift();
215
+ return (function() {
216
+ if ((parseStack.length === 0)) {
217
+ throw new Error (("unbalanced parens:\n" + inspect(parseStack)));
218
+ }
219
+ })();
220
+ });
221
+ ;
222
+ var handleToken = (function(token) {
223
+ // token:required
224
+ var special = (token)[0],
225
+ token = token;
226
+ (function() {
227
+ if ((special === "'")) {
228
+ token = token.slice(1);
229
+ increaseNesting();
230
+ return acceptToken("quote");
231
+ } else {
232
+ return special = false;
233
+ }
234
+ })();
235
+ specials.unshift((!!(special)));
236
+ (function() {
237
+ switch(token) {
238
+ case "(":
239
+ return increaseNesting();
240
+
241
+ case "]":
242
+ case "}":
243
+ case ")":
244
+ return decreaseNesting();
245
+
246
+ case "{":
247
+ increaseNesting();
248
+ return acceptToken("hash");
249
+
250
+ case "[":
251
+ increaseNesting();
252
+ return acceptToken("list");
253
+
254
+ default:
255
+ return (function() {
256
+ if (token.match((new RegExp(("^" + sibilant.tokens.number + "$"), undefined)))) {
257
+ return acceptToken(parseFloat(token.replace((new RegExp(",", "g")), "")));
258
+ } else {
259
+ return acceptToken(token);
260
+ }
261
+ })();
262
+ }
263
+ })();
264
+ return (function() {
265
+ if (((token !== "(") && specials.shift())) {
266
+ return decreaseNesting();
267
+ }
268
+ })();
269
+ });
270
+ ;
271
+ var orderedRegexen = map(sibilant.tokenPrecedence, (function(x) {
272
+ // x:required
273
+ return (sibilant.tokens)[x];
274
+ })),
275
+ masterRegex = (new RegExp((orderedRegexen).join("|"), "g"));
276
+ string // chain
277
+ .match(masterRegex)
278
+ .forEach(handleToken)
279
+ ;
280
+ (function() {
281
+ if ((parseStack.length > 1)) {
282
+ return error("unexpected EOF, probably missing a )\n", inspect((parseStack)[0]));
283
+ }
284
+ })();
285
+ return tokens;
286
+ });
287
+ var indent = (function(args) {
288
+ // args:rest
289
+ var args = Array.prototype.slice.call(arguments, 0);
290
+
291
+ return (compact(args) // chain
292
+ .join("\n")
293
+ .replace(/^/, "\n")
294
+ .replace(/\n/g, "\n ")
295
+ + "\n");
296
+ });
297
+
298
+ var constructHash = (function(arrayOfArrays) {
299
+ // arrayOfArrays:required
300
+ return inject({ }, arrayOfArrays, (function(object, item) {
301
+ // object:required item:required
302
+ (object)[(item)[0]] = (object)[(item)[1]];
303
+ return object;
304
+ }));
305
+ });
306
+
307
+ var macros = { };
308
+ (sibilant)["macros"] = macros;
309
+ (macros)["return"] = (function(token) {
310
+ // token:required
311
+ var defaultReturn = ("return " + translate(token));
312
+ return (function() {
313
+ if ((token) && (token).constructor.name === "Array") {
314
+ return (function() {
315
+ switch((token)[0]) {
316
+ case "return":
317
+ case "throw":
318
+ case "progn":
319
+ return translate(token);
320
+
321
+ case "delete":
322
+ var deleteMacro = (macros)["delete"];
323
+ return (function() {
324
+ if ((token.length < 3)) {
325
+ return defaultReturn;
326
+ } else {
327
+ return (deleteMacro.apply(undefined, token.slice(1, -1)) + "\nreturn " + deleteMacro((token.slice(-1))[0]));
328
+ }
329
+ })();
330
+
331
+ case "setf":
332
+ return (function() {
333
+ if ((token.length < 4)) {
334
+ return defaultReturn;
335
+ } else {
336
+ return (macros.setf.apply(undefined, token.slice(1, (token.length - 2))) + "\nreturn " + macros.setf.apply(undefined, token.slice(-2)));
337
+ }
338
+ })();
339
+
340
+ case "set":
341
+ return (function() {
342
+ if ((token.length < 5)) {
343
+ return defaultReturn;
344
+ } else {
345
+ var obj = (token)[1],
346
+ nonReturnPart = token.slice(2, (token.length - 2)),
347
+ returnPart = token.slice(-2);
348
+ nonReturnPart.unshift(obj);
349
+ returnPart.unshift(obj);
350
+ return (macros.set.apply(undefined, nonReturnPart) + "\nreturn " + macros.set.apply(undefined, returnPart));
351
+ }
352
+ })();
353
+
354
+ default:
355
+ return defaultReturn;
356
+ }
357
+ })();
358
+ } else {
359
+ return defaultReturn;
360
+ }
361
+ })();
362
+ });
363
+ var asStatement = (function(string) {
364
+ // string:required
365
+ return string // chain
366
+ .toString()
367
+ .replace(/;*\s*$/, ";")
368
+ ;
369
+ });
370
+
371
+ macros.statement = (function(args) {
372
+ // args:rest
373
+ var args = Array.prototype.slice.call(arguments, 0);
374
+
375
+ return (macros.call.apply(undefined, args) + ";\n");
376
+ });
377
+
378
+ macros.progn = (function(body) {
379
+ // body:rest
380
+ var body = Array.prototype.slice.call(arguments, 0);
381
+
382
+ var lastIndex = Math.max(0, (body.length - 1));
383
+ (body)[lastIndex] = [ "return", (body)[lastIndex] ];
384
+ return (map(body, (function(arg) {
385
+ // arg:required
386
+ return (asStatement(translate(arg)));
387
+ }))).join("\n");
388
+ });
389
+
390
+ macros.call = (function(fnName, args) {
391
+ // fnName:required args:rest
392
+ var args = Array.prototype.slice.call(arguments, 1);
393
+
394
+ return (translate(fnName) + "(" + (map(args, translate)).join(", ") + ")");
395
+ });
396
+
397
+ macros.defun = (function(fnName, argsAndBody) {
398
+ // fnName:required argsAndBody:rest
399
+ var argsAndBody = Array.prototype.slice.call(arguments, 1);
400
+
401
+ var fnNameTr = translate(fnName),
402
+ start = (function() {
403
+ if (fnNameTr.match(/\./)) {
404
+ return "";
405
+ } else {
406
+ return "var ";
407
+ }
408
+ })();
409
+ return (start + fnNameTr + " = " + macros.lambda.apply(undefined, argsAndBody) + ";\n");
410
+ });
411
+
412
+ macros.defmacro = (function(name, argsAndBody) {
413
+ // name:required argsAndBody:rest
414
+ var argsAndBody = Array.prototype.slice.call(arguments, 1);
415
+
416
+ var js = macros.lambda.apply(undefined, argsAndBody),
417
+ name = translate(name);
418
+ (function() {
419
+ try {
420
+ return (macros)[name] = eval(js);
421
+ } catch (e) {
422
+ return error(("error in parsing macro " + name + ":\n" + indent(js)));
423
+ }
424
+ })();
425
+ return undefined;
426
+ });
427
+
428
+ macros.concat = (function(args) {
429
+ // args:rest
430
+ var args = Array.prototype.slice.call(arguments, 0);
431
+
432
+ return ("(" + (map(args, translate)).join(" + ") + ")");
433
+ });
434
+
435
+ var transformArgs = (function(arglist) {
436
+ // arglist:required
437
+ var last = undefined,
438
+ args = [ ];
439
+ arglist.forEach((function(arg) {
440
+ // arg:required
441
+ return (function() {
442
+ if (((arg)[0] === "&")) {
443
+ return last = arg.slice(1);
444
+ } else {
445
+ args.push([ (last || "required"), arg ]);
446
+ return last = null;
447
+ }
448
+ })();
449
+ }));
450
+ (function() {
451
+ if (last) {
452
+ return error(("unexpected argument modifier: " + last));
453
+ }
454
+ })();
455
+ return args;
456
+ });
457
+
458
+ macros.reverse = (function(arr) {
459
+ // arr:required
460
+ var reversed = [ ];
461
+ arr.forEach((function(item) {
462
+ // item:required
463
+ return reversed.unshift(item);
464
+ }));
465
+ return reversed;
466
+ });
467
+
468
+ var reverse = macros.reverse;
469
+ var buildArgsString = (function(args, rest) {
470
+ // args:required rest:required
471
+ var argsString = "",
472
+ optionalCount = 0;
473
+ args.forEach((function(arg, optionIndex) {
474
+ // arg:required optionIndex:required
475
+ return (function() {
476
+ if (((arg)[0] === "optional")) {
477
+ argsString = (argsString + "if (arguments.length < " + (args.length - optionalCount) + ")" + " // if " + translate((arg)[1]) + " is missing" + indent(("var " + map(args.slice((optionIndex + 1)), (function(arg, argIndex) {
478
+ // arg:required argIndex:required
479
+ return (translate((arg)[1]) + " = " + translate(((args)[(optionIndex + argIndex)])[1]));
480
+ })) // chain
481
+ .reverse()
482
+ .concat((translate((arg)[1]) + " = undefined"))
483
+ .join(", ")
484
+ + ";")));
485
+ return ((optionalCount)++);
486
+ }
487
+ })();
488
+ }));
489
+ return (function() {
490
+ if (typeof(rest) !== 'undefined') {
491
+ return (argsString + "var " + translate((rest)[1]) + " = Array.prototype.slice.call(arguments, " + args.length + ");\n");
492
+ } else {
493
+ return argsString;
494
+ }
495
+ })();
496
+ });
497
+
498
+ var buildCommentString = (function(args) {
499
+ // args:required
500
+ return (function() {
501
+ if (((args).length === 0)) {
502
+ return "";
503
+ } else {
504
+ return ("// " + (map(args, (function(arg) {
505
+ // arg:required
506
+ return (translate((arg)[1]) + ":" + (arg)[0]);
507
+ }))).join(" "));
508
+ }
509
+ })();
510
+ });
511
+
512
+ // brain 'splode
513
+ macros.lambda = (function(arglist, body) {
514
+ // arglist:required body:rest
515
+ var body = Array.prototype.slice.call(arguments, 1);
516
+
517
+ var args = transformArgs(arglist),
518
+ rest = (select(args, (function(arg) {
519
+ // arg:required
520
+ return ("rest" === (arg)[0]);
521
+ })))[0],
522
+ docString = undefined;
523
+ (body)[(body.length - 1)] = [ "return", (body)[(body.length - 1)] ];
524
+ (function() {
525
+ if (((typeof((body)[0]) === "string") && (body)[0].match(/^".*"$/))) {
526
+ return docString = ("/* " + eval(body.shift()) + " */\n");
527
+ }
528
+ })();
529
+ var noRestArgs = (function() {
530
+ if (rest) {
531
+ return args.slice(0, -1);
532
+ } else {
533
+ return args;
534
+ }
535
+ })(),
536
+ argsString = buildArgsString(noRestArgs, rest),
537
+ commentString = buildCommentString(args);
538
+ return ("(function(" + (map(args, (function(arg) {
539
+ // arg:required
540
+ return translate((arg)[1]);
541
+ }))).join(", ") + ") {" + indent(commentString, docString, argsString, (map(body, (function(stmt) {
542
+ // stmt:required
543
+ var tstmt = translate(stmt);
544
+ return (tstmt + (function() {
545
+ if (((tstmt.slice(-1))[0] === ";")) {
546
+ return "";
547
+ } else {
548
+ return ";";
549
+ }
550
+ })());
551
+ }))).join("\n")) + "})");
552
+ });
553
+
554
+ macros.quote = (function(item) {
555
+ // item:required
556
+ return (function() {
557
+ if (("Array" === item.constructor.name)) {
558
+ return ("[ " + (map(item, macros.quote)).join(", ") + " ]");
559
+ } else {
560
+ return (function() {
561
+ if (("number" === typeof(item))) {
562
+ return item;
563
+ } else {
564
+ return ("\"" + literal(item) + "\"");
565
+ }
566
+ })();
567
+ }
568
+ })();
569
+ });
570
+
571
+ macros.hash = (function(pairs) {
572
+ // pairs:rest
573
+ var pairs = Array.prototype.slice.call(arguments, 0);
574
+
575
+ (function() {
576
+ if ((0 !== (pairs.length % 2))) {
577
+ return error(("odd number of key-value pairs in hash: " + inspect(pairs)));
578
+ }
579
+ })();
580
+ var pairStrings = bulkMap(pairs, (function(key, value) {
581
+ // key:required value:required
582
+ return (translate(key) + ": " + translate(value));
583
+ }));
584
+ return (function() {
585
+ if ((1 >= pairStrings.length)) {
586
+ return ("{ " + (pairStrings).join(", ") + " }");
587
+ } else {
588
+ return ("{" + indent((pairStrings).join(",\n")) + "}");
589
+ }
590
+ })();
591
+ });
592
+
593
+ var literal = (function(string) {
594
+ // string:required
595
+ return inject(string // chain
596
+ .replace(/\*/g, "_")
597
+ .replace(/\?$/, "__QUERY")
598
+ .replace(/!$/, "__BANG")
599
+ , string.match(/-(.)/g), (function(returnString, match) {
600
+ // returnString:required match:required
601
+ return returnString.replace(match, (match)[1].toUpperCase());
602
+ }));
603
+ });
604
+
605
+ var translate = (function(token, hint) {
606
+ // token:required hint:required
607
+ var hint = hint;
608
+ (function() {
609
+ if ((hint && typeof((macros)[hint]) === 'undefined')) {
610
+ return hint = undefined;
611
+ }
612
+ })();
613
+ return (function() {
614
+ if (typeof(token) !== 'undefined') {
615
+ (function() {
616
+ if (typeof(token) === "string") {
617
+ return token = token.trim();
618
+ }
619
+ })();
620
+ return (function() {
621
+ try {
622
+ return (function() {
623
+ if ((token) && (token).constructor.name === "Array") {
624
+ return (function() {
625
+ if (typeof((macros)[translate((token)[0])]) !== 'undefined') {
626
+ return (macros)[translate((token)[0])].apply(undefined, token.slice(1));
627
+ } else {
628
+ return (macros)[(hint || "call")].apply(undefined, token);
629
+ }
630
+ })();
631
+ } else {
632
+ return (function() {
633
+ if ((typeof(token) === "string" && token.match((new RegExp(("^" + sibilant.tokens.literal + "$"), undefined))))) {
634
+ return literal(token);
635
+ } else {
636
+ return (function() {
637
+ if ((typeof(token) === "string" && token.match((new RegExp("^;", undefined))))) {
638
+ return token.replace((new RegExp("^;+", undefined)), "//");
639
+ } else {
640
+ return (function() {
641
+ if ((typeof(token) === "string" && ("\"" === (token)[0] &&
642
+ "\"" === (token.slice(-1))[0]))) {
643
+ return token // chain
644
+ .split("\n")
645
+ .join("\\n\" +\n\"");
646
+ } else {
647
+ return token;
648
+ }
649
+ })();
650
+ }
651
+ })();
652
+ }
653
+ })();
654
+ }
655
+ })();
656
+ } catch (e) {
657
+ return error((e.stack + "\n" + "Encountered when attempting to process:\n" + indent(inspect(token))));
658
+ }
659
+ })();
660
+ }
661
+ })();
662
+ });
663
+
664
+ (sibilant)["translate"] = translate;
665
+ var translateAll = (function(contents) {
666
+ // contents:required
667
+ var buffer = "";
668
+ tokenize(contents).forEach((function(token) {
669
+ // token:required
670
+ var line = translate(token, "statement");
671
+ return (function() {
672
+ if (line) {
673
+ return buffer = (buffer + line + "\n");
674
+ }
675
+ })();
676
+ }));
677
+ return buffer;
678
+ });
679
+
680
+ (sibilant)["translateAll"] = translateAll;
681
+
682
+ macros.include = (function(file) {
683
+ // file:required
684
+ return sibilant.include(eval(translate(file)));
685
+ });
686
+
687
+ sibilant.include(path.normalize((__dirname + "/../include/macros")));
688
+