mochiscript 0.4.6.pre4 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -222,24 +222,6 @@ var JS2 = $m;
222
222
  events[type].push(listener);
223
223
  }
224
224
 
225
- $m.EventEmitter = $m.Module.extend({
226
- emit: function () {
227
- // TODO optimize
228
- var type = arguments[0];
229
- var events = this.__$events || (this.__$events = {});
230
- var handlers = events[type];
231
-
232
- if (!handlers) return false;
233
-
234
- var args = [];
235
- for (var i=1,len=arguments.length; i<len; i++) args[i-1] = arguments[i];
236
- for (var i=0,len=handlers.length; i<len; i++) handlers[i].apply(this, args);
237
- },
238
-
239
- addListener: addListener,
240
- on: addListener
241
- });
242
-
243
225
  $m.out = function () {
244
226
  for (var i=0,arg=null,_list_0=arguments,_len_0=_list_0.length;(arg=_list_0[i])||i<_len_0;i++){
245
227
  $m.ADAPTER.out(arg);
@@ -259,216 +241,196 @@ var JS2 = $m;
259
241
  })(undefined, $m);
260
242
 
261
243
 
262
- $m.Class.extend("JSML", function(KLASS, OO){
263
- OO.addStaticMember("process", function(txt){var self=this;
264
- return new $m.JSML(txt);
265
- });
266
-
267
- OO.addMember("initialize", function(txt){var self=this;
268
- var lines = txt.split(/\n/);
269
- this.root = new $c.JSMLElement();
270
- this.stack = [ this.root ];
244
+ $m.Class.extend("EventEmitter", function(KLASS, OO){
245
+
246
+ this._maxListeners = 10;
247
+ var isArray = Array.isArray;
248
+
271
249
 
272
- for (var i=0; i<lines.length; i++) {
273
- var l = lines[i];
274
- if (l.match(/^\s*$/)) continue;
275
- this.processLine(l);
250
+ OO.addMember("emit", function(){
251
+ var type = arguments[0];
252
+ // If there is no 'error' event listener then throw.
253
+ if (type === 'error') {
254
+ if (!this._events || !this._events.error ||
255
+ (isArray(this._events.error) && !this._events.error.length))
256
+ {
257
+ if (arguments[1] instanceof Error) {
258
+ throw arguments[1]; // Unhandled 'error' event
259
+ } else {
260
+ throw new Error("Uncaught, unspecified 'error' event.");
261
+ }
262
+ return false;
263
+ }
276
264
  }
277
265
 
278
- var toEval = 'function stuff() { var out = [];\n' + this.flatten().join('') + '\n return out.join("");\n}';
279
- eval(toEval);
266
+ if (!this._events) return false;
267
+ var handler = this._events[type];
268
+ if (!handler) return false;
269
+
270
+ if (typeof handler == 'function') {
271
+ switch (arguments.length) {
272
+ // fast cases
273
+ case 1:
274
+ handler.call(this);
275
+ break;
276
+ case 2:
277
+ handler.call(this, arguments[1]);
278
+ break;
279
+ case 3:
280
+ handler.call(this, arguments[1], arguments[2]);
281
+ break;
282
+ // slower
283
+ default:
284
+ var l = arguments.length;
285
+ var args = new Array(l - 1);
286
+ for (var i = 1; i < l; i++) args[i - 1] = arguments[i];
287
+ handler.apply(this, args);
288
+ }
289
+ return true;
280
290
 
281
- this.result = function(bound) {
282
- bound = bound || {};
283
- return stuff.call(bound);
284
- };
285
- });
291
+ } else if (isArray(handler)) {
292
+ var l = arguments.length;
293
+ var args = new Array(l - 1);
294
+ for (var i = 1; i < l; i++) args[i - 1] = arguments[i];
286
295
 
287
- OO.addMember("flatten", function(){var self=this;
288
- return this.root.flatten();
289
- });
290
-
291
- OO.addMember("processLine", function(line){var self=this;
292
- if (line.match(/^\s*$/)) return;
293
-
294
- var ele = new $m.JSMLElement(line);
295
- var scope = this.getScope();
296
-
297
- if (ele.scope == scope) {
298
- this.stack.pop();
299
- this.getLast().push(ele);
300
- this.stack.push(ele);
301
- } else if (ele.scope > scope) {
302
- this.getLast().push(ele);
303
- this.stack.push(ele);
304
- } else if (ele.scope < scope) {
305
- var diff = scope - ele.scope + 1;
306
- while(diff-- > 0) {
307
- this.stack.pop();
296
+ var listeners = handler.slice();
297
+ for (var i = 0, l = listeners.length; i < l; i++) {
298
+ listeners[i].apply(this, args);
308
299
  }
309
- this.getLast().push(ele);
310
- this.stack.push(ele);
300
+ return true;
301
+
302
+ } else {
303
+ return false;
311
304
  }
312
- });
313
305
 
306
+ });
314
307
 
315
- OO.addMember("getScope", function(){var self=this;
316
- return this.stack.length - 1;
317
- });
308
+ OO.addMember("addListener", function(type, listener){
309
+ if ('function' !== typeof listener) {
310
+ throw new Error('addListener only takes instances of Function');
311
+ }
318
312
 
319
- OO.addMember("getLast", function(){var self=this;
320
- return this.stack[this.stack.length-1];
321
- });
313
+ if (!this._events) this._events = {};
322
314
 
323
- });
315
+ // To avoid recursion in the case that type == "newListeners"! Before
316
+ // adding it to the listeners, first emit "newListeners".
317
+ this.emit('newListener', type, typeof listener.listener === 'function' ?
318
+ listener.listener : listener);
324
319
 
325
- $m.Class.extend("JSMLElement", function(KLASS, OO){
326
- OO.addMember("SCOPE_REGEX", /^(\s*)(.*)$/);
327
- OO.addMember("SPLIT_REGEX", /^((?:\.|\#|\%)[^=\s\{]*)?(\{.*\})?(=|-)?(?:\s*)(.*)$/);
328
- OO.addMember("TOKEN_REGEX", /(\%|\#|\.)([\w][\w\-]*)/g);
329
- OO.addMember("JS_REGEX", /^(-|=)(.*)$/g);
330
- OO.addMember("SCOPE_OFFSET", 1);
331
- OO.addMember("SELF_CLOSING", { area: null, basefont: null, br: null, hr: null, input: null, img: null, link: null, meta: null });
320
+ if (!this._events[type]) {
321
+ // Optimize the case of one listener. Don't need the extra array object.
322
+ this._events[type] = listener;
323
+ } else if (isArray(this._events[type])) {
332
324
 
333
- OO.addMember("initialize", function(line){var self=this;
334
- this.children = [];
325
+ // If we've already got an array, just append.
326
+ this._events[type].push(listener);
335
327
 
336
- if (line == null) {
337
- this.scope = this.SCOPE_OFFSET;
338
- return;
339
- }
328
+ } else {
329
+ // Adding the second element, need to change to array.
330
+ this._events[type] = [this._events[type], listener];
340
331
 
341
- var spaceMatch = line.match(this.SCOPE_REGEX);
342
- this.scope = spaceMatch[1].length / 2 + this.SCOPE_OFFSET;
332
+ }
343
333
 
344
- this.classes = [];
345
- this.nodeID = null;
334
+ // Check for listener leak
335
+ if (isArray(this._events[type]) && !this._events[type].warned) {
336
+ var m;
337
+ if (this._maxListeners !== undefined) {
338
+ m = this._maxListeners;
339
+ } else {
340
+ m = defaultMaxListeners;
341
+ }
346
342
 
347
- this.parse(spaceMatch[2]);
348
- });
343
+ if (m && m > 0 && this._events[type].length > m) {
344
+ this._events[type].warned = true;
345
+ console.error('(node) warning: possible EventEmitter memory ' +
346
+ 'leak detected. %d listeners added. ' +
347
+ 'Use emitter.setMaxListeners() to increase limit.',
348
+ this._events[type].length);
349
+ console.trace();
350
+ }
351
+ }
349
352
 
350
- OO.addMember("push", function(child){var self=this;
351
- this.children.push(child);
353
+ return this;
352
354
  });
353
355
 
354
- OO.addMember("parse", function(line){var self=this;
355
- this.attributes;
356
- this.line = line;
357
- var self = this;
358
-
359
- var splitted = line.match(this.SPLIT_REGEX);
360
- var tokens = splitted[1];
361
- var attrs = splitted[2];
362
- var jsType = splitted[3];
363
- var content = splitted[4];
364
-
365
- if (tokens) {
366
- tokens.replace(this.TOKEN_REGEX, function(match, type, name) {
367
- switch(type) {
368
- case '%': self.nodeType = name; break;
369
- case '.': self.classes.push(name); break;
370
- case '#': self.nodeID = name; break;
371
- }
372
- return '';
373
- });
356
+ OO.addMember("once", function(type, listener){
357
+ if ('function' !== typeof listener) {
358
+ throw new Error('.once only takes instances of Function');
374
359
  }
375
360
 
376
- if (jsType == '=') {
377
- this.jsEQ = content;
378
- } else if (jsType == '-') {
379
- this.jsExec = content;
380
- } else {
381
- this.content = content;
382
- }
361
+ function g() {
362
+ self.removeListener(type, g);
363
+ listener.apply(this, arguments);
364
+ };
383
365
 
384
- if (attrs) {
385
- this.attributes = attrs;
386
- }
366
+ g.listener = listener;
367
+ this.on(type, g);
387
368
 
388
- if (!this.nodeType && (this.classes.length || this.nodeID)) {
389
- this.nodeType = 'div';
390
- }
369
+ return this;
370
+ });
391
371
 
392
- if (this.SELF_CLOSING.hasOwnProperty(this.nodeType) && this.children.length == 0) {
393
- this.selfClose = '/';
394
- } else {
395
- this.selfClose = '';
372
+ OO.addMember("removeListener", function(type, listener){
373
+ if ('function' !== typeof listener) {
374
+ throw new Error('removeListener only takes instances of Function');
396
375
  }
397
- });
398
376
 
399
- OO.addMember("flatten", function(){var self=this;
400
- var out = [];
377
+ // does not use listeners(), so no side effect of creating _events[type]
378
+ if (!this._events || !this._events[type]) return this;
401
379
 
402
- for (var i=0; i<this.children.length; i++) {
403
- var c = this.children[i];
404
- var arr = c.flatten();
405
- for (var j=0; j<arr.length; j++) {
406
- var item = arr[j];
407
- out.push(item);
408
- }
409
- }
380
+ var list = this._events[type];
410
381
 
411
- if (this.nodeType) {
412
- this.handleJsEQ(out);
413
- this.handleContent(out);
414
- out.unshift('out.push("<' + this.nodeType + '"+$m.ROOT.JSMLElement.parseAttributes(' + (this.attributes || "{}") + ', ' + JSON.stringify(this.classes || []) + ', ' + JSON.stringify(this.id || null) + ')+"' + this.selfClose + '>");\n');
415
- if (this.selfClose == '') {
416
- out.push('out.push(' + JSON.stringify("</"+(this.nodeType)+">") + ');\n');
382
+ if (isArray(list)) {
383
+ var position = -1;
384
+ for (var i = 0, length = list.length; i < length; i++) {
385
+ if (list[i] === listener ||
386
+ (list[i].listener && list[i].listener === listener))
387
+ {
388
+ position = i;
389
+ break;
390
+ }
417
391
  }
418
- } else {
419
- this.handleJsExec(out);
420
- this.handleJsEQ(out);
421
- this.handleContent(out);
422
- }
423
-
424
- return out;
425
- });
426
392
 
427
- OO.addMember("handleJsEQ", function(out){var self=this;
428
- if (this.jsEQ) {
429
- this.jsEQ = this.jsEQ.replace(/;\s*$/, '');
430
- out.unshift('out.push(' + this.jsEQ + ');\n');
393
+ if (position < 0) return this;
394
+ list.splice(position, 1);
395
+ if (list.length == 0)
396
+ delete this._events[type];
397
+ } else if (list === listener ||
398
+ (list.listener && list.listener === listener))
399
+ {
400
+ delete this._events[type];
431
401
  }
432
- });
433
402
 
434
- OO.addMember("handleContent", function(out){var self=this;
435
- if (this.content != null && this.content.length > 0) {
436
- out.unshift('out.push(' + JSON.stringify(this.content) + ');\n');
437
- }
403
+ return this;
438
404
  });
439
405
 
440
-
441
- OO.addMember("handleJsExec", function(out){var self=this;
442
- if (this.jsExec) {
443
- out.unshift(this.jsExec);
444
- if (this.jsExec.match(/\{\s*$/)) {
445
- out.push("}\n");
446
- }
406
+ OO.addMember("removeAllListeners", function(type){
407
+ if (arguments.length === 0) {
408
+ this._events = {};
409
+ return this;
447
410
  }
448
- });
449
411
 
450
- OO.addStaticMember("parseAttributes", function(hash, classes, id){var self=this;
451
- var out = [];
452
- classes = classes || [];
453
- if (hash['class']) classes.push(hash['class']);
454
- if (classes.length) hash['class'] = classes.join(" ");
412
+ // does not use listeners(), so no side effect of creating _events[type]
413
+ if (type && this._events && this._events[type]) this._events[type] = null;
414
+ return this;
415
+ });
455
416
 
456
- for (var k in hash) {
457
- if (hash.hasOwnProperty(k)) {
458
- out.push(k + '=' + JSON.stringify(hash[k]));
459
- }
417
+ OO.addMember("listeners", function(type){
418
+ if (!this._events) this._events = {};
419
+ if (!this._events[type]) this._events[type] = [];
420
+ if (!isArray(this._events[type])) {
421
+ this._events[type] = [this._events[type]];
460
422
  }
461
- return (out.length ? ' ' : '') + out.join(' ');
423
+ return this._events[type];
462
424
  });
463
425
  });
464
426
 
465
- $m.JSML = $m.ROOT.JSML;
466
- $m.JSMLElement = $m.ROOT.JSMLElement;
427
+ $m.EventEmitter = $m.ROOT.EventEmitter;
467
428
 
468
429
 
469
430
  var IDENT = "[\\$\\w]+";
470
431
  var TOKENS = [
471
432
  [ "SPACE", "\\s+" ],
433
+ [ "RETURN", "=>", 'ReturnParser' ],
472
434
 
473
435
  [ "STATIC", "static\\b" ],
474
436
  [ "MODULE", "module\\b", 'ModuleParser' ],
@@ -528,14 +490,14 @@ var EXTRA_REGEX_STRINGS = {
528
490
  var MAIN_REGEX = new RegExp("^" + REGEXES.join('|'));
529
491
 
530
492
  $m.Class.extend("Tokens", function(KLASS, OO){
531
- OO.addMember("initialize", function(str){var self=this;
493
+ OO.addMember("initialize", function(str){
532
494
  this.orig = str;
533
495
  this.str = str;
534
496
  this.iterator = 0;
535
497
  this.consumed = 0;
536
498
  });
537
499
 
538
- OO.addMember("peek", function(){var self=this;
500
+ OO.addMember("peek", function(){
539
501
  if (this._peek) return this._peek;
540
502
 
541
503
  var m = this.str.match(MAIN_REGEX);
@@ -546,7 +508,7 @@ $m.Class.extend("Tokens", function(KLASS, OO){
546
508
  }
547
509
  });
548
510
 
549
- OO.addStaticMember("regex", function(str){var self=this;
511
+ OO.addStaticMember("regex", function(str){
550
512
  var regexStr = str.replace(/\*\*/g, "\\s*").replace(/\s+/g, "\\s+").replace(/\>\</g, ">\\s*<").replace(/\<(\w+)\>/g, function($1,$2,$3){
551
513
  return "(" + (EXTRA_REGEX_STRINGS[$2] || TOKENS[TYPES[$2]][1]) + ")";
552
514
  });
@@ -554,17 +516,17 @@ $m.Class.extend("Tokens", function(KLASS, OO){
554
516
  return new RegExp("^" + regexStr);
555
517
  });
556
518
 
557
- OO.addMember("consume", function(n){var self=this;
519
+ OO.addMember("consume", function(n){
558
520
  this.str = this.str.substr(n, this.str.length-n);
559
521
  this._peek = null;
560
522
  this.consumed += n;
561
523
  });
562
524
 
563
- OO.addMember("length", function(){var self=this;
525
+ OO.addMember("length", function(){
564
526
  return this.str.length;
565
527
  });
566
528
 
567
- OO.addMember("lookback", function(n){var self=this;
529
+ OO.addMember("lookback", function(n){
568
530
  var starting = this.consumed - 1;
569
531
 
570
532
  //$m.outs(JSON.stringify(this.orig.substr(starting-10, 10)));
@@ -578,18 +540,18 @@ $m.Class.extend("Tokens", function(KLASS, OO){
578
540
  return this.orig.substr(starting-n+1, n);
579
541
  });
580
542
 
581
- OO.addMember("lookahead", function(n){var self=this;
543
+ OO.addMember("lookahead", function(n){
582
544
  var starting = this.consumed;
583
545
  while (this.orig.charAt(starting).match(/\s/)) starting++;
584
546
  return this.orig.substr(starting, n);
585
547
  });
586
548
 
587
549
 
588
- OO.addMember("any", function(){var self=this;
550
+ OO.addMember("any", function(){
589
551
  return this.str.length > 0;
590
552
  });
591
553
 
592
- OO.addMember("match", function(regex){var self=this;
554
+ OO.addMember("match", function(regex){
593
555
  return this.str.match(regex);
594
556
  });
595
557
  });
@@ -619,19 +581,19 @@ var OPTIONS = {};
619
581
  $m.Class.extend("RootParser", function(KLASS, OO){
620
582
  OO.addMember("handlers", {});
621
583
 
622
- OO.addMember("initialize", function(){var self=this;
584
+ OO.addMember("initialize", function(){
623
585
  this.out = [];
624
586
  this.finished = false;
625
587
  });
626
588
 
627
- OO.addMember("parse", function(tokens){var self=this;
589
+ OO.addMember("parse", function(tokens){
628
590
  var len = tokens.length();
629
591
  if (this.startParse(tokens) === false || this.parseTokens(tokens) === false || this.endParse(tokens) === false) return false
630
592
  return len != tokens.length();
631
593
  });
632
594
 
633
595
  // TODO: messy clean this process up
634
- OO.addMember("parseTokens", function(tokens){var self=this;
596
+ OO.addMember("parseTokens", function(tokens){
635
597
  var sanity = 100;
636
598
  var origLen = tokens.length();
637
599
 
@@ -667,15 +629,15 @@ $m.Class.extend("RootParser", function(KLASS, OO){
667
629
  }
668
630
  });
669
631
 
670
- OO.addMember("startParse", function(){var self=this; });
671
- OO.addMember("endParse", function(){var self=this; });
632
+ OO.addMember("startParse", function(){ });
633
+ OO.addMember("endParse", function(){ });
672
634
 
673
- OO.addMember("handleToken", function(token, tokens){var self=this;
635
+ OO.addMember("handleToken", function(token, tokens){
674
636
  this.out.push(token[1]);
675
637
  tokens.consume(token[1].length);
676
638
  });
677
639
 
678
- OO.addMember("toString", function(){var self=this;
640
+ OO.addMember("toString", function(){
679
641
  var ret = [];
680
642
  for (var i=0; i<this.out.length; i++) {
681
643
  var ele = this.out[i];
@@ -684,11 +646,11 @@ $m.Class.extend("RootParser", function(KLASS, OO){
684
646
  return ret.join("");
685
647
  });
686
648
 
687
- OO.addMember("toJSON", function(){var self=this;
649
+ OO.addMember("toJSON", function(){
688
650
  return JSON.stringify(this.toStruct());
689
651
  });
690
652
 
691
- OO.addMember("pp", function(space){var self=this;
653
+ OO.addMember("pp", function(space){
692
654
  space = space == null ? " " : space + " ";
693
655
 
694
656
  var ret = [ space + (this._TYPE || 'NODE') ];
@@ -719,7 +681,7 @@ $m.Class.extend("RootParser", function(KLASS, OO){
719
681
  return ret.join("\n");
720
682
  });
721
683
 
722
- OO.addMember("toStruct", function(){var self=this;
684
+ OO.addMember("toStruct", function(){
723
685
  var ret = [];
724
686
  for (var _i_0=0,ele=null,_list_0=this.out,_len_0=_list_0.length;(ele=_list_0[_i_0])||_i_0<_len_0;_i_0++){
725
687
  ret.push(ele.toStruct ? ele.toStruct() : ele);
@@ -728,11 +690,11 @@ $m.Class.extend("RootParser", function(KLASS, OO){
728
690
  });
729
691
 
730
692
  // intercepts parser class for special cases
731
- OO.addMember("getHandler", function(token){var self=this;
693
+ OO.addMember("getHandler", function(token){
732
694
  return null;
733
695
  });
734
696
 
735
- OO.addMember("chop", function(){var self=this;
697
+ OO.addMember("chop", function(){
736
698
  this.out.pop();
737
699
  });
738
700
  });
@@ -745,7 +707,7 @@ RootParser.extend("ClassParser", function(KLASS, OO){
745
707
  var EXTENDS = Tokens.regex("(?:<EXPORT>|<PUBLIC>|<CLASS>) <CLASSNAME><EXTENDS><CLASSNAME><LCURLY>");
746
708
 
747
709
 
748
- OO.addMember("parse", function(tokens){var self=this;
710
+ OO.addMember("parse", function(tokens){
749
711
  var m = tokens.match(REGEX) || tokens.match(EXTENDS);
750
712
  var name = m[4];
751
713
  var extending = m[6] || "$m.Class";
@@ -767,7 +729,7 @@ RootParser.extend("ModuleParser", function(KLASS, OO){
767
729
  var REGEX = Tokens.regex("<MODULE> <CLASSNAME><LCURLY>");
768
730
 
769
731
 
770
- OO.addMember("parse", function(tokens){var self=this;
732
+ OO.addMember("parse", function(tokens){
771
733
  var m = tokens.match(REGEX);
772
734
  if (!m) return false;
773
735
  var name = m[2];
@@ -783,12 +745,12 @@ RootParser.extend("ModuleParser", function(KLASS, OO){
783
745
  RootParser.extend("CurlyParser", function(KLASS, OO){
784
746
  OO.addMember("_TYPE", 'CurlyParser');
785
747
 
786
- OO.addMember("initialize", function(chop){var self=this;
748
+ OO.addMember("initialize", function(chop){
787
749
  this.chop = chop;
788
750
  this.$super();
789
751
  });
790
752
 
791
- OO.addMember("handleToken", function(token, tokens){var self=this;
753
+ OO.addMember("handleToken", function(token, tokens){
792
754
  if (this.curly === undefined) this.curly = 0;
793
755
  if (token[0] == TYPES.RCURLY) {
794
756
  this.curly--;
@@ -803,7 +765,7 @@ RootParser.extend("CurlyParser", function(KLASS, OO){
803
765
  }
804
766
  });
805
767
 
806
- OO.addMember("endParse", function(tokens){var self=this;
768
+ OO.addMember("endParse", function(tokens){
807
769
  if (this.chop) {
808
770
  this.out.pop();
809
771
  this.out.shift();
@@ -814,7 +776,7 @@ RootParser.extend("CurlyParser", function(KLASS, OO){
814
776
  var CurlyParser = $c.CurlyParser;
815
777
 
816
778
  CurlyParser.extend("ClassContentParser", function(KLASS, OO){
817
- OO.addMember("getHandler", function(token){var self=this;
779
+ OO.addMember("getHandler", function(token){
818
780
  switch(token[0]) {
819
781
  case TYPES.STATIC: return "StaticParser";
820
782
  case TYPES.VAR: return "MemberParser";
@@ -826,7 +788,7 @@ CurlyParser.extend("ClassContentParser", function(KLASS, OO){
826
788
  });
827
789
 
828
790
  RootParser.extend("LineParser", function(KLASS, OO){
829
- OO.addMember("handleToken", function(token, tokens){var self=this;
791
+ OO.addMember("handleToken", function(token, tokens){
830
792
  this.$super(token, tokens);
831
793
  if (token[0] == TYPES.SEMICOLON) {
832
794
  this.finished = true;
@@ -839,12 +801,12 @@ CurlyParser.extend("PrivateParser", function(KLASS, OO){
839
801
  var REGEX = Tokens.regex("<PRIVATE>\\s*");
840
802
 
841
803
 
842
- OO.addMember("startParse", function(tokens){var self=this;
804
+ OO.addMember("startParse", function(tokens){
843
805
  var m = tokens.match(REGEX);
844
806
  tokens.consume(m[0].length);
845
807
  });
846
808
 
847
- OO.addMember("endParse", function(tokens){var self=this;
809
+ OO.addMember("endParse", function(tokens){
848
810
  this.out.pop();
849
811
  this.out.shift();
850
812
  });
@@ -856,7 +818,7 @@ RootParser.extend("IStringParser", function(KLASS, OO){
856
818
  var BEGIN = Tokens.regex("<ISTRING_START>");
857
819
 
858
820
 
859
- OO.addMember("parse", function(tokens){var self=this;
821
+ OO.addMember("parse", function(tokens){
860
822
  var m = tokens.match(BEGIN);
861
823
  tokens.consume(m[0].length);
862
824
  this.out.push('"');
@@ -883,7 +845,7 @@ RootParser.extend("IStringParser", function(KLASS, OO){
883
845
  }
884
846
  });
885
847
 
886
- OO.addMember("parseMiddle", function(tokens){var self=this;
848
+ OO.addMember("parseMiddle", function(tokens){
887
849
  var parser = new $c.CurlyParser(true);
888
850
  parser.parse(tokens);
889
851
  this.out.push(parser);
@@ -896,7 +858,7 @@ RootParser.extend("StaticParser", function(KLASS, OO){
896
858
  var FUNCT_REGEX = Tokens.regex("(<STATIC>(\\s+))<FUNCTION>");
897
859
 
898
860
 
899
- OO.addMember("parseTokens", function(tokens){var self=this;
861
+ OO.addMember("parseTokens", function(tokens){
900
862
  var varMatch = tokens.match(VAR_REGEX);
901
863
  if (varMatch) {
902
864
  tokens.consume(varMatch[1].length);
@@ -923,7 +885,7 @@ RootParser.extend("MemberParser", function(KLASS, OO){
923
885
  var REGEX = Tokens.regex("var <IDENT>\\s*=\\s*?");
924
886
 
925
887
 
926
- OO.addMember("parse", function(tokens){var self=this;
888
+ OO.addMember("parse", function(tokens){
927
889
  var m = tokens.str.match(REGEX);
928
890
  this.name = m[1];
929
891
  tokens.consume(m[0].length);
@@ -946,7 +908,7 @@ RootParser.extend("IncludeParser", function(KLASS, OO){
946
908
  var REGEX = Tokens.regex("<INCLUDE> <CLASSNAME><SEMICOLON>");
947
909
 
948
910
 
949
- OO.addMember("parse", function(tokens){var self=this;
911
+ OO.addMember("parse", function(tokens){
950
912
  var m = tokens.match(REGEX);
951
913
  tokens.consume(m[0].length);
952
914
  this.out = [ 'OO.include(', m[2], ');' ];
@@ -958,7 +920,7 @@ RootParser.extend("HereDocParser", function(KLASS, OO){
958
920
  var REGEX = Tokens.regex("<HEREDOC>");
959
921
 
960
922
 
961
- OO.addMember("parse", function(tokens){var self=this;
923
+ OO.addMember("parse", function(tokens){
962
924
  var beginning = tokens.match(/^<<(\w+)(?::(\w+))?\s*([;\)])*\n/);
963
925
  var terminator = beginning[1];
964
926
 
@@ -991,7 +953,7 @@ RootParser.extend("MethodParser", function(KLASS, OO){
991
953
  var REGEX = Tokens.regex("<FUNCTION> <IDENT><ARGS><SPACE>");
992
954
 
993
955
 
994
- OO.addMember("parse", function(tokens){var self=this;
956
+ OO.addMember("parse", function(tokens){
995
957
  var m = tokens.str.match(REGEX);
996
958
  tokens.consume(m[0].length);
997
959
  var name = m[2];
@@ -1008,12 +970,19 @@ RootParser.extend("MethodParser", function(KLASS, OO){
1008
970
  });
1009
971
  });
1010
972
 
973
+ RootParser.extend("ReturnParser", function(KLASS, OO){
974
+ OO.addMember("parse", function(tokens){
975
+ tokens.consume(2);
976
+ this.out = [ 'return ' ];
977
+ });
978
+ });
979
+
1011
980
  RootParser.extend("ShorthandMapperParser", function(KLASS, OO){
1012
981
 
1013
982
  var ARGS_REGEX = Tokens.regex("<ARGS>\\s*");
1014
983
 
1015
984
 
1016
- OO.addMember("parse", function(tokens){var self=this;
985
+ OO.addMember("parse", function(tokens){
1017
986
  tokens.consume(1);
1018
987
  var nameMatch = tokens.match(/^([\w\$]+)\s*/);
1019
988
  tokens.consume(nameMatch[0].length);
@@ -1042,7 +1011,7 @@ RootParser.extend("ShorthandFunctionParser", function(KLASS, OO){
1042
1011
  var ARGS_REGEX = Tokens.regex("<ARGS>\\s*");
1043
1012
 
1044
1013
 
1045
- OO.addMember("parse", function(tokens){var self=this;
1014
+ OO.addMember("parse", function(tokens){
1046
1015
  tokens.consume(1);
1047
1016
  var argsMatch = tokens.match(ARGS_REGEX);
1048
1017
  var args = null;
@@ -1063,7 +1032,7 @@ RootParser.extend("ShorthandFunctionParser", function(KLASS, OO){
1063
1032
  });
1064
1033
 
1065
1034
  RootParser.extend("CommentParser", function(KLASS, OO){
1066
- OO.addMember("parse", function(tokens){var self=this;
1035
+ OO.addMember("parse", function(tokens){
1067
1036
  var m = tokens.match(/^\/\/.*?\n/);
1068
1037
  if (m) {
1069
1038
  tokens.consume(m[0].length);
@@ -1088,7 +1057,7 @@ RootParser.extend("RegexParser", function(KLASS, OO){
1088
1057
  var DIVIDE = /(\}|\)|\+\+|\-\-|[\w\$])$/;
1089
1058
 
1090
1059
 
1091
- OO.addMember("parseTokens", function(tokens){var self=this;
1060
+ OO.addMember("parseTokens", function(tokens){
1092
1061
  var back = tokens.lookback(2);
1093
1062
 
1094
1063
  if (back.match(DIVIDE)) {
@@ -1112,13 +1081,14 @@ RootParser.extend("RegexParser", function(KLASS, OO){
1112
1081
  });
1113
1082
 
1114
1083
  CurlyParser.extend("ReturnableCurlyParser", function(KLASS, OO){
1115
- OO.addMember("toString", function(){var self=this;
1084
+ OO.addMember("toString", function(){
1116
1085
  var ret = this.$super();
1117
1086
  return ret.replace(/^{(\s*)(return)?/, '{$1return ');
1118
1087
  });
1119
1088
  });
1120
1089
 
1121
1090
 
1091
+
1122
1092
  CurlyParser.extend("ForeachParser", function(KLASS, OO){
1123
1093
  OO.addMember("_TYPE", 'Foreach');
1124
1094
 
@@ -1126,7 +1096,7 @@ CurlyParser.extend("ForeachParser", function(KLASS, OO){
1126
1096
  var REGEX = Tokens.regex("<FOREACH><LBRACE><VAR> <IDENT>(?:**:**<IDENT>)? in (.*?)**<RBRACE>**{");
1127
1097
 
1128
1098
 
1129
- OO.addMember("startParse", function(tokens){var self=this;
1099
+ OO.addMember("startParse", function(tokens){
1130
1100
  var m = tokens.match(REGEX);
1131
1101
  namespace = tokens.iterator++;
1132
1102
 
@@ -1143,7 +1113,7 @@ CurlyParser.extend("ForeachParser", function(KLASS, OO){
1143
1113
  this.out = [ "for (var ", declare, ";", bool, ';', this.iterator + "++)" ];
1144
1114
  });
1145
1115
 
1146
- OO.addMember("endParse", function(tokens){var self=this;
1116
+ OO.addMember("endParse", function(tokens){
1147
1117
  tokens.iterator--;
1148
1118
  });
1149
1119
 
@@ -1160,14 +1130,14 @@ $m.Class.extend("CLI", function(KLASS, OO){
1160
1130
  };
1161
1131
 
1162
1132
 
1163
- OO.addMember("run", function(args){var self=this;
1133
+ OO.addMember("run", function(args){
1164
1134
  var opts = this.parseOpts(args);
1165
1135
  var options = opts[0];
1166
1136
  var command = opts[1];
1167
1137
  var files = opts[2];
1168
1138
  });
1169
1139
 
1170
- OO.addMember("parseOpts", function(args){var self=this;
1140
+ OO.addMember("parseOpts", function(args){
1171
1141
  var files = [];
1172
1142
  var options = {};
1173
1143
  var command = null;
@@ -1,3 +1,3 @@
1
1
  module Mochiscript
2
- VERSION = "0.4.6.pre4"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -187,24 +187,6 @@ window.$m = $m;
187
187
  events[type].push(listener);
188
188
  }
189
189
 
190
- $m.EventEmitter = $m.Module.extend({
191
- emit: function () {
192
- // TODO optimize
193
- var type = arguments[0];
194
- var events = this.__$events || (this.__$events = {});
195
- var handlers = events[type];
196
-
197
- if (!handlers) return false;
198
-
199
- var args = [];
200
- for (var i=1,len=arguments.length; i<len; i++) args[i-1] = arguments[i];
201
- for (var i=0,len=handlers.length; i<len; i++) handlers[i].apply(this, args);
202
- },
203
-
204
- addListener: addListener,
205
- on: addListener
206
- });
207
-
208
190
  $m.out = function () {
209
191
  for (var i=0,arg=null,_list_0=arguments,_len_0=_list_0.length;(arg=_list_0[i])||i<_len_0;i++){
210
192
  $m.ADAPTER.out(arg);
@@ -224,211 +206,190 @@ window.$m = $m;
224
206
  })(undefined, $m);
225
207
 
226
208
 
227
- $m.Class.extend("JSML", function(KLASS, OO){
228
- OO.addStaticMember("process", function(txt){var self=this;
229
- return new $m.JSML(txt);
230
- });
231
-
232
- OO.addMember("initialize", function(txt){var self=this;
233
- var lines = txt.split(/\n/);
234
- this.root = new $c.JSMLElement();
235
- this.stack = [ this.root ];
236
-
237
- for (var i=0; i<lines.length; i++) {
238
- var l = lines[i];
239
- if (l.match(/^\s*$/)) continue;
240
- this.processLine(l);
209
+ $m.Class.extend("EventEmitter", function(KLASS, OO){
210
+
211
+ this._maxListeners = 10;
212
+ var isArray = Array.isArray;
213
+
214
+
215
+ OO.addMember("emit", function(){
216
+ var type = arguments[0];
217
+ // If there is no 'error' event listener then throw.
218
+ if (type === 'error') {
219
+ if (!this._events || !this._events.error ||
220
+ (isArray(this._events.error) && !this._events.error.length))
221
+ {
222
+ if (arguments[1] instanceof Error) {
223
+ throw arguments[1]; // Unhandled 'error' event
224
+ } else {
225
+ throw new Error("Uncaught, unspecified 'error' event.");
226
+ }
227
+ return false;
228
+ }
241
229
  }
242
230
 
243
- var toEval = 'function stuff() { var out = [];\n' + this.flatten().join('') + '\n return out.join("");\n}';
244
- eval(toEval);
245
-
246
- this.result = function(bound) {
247
- bound = bound || {};
248
- return stuff.call(bound);
249
- };
250
- });
231
+ if (!this._events) return false;
232
+ var handler = this._events[type];
233
+ if (!handler) return false;
234
+
235
+ if (typeof handler == 'function') {
236
+ switch (arguments.length) {
237
+ // fast cases
238
+ case 1:
239
+ handler.call(this);
240
+ break;
241
+ case 2:
242
+ handler.call(this, arguments[1]);
243
+ break;
244
+ case 3:
245
+ handler.call(this, arguments[1], arguments[2]);
246
+ break;
247
+ // slower
248
+ default:
249
+ var l = arguments.length;
250
+ var args = new Array(l - 1);
251
+ for (var i = 1; i < l; i++) args[i - 1] = arguments[i];
252
+ handler.apply(this, args);
253
+ }
254
+ return true;
251
255
 
252
- OO.addMember("flatten", function(){var self=this;
253
- return this.root.flatten();
254
- });
256
+ } else if (isArray(handler)) {
257
+ var l = arguments.length;
258
+ var args = new Array(l - 1);
259
+ for (var i = 1; i < l; i++) args[i - 1] = arguments[i];
255
260
 
256
- OO.addMember("processLine", function(line){var self=this;
257
- if (line.match(/^\s*$/)) return;
258
-
259
- var ele = new $m.JSMLElement(line);
260
- var scope = this.getScope();
261
-
262
- if (ele.scope == scope) {
263
- this.stack.pop();
264
- this.getLast().push(ele);
265
- this.stack.push(ele);
266
- } else if (ele.scope > scope) {
267
- this.getLast().push(ele);
268
- this.stack.push(ele);
269
- } else if (ele.scope < scope) {
270
- var diff = scope - ele.scope + 1;
271
- while(diff-- > 0) {
272
- this.stack.pop();
261
+ var listeners = handler.slice();
262
+ for (var i = 0, l = listeners.length; i < l; i++) {
263
+ listeners[i].apply(this, args);
273
264
  }
274
- this.getLast().push(ele);
275
- this.stack.push(ele);
265
+ return true;
266
+
267
+ } else {
268
+ return false;
276
269
  }
277
- });
278
270
 
271
+ });
279
272
 
280
- OO.addMember("getScope", function(){var self=this;
281
- return this.stack.length - 1;
282
- });
273
+ OO.addMember("addListener", function(type, listener){
274
+ if ('function' !== typeof listener) {
275
+ throw new Error('addListener only takes instances of Function');
276
+ }
283
277
 
284
- OO.addMember("getLast", function(){var self=this;
285
- return this.stack[this.stack.length-1];
286
- });
278
+ if (!this._events) this._events = {};
287
279
 
288
- });
280
+ // To avoid recursion in the case that type == "newListeners"! Before
281
+ // adding it to the listeners, first emit "newListeners".
282
+ this.emit('newListener', type, typeof listener.listener === 'function' ?
283
+ listener.listener : listener);
289
284
 
290
- $m.Class.extend("JSMLElement", function(KLASS, OO){
291
- OO.addMember("SCOPE_REGEX", /^(\s*)(.*)$/);
292
- OO.addMember("SPLIT_REGEX", /^((?:\.|\#|\%)[^=\s\{]*)?(\{.*\})?(=|-)?(?:\s*)(.*)$/);
293
- OO.addMember("TOKEN_REGEX", /(\%|\#|\.)([\w][\w\-]*)/g);
294
- OO.addMember("JS_REGEX", /^(-|=)(.*)$/g);
295
- OO.addMember("SCOPE_OFFSET", 1);
296
- OO.addMember("SELF_CLOSING", { area: null, basefont: null, br: null, hr: null, input: null, img: null, link: null, meta: null });
285
+ if (!this._events[type]) {
286
+ // Optimize the case of one listener. Don't need the extra array object.
287
+ this._events[type] = listener;
288
+ } else if (isArray(this._events[type])) {
297
289
 
298
- OO.addMember("initialize", function(line){var self=this;
299
- this.children = [];
290
+ // If we've already got an array, just append.
291
+ this._events[type].push(listener);
300
292
 
301
- if (line == null) {
302
- this.scope = this.SCOPE_OFFSET;
303
- return;
304
- }
293
+ } else {
294
+ // Adding the second element, need to change to array.
295
+ this._events[type] = [this._events[type], listener];
305
296
 
306
- var spaceMatch = line.match(this.SCOPE_REGEX);
307
- this.scope = spaceMatch[1].length / 2 + this.SCOPE_OFFSET;
297
+ }
308
298
 
309
- this.classes = [];
310
- this.nodeID = null;
299
+ // Check for listener leak
300
+ if (isArray(this._events[type]) && !this._events[type].warned) {
301
+ var m;
302
+ if (this._maxListeners !== undefined) {
303
+ m = this._maxListeners;
304
+ } else {
305
+ m = defaultMaxListeners;
306
+ }
311
307
 
312
- this.parse(spaceMatch[2]);
313
- });
308
+ if (m && m > 0 && this._events[type].length > m) {
309
+ this._events[type].warned = true;
310
+ console.error('(node) warning: possible EventEmitter memory ' +
311
+ 'leak detected. %d listeners added. ' +
312
+ 'Use emitter.setMaxListeners() to increase limit.',
313
+ this._events[type].length);
314
+ console.trace();
315
+ }
316
+ }
314
317
 
315
- OO.addMember("push", function(child){var self=this;
316
- this.children.push(child);
318
+ return this;
317
319
  });
318
320
 
319
- OO.addMember("parse", function(line){var self=this;
320
- this.attributes;
321
- this.line = line;
322
- var self = this;
323
-
324
- var splitted = line.match(this.SPLIT_REGEX);
325
- var tokens = splitted[1];
326
- var attrs = splitted[2];
327
- var jsType = splitted[3];
328
- var content = splitted[4];
329
-
330
- if (tokens) {
331
- tokens.replace(this.TOKEN_REGEX, function(match, type, name) {
332
- switch(type) {
333
- case '%': self.nodeType = name; break;
334
- case '.': self.classes.push(name); break;
335
- case '#': self.nodeID = name; break;
336
- }
337
- return '';
338
- });
321
+ OO.addMember("once", function(type, listener){
322
+ if ('function' !== typeof listener) {
323
+ throw new Error('.once only takes instances of Function');
339
324
  }
340
325
 
341
- if (jsType == '=') {
342
- this.jsEQ = content;
343
- } else if (jsType == '-') {
344
- this.jsExec = content;
345
- } else {
346
- this.content = content;
347
- }
326
+ function g() {
327
+ self.removeListener(type, g);
328
+ listener.apply(this, arguments);
329
+ };
348
330
 
349
- if (attrs) {
350
- this.attributes = attrs;
351
- }
331
+ g.listener = listener;
332
+ this.on(type, g);
352
333
 
353
- if (!this.nodeType && (this.classes.length || this.nodeID)) {
354
- this.nodeType = 'div';
355
- }
334
+ return this;
335
+ });
356
336
 
357
- if (this.SELF_CLOSING.hasOwnProperty(this.nodeType) && this.children.length == 0) {
358
- this.selfClose = '/';
359
- } else {
360
- this.selfClose = '';
337
+ OO.addMember("removeListener", function(type, listener){
338
+ if ('function' !== typeof listener) {
339
+ throw new Error('removeListener only takes instances of Function');
361
340
  }
362
- });
363
341
 
364
- OO.addMember("flatten", function(){var self=this;
365
- var out = [];
342
+ // does not use listeners(), so no side effect of creating _events[type]
343
+ if (!this._events || !this._events[type]) return this;
366
344
 
367
- for (var i=0; i<this.children.length; i++) {
368
- var c = this.children[i];
369
- var arr = c.flatten();
370
- for (var j=0; j<arr.length; j++) {
371
- var item = arr[j];
372
- out.push(item);
373
- }
374
- }
345
+ var list = this._events[type];
375
346
 
376
- if (this.nodeType) {
377
- this.handleJsEQ(out);
378
- this.handleContent(out);
379
- out.unshift('out.push("<' + this.nodeType + '"+$m.ROOT.JSMLElement.parseAttributes(' + (this.attributes || "{}") + ', ' + JSON.stringify(this.classes || []) + ', ' + JSON.stringify(this.id || null) + ')+"' + this.selfClose + '>");\n');
380
- if (this.selfClose == '') {
381
- out.push('out.push(' + JSON.stringify("</"+(this.nodeType)+">") + ');\n');
347
+ if (isArray(list)) {
348
+ var position = -1;
349
+ for (var i = 0, length = list.length; i < length; i++) {
350
+ if (list[i] === listener ||
351
+ (list[i].listener && list[i].listener === listener))
352
+ {
353
+ position = i;
354
+ break;
355
+ }
382
356
  }
383
- } else {
384
- this.handleJsExec(out);
385
- this.handleJsEQ(out);
386
- this.handleContent(out);
387
- }
388
357
 
389
- return out;
390
- });
391
-
392
- OO.addMember("handleJsEQ", function(out){var self=this;
393
- if (this.jsEQ) {
394
- this.jsEQ = this.jsEQ.replace(/;\s*$/, '');
395
- out.unshift('out.push(' + this.jsEQ + ');\n');
358
+ if (position < 0) return this;
359
+ list.splice(position, 1);
360
+ if (list.length == 0)
361
+ delete this._events[type];
362
+ } else if (list === listener ||
363
+ (list.listener && list.listener === listener))
364
+ {
365
+ delete this._events[type];
396
366
  }
397
- });
398
367
 
399
- OO.addMember("handleContent", function(out){var self=this;
400
- if (this.content != null && this.content.length > 0) {
401
- out.unshift('out.push(' + JSON.stringify(this.content) + ');\n');
402
- }
368
+ return this;
403
369
  });
404
370
 
405
-
406
- OO.addMember("handleJsExec", function(out){var self=this;
407
- if (this.jsExec) {
408
- out.unshift(this.jsExec);
409
- if (this.jsExec.match(/\{\s*$/)) {
410
- out.push("}\n");
411
- }
371
+ OO.addMember("removeAllListeners", function(type){
372
+ if (arguments.length === 0) {
373
+ this._events = {};
374
+ return this;
412
375
  }
413
- });
414
376
 
415
- OO.addStaticMember("parseAttributes", function(hash, classes, id){var self=this;
416
- var out = [];
417
- classes = classes || [];
418
- if (hash['class']) classes.push(hash['class']);
419
- if (classes.length) hash['class'] = classes.join(" ");
377
+ // does not use listeners(), so no side effect of creating _events[type]
378
+ if (type && this._events && this._events[type]) this._events[type] = null;
379
+ return this;
380
+ });
420
381
 
421
- for (var k in hash) {
422
- if (hash.hasOwnProperty(k)) {
423
- out.push(k + '=' + JSON.stringify(hash[k]));
424
- }
382
+ OO.addMember("listeners", function(type){
383
+ if (!this._events) this._events = {};
384
+ if (!this._events[type]) this._events[type] = [];
385
+ if (!isArray(this._events[type])) {
386
+ this._events[type] = [this._events[type]];
425
387
  }
426
- return (out.length ? ' ' : '') + out.join(' ');
388
+ return this._events[type];
427
389
  });
428
390
  });
429
391
 
430
- $m.JSML = $m.ROOT.JSML;
431
- $m.JSMLElement = $m.ROOT.JSMLElement;
392
+ $m.EventEmitter = $m.ROOT.EventEmitter;
432
393
 
433
394
 
434
395
  })(window);
metadata CHANGED
@@ -1,48 +1,51 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: mochiscript
3
- version: !ruby/object:Gem::Version
4
- version: 0.4.6.pre4
5
- prerelease: 6
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.5.0
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Jeff Su
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-03 00:00:00.000000000Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
12
+
13
+ date: 2012-03-23 00:00:00 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
15
16
  name: therubyracer
16
- requirement: &70238662876240 !ruby/object:Gem::Requirement
17
+ prerelease: false
18
+ requirement: &id001 !ruby/object:Gem::Requirement
17
19
  none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
22
24
  type: :runtime
23
- prerelease: false
24
- version_requirements: *70238662876240
25
- - !ruby/object:Gem::Dependency
25
+ version_requirements: *id001
26
+ - !ruby/object:Gem::Dependency
26
27
  name: json
27
- requirement: &70238662874820 !ruby/object:Gem::Requirement
28
+ prerelease: false
29
+ requirement: &id002 !ruby/object:Gem::Requirement
28
30
  none: false
29
- requirements:
30
- - - ! '>='
31
- - !ruby/object:Gem::Version
32
- version: '0'
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: "0"
33
35
  type: :runtime
34
- prerelease: false
35
- version_requirements: *70238662874820
36
+ version_requirements: *id002
36
37
  description: Javascript Dessert
37
- email:
38
+ email:
38
39
  - me@jeffsu.com
39
- executables:
40
+ executables:
40
41
  - ms-bootstrap
41
42
  - ms-parse
42
43
  - ms-run
43
44
  extensions: []
45
+
44
46
  extra_rdoc_files: []
45
- files:
47
+
48
+ files:
46
49
  - .gitignore
47
50
  - Gemfile
48
51
  - Rakefile
@@ -57,29 +60,32 @@ files:
57
60
  - lib/mochiscript/version.rb
58
61
  - mochiscript.gemspec
59
62
  - vendor/assets/javascripts/mochiscript.js
60
- homepage: ''
63
+ homepage: ""
61
64
  licenses: []
65
+
62
66
  post_install_message:
63
67
  rdoc_options: []
64
- require_paths:
68
+
69
+ require_paths:
65
70
  - lib
66
- required_ruby_version: !ruby/object:Gem::Requirement
71
+ required_ruby_version: !ruby/object:Gem::Requirement
67
72
  none: false
68
- requirements:
69
- - - ! '>='
70
- - !ruby/object:Gem::Version
71
- version: '0'
72
- required_rubygems_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: "0"
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
73
78
  none: false
74
- requirements:
75
- - - ! '>'
76
- - !ruby/object:Gem::Version
77
- version: 1.3.1
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: "0"
78
83
  requirements: []
84
+
79
85
  rubyforge_project: mochiscript
80
- rubygems_version: 1.8.10
86
+ rubygems_version: 1.8.11
81
87
  signing_key:
82
88
  specification_version: 3
83
89
  summary: Javascript Dessert
84
90
  test_files: []
85
- has_rdoc:
91
+