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.
- data/CHANGELOG +3 -0
- data/lib/js2/browser.js +1 -1
- data/lib/js2/js2.js +81 -4
- metadata +7 -17
data/CHANGELOG
CHANGED
data/lib/js2/browser.js
CHANGED
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.
|
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:
|
5
|
-
|
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-
|
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
|
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.
|
71
|
+
rubygems_version: 1.5.2
|
82
72
|
signing_key:
|
83
73
|
specification_version: 3
|
84
74
|
summary: Javascript Syntactic Sugar
|