mochiscript 0.4.6.pre4 → 0.5.0

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.
@@ -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
+