mochiscript 0.4.0.pre1 → 0.4.0.pre10
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/.gitignore +4 -0
- data/Gemfile +4 -0
- data/Rakefile +1 -0
- data/lib/mochiscript.rb +375 -25
- data/mochiscript/lib/mochiscript.rb +5 -0
- data/mochiscript.gemspec +24 -0
- metadata +24 -30
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/lib/mochiscript.rb
CHANGED
@@ -2,7 +2,7 @@ require 'v8'
|
|
2
2
|
require 'json'
|
3
3
|
|
4
4
|
module Mochiscript
|
5
|
-
VERSION = "0.4.0-
|
5
|
+
VERSION = "0.4.0-pre10".sub("-", '.')
|
6
6
|
class Context
|
7
7
|
def initialize
|
8
8
|
@ctx = V8::Context.new
|
@@ -238,16 +238,17 @@ var JS2 = $m;
|
|
238
238
|
return $m;
|
239
239
|
})(undefined, $m);
|
240
240
|
|
241
|
+
|
241
242
|
var IDENT = "[\\$\\w]+";
|
242
243
|
var TOKENS = [
|
243
244
|
[ "SPACE", "\\s+" ],
|
244
245
|
|
246
|
+
[ "STATIC", "static\\b" ],
|
245
247
|
[ "MODULE", "module\\b", 'ModuleParser' ],
|
246
248
|
[ "CLASS", "class\\b", 'ClassParser' ],
|
247
249
|
[ "FUNCTION", "function\\b" ],
|
248
250
|
[ "INCLUDE", "include\\b" ],
|
249
251
|
[ "VAR", "var\\b" ],
|
250
|
-
[ "STATIC", "static\\b" ],
|
251
252
|
[ "PRIVATE", "private\\b" ],
|
252
253
|
[ "EXTENDS", "extends\\b" ],
|
253
254
|
[ "FOREACH", "foreach\\b", 'ForeachParser' ],
|
@@ -264,6 +265,7 @@ var TOKENS = [
|
|
264
265
|
[ "EQUALS", "=" ],
|
265
266
|
|
266
267
|
[ "COMMENT", "\\/\\/|\\/\\*", "CommentParser" ],
|
268
|
+
[ "REGEX", "/", 'RegexParser' ],
|
267
269
|
|
268
270
|
[ "LBRACE", "\\(" ],
|
269
271
|
[ "RBRACE", "\\)" ],
|
@@ -296,6 +298,7 @@ JS2.Class.extend('Tokens', function(KLASS, OO){
|
|
296
298
|
this.orig = str;
|
297
299
|
this.str = str;
|
298
300
|
this.iterator = 0;
|
301
|
+
this.consumed = 0;
|
299
302
|
});
|
300
303
|
|
301
304
|
OO.addMember("peek",function () {
|
@@ -320,8 +323,26 @@ JS2.Class.extend('Tokens', function(KLASS, OO){
|
|
320
323
|
OO.addMember("consume",function (n) {
|
321
324
|
this.str = this.str.substr(n, this.str.length-n);
|
322
325
|
this._peek = null;
|
326
|
+
this.consumed += n;
|
327
|
+
});
|
328
|
+
|
329
|
+
OO.addMember("length",function () {
|
330
|
+
return this.str.length;
|
331
|
+
});
|
332
|
+
|
333
|
+
OO.addMember("lookback",function (n) {
|
334
|
+
var starting = this.consumed;
|
335
|
+
while (this.orig.charAt(starting).match(/\s/)) starting--;
|
336
|
+
return this.orig.substr(starting-1-n, n);
|
337
|
+
});
|
338
|
+
|
339
|
+
OO.addMember("lookahead",function (n) {
|
340
|
+
var starting = this.consumed;
|
341
|
+
while (this.orig.charAt(starting).match(/\s/)) starting++;
|
342
|
+
return this.orig.substr(starting, n);
|
323
343
|
});
|
324
344
|
|
345
|
+
|
325
346
|
OO.addMember("any",function () {
|
326
347
|
return this.str.length > 0;
|
327
348
|
});
|
@@ -332,6 +353,7 @@ JS2.Class.extend('Tokens', function(KLASS, OO){
|
|
332
353
|
});
|
333
354
|
var Tokens = $c.Tokens;
|
334
355
|
|
356
|
+
|
335
357
|
$m.parse = function (str) {
|
336
358
|
var parser = new $c.RootParser();
|
337
359
|
parser.parse(new $c.Tokens(str));
|
@@ -347,31 +369,44 @@ JS2.Class.extend('RootParser', function(KLASS, OO){
|
|
347
369
|
});
|
348
370
|
|
349
371
|
OO.addMember("parse",function (tokens) {
|
350
|
-
|
372
|
+
var len = tokens.length();
|
373
|
+
if (this.startParse(tokens) === false || this.parseTokens(tokens) === false || this.endParse(tokens) === false) return false
|
374
|
+
return len != tokens.length();
|
375
|
+
});
|
376
|
+
|
377
|
+
OO.addMember("parseTokens",function (tokens) {
|
378
|
+
var sanity = 100;
|
379
|
+
var origLen = tokens.length();
|
351
380
|
|
352
|
-
var sanity = 100;
|
353
381
|
while (tokens.any()) {
|
354
|
-
var
|
355
|
-
var token = tokens.peek();
|
382
|
+
var token = tokens.peek();
|
356
383
|
if (!token) break;
|
384
|
+
|
385
|
+
// has a parser class associated with this token
|
357
386
|
var handlerClass = this.getHandler(token) || token[2];
|
358
387
|
if (handlerClass) {
|
359
388
|
var handler = new $c[handlerClass];
|
360
|
-
handler.parse(tokens)
|
361
|
-
|
362
|
-
|
389
|
+
if (handler.parse(tokens) !== false) {
|
390
|
+
this.out.push(handler);
|
391
|
+
tokens.lastHandler = handler;
|
392
|
+
} else {
|
393
|
+
this.handleToken(token, tokens);
|
394
|
+
}
|
395
|
+
}
|
396
|
+
|
397
|
+
// no parser class, use "this" to just consume it
|
398
|
+
else {
|
363
399
|
this.handleToken(token, tokens);
|
364
400
|
}
|
401
|
+
|
365
402
|
if (this.finished) break;
|
366
403
|
|
367
|
-
if (origLen == tokens.length && sanity-- == 0) {
|
404
|
+
if (origLen == tokens.length() && sanity-- == 0) {
|
368
405
|
throw "parse error";
|
369
406
|
} else {
|
370
407
|
sanity = 100;
|
371
408
|
}
|
372
409
|
}
|
373
|
-
|
374
|
-
this.endParse(tokens);
|
375
410
|
});
|
376
411
|
|
377
412
|
OO.addMember("startParse",function () { });
|
@@ -390,6 +425,7 @@ JS2.Class.extend('RootParser', function(KLASS, OO){
|
|
390
425
|
return ret.join("");
|
391
426
|
});
|
392
427
|
|
428
|
+
// intercepts parser class for special cases
|
393
429
|
OO.addMember("getHandler",function (token) {
|
394
430
|
return null;
|
395
431
|
});
|
@@ -430,7 +466,8 @@ RootParser.extend('ModuleParser', function(KLASS, OO){
|
|
430
466
|
|
431
467
|
OO.addMember("parse",function (tokens) {
|
432
468
|
var m = tokens.match(REGEX);
|
433
|
-
|
469
|
+
if (!m) return false;
|
470
|
+
var name = m[2];
|
434
471
|
tokens.consume(m[0].length-1);
|
435
472
|
|
436
473
|
var content = new $c.ClassContentParser();
|
@@ -471,10 +508,11 @@ var CurlyParser = $c.CurlyParser;
|
|
471
508
|
CurlyParser.extend('ClassContentParser', function(KLASS, OO){
|
472
509
|
OO.addMember("getHandler",function (token) {
|
473
510
|
switch(token[0]) {
|
474
|
-
case TYPES.
|
511
|
+
case TYPES.STATIC: return "StaticParser";
|
512
|
+
case TYPES.VAR: return "MemberParser";
|
475
513
|
case TYPES.FUNCTION: return "MethodParser";
|
476
|
-
case TYPES.PRIVATE:
|
477
|
-
case TYPES.INCLUDE:
|
514
|
+
case TYPES.PRIVATE: return "PrivateParser";
|
515
|
+
case TYPES.INCLUDE: return "IncludeParser";
|
478
516
|
}
|
479
517
|
});
|
480
518
|
|
@@ -547,6 +585,35 @@ RootParser.extend('IStringParser', function(KLASS, OO){
|
|
547
585
|
});
|
548
586
|
});
|
549
587
|
|
588
|
+
RootParser.extend('StaticParser', function(KLASS, OO){
|
589
|
+
// private closure
|
590
|
+
|
591
|
+
var VAR_REGEX = Tokens.regex("(<STATIC>(\\s+))<VAR>");
|
592
|
+
var FUNCT_REGEX = Tokens.regex("(<STATIC>(\\s+))<FUNCTION>");
|
593
|
+
|
594
|
+
|
595
|
+
OO.addMember("parseTokens",function (tokens) {
|
596
|
+
var varMatch = tokens.match(VAR_REGEX);
|
597
|
+
if (varMatch) {
|
598
|
+
tokens.consume(varMatch[1].length);
|
599
|
+
var parser = new MemberParser();
|
600
|
+
parser.isStatic = true;
|
601
|
+
parser.parse(tokens);
|
602
|
+
this.out.push(parser);
|
603
|
+
}
|
604
|
+
|
605
|
+
else {
|
606
|
+
var functMatch = tokens.match(FUNCT_REGEX);
|
607
|
+
tokens.consume(functMatch[1].length);
|
608
|
+
|
609
|
+
var parser = new MethodParser();
|
610
|
+
parser.isStatic = true;
|
611
|
+
parser.parse(tokens);
|
612
|
+
this.out.push(parser);
|
613
|
+
}
|
614
|
+
});
|
615
|
+
});
|
616
|
+
|
550
617
|
RootParser.extend('MemberParser', function(KLASS, OO){
|
551
618
|
// private closure
|
552
619
|
|
@@ -561,11 +628,14 @@ RootParser.extend('MemberParser', function(KLASS, OO){
|
|
561
628
|
var parser = new $c.LineParser();
|
562
629
|
parser.parse(tokens);
|
563
630
|
parser.chop();
|
631
|
+
var addMethod = this.isStatic ? 'addStaticMember' : 'addMember';
|
564
632
|
|
565
|
-
this.out = [ "OO.
|
633
|
+
this.out = [ "OO." + addMethod + "(", JSON.stringify(this.name), ",", parser, ");" ];
|
566
634
|
});
|
567
635
|
});
|
568
636
|
|
637
|
+
|
638
|
+
|
569
639
|
RootParser.extend('IncludeParser', function(KLASS, OO){
|
570
640
|
// private closure
|
571
641
|
|
@@ -615,13 +685,16 @@ RootParser.extend('MethodParser', function(KLASS, OO){
|
|
615
685
|
OO.addMember("parse",function (tokens) {
|
616
686
|
var m = tokens.str.match(REGEX);
|
617
687
|
tokens.consume(m[0].length);
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
688
|
+
var name = m[2];
|
689
|
+
var args = m[3];
|
690
|
+
|
691
|
+
var body = new CurlyParser();
|
692
|
+
body.parse(tokens);
|
693
|
+
|
694
|
+
var addMethod = this.isStatic ? 'addStaticMember' : 'addMember';
|
695
|
+
|
623
696
|
|
624
|
-
this.out = [ 'OO.
|
697
|
+
this.out = [ 'OO.' + addMethod + '(', JSON.stringify(name), ', function', args, body, ');' ];
|
625
698
|
});
|
626
699
|
});
|
627
700
|
|
@@ -660,13 +733,42 @@ RootParser.extend('CommentParser', function(KLASS, OO){
|
|
660
733
|
return;
|
661
734
|
}
|
662
735
|
|
663
|
-
var m2 = tokens.match(
|
736
|
+
var m2 = tokens.match(/^\/\*[\s\S]*?\*\//);
|
664
737
|
if (m2) {
|
665
738
|
tokens.consume(m2[0].length);
|
666
739
|
this.out = [ m2[0] ];
|
667
740
|
return;
|
741
|
+
}
|
742
|
+
|
743
|
+
return false;
|
744
|
+
});
|
745
|
+
});
|
746
|
+
|
747
|
+
RootParser.extend('RegexParser', function(KLASS, OO){
|
748
|
+
// private closure
|
749
|
+
|
750
|
+
var REGEX = /^\/(\\.|[^\/])+\/[imgy]{0,4}/;
|
751
|
+
var DIVIDE = /(\}|\)|\+\+|\-\-|[\w\$])$/;
|
752
|
+
|
753
|
+
|
754
|
+
OO.addMember("parseTokens",function (tokens) {
|
755
|
+
var back = tokens.lookback(2);
|
756
|
+
if (back.match(DIVIDE)) {
|
757
|
+
tokens.consume(1);
|
758
|
+
this.out.push("/");
|
759
|
+
}
|
760
|
+
|
761
|
+
else {
|
762
|
+
var m = tokens.match(REGEX);
|
763
|
+
if (m) {
|
764
|
+
this.out.push(m[0]);
|
765
|
+
tokens.consume(m[0].length);
|
766
|
+
} else {
|
767
|
+
return false;
|
768
|
+
}
|
668
769
|
}
|
669
770
|
});
|
771
|
+
|
670
772
|
});
|
671
773
|
|
672
774
|
CurlyParser.extend('ForeachParser', function(KLASS, OO){
|
@@ -685,7 +787,7 @@ CurlyParser.extend('ForeachParser', function(KLASS, OO){
|
|
685
787
|
|
686
788
|
// TODO ugly, revisit this later
|
687
789
|
tokens.consume(m[0].length-1);
|
688
|
-
var declare = [ this.iterator + "=0", this.item + "=null", "_list_" + namespace + "=" + this.list, "_len_" + namespace + "=_list_.length" ].join(',');
|
790
|
+
var declare = [ this.iterator + "=0", this.item + "=null", "_list_" + namespace + "=" + this.list, "_len_" + namespace + "=_list_" + namespace + ".length" ].join(',');
|
689
791
|
|
690
792
|
var bool = "(" + this.item + "=" + "_list_" + namespace + "[" + this.iterator + "])||" + this.iterator + "<_len_" + namespace;
|
691
793
|
|
@@ -698,6 +800,254 @@ CurlyParser.extend('ForeachParser', function(KLASS, OO){
|
|
698
800
|
|
699
801
|
});
|
700
802
|
|
803
|
+
|
804
|
+
JS2.Class.extend('JSML', function(KLASS, OO){
|
805
|
+
OO.addStaticMember("process",function (txt) {
|
806
|
+
return new KLASS(txt);
|
807
|
+
});
|
808
|
+
|
809
|
+
OO.addMember("initialize",function (txt) {
|
810
|
+
var lines = txt.split(/\n/);
|
811
|
+
this.root = new JS2.JSMLElement();
|
812
|
+
this.stack = [ this.root ];
|
813
|
+
|
814
|
+
for(var _i1=0,_c1=lines,_l1=_c1.length,l;(l=_c1[_i1])||(_i1<_l1);_i1++){
|
815
|
+
if (l.match(/^\s*$/)) continue;
|
816
|
+
this.processLine(l);
|
817
|
+
}
|
818
|
+
|
819
|
+
var toEval = 'function process() { var out = [];\n' + this.flatten().join('') + '\n return out.join("");\n}';
|
820
|
+
eval(toEval);
|
821
|
+
|
822
|
+
this.result = function(bound) {
|
823
|
+
bound = bound || {};
|
824
|
+
return process.call(bound);
|
825
|
+
};
|
826
|
+
});
|
827
|
+
|
828
|
+
OO.addMember("flatten",function () {
|
829
|
+
return this.root.flatten();
|
830
|
+
});
|
831
|
+
|
832
|
+
OO.addMember("processLine",function (line) {
|
833
|
+
if (line.match(/^\s*$/)) return;
|
834
|
+
|
835
|
+
var ele = new JS2.JSMLElement(line);
|
836
|
+
var scope = this.getScope();
|
837
|
+
|
838
|
+
if (ele.scope == scope) {
|
839
|
+
this.stack.pop();
|
840
|
+
this.getLast().push(ele);
|
841
|
+
this.stack.push(ele);
|
842
|
+
} else if (ele.scope > scope) {
|
843
|
+
this.getLast().push(ele);
|
844
|
+
this.stack.push(ele);
|
845
|
+
} else if (ele.scope < scope) {
|
846
|
+
var diff = scope - ele.scope + 1;
|
847
|
+
while(diff-- > 0) {
|
848
|
+
this.stack.pop();
|
849
|
+
}
|
850
|
+
this.getLast().push(ele);
|
851
|
+
this.stack.push(ele);
|
852
|
+
}
|
853
|
+
});
|
854
|
+
|
855
|
+
|
856
|
+
OO.addMember("getScope",function () {
|
857
|
+
return this.stack.length - 1;
|
858
|
+
});
|
859
|
+
|
860
|
+
OO.addMember("getLast",function () {
|
861
|
+
return this.stack[this.stack.length-1];
|
862
|
+
});
|
863
|
+
|
864
|
+
});
|
865
|
+
|
866
|
+
JS2.Class.extend('JSMLElement', function(KLASS, OO){
|
867
|
+
OO.addMember("SCOPE_REGEX",/^(\s*)(.*)$/);
|
868
|
+
OO.addMember("SPLIT_REGEX",/^((?:\.|\#|\%)[^=\s\{]*)?(\{.*\})?(=|-)?(?:\s*)(.*)$/);
|
869
|
+
OO.addMember("TOKEN_REGEX",/(\%|\#|\.)([\w][\w\-]*)/g);
|
870
|
+
OO.addMember("JS_REGEX",/^(-|=)(.*)$/g);
|
871
|
+
OO.addMember("SCOPE_OFFSET",1);
|
872
|
+
OO.addMember("SELF_CLOSING",{ area: null, basefont: null, br: null, hr: null, input: null, img: null, link: null, meta: null });
|
873
|
+
|
874
|
+
OO.addMember("initialize",function (line) {
|
875
|
+
this.children = [];
|
876
|
+
|
877
|
+
if (line == null) {
|
878
|
+
this.scope = this.SCOPE_OFFSET;
|
879
|
+
return;
|
880
|
+
}
|
881
|
+
|
882
|
+
var spaceMatch = line.match(this.SCOPE_REGEX);
|
883
|
+
this.scope = spaceMatch[1].length / 2 + this.SCOPE_OFFSET;
|
884
|
+
|
885
|
+
this.classes = [];
|
886
|
+
this.nodeID = null;
|
887
|
+
|
888
|
+
this.parse(spaceMatch[2]);
|
889
|
+
});
|
890
|
+
|
891
|
+
OO.addMember("push",function (child) {
|
892
|
+
this.children.push(child);
|
893
|
+
});
|
894
|
+
|
895
|
+
OO.addMember("parse",function (line) {
|
896
|
+
this.attributes;
|
897
|
+
this.line = line;
|
898
|
+
var self = this;
|
899
|
+
|
900
|
+
var splitted = line.match(this.SPLIT_REGEX);
|
901
|
+
var tokens = splitted[1];
|
902
|
+
var attrs = splitted[2];
|
903
|
+
var jsType = splitted[3];
|
904
|
+
var content = splitted[4];
|
905
|
+
|
906
|
+
if (tokens) {
|
907
|
+
tokens.replace(this.TOKEN_REGEX, function(match, type, name){
|
908
|
+
switch(type) {
|
909
|
+
case '%': self.nodeType = name; break;
|
910
|
+
case '.': self.classes.push(name); break;
|
911
|
+
case '#': self.nodeID = name; break;
|
912
|
+
}
|
913
|
+
return '';
|
914
|
+
});
|
915
|
+
}
|
916
|
+
|
917
|
+
if (jsType == '=') {
|
918
|
+
this.jsEQ = content;
|
919
|
+
} else if (jsType == '-') {
|
920
|
+
this.jsExec = content;
|
921
|
+
} else {
|
922
|
+
this.content = content;
|
923
|
+
}
|
924
|
+
|
925
|
+
if (attrs) {
|
926
|
+
this.attributes = attrs;
|
927
|
+
}
|
928
|
+
|
929
|
+
if (!this.nodeType && (this.classes.length || this.nodeID)) {
|
930
|
+
this.nodeType = 'div';
|
931
|
+
}
|
932
|
+
|
933
|
+
if (this.SELF_CLOSING.hasOwnProperty(this.nodeType) && this.children.length == 0) {
|
934
|
+
this.selfClose = '/';
|
935
|
+
} else {
|
936
|
+
this.selfClose = '';
|
937
|
+
}
|
938
|
+
});
|
939
|
+
|
940
|
+
OO.addMember("flatten",function () {
|
941
|
+
var out = [];
|
942
|
+
|
943
|
+
for(var _i1=0,_c1=this.children,_l1=_c1.length,c;(c=_c1[_i1])||(_i1<_l1);_i1++){
|
944
|
+
var arr = c.flatten();
|
945
|
+
for(var _i2=0,_c2=arr,_l2=_c2.length,item;(item=_c2[_i2])||(_i2<_l2);_i2++){
|
946
|
+
out.push(item);
|
947
|
+
}
|
948
|
+
}
|
949
|
+
|
950
|
+
if (this.nodeType) {
|
951
|
+
this.handleJsEQ(out);
|
952
|
+
this.handleContent(out);
|
953
|
+
out.unshift('out.push("<' + this.nodeType + '"+JS2.JSMLElement.parseAttributes(' + (this.attributes || "{}") + ', ' + JSON.stringify(this.classes || []) + ', ' + JSON.stringify(this.id || null) + ')+"' + this.selfClose + '>");\n');
|
954
|
+
if (this.selfClose == '') {
|
955
|
+
out.push('out.push(' + JSON.stringify("</"+(this.nodeType)+">") + ');\n');
|
956
|
+
}
|
957
|
+
} else {
|
958
|
+
this.handleJsExec(out);
|
959
|
+
this.handleJsEQ(out);
|
960
|
+
this.handleContent(out);
|
961
|
+
}
|
962
|
+
|
963
|
+
return out;
|
964
|
+
});
|
965
|
+
|
966
|
+
OO.addMember("handleJsEQ",function (out) {
|
967
|
+
if (this.jsEQ) {
|
968
|
+
this.jsEQ = this.jsEQ.replace(/;\s*$/, '');
|
969
|
+
out.unshift('out.push(' + this.jsEQ + ');\n');
|
970
|
+
}
|
971
|
+
});
|
972
|
+
|
973
|
+
OO.addMember("handleContent",function (out) {
|
974
|
+
if (this.content != null && this.content.length > 0) {
|
975
|
+
out.unshift('out.push(' + JSON.stringify(this.content) + ');\n');
|
976
|
+
}
|
977
|
+
});
|
978
|
+
|
979
|
+
|
980
|
+
OO.addMember("handleJsExec",function (out) {
|
981
|
+
if (this.jsExec) {
|
982
|
+
out.unshift(this.jsExec);
|
983
|
+
if (this.jsExec.match(/\{\s*$/)) {
|
984
|
+
out.push("}\n");
|
985
|
+
}
|
986
|
+
}
|
987
|
+
});
|
988
|
+
|
989
|
+
OO.addStaticMember("parseAttributes",function (hash, classes, id) {
|
990
|
+
var out = [];
|
991
|
+
classes = classes || [];
|
992
|
+
if (hash['class']) classes.push(hash['class']);
|
993
|
+
if (classes.length) hash['class'] = classes.join(" ");
|
994
|
+
|
995
|
+
for (var k in hash) {
|
996
|
+
if (hash.hasOwnProperty(k)) {
|
997
|
+
out.push(k + '=' + JSON.stringify(hash[k]));
|
998
|
+
}
|
999
|
+
}
|
1000
|
+
return (out.length ? ' ' : '') + out.join(' ');
|
1001
|
+
});
|
1002
|
+
});
|
1003
|
+
|
1004
|
+
|
1005
|
+
JS2.Class.extend('CLI', function(KLASS, OO){
|
1006
|
+
// private closure
|
1007
|
+
|
1008
|
+
var COMMANDS = {
|
1009
|
+
help: 'help',
|
1010
|
+
render: 'render',
|
1011
|
+
compile: 'compile',
|
1012
|
+
watch: 'watch'
|
1013
|
+
};
|
1014
|
+
|
1015
|
+
|
1016
|
+
OO.addMember("run",function (args) {
|
1017
|
+
var opts = this.parseOpts(args);
|
1018
|
+
var options = opts[0];
|
1019
|
+
var command = opts[1];
|
1020
|
+
var files = opts[2];
|
1021
|
+
});
|
1022
|
+
|
1023
|
+
OO.addMember("parseOpts",function (args) {
|
1024
|
+
var files = [];
|
1025
|
+
var options = {};
|
1026
|
+
var command = null;
|
1027
|
+
|
1028
|
+
var endedArgs = false;
|
1029
|
+
|
1030
|
+
for(var i=0,_c1=args,_l1=_c1.length,arg;(arg=_c1[i])||(i<_l1);i++){
|
1031
|
+
if (endedArgs) {
|
1032
|
+
files.push(arg);
|
1033
|
+
}
|
1034
|
+
|
1035
|
+
else if (COMMANDS[arg]) {
|
1036
|
+
command = arg;
|
1037
|
+
endedArgs = true;
|
1038
|
+
}
|
1039
|
+
|
1040
|
+
else {
|
1041
|
+
var setting = arg.match(/^(\w+)(?:=(.*))?$/);
|
1042
|
+
if (setting) options[setting[0]] = setting[1] || 'true';
|
1043
|
+
}
|
1044
|
+
}
|
1045
|
+
|
1046
|
+
return [ options, command, files ];
|
1047
|
+
});
|
1048
|
+
});
|
1049
|
+
|
1050
|
+
|
701
1051
|
})();
|
702
1052
|
FINISH
|
703
1053
|
end
|
data/mochiscript.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "./lib/mochiscript"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "mochiscript"
|
7
|
+
s.version = Mochiscript::VERSION
|
8
|
+
s.authors = ["Jeff Su"]
|
9
|
+
s.email = ["me@jeffsu.com"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{Javascript Dessert}
|
12
|
+
s.description = %q{Javascript Dessert}
|
13
|
+
|
14
|
+
s.rubyforge_project = "mochiscript"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
# specify any dependencies here; for example:
|
22
|
+
# s.add_development_dependency "rspec"
|
23
|
+
# s.add_runtime_dependency "rest-client"
|
24
|
+
end
|
metadata
CHANGED
@@ -1,57 +1,51 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: mochiscript
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.4.0.pre10
|
4
5
|
prerelease: 6
|
5
|
-
version: 0.4.0.pre1
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Jeff Su
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
date: 2011-09-25 00:00:00 -07:00
|
14
|
-
default_executable:
|
12
|
+
date: 2011-10-30 00:00:00.000000000Z
|
15
13
|
dependencies: []
|
16
|
-
|
17
14
|
description: Javascript Dessert
|
18
|
-
email:
|
15
|
+
email:
|
19
16
|
- me@jeffsu.com
|
20
17
|
executables: []
|
21
|
-
|
22
18
|
extensions: []
|
23
|
-
|
24
19
|
extra_rdoc_files: []
|
25
|
-
|
26
|
-
|
20
|
+
files:
|
21
|
+
- .gitignore
|
22
|
+
- Gemfile
|
23
|
+
- Rakefile
|
27
24
|
- lib/mochiscript.rb
|
28
|
-
|
29
|
-
|
25
|
+
- mochiscript.gemspec
|
26
|
+
- mochiscript/lib/mochiscript.rb
|
27
|
+
homepage: ''
|
30
28
|
licenses: []
|
31
|
-
|
32
29
|
post_install_message:
|
33
30
|
rdoc_options: []
|
34
|
-
|
35
|
-
require_paths:
|
31
|
+
require_paths:
|
36
32
|
- lib
|
37
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
33
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
38
34
|
none: false
|
39
|
-
requirements:
|
40
|
-
- -
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version:
|
43
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
44
40
|
none: false
|
45
|
-
requirements:
|
46
|
-
- -
|
47
|
-
- !ruby/object:Gem::Version
|
41
|
+
requirements:
|
42
|
+
- - ! '>'
|
43
|
+
- !ruby/object:Gem::Version
|
48
44
|
version: 1.3.1
|
49
45
|
requirements: []
|
50
|
-
|
51
46
|
rubyforge_project: mochiscript
|
52
|
-
rubygems_version: 1.
|
47
|
+
rubygems_version: 1.8.10
|
53
48
|
signing_key:
|
54
49
|
specification_version: 3
|
55
50
|
summary: Javascript Dessert
|
56
51
|
test_files: []
|
57
|
-
|