js2 0.3.8 → 0.3.9

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.
Files changed (4) hide show
  1. data/CHANGELOG +3 -0
  2. data/lib/js2/browser.js +1 -1
  3. data/lib/js2/js2.js +81 -4
  4. metadata +7 -17
data/CHANGELOG CHANGED
@@ -1,3 +1,6 @@
1
+ 0.3.9
2
+ * fixed regex/divide issue
3
+
1
4
  0.3.8
2
5
  * fied "render"
3
6
  * fixed comment block bug
data/lib/js2/browser.js CHANGED
@@ -19,7 +19,7 @@ function mainFunction (arg) {
19
19
 
20
20
  var JS2 = root.JS2 = mainFunction;
21
21
  var js2 = root.js2 = JS2;
22
- js2.VERSION = "0.3.8";
22
+ js2.VERSION = "0.3.9";
23
23
 
24
24
  JS2.ROOT = JS2;
25
25
 
data/lib/js2/js2.js CHANGED
@@ -14,7 +14,7 @@ function mainFunction (arg) {
14
14
 
15
15
  var JS2 = root.JS2 = mainFunction;
16
16
  var js2 = root.js2 = JS2;
17
- js2.VERSION = "0.3.8";
17
+ js2.VERSION = "0.3.9";
18
18
 
19
19
  JS2.ROOT = JS2;
20
20
 
@@ -236,15 +236,23 @@ function mainFunction (arg) {
236
236
  var m = this.tokens.match(PRIMARY_REGEX)
237
237
  if (!m) return false;
238
238
 
239
+ if (m[0] == '/' && this.tokens.divideCompatible()) {
240
+ this.tokens.push([ '/', IDS.OPERATOR ]); // operator
241
+ this.tokens.chomp(1);
242
+ return true;
243
+ }
244
+
239
245
  for (var i=0,tokenDef;tokenDef=this.TOKENS[i];i++) {
240
246
  if (m[0] == m[i+2]) {
241
247
  var klass = JS2.Lexer[tokenDef[0]];
248
+
242
249
  if (klass) {
243
250
  var lexer = new klass(this.tokens);
244
251
  if (lexer.consume()) {
245
252
  return true;
246
253
  }
247
254
  } else {
255
+ var type = tokenDef[0];
248
256
  this.tokens.push([ m[0], i ]);
249
257
  this.tokens.chomp(m[0]);
250
258
  return true;
@@ -464,6 +472,20 @@ function mainFunction (arg) {
464
472
  this.before = [];
465
473
  },
466
474
 
475
+ divideCompatible: function() {
476
+ var last = this.lastNonSpace();
477
+ return (last[0].match(/(\}|\))/) || last[1] == IDS.IDENT);
478
+ },
479
+
480
+ lastNonSpace: function() {
481
+ var idx = this.tokens.length - 1;
482
+ var token = this.tokens[idx];
483
+ while (token && token[1] == IDS.SPACE) {
484
+ token = this.tokens[--idx];
485
+ }
486
+ return token;
487
+ },
488
+
467
489
  toArray: function() {
468
490
  return this.tokens;
469
491
  },
@@ -880,9 +902,9 @@ function mainFunction (arg) {
880
902
  return "(var " + iteratorName + "=0," +
881
903
  collectionName + "=" + collection + "," +
882
904
  l + "=" + collectionName + ".length," +
883
- holder + ";" +
884
- holder + '=' + collectionName + '[' + iteratorName + ']||' +
885
- iteratorName + '<' + l + ';' +
905
+ holder + ";(" +
906
+ holder + '=' + collectionName + '[' + iteratorName + '])||(' +
907
+ iteratorName + '<' + l + ');' +
886
908
  iteratorName + '++)';
887
909
  }
888
910
  });
@@ -1451,6 +1473,61 @@ JS2.Class.extend('RingoDecorator', function(KLASS, OO){
1451
1473
  JS2.DECORATOR = JS2.DECORATOR || new JS2.BrowserDecorator();
1452
1474
 
1453
1475
 
1476
+ JS2.Class.extend('JSML', function(KLASS, OO){
1477
+ OO.addStaticMember("process",function (txt) {
1478
+ return new KLASS(txt);
1479
+ });
1480
+
1481
+ OO.addMember("initialize",function (txt) {
1482
+ var lines = txt.split(/\n/);
1483
+ this.root = new JS2.JSMLElement('');
1484
+ this.current = this.root;
1485
+ this.stack = [ this.root ];
1486
+
1487
+ for(var _i4=0,_c4=lines,_l4=_c4.length,l;l=_c4[_i4]||_i4<_l4;_i4++){
1488
+ if (l.match(/^\s*$/)) continue;
1489
+ this.processLine(l);
1490
+ }
1491
+ });
1492
+
1493
+ OO.addMember("processLine",function (line) {
1494
+ console.log(line);
1495
+ var ele = new JS2.JSMLElement(line);
1496
+ var scope = this.getScope();
1497
+
1498
+ if (ele.scope == scope) {
1499
+ console.log('same');
1500
+ this.stack.pop();
1501
+ this.getLast().push(ele);
1502
+ } else if (ele.scope == scope+1) {
1503
+ console.log('greater');
1504
+ this.getLast().push(ele);
1505
+ this.stack.push(ele);
1506
+ } else if (ele.scope < scope) {
1507
+ console.log('less');
1508
+ var diff = ele.scope - scope;
1509
+ while(diff-- != 0) {
1510
+ this.stack.pop();
1511
+ }
1512
+ this.getLast().push(ele);
1513
+ }
1514
+ });
1515
+
1516
+
1517
+ OO.addMember("getScope",function () {
1518
+ return this.stack.length;
1519
+ });
1520
+
1521
+ OO.addMember("getLast",function () {
1522
+ return this.stack[this.stack.length-1];
1523
+ });
1524
+
1525
+ });
1526
+
1527
+ JS2.Class.extend('JSMLElement', function(KLASS, OO){
1528
+ });
1529
+
1530
+
1454
1531
 
1455
1532
  JS2.fs = new JS2.FileSystem(JS2_RUBY_FILE_ADAPTER);
1456
1533
  js2.DECORATOR = new JS2.BrowserDecorator();
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: js2
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 3
8
- - 8
9
- version: 0.3.8
4
+ prerelease:
5
+ version: 0.3.9
10
6
  platform: ruby
11
7
  authors:
12
8
  - Jeff Su
@@ -14,7 +10,7 @@ autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2011-03-27 00:00:00 -07:00
13
+ date: 2011-03-30 00:00:00 +08:00
18
14
  default_executable:
19
15
  dependencies:
20
16
  - !ruby/object:Gem::Dependency
@@ -25,8 +21,6 @@ dependencies:
25
21
  requirements:
26
22
  - - ">="
27
23
  - !ruby/object:Gem::Version
28
- segments:
29
- - 0
30
24
  version: "0"
31
25
  type: :runtime
32
26
  version_requirements: *id001
@@ -42,11 +36,11 @@ extra_rdoc_files: []
42
36
  files:
43
37
  - bin/js2
44
38
  - bin/js2-ruby
45
- - lib/js2/command.rb
39
+ - lib/js2.rb
46
40
  - lib/js2/context.rb
47
- - lib/js2/fs.rb
48
41
  - lib/js2/rack.rb
49
- - lib/js2.rb
42
+ - lib/js2/command.rb
43
+ - lib/js2/fs.rb
50
44
  - lib/js2/browser.js
51
45
  - lib/js2/js2.js
52
46
  - CHANGELOG
@@ -64,21 +58,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
64
58
  requirements:
65
59
  - - ">="
66
60
  - !ruby/object:Gem::Version
67
- segments:
68
- - 0
69
61
  version: "0"
70
62
  required_rubygems_version: !ruby/object:Gem::Requirement
71
63
  none: false
72
64
  requirements:
73
65
  - - ">="
74
66
  - !ruby/object:Gem::Version
75
- segments:
76
- - 0
77
67
  version: "0"
78
68
  requirements: []
79
69
 
80
70
  rubyforge_project:
81
- rubygems_version: 1.3.7
71
+ rubygems_version: 1.5.2
82
72
  signing_key:
83
73
  specification_version: 3
84
74
  summary: Javascript Syntactic Sugar