ember-rails-lite 0.8.0 → 0.9.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +2 -2
- data/lib/ember/handlebars/template.rb +51 -9
- data/lib/ember/handlebars/version.rb +1 -3
- data/lib/ember/rails/engine.rb +9 -6
- data/lib/ember/rails/version.rb +1 -1
- data/lib/ember/version.rb +1 -3
- data/lib/ember_rails.rb +6 -0
- data/lib/generators/ember/bootstrap_generator.rb +1 -1
- data/lib/generators/ember/route_generator.rb +16 -0
- data/lib/generators/ember/view_generator.rb +1 -0
- data/lib/generators/templates/app.js +1 -2
- data/lib/generators/templates/route.js +3 -0
- data/lib/generators/templates/router.js +1 -15
- data/lib/generators/templates/store.js +1 -3
- data/lib/generators/templates/view.js +0 -1
- data/vendor/ember/development/ember-data.js +5485 -1828
- data/vendor/ember/development/ember.js +12500 -9614
- data/vendor/ember/development/handlebars-runtime.js +68 -26
- data/vendor/ember/development/handlebars.js +438 -341
- data/vendor/ember/production/ember-data.js +5465 -1813
- data/vendor/ember/production/ember.js +20052 -17240
- data/vendor/ember/production/handlebars-runtime.js +270 -1
- data/vendor/ember/production/handlebars.js +1991 -1
- metadata +5 -9
- data/lib/ember/filters/haml.rb +0 -11
- data/lib/ember/filters/slim.rb +0 -5
- data/lib/ember/handlebars/assets/ember-precompiler.js +0 -28
- data/lib/ember/handlebars/source.rb +0 -54
- data/vendor/ember/spade/ember-data.js +0 -1
- data/vendor/ember/spade/ember.js +0 -1
@@ -3,9 +3,9 @@
|
|
3
3
|
/*jshint eqnull:true*/
|
4
4
|
this.Handlebars = {};
|
5
5
|
|
6
|
-
(function() {
|
6
|
+
(function(Handlebars) {
|
7
7
|
|
8
|
-
Handlebars.VERSION = "1.0.rc.
|
8
|
+
Handlebars.VERSION = "1.0.rc.2";
|
9
9
|
|
10
10
|
Handlebars.helpers = {};
|
11
11
|
Handlebars.partials = {};
|
@@ -44,29 +44,71 @@ Handlebars.registerHelper('blockHelperMissing', function(context, options) {
|
|
44
44
|
return inverse(this);
|
45
45
|
} else if(type === "[object Array]") {
|
46
46
|
if(context.length > 0) {
|
47
|
-
|
48
|
-
ret = ret + fn(context[i]);
|
49
|
-
}
|
47
|
+
return Handlebars.helpers.each(context, options);
|
50
48
|
} else {
|
51
|
-
|
49
|
+
return inverse(this);
|
52
50
|
}
|
53
|
-
return ret;
|
54
51
|
} else {
|
55
52
|
return fn(context);
|
56
53
|
}
|
57
54
|
});
|
58
55
|
|
56
|
+
Handlebars.K = function() {};
|
57
|
+
|
58
|
+
Handlebars.createFrame = Object.create || function(object) {
|
59
|
+
Handlebars.K.prototype = object;
|
60
|
+
var obj = new Handlebars.K();
|
61
|
+
Handlebars.K.prototype = null;
|
62
|
+
return obj;
|
63
|
+
};
|
64
|
+
|
65
|
+
Handlebars.logger = {
|
66
|
+
DEBUG: 0, INFO: 1, WARN: 2, ERROR: 3, level: 3,
|
67
|
+
|
68
|
+
methodMap: {0: 'debug', 1: 'info', 2: 'warn', 3: 'error'},
|
69
|
+
|
70
|
+
// can be overridden in the host environment
|
71
|
+
log: function(level, obj) {
|
72
|
+
if (Handlebars.logger.level <= level) {
|
73
|
+
var method = Handlebars.logger.methodMap[level];
|
74
|
+
if (typeof console !== 'undefined' && console[method]) {
|
75
|
+
console[method].call(console, obj);
|
76
|
+
}
|
77
|
+
}
|
78
|
+
}
|
79
|
+
};
|
80
|
+
|
81
|
+
Handlebars.log = function(level, obj) { Handlebars.logger.log(level, obj); };
|
82
|
+
|
59
83
|
Handlebars.registerHelper('each', function(context, options) {
|
60
84
|
var fn = options.fn, inverse = options.inverse;
|
61
|
-
var ret = "";
|
85
|
+
var i = 0, ret = "", data;
|
62
86
|
|
63
|
-
if(
|
64
|
-
|
65
|
-
|
87
|
+
if (options.data) {
|
88
|
+
data = Handlebars.createFrame(options.data);
|
89
|
+
}
|
90
|
+
|
91
|
+
if(context && typeof context === 'object') {
|
92
|
+
if(context instanceof Array){
|
93
|
+
for(var j = context.length; i<j; i++) {
|
94
|
+
if (data) { data.index = i; }
|
95
|
+
ret = ret + fn(context[i], { data: data });
|
96
|
+
}
|
97
|
+
} else {
|
98
|
+
for(var key in context) {
|
99
|
+
if(context.hasOwnProperty(key)) {
|
100
|
+
if(data) { data.key = key; }
|
101
|
+
ret = ret + fn(context[key], {data: data});
|
102
|
+
i++;
|
103
|
+
}
|
104
|
+
}
|
66
105
|
}
|
67
|
-
}
|
106
|
+
}
|
107
|
+
|
108
|
+
if(i === 0){
|
68
109
|
ret = inverse(this);
|
69
110
|
}
|
111
|
+
|
70
112
|
return ret;
|
71
113
|
});
|
72
114
|
|
@@ -93,21 +135,24 @@ Handlebars.registerHelper('with', function(context, options) {
|
|
93
135
|
return options.fn(context);
|
94
136
|
});
|
95
137
|
|
96
|
-
Handlebars.registerHelper('log', function(context) {
|
97
|
-
|
138
|
+
Handlebars.registerHelper('log', function(context, options) {
|
139
|
+
var level = options.data && options.data.level != null ? parseInt(options.data.level, 10) : 1;
|
140
|
+
Handlebars.log(level, context);
|
98
141
|
});
|
99
142
|
|
100
|
-
}());
|
143
|
+
}(this.Handlebars));
|
101
144
|
;
|
102
145
|
// lib/handlebars/utils.js
|
146
|
+
|
147
|
+
var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];
|
148
|
+
|
103
149
|
Handlebars.Exception = function(message) {
|
104
150
|
var tmp = Error.prototype.constructor.apply(this, arguments);
|
105
151
|
|
106
|
-
|
107
|
-
|
152
|
+
// Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.
|
153
|
+
for (var idx = 0; idx < errorProps.length; idx++) {
|
154
|
+
this[errorProps[idx]] = tmp[errorProps[idx]];
|
108
155
|
}
|
109
|
-
|
110
|
-
this.message = tmp.message;
|
111
156
|
};
|
112
157
|
Handlebars.Exception.prototype = new Error();
|
113
158
|
|
@@ -121,6 +166,7 @@ Handlebars.SafeString.prototype.toString = function() {
|
|
121
166
|
|
122
167
|
(function() {
|
123
168
|
var escape = {
|
169
|
+
"&": "&",
|
124
170
|
"<": "<",
|
125
171
|
">": ">",
|
126
172
|
'"': """,
|
@@ -128,7 +174,7 @@ Handlebars.SafeString.prototype.toString = function() {
|
|
128
174
|
"`": "`"
|
129
175
|
};
|
130
176
|
|
131
|
-
var badChars =
|
177
|
+
var badChars = /[&<>"'`]/g;
|
132
178
|
var possible = /[&<>"'`]/;
|
133
179
|
|
134
180
|
var escapeChar = function(chr) {
|
@@ -149,11 +195,7 @@ Handlebars.SafeString.prototype.toString = function() {
|
|
149
195
|
},
|
150
196
|
|
151
197
|
isEmpty: function(value) {
|
152
|
-
if (
|
153
|
-
return true;
|
154
|
-
} else if (value === null) {
|
155
|
-
return true;
|
156
|
-
} else if (value === false) {
|
198
|
+
if (!value && value !== 0) {
|
157
199
|
return true;
|
158
200
|
} else if(Object.prototype.toString.call(value) === "[object Array]" && value.length === 0) {
|
159
201
|
return true;
|
@@ -219,7 +261,7 @@ Handlebars.VM = {
|
|
219
261
|
} else if (!Handlebars.compile) {
|
220
262
|
throw new Handlebars.Exception("The partial " + name + " could not be compiled when running in runtime-only mode");
|
221
263
|
} else {
|
222
|
-
partials[name] = Handlebars.compile(partial);
|
264
|
+
partials[name] = Handlebars.compile(partial, {data: data !== undefined});
|
223
265
|
return partials[name](context, options);
|
224
266
|
}
|
225
267
|
}
|
@@ -3,9 +3,9 @@
|
|
3
3
|
/*jshint eqnull:true*/
|
4
4
|
this.Handlebars = {};
|
5
5
|
|
6
|
-
(function() {
|
6
|
+
(function(Handlebars) {
|
7
7
|
|
8
|
-
Handlebars.VERSION = "1.0.rc.
|
8
|
+
Handlebars.VERSION = "1.0.rc.2";
|
9
9
|
|
10
10
|
Handlebars.helpers = {};
|
11
11
|
Handlebars.partials = {};
|
@@ -44,29 +44,71 @@ Handlebars.registerHelper('blockHelperMissing', function(context, options) {
|
|
44
44
|
return inverse(this);
|
45
45
|
} else if(type === "[object Array]") {
|
46
46
|
if(context.length > 0) {
|
47
|
-
|
48
|
-
ret = ret + fn(context[i]);
|
49
|
-
}
|
47
|
+
return Handlebars.helpers.each(context, options);
|
50
48
|
} else {
|
51
|
-
|
49
|
+
return inverse(this);
|
52
50
|
}
|
53
|
-
return ret;
|
54
51
|
} else {
|
55
52
|
return fn(context);
|
56
53
|
}
|
57
54
|
});
|
58
55
|
|
56
|
+
Handlebars.K = function() {};
|
57
|
+
|
58
|
+
Handlebars.createFrame = Object.create || function(object) {
|
59
|
+
Handlebars.K.prototype = object;
|
60
|
+
var obj = new Handlebars.K();
|
61
|
+
Handlebars.K.prototype = null;
|
62
|
+
return obj;
|
63
|
+
};
|
64
|
+
|
65
|
+
Handlebars.logger = {
|
66
|
+
DEBUG: 0, INFO: 1, WARN: 2, ERROR: 3, level: 3,
|
67
|
+
|
68
|
+
methodMap: {0: 'debug', 1: 'info', 2: 'warn', 3: 'error'},
|
69
|
+
|
70
|
+
// can be overridden in the host environment
|
71
|
+
log: function(level, obj) {
|
72
|
+
if (Handlebars.logger.level <= level) {
|
73
|
+
var method = Handlebars.logger.methodMap[level];
|
74
|
+
if (typeof console !== 'undefined' && console[method]) {
|
75
|
+
console[method].call(console, obj);
|
76
|
+
}
|
77
|
+
}
|
78
|
+
}
|
79
|
+
};
|
80
|
+
|
81
|
+
Handlebars.log = function(level, obj) { Handlebars.logger.log(level, obj); };
|
82
|
+
|
59
83
|
Handlebars.registerHelper('each', function(context, options) {
|
60
84
|
var fn = options.fn, inverse = options.inverse;
|
61
|
-
var ret = "";
|
85
|
+
var i = 0, ret = "", data;
|
62
86
|
|
63
|
-
if(
|
64
|
-
|
65
|
-
|
87
|
+
if (options.data) {
|
88
|
+
data = Handlebars.createFrame(options.data);
|
89
|
+
}
|
90
|
+
|
91
|
+
if(context && typeof context === 'object') {
|
92
|
+
if(context instanceof Array){
|
93
|
+
for(var j = context.length; i<j; i++) {
|
94
|
+
if (data) { data.index = i; }
|
95
|
+
ret = ret + fn(context[i], { data: data });
|
96
|
+
}
|
97
|
+
} else {
|
98
|
+
for(var key in context) {
|
99
|
+
if(context.hasOwnProperty(key)) {
|
100
|
+
if(data) { data.key = key; }
|
101
|
+
ret = ret + fn(context[key], {data: data});
|
102
|
+
i++;
|
103
|
+
}
|
104
|
+
}
|
66
105
|
}
|
67
|
-
}
|
106
|
+
}
|
107
|
+
|
108
|
+
if(i === 0){
|
68
109
|
ret = inverse(this);
|
69
110
|
}
|
111
|
+
|
70
112
|
return ret;
|
71
113
|
});
|
72
114
|
|
@@ -93,302 +135,236 @@ Handlebars.registerHelper('with', function(context, options) {
|
|
93
135
|
return options.fn(context);
|
94
136
|
});
|
95
137
|
|
96
|
-
Handlebars.registerHelper('log', function(context) {
|
97
|
-
|
138
|
+
Handlebars.registerHelper('log', function(context, options) {
|
139
|
+
var level = options.data && options.data.level != null ? parseInt(options.data.level, 10) : 1;
|
140
|
+
Handlebars.log(level, context);
|
98
141
|
});
|
99
142
|
|
100
|
-
}());
|
143
|
+
}(this.Handlebars));
|
101
144
|
;
|
102
145
|
// lib/handlebars/compiler/parser.js
|
103
146
|
/* Jison generated parser */
|
104
147
|
var handlebars = (function(){
|
105
|
-
|
106
148
|
var parser = {trace: function trace() { },
|
107
149
|
yy: {},
|
108
|
-
symbols_: {"error":2,"root":3,"program":4,"EOF":5,"
|
109
|
-
terminals_: {2:"error",5:"EOF",14:"CONTENT",15:"COMMENT",16:"OPEN_BLOCK",18:"CLOSE",19:"OPEN_INVERSE",20:"OPEN_ENDBLOCK",22:"OPEN",23:"OPEN_UNESCAPED",24:"OPEN_PARTIAL",28:"STRING",
|
110
|
-
productions_: [0,[3,2],[4,3],[4,1],[4,0],[
|
150
|
+
symbols_: {"error":2,"root":3,"program":4,"EOF":5,"simpleInverse":6,"statements":7,"statement":8,"openInverse":9,"closeBlock":10,"openBlock":11,"mustache":12,"partial":13,"CONTENT":14,"COMMENT":15,"OPEN_BLOCK":16,"inMustache":17,"CLOSE":18,"OPEN_INVERSE":19,"OPEN_ENDBLOCK":20,"path":21,"OPEN":22,"OPEN_UNESCAPED":23,"OPEN_PARTIAL":24,"partialName":25,"params":26,"hash":27,"DATA":28,"param":29,"STRING":30,"INTEGER":31,"BOOLEAN":32,"hashSegments":33,"hashSegment":34,"ID":35,"EQUALS":36,"PARTIAL_NAME":37,"pathSegments":38,"SEP":39,"$accept":0,"$end":1},
|
151
|
+
terminals_: {2:"error",5:"EOF",14:"CONTENT",15:"COMMENT",16:"OPEN_BLOCK",18:"CLOSE",19:"OPEN_INVERSE",20:"OPEN_ENDBLOCK",22:"OPEN",23:"OPEN_UNESCAPED",24:"OPEN_PARTIAL",28:"DATA",30:"STRING",31:"INTEGER",32:"BOOLEAN",35:"ID",36:"EQUALS",37:"PARTIAL_NAME",39:"SEP"},
|
152
|
+
productions_: [0,[3,2],[4,2],[4,3],[4,2],[4,1],[4,1],[4,0],[7,1],[7,2],[8,3],[8,3],[8,1],[8,1],[8,1],[8,1],[11,3],[9,3],[10,3],[12,3],[12,3],[13,3],[13,4],[6,2],[17,3],[17,2],[17,2],[17,1],[17,1],[26,2],[26,1],[29,1],[29,1],[29,1],[29,1],[29,1],[27,1],[33,2],[33,1],[34,3],[34,3],[34,3],[34,3],[34,3],[25,1],[21,1],[38,3],[38,1]],
|
111
153
|
performAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {
|
112
154
|
|
113
155
|
var $0 = $$.length - 1;
|
114
156
|
switch (yystate) {
|
115
157
|
case 1: return $$[$0-1];
|
116
158
|
break;
|
117
|
-
case 2: this.$ = new yy.ProgramNode(
|
159
|
+
case 2: this.$ = new yy.ProgramNode([], $$[$0]);
|
118
160
|
break;
|
119
|
-
case 3: this.$ = new yy.ProgramNode($$[$0]);
|
161
|
+
case 3: this.$ = new yy.ProgramNode($$[$0-2], $$[$0]);
|
120
162
|
break;
|
121
|
-
case 4: this.$ = new yy.ProgramNode([]);
|
163
|
+
case 4: this.$ = new yy.ProgramNode($$[$0-1], []);
|
122
164
|
break;
|
123
|
-
case 5: this.$ =
|
165
|
+
case 5: this.$ = new yy.ProgramNode($$[$0]);
|
124
166
|
break;
|
125
|
-
case 6:
|
167
|
+
case 6: this.$ = new yy.ProgramNode([], []);
|
126
168
|
break;
|
127
|
-
case 7: this.$ = new yy.
|
169
|
+
case 7: this.$ = new yy.ProgramNode([]);
|
128
170
|
break;
|
129
|
-
case 8: this.$ =
|
171
|
+
case 8: this.$ = [$$[$0]];
|
130
172
|
break;
|
131
|
-
case 9: this.$ = $$[$0];
|
173
|
+
case 9: $$[$0-1].push($$[$0]); this.$ = $$[$0-1];
|
132
174
|
break;
|
133
|
-
case 10: this.$ = $$[$0];
|
175
|
+
case 10: this.$ = new yy.BlockNode($$[$0-2], $$[$0-1].inverse, $$[$0-1], $$[$0]);
|
134
176
|
break;
|
135
|
-
case 11: this.$ = new yy.
|
177
|
+
case 11: this.$ = new yy.BlockNode($$[$0-2], $$[$0-1], $$[$0-1].inverse, $$[$0]);
|
136
178
|
break;
|
137
|
-
case 12: this.$ =
|
179
|
+
case 12: this.$ = $$[$0];
|
138
180
|
break;
|
139
|
-
case 13: this.$ =
|
181
|
+
case 13: this.$ = $$[$0];
|
140
182
|
break;
|
141
|
-
case 14: this.$ = new yy.
|
183
|
+
case 14: this.$ = new yy.ContentNode($$[$0]);
|
142
184
|
break;
|
143
|
-
case 15: this.$ = $$[$0
|
185
|
+
case 15: this.$ = new yy.CommentNode($$[$0]);
|
144
186
|
break;
|
145
187
|
case 16: this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1]);
|
146
188
|
break;
|
147
|
-
case 17: this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1]
|
189
|
+
case 17: this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1]);
|
190
|
+
break;
|
191
|
+
case 18: this.$ = $$[$0-1];
|
192
|
+
break;
|
193
|
+
case 19: this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1]);
|
194
|
+
break;
|
195
|
+
case 20: this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1], true);
|
196
|
+
break;
|
197
|
+
case 21: this.$ = new yy.PartialNode($$[$0-1]);
|
148
198
|
break;
|
149
|
-
case
|
199
|
+
case 22: this.$ = new yy.PartialNode($$[$0-2], $$[$0-1]);
|
150
200
|
break;
|
151
|
-
case
|
201
|
+
case 23:
|
152
202
|
break;
|
153
|
-
case
|
203
|
+
case 24: this.$ = [[$$[$0-2]].concat($$[$0-1]), $$[$0]];
|
154
204
|
break;
|
155
|
-
case
|
205
|
+
case 25: this.$ = [[$$[$0-1]].concat($$[$0]), null];
|
156
206
|
break;
|
157
|
-
case
|
207
|
+
case 26: this.$ = [[$$[$0-1]], $$[$0]];
|
158
208
|
break;
|
159
|
-
case
|
209
|
+
case 27: this.$ = [[$$[$0]], null];
|
160
210
|
break;
|
161
|
-
case
|
211
|
+
case 28: this.$ = [[new yy.DataNode($$[$0])], null];
|
162
212
|
break;
|
163
|
-
case
|
213
|
+
case 29: $$[$0-1].push($$[$0]); this.$ = $$[$0-1];
|
164
214
|
break;
|
165
|
-
case
|
215
|
+
case 30: this.$ = [$$[$0]];
|
166
216
|
break;
|
167
|
-
case
|
217
|
+
case 31: this.$ = $$[$0];
|
168
218
|
break;
|
169
|
-
case
|
219
|
+
case 32: this.$ = new yy.StringNode($$[$0]);
|
170
220
|
break;
|
171
|
-
case
|
221
|
+
case 33: this.$ = new yy.IntegerNode($$[$0]);
|
172
222
|
break;
|
173
|
-
case
|
223
|
+
case 34: this.$ = new yy.BooleanNode($$[$0]);
|
174
224
|
break;
|
175
|
-
case
|
225
|
+
case 35: this.$ = new yy.DataNode($$[$0]);
|
176
226
|
break;
|
177
|
-
case
|
227
|
+
case 36: this.$ = new yy.HashNode($$[$0]);
|
178
228
|
break;
|
179
|
-
case
|
229
|
+
case 37: $$[$0-1].push($$[$0]); this.$ = $$[$0-1];
|
180
230
|
break;
|
181
|
-
case
|
231
|
+
case 38: this.$ = [$$[$0]];
|
182
232
|
break;
|
183
|
-
case
|
233
|
+
case 39: this.$ = [$$[$0-2], $$[$0]];
|
184
234
|
break;
|
185
|
-
case
|
235
|
+
case 40: this.$ = [$$[$0-2], new yy.StringNode($$[$0])];
|
186
236
|
break;
|
187
|
-
case
|
237
|
+
case 41: this.$ = [$$[$0-2], new yy.IntegerNode($$[$0])];
|
188
238
|
break;
|
189
|
-
case
|
239
|
+
case 42: this.$ = [$$[$0-2], new yy.BooleanNode($$[$0])];
|
190
240
|
break;
|
191
|
-
case
|
241
|
+
case 43: this.$ = [$$[$0-2], new yy.DataNode($$[$0])];
|
192
242
|
break;
|
193
|
-
case
|
243
|
+
case 44: this.$ = new yy.PartialNameNode($$[$0]);
|
244
|
+
break;
|
245
|
+
case 45: this.$ = new yy.IdNode($$[$0]);
|
246
|
+
break;
|
247
|
+
case 46: $$[$0-2].push($$[$0]); this.$ = $$[$0-2];
|
248
|
+
break;
|
249
|
+
case 47: this.$ = [$$[$0]];
|
194
250
|
break;
|
195
251
|
}
|
196
252
|
},
|
197
|
-
table: [{3:1,4:2,5:[2,
|
198
|
-
defaultActions: {
|
253
|
+
table: [{3:1,4:2,5:[2,7],6:3,7:4,8:6,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,5],22:[1,14],23:[1,15],24:[1,16]},{1:[3]},{5:[1,17]},{5:[2,6],7:18,8:6,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,19],20:[2,6],22:[1,14],23:[1,15],24:[1,16]},{5:[2,5],6:20,8:21,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,5],20:[2,5],22:[1,14],23:[1,15],24:[1,16]},{17:23,18:[1,22],21:24,28:[1,25],35:[1,27],38:26},{5:[2,8],14:[2,8],15:[2,8],16:[2,8],19:[2,8],20:[2,8],22:[2,8],23:[2,8],24:[2,8]},{4:28,6:3,7:4,8:6,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,5],20:[2,7],22:[1,14],23:[1,15],24:[1,16]},{4:29,6:3,7:4,8:6,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,5],20:[2,7],22:[1,14],23:[1,15],24:[1,16]},{5:[2,12],14:[2,12],15:[2,12],16:[2,12],19:[2,12],20:[2,12],22:[2,12],23:[2,12],24:[2,12]},{5:[2,13],14:[2,13],15:[2,13],16:[2,13],19:[2,13],20:[2,13],22:[2,13],23:[2,13],24:[2,13]},{5:[2,14],14:[2,14],15:[2,14],16:[2,14],19:[2,14],20:[2,14],22:[2,14],23:[2,14],24:[2,14]},{5:[2,15],14:[2,15],15:[2,15],16:[2,15],19:[2,15],20:[2,15],22:[2,15],23:[2,15],24:[2,15]},{17:30,21:24,28:[1,25],35:[1,27],38:26},{17:31,21:24,28:[1,25],35:[1,27],38:26},{17:32,21:24,28:[1,25],35:[1,27],38:26},{25:33,37:[1,34]},{1:[2,1]},{5:[2,2],8:21,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,19],20:[2,2],22:[1,14],23:[1,15],24:[1,16]},{17:23,21:24,28:[1,25],35:[1,27],38:26},{5:[2,4],7:35,8:6,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,19],20:[2,4],22:[1,14],23:[1,15],24:[1,16]},{5:[2,9],14:[2,9],15:[2,9],16:[2,9],19:[2,9],20:[2,9],22:[2,9],23:[2,9],24:[2,9]},{5:[2,23],14:[2,23],15:[2,23],16:[2,23],19:[2,23],20:[2,23],22:[2,23],23:[2,23],24:[2,23]},{18:[1,36]},{18:[2,27],21:41,26:37,27:38,28:[1,45],29:39,30:[1,42],31:[1,43],32:[1,44],33:40,34:46,35:[1,47],38:26},{18:[2,28]},{18:[2,45],28:[2,45],30:[2,45],31:[2,45],32:[2,45],35:[2,45],39:[1,48]},{18:[2,47],28:[2,47],30:[2,47],31:[2,47],32:[2,47],35:[2,47],39:[2,47]},{10:49,20:[1,50]},{10:51,20:[1,50]},{18:[1,52]},{18:[1,53]},{18:[1,54]},{18:[1,55],21:56,35:[1,27],38:26},{18:[2,44],35:[2,44]},{5:[2,3],8:21,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,19],20:[2,3],22:[1,14],23:[1,15],24:[1,16]},{14:[2,17],15:[2,17],16:[2,17],19:[2,17],20:[2,17],22:[2,17],23:[2,17],24:[2,17]},{18:[2,25],21:41,27:57,28:[1,45],29:58,30:[1,42],31:[1,43],32:[1,44],33:40,34:46,35:[1,47],38:26},{18:[2,26]},{18:[2,30],28:[2,30],30:[2,30],31:[2,30],32:[2,30],35:[2,30]},{18:[2,36],34:59,35:[1,60]},{18:[2,31],28:[2,31],30:[2,31],31:[2,31],32:[2,31],35:[2,31]},{18:[2,32],28:[2,32],30:[2,32],31:[2,32],32:[2,32],35:[2,32]},{18:[2,33],28:[2,33],30:[2,33],31:[2,33],32:[2,33],35:[2,33]},{18:[2,34],28:[2,34],30:[2,34],31:[2,34],32:[2,34],35:[2,34]},{18:[2,35],28:[2,35],30:[2,35],31:[2,35],32:[2,35],35:[2,35]},{18:[2,38],35:[2,38]},{18:[2,47],28:[2,47],30:[2,47],31:[2,47],32:[2,47],35:[2,47],36:[1,61],39:[2,47]},{35:[1,62]},{5:[2,10],14:[2,10],15:[2,10],16:[2,10],19:[2,10],20:[2,10],22:[2,10],23:[2,10],24:[2,10]},{21:63,35:[1,27],38:26},{5:[2,11],14:[2,11],15:[2,11],16:[2,11],19:[2,11],20:[2,11],22:[2,11],23:[2,11],24:[2,11]},{14:[2,16],15:[2,16],16:[2,16],19:[2,16],20:[2,16],22:[2,16],23:[2,16],24:[2,16]},{5:[2,19],14:[2,19],15:[2,19],16:[2,19],19:[2,19],20:[2,19],22:[2,19],23:[2,19],24:[2,19]},{5:[2,20],14:[2,20],15:[2,20],16:[2,20],19:[2,20],20:[2,20],22:[2,20],23:[2,20],24:[2,20]},{5:[2,21],14:[2,21],15:[2,21],16:[2,21],19:[2,21],20:[2,21],22:[2,21],23:[2,21],24:[2,21]},{18:[1,64]},{18:[2,24]},{18:[2,29],28:[2,29],30:[2,29],31:[2,29],32:[2,29],35:[2,29]},{18:[2,37],35:[2,37]},{36:[1,61]},{21:65,28:[1,69],30:[1,66],31:[1,67],32:[1,68],35:[1,27],38:26},{18:[2,46],28:[2,46],30:[2,46],31:[2,46],32:[2,46],35:[2,46],39:[2,46]},{18:[1,70]},{5:[2,22],14:[2,22],15:[2,22],16:[2,22],19:[2,22],20:[2,22],22:[2,22],23:[2,22],24:[2,22]},{18:[2,39],35:[2,39]},{18:[2,40],35:[2,40]},{18:[2,41],35:[2,41]},{18:[2,42],35:[2,42]},{18:[2,43],35:[2,43]},{5:[2,18],14:[2,18],15:[2,18],16:[2,18],19:[2,18],20:[2,18],22:[2,18],23:[2,18],24:[2,18]}],
|
254
|
+
defaultActions: {17:[2,1],25:[2,28],38:[2,26],57:[2,24]},
|
199
255
|
parseError: function parseError(str, hash) {
|
200
256
|
throw new Error(str);
|
201
257
|
},
|
202
258
|
parse: function parse(input) {
|
203
|
-
var self = this,
|
204
|
-
stack = [0],
|
205
|
-
vstack = [null], // semantic value stack
|
206
|
-
lstack = [], // location stack
|
207
|
-
table = this.table,
|
208
|
-
yytext = '',
|
209
|
-
yylineno = 0,
|
210
|
-
yyleng = 0,
|
211
|
-
recovering = 0,
|
212
|
-
TERROR = 2,
|
213
|
-
EOF = 1;
|
214
|
-
|
215
|
-
//this.reductionCount = this.shiftCount = 0;
|
216
|
-
|
259
|
+
var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;
|
217
260
|
this.lexer.setInput(input);
|
218
261
|
this.lexer.yy = this.yy;
|
219
262
|
this.yy.lexer = this.lexer;
|
220
|
-
|
263
|
+
this.yy.parser = this;
|
264
|
+
if (typeof this.lexer.yylloc == "undefined")
|
221
265
|
this.lexer.yylloc = {};
|
222
266
|
var yyloc = this.lexer.yylloc;
|
223
267
|
lstack.push(yyloc);
|
224
|
-
|
225
|
-
if (typeof this.yy.parseError ===
|
268
|
+
var ranges = this.lexer.options && this.lexer.options.ranges;
|
269
|
+
if (typeof this.yy.parseError === "function")
|
226
270
|
this.parseError = this.yy.parseError;
|
227
|
-
|
228
|
-
|
229
|
-
stack.length = stack.length - 2*n;
|
271
|
+
function popStack(n) {
|
272
|
+
stack.length = stack.length - 2 * n;
|
230
273
|
vstack.length = vstack.length - n;
|
231
274
|
lstack.length = lstack.length - n;
|
232
275
|
}
|
233
|
-
|
234
276
|
function lex() {
|
235
277
|
var token;
|
236
|
-
token = self.lexer.lex() || 1;
|
237
|
-
|
238
|
-
if (typeof token !== 'number') {
|
278
|
+
token = self.lexer.lex() || 1;
|
279
|
+
if (typeof token !== "number") {
|
239
280
|
token = self.symbols_[token] || token;
|
240
281
|
}
|
241
282
|
return token;
|
242
283
|
}
|
243
|
-
|
244
|
-
var symbol, preErrorSymbol, state, action, a, r, yyval={},p,len,newState, expected;
|
284
|
+
var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;
|
245
285
|
while (true) {
|
246
|
-
|
247
|
-
state = stack[stack.length-1];
|
248
|
-
|
249
|
-
// use default actions if available
|
286
|
+
state = stack[stack.length - 1];
|
250
287
|
if (this.defaultActions[state]) {
|
251
288
|
action = this.defaultActions[state];
|
252
289
|
} else {
|
253
|
-
if (symbol ==
|
290
|
+
if (symbol === null || typeof symbol == "undefined") {
|
254
291
|
symbol = lex();
|
255
|
-
|
292
|
+
}
|
256
293
|
action = table[state] && table[state][symbol];
|
257
294
|
}
|
258
|
-
|
259
|
-
|
260
|
-
_handle_error:
|
261
|
-
if (typeof action === 'undefined' || !action.length || !action[0]) {
|
262
|
-
|
295
|
+
if (typeof action === "undefined" || !action.length || !action[0]) {
|
296
|
+
var errStr = "";
|
263
297
|
if (!recovering) {
|
264
|
-
// Report error
|
265
298
|
expected = [];
|
266
|
-
for (p in table[state])
|
267
|
-
|
268
|
-
|
269
|
-
|
299
|
+
for (p in table[state])
|
300
|
+
if (this.terminals_[p] && p > 2) {
|
301
|
+
expected.push("'" + this.terminals_[p] + "'");
|
302
|
+
}
|
270
303
|
if (this.lexer.showPosition) {
|
271
|
-
errStr =
|
304
|
+
errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
|
272
305
|
} else {
|
273
|
-
errStr =
|
274
|
-
(symbol == 1 /*EOF*/ ? "end of input" :
|
275
|
-
("'"+(this.terminals_[symbol] || symbol)+"'"));
|
306
|
+
errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1?"end of input":"'" + (this.terminals_[symbol] || symbol) + "'");
|
276
307
|
}
|
277
|
-
this.parseError(errStr,
|
278
|
-
{text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});
|
308
|
+
this.parseError(errStr, {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});
|
279
309
|
}
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
310
|
+
}
|
311
|
+
if (action[0] instanceof Array && action.length > 1) {
|
312
|
+
throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
|
313
|
+
}
|
314
|
+
switch (action[0]) {
|
315
|
+
case 1:
|
316
|
+
stack.push(symbol);
|
317
|
+
vstack.push(this.lexer.yytext);
|
318
|
+
lstack.push(this.lexer.yylloc);
|
319
|
+
stack.push(action[1]);
|
320
|
+
symbol = null;
|
321
|
+
if (!preErrorSymbol) {
|
288
322
|
yyleng = this.lexer.yyleng;
|
289
323
|
yytext = this.lexer.yytext;
|
290
324
|
yylineno = this.lexer.yylineno;
|
291
325
|
yyloc = this.lexer.yylloc;
|
292
|
-
|
326
|
+
if (recovering > 0)
|
327
|
+
recovering--;
|
328
|
+
} else {
|
329
|
+
symbol = preErrorSymbol;
|
330
|
+
preErrorSymbol = null;
|
293
331
|
}
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
if (state == 0) {
|
302
|
-
throw new Error(errStr || 'Parsing halted.');
|
303
|
-
}
|
304
|
-
popStack(1);
|
305
|
-
state = stack[stack.length-1];
|
332
|
+
break;
|
333
|
+
case 2:
|
334
|
+
len = this.productions_[action[1]][1];
|
335
|
+
yyval.$ = vstack[vstack.length - len];
|
336
|
+
yyval._$ = {first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column};
|
337
|
+
if (ranges) {
|
338
|
+
yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];
|
306
339
|
}
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
stack.push(symbol);
|
326
|
-
vstack.push(this.lexer.yytext);
|
327
|
-
lstack.push(this.lexer.yylloc);
|
328
|
-
stack.push(action[1]); // push state
|
329
|
-
symbol = null;
|
330
|
-
if (!preErrorSymbol) { // normal execution/no error
|
331
|
-
yyleng = this.lexer.yyleng;
|
332
|
-
yytext = this.lexer.yytext;
|
333
|
-
yylineno = this.lexer.yylineno;
|
334
|
-
yyloc = this.lexer.yylloc;
|
335
|
-
if (recovering > 0)
|
336
|
-
recovering--;
|
337
|
-
} else { // error just occurred, resume old lookahead f/ before error
|
338
|
-
symbol = preErrorSymbol;
|
339
|
-
preErrorSymbol = null;
|
340
|
-
}
|
341
|
-
break;
|
342
|
-
|
343
|
-
case 2: // reduce
|
344
|
-
//this.reductionCount++;
|
345
|
-
|
346
|
-
len = this.productions_[action[1]][1];
|
347
|
-
|
348
|
-
// perform semantic action
|
349
|
-
yyval.$ = vstack[vstack.length-len]; // default to $$ = $1
|
350
|
-
// default location, uses first token for firsts, last for lasts
|
351
|
-
yyval._$ = {
|
352
|
-
first_line: lstack[lstack.length-(len||1)].first_line,
|
353
|
-
last_line: lstack[lstack.length-1].last_line,
|
354
|
-
first_column: lstack[lstack.length-(len||1)].first_column,
|
355
|
-
last_column: lstack[lstack.length-1].last_column
|
356
|
-
};
|
357
|
-
r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);
|
358
|
-
|
359
|
-
if (typeof r !== 'undefined') {
|
360
|
-
return r;
|
361
|
-
}
|
362
|
-
|
363
|
-
// pop off stack
|
364
|
-
if (len) {
|
365
|
-
stack = stack.slice(0,-1*len*2);
|
366
|
-
vstack = vstack.slice(0, -1*len);
|
367
|
-
lstack = lstack.slice(0, -1*len);
|
368
|
-
}
|
369
|
-
|
370
|
-
stack.push(this.productions_[action[1]][0]); // push nonterminal (reduce)
|
371
|
-
vstack.push(yyval.$);
|
372
|
-
lstack.push(yyval._$);
|
373
|
-
// goto new state = table[STATE][NONTERMINAL]
|
374
|
-
newState = table[stack[stack.length-2]][stack[stack.length-1]];
|
375
|
-
stack.push(newState);
|
376
|
-
break;
|
377
|
-
|
378
|
-
case 3: // accept
|
379
|
-
return true;
|
340
|
+
r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);
|
341
|
+
if (typeof r !== "undefined") {
|
342
|
+
return r;
|
343
|
+
}
|
344
|
+
if (len) {
|
345
|
+
stack = stack.slice(0, -1 * len * 2);
|
346
|
+
vstack = vstack.slice(0, -1 * len);
|
347
|
+
lstack = lstack.slice(0, -1 * len);
|
348
|
+
}
|
349
|
+
stack.push(this.productions_[action[1]][0]);
|
350
|
+
vstack.push(yyval.$);
|
351
|
+
lstack.push(yyval._$);
|
352
|
+
newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
|
353
|
+
stack.push(newState);
|
354
|
+
break;
|
355
|
+
case 3:
|
356
|
+
return true;
|
380
357
|
}
|
381
|
-
|
382
358
|
}
|
383
|
-
|
384
359
|
return true;
|
385
|
-
}
|
360
|
+
}
|
361
|
+
};
|
362
|
+
/* Jison generated lexer */
|
386
363
|
var lexer = (function(){
|
387
|
-
|
388
364
|
var lexer = ({EOF:1,
|
389
365
|
parseError:function parseError(str, hash) {
|
390
|
-
if (this.yy.
|
391
|
-
this.yy.parseError(str, hash);
|
366
|
+
if (this.yy.parser) {
|
367
|
+
this.yy.parser.parseError(str, hash);
|
392
368
|
} else {
|
393
369
|
throw new Error(str);
|
394
370
|
}
|
@@ -400,27 +376,64 @@ setInput:function (input) {
|
|
400
376
|
this.yytext = this.matched = this.match = '';
|
401
377
|
this.conditionStack = ['INITIAL'];
|
402
378
|
this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0};
|
379
|
+
if (this.options.ranges) this.yylloc.range = [0,0];
|
380
|
+
this.offset = 0;
|
403
381
|
return this;
|
404
382
|
},
|
405
383
|
input:function () {
|
406
384
|
var ch = this._input[0];
|
407
|
-
this.yytext+=ch;
|
385
|
+
this.yytext += ch;
|
408
386
|
this.yyleng++;
|
409
|
-
this.
|
410
|
-
this.
|
411
|
-
|
412
|
-
|
387
|
+
this.offset++;
|
388
|
+
this.match += ch;
|
389
|
+
this.matched += ch;
|
390
|
+
var lines = ch.match(/(?:\r\n?|\n).*/g);
|
391
|
+
if (lines) {
|
392
|
+
this.yylineno++;
|
393
|
+
this.yylloc.last_line++;
|
394
|
+
} else {
|
395
|
+
this.yylloc.last_column++;
|
396
|
+
}
|
397
|
+
if (this.options.ranges) this.yylloc.range[1]++;
|
398
|
+
|
413
399
|
this._input = this._input.slice(1);
|
414
400
|
return ch;
|
415
401
|
},
|
416
402
|
unput:function (ch) {
|
403
|
+
var len = ch.length;
|
404
|
+
var lines = ch.split(/(?:\r\n?|\n)/g);
|
405
|
+
|
417
406
|
this._input = ch + this._input;
|
407
|
+
this.yytext = this.yytext.substr(0, this.yytext.length-len-1);
|
408
|
+
//this.yyleng -= len;
|
409
|
+
this.offset -= len;
|
410
|
+
var oldLines = this.match.split(/(?:\r\n?|\n)/g);
|
411
|
+
this.match = this.match.substr(0, this.match.length-1);
|
412
|
+
this.matched = this.matched.substr(0, this.matched.length-1);
|
413
|
+
|
414
|
+
if (lines.length-1) this.yylineno -= lines.length-1;
|
415
|
+
var r = this.yylloc.range;
|
416
|
+
|
417
|
+
this.yylloc = {first_line: this.yylloc.first_line,
|
418
|
+
last_line: this.yylineno+1,
|
419
|
+
first_column: this.yylloc.first_column,
|
420
|
+
last_column: lines ?
|
421
|
+
(lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length:
|
422
|
+
this.yylloc.first_column - len
|
423
|
+
};
|
424
|
+
|
425
|
+
if (this.options.ranges) {
|
426
|
+
this.yylloc.range = [r[0], r[0] + this.yyleng - len];
|
427
|
+
}
|
418
428
|
return this;
|
419
429
|
},
|
420
430
|
more:function () {
|
421
431
|
this._more = true;
|
422
432
|
return this;
|
423
433
|
},
|
434
|
+
less:function (n) {
|
435
|
+
this.unput(this.match.slice(n));
|
436
|
+
},
|
424
437
|
pastInput:function () {
|
425
438
|
var past = this.matched.substr(0, this.matched.length - this.match.length);
|
426
439
|
return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, "");
|
@@ -445,6 +458,8 @@ next:function () {
|
|
445
458
|
|
446
459
|
var token,
|
447
460
|
match,
|
461
|
+
tempMatch,
|
462
|
+
index,
|
448
463
|
col,
|
449
464
|
lines;
|
450
465
|
if (!this._more) {
|
@@ -453,30 +468,39 @@ next:function () {
|
|
453
468
|
}
|
454
469
|
var rules = this._currentRules();
|
455
470
|
for (var i=0;i < rules.length; i++) {
|
456
|
-
|
457
|
-
if (match) {
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
last_line: this.yylineno+1,
|
462
|
-
first_column: this.yylloc.last_column,
|
463
|
-
last_column: lines ? lines[lines.length-1].length-1 : this.yylloc.last_column + match[0].length}
|
464
|
-
this.yytext += match[0];
|
465
|
-
this.match += match[0];
|
466
|
-
this.matches = match;
|
467
|
-
this.yyleng = this.yytext.length;
|
468
|
-
this._more = false;
|
469
|
-
this._input = this._input.slice(match[0].length);
|
470
|
-
this.matched += match[0];
|
471
|
-
token = this.performAction.call(this, this.yy, this, rules[i],this.conditionStack[this.conditionStack.length-1]);
|
472
|
-
if (token) return token;
|
473
|
-
else return;
|
471
|
+
tempMatch = this._input.match(this.rules[rules[i]]);
|
472
|
+
if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
|
473
|
+
match = tempMatch;
|
474
|
+
index = i;
|
475
|
+
if (!this.options.flex) break;
|
474
476
|
}
|
475
477
|
}
|
478
|
+
if (match) {
|
479
|
+
lines = match[0].match(/(?:\r\n?|\n).*/g);
|
480
|
+
if (lines) this.yylineno += lines.length;
|
481
|
+
this.yylloc = {first_line: this.yylloc.last_line,
|
482
|
+
last_line: this.yylineno+1,
|
483
|
+
first_column: this.yylloc.last_column,
|
484
|
+
last_column: lines ? lines[lines.length-1].length-lines[lines.length-1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length};
|
485
|
+
this.yytext += match[0];
|
486
|
+
this.match += match[0];
|
487
|
+
this.matches = match;
|
488
|
+
this.yyleng = this.yytext.length;
|
489
|
+
if (this.options.ranges) {
|
490
|
+
this.yylloc.range = [this.offset, this.offset += this.yyleng];
|
491
|
+
}
|
492
|
+
this._more = false;
|
493
|
+
this._input = this._input.slice(match[0].length);
|
494
|
+
this.matched += match[0];
|
495
|
+
token = this.performAction.call(this, this.yy, this, rules[index],this.conditionStack[this.conditionStack.length-1]);
|
496
|
+
if (this.done && this._input) this.done = false;
|
497
|
+
if (token) return token;
|
498
|
+
else return;
|
499
|
+
}
|
476
500
|
if (this._input === "") {
|
477
501
|
return this.EOF;
|
478
502
|
} else {
|
479
|
-
this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\n'+this.showPosition(),
|
503
|
+
return this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\n'+this.showPosition(),
|
480
504
|
{text: "", token: null, line: this.yylineno});
|
481
505
|
}
|
482
506
|
},
|
@@ -503,6 +527,7 @@ topState:function () {
|
|
503
527
|
pushState:function begin(condition) {
|
504
528
|
this.begin(condition);
|
505
529
|
}});
|
530
|
+
lexer.options = {};
|
506
531
|
lexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {
|
507
532
|
|
508
533
|
var YYSTATE=YY_START
|
@@ -515,82 +540,81 @@ case 0:
|
|
515
540
|
break;
|
516
541
|
case 1: return 14;
|
517
542
|
break;
|
518
|
-
case 2:
|
543
|
+
case 2:
|
544
|
+
if(yy_.yytext.slice(-1) !== "\\") this.popState();
|
545
|
+
if(yy_.yytext.slice(-1) === "\\") yy_.yytext = yy_.yytext.substr(0,yy_.yyleng-1);
|
546
|
+
return 14;
|
547
|
+
|
519
548
|
break;
|
520
|
-
case 3: return
|
549
|
+
case 3: yy_.yytext = yy_.yytext.substr(0, yy_.yyleng-4); this.popState(); return 15;
|
521
550
|
break;
|
522
|
-
case 4: return
|
551
|
+
case 4: this.begin("par"); return 24;
|
523
552
|
break;
|
524
|
-
case 5: return
|
553
|
+
case 5: return 16;
|
525
554
|
break;
|
526
|
-
case 6: return
|
555
|
+
case 6: return 20;
|
527
556
|
break;
|
528
557
|
case 7: return 19;
|
529
558
|
break;
|
530
|
-
case 8: return
|
559
|
+
case 8: return 19;
|
531
560
|
break;
|
532
561
|
case 9: return 23;
|
533
562
|
break;
|
534
|
-
case 10:
|
563
|
+
case 10: return 23;
|
564
|
+
break;
|
565
|
+
case 11: this.popState(); this.begin('com');
|
566
|
+
break;
|
567
|
+
case 12: yy_.yytext = yy_.yytext.substr(3,yy_.yyleng-5); this.popState(); return 15;
|
568
|
+
break;
|
569
|
+
case 13: return 22;
|
535
570
|
break;
|
536
|
-
case
|
571
|
+
case 14: return 36;
|
537
572
|
break;
|
538
|
-
case
|
573
|
+
case 15: return 35;
|
539
574
|
break;
|
540
|
-
case
|
575
|
+
case 16: return 35;
|
541
576
|
break;
|
542
|
-
case
|
577
|
+
case 17: return 39;
|
543
578
|
break;
|
544
|
-
case
|
579
|
+
case 18: /*ignore whitespace*/
|
545
580
|
break;
|
546
|
-
case
|
581
|
+
case 19: this.popState(); return 18;
|
547
582
|
break;
|
548
|
-
case
|
583
|
+
case 20: this.popState(); return 18;
|
549
584
|
break;
|
550
|
-
case
|
585
|
+
case 21: yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2).replace(/\\"/g,'"'); return 30;
|
551
586
|
break;
|
552
|
-
case
|
587
|
+
case 22: yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2).replace(/\\'/g,"'"); return 30;
|
553
588
|
break;
|
554
|
-
case
|
589
|
+
case 23: yy_.yytext = yy_.yytext.substr(1); return 28;
|
555
590
|
break;
|
556
|
-
case
|
591
|
+
case 24: return 32;
|
557
592
|
break;
|
558
|
-
case
|
593
|
+
case 25: return 32;
|
559
594
|
break;
|
560
|
-
case
|
595
|
+
case 26: return 31;
|
561
596
|
break;
|
562
|
-
case
|
597
|
+
case 27: return 35;
|
563
598
|
break;
|
564
|
-
case
|
599
|
+
case 28: yy_.yytext = yy_.yytext.substr(1, yy_.yyleng-2); return 35;
|
565
600
|
break;
|
566
|
-
case
|
601
|
+
case 29: return 'INVALID';
|
602
|
+
break;
|
603
|
+
case 30: /*ignore whitespace*/
|
604
|
+
break;
|
605
|
+
case 31: this.popState(); return 37;
|
606
|
+
break;
|
607
|
+
case 32: return 5;
|
567
608
|
break;
|
568
609
|
}
|
569
610
|
};
|
570
|
-
lexer.rules = [/^[^\x00]*?(?=(\{\{))/,/^[^\x00]
|
571
|
-
lexer.conditions = {"mu":{"rules":[
|
611
|
+
lexer.rules = [/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|$)))/,/^(?:[\s\S]*?--\}\})/,/^(?:\{\{>)/,/^(?:\{\{#)/,/^(?:\{\{\/)/,/^(?:\{\{\^)/,/^(?:\{\{\s*else\b)/,/^(?:\{\{\{)/,/^(?:\{\{&)/,/^(?:\{\{!--)/,/^(?:\{\{![\s\S]*?\}\})/,/^(?:\{\{)/,/^(?:=)/,/^(?:\.(?=[} ]))/,/^(?:\.\.)/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}\}\})/,/^(?:\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@[a-zA-Z]+)/,/^(?:true(?=[}\s]))/,/^(?:false(?=[}\s]))/,/^(?:[0-9]+(?=[}\s]))/,/^(?:[a-zA-Z0-9_$-]+(?=[=}\s\/.]))/,/^(?:\[[^\]]*\])/,/^(?:.)/,/^(?:\s+)/,/^(?:[a-zA-Z0-9_$-/]+)/,/^(?:$)/];
|
612
|
+
lexer.conditions = {"mu":{"rules":[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,32],"inclusive":false},"emu":{"rules":[2],"inclusive":false},"com":{"rules":[3],"inclusive":false},"par":{"rules":[30,31],"inclusive":false},"INITIAL":{"rules":[0,1,32],"inclusive":true}};
|
613
|
+
return lexer;})()
|
572
614
|
parser.lexer = lexer;
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
exports.parser = handlebars;
|
577
|
-
exports.parse = function () { return handlebars.parse.apply(handlebars, arguments); }
|
578
|
-
exports.main = function commonjsMain(args) {
|
579
|
-
if (!args[1])
|
580
|
-
throw new Error('Usage: '+args[0]+' FILE');
|
581
|
-
if (typeof process !== 'undefined') {
|
582
|
-
var source = require('fs').readFileSync(require('path').join(process.cwd(), args[1]), "utf8");
|
583
|
-
} else {
|
584
|
-
var cwd = require("file").path(require("file").cwd());
|
585
|
-
var source = cwd.join(args[1]).read({charset: "utf-8"});
|
586
|
-
}
|
587
|
-
return exports.parser.parse(source);
|
588
|
-
}
|
589
|
-
if (typeof module !== 'undefined' && require.main === module) {
|
590
|
-
exports.main(typeof process !== 'undefined' ? process.argv.slice(1) : require("system").args);
|
591
|
-
}
|
592
|
-
};
|
593
|
-
;
|
615
|
+
function Parser () { this.yy = {}; }Parser.prototype = parser;parser.Parser = Parser;
|
616
|
+
return new Parser;
|
617
|
+
})();;
|
594
618
|
// lib/handlebars/compiler/base.js
|
595
619
|
Handlebars.Parser = handlebars;
|
596
620
|
|
@@ -601,17 +625,7 @@ Handlebars.parse = function(string) {
|
|
601
625
|
|
602
626
|
Handlebars.print = function(ast) {
|
603
627
|
return new Handlebars.PrintVisitor().accept(ast);
|
604
|
-
}
|
605
|
-
|
606
|
-
Handlebars.logger = {
|
607
|
-
DEBUG: 0, INFO: 1, WARN: 2, ERROR: 3, level: 3,
|
608
|
-
|
609
|
-
// override in the host environment
|
610
|
-
log: function(level, str) {}
|
611
|
-
};
|
612
|
-
|
613
|
-
Handlebars.log = function(level, str) { Handlebars.logger.log(level, str); };
|
614
|
-
;
|
628
|
+
};;
|
615
629
|
// lib/handlebars/compiler/ast.js
|
616
630
|
(function() {
|
617
631
|
|
@@ -645,13 +659,10 @@ Handlebars.log = function(level, str) { Handlebars.logger.log(level, str); };
|
|
645
659
|
// pass or at runtime.
|
646
660
|
};
|
647
661
|
|
648
|
-
Handlebars.AST.PartialNode = function(
|
649
|
-
this.type
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
this.id = id;
|
654
|
-
this.context = context;
|
662
|
+
Handlebars.AST.PartialNode = function(partialName, context) {
|
663
|
+
this.type = "partial";
|
664
|
+
this.partialName = partialName;
|
665
|
+
this.context = context;
|
655
666
|
};
|
656
667
|
|
657
668
|
var verifyMatch = function(open, close) {
|
@@ -703,21 +714,36 @@ Handlebars.log = function(level, str) { Handlebars.logger.log(level, str); };
|
|
703
714
|
// an ID is simple if it only has one part, and that part is not
|
704
715
|
// `..` or `this`.
|
705
716
|
this.isSimple = parts.length === 1 && !this.isScoped && depth === 0;
|
717
|
+
|
718
|
+
this.stringModeValue = this.string;
|
719
|
+
};
|
720
|
+
|
721
|
+
Handlebars.AST.PartialNameNode = function(name) {
|
722
|
+
this.type = "PARTIAL_NAME";
|
723
|
+
this.name = name;
|
724
|
+
};
|
725
|
+
|
726
|
+
Handlebars.AST.DataNode = function(id) {
|
727
|
+
this.type = "DATA";
|
728
|
+
this.id = id;
|
706
729
|
};
|
707
730
|
|
708
731
|
Handlebars.AST.StringNode = function(string) {
|
709
732
|
this.type = "STRING";
|
710
733
|
this.string = string;
|
734
|
+
this.stringModeValue = string;
|
711
735
|
};
|
712
736
|
|
713
737
|
Handlebars.AST.IntegerNode = function(integer) {
|
714
738
|
this.type = "INTEGER";
|
715
739
|
this.integer = integer;
|
740
|
+
this.stringModeValue = Number(integer);
|
716
741
|
};
|
717
742
|
|
718
743
|
Handlebars.AST.BooleanNode = function(bool) {
|
719
744
|
this.type = "BOOLEAN";
|
720
745
|
this.bool = bool;
|
746
|
+
this.stringModeValue = bool === "true";
|
721
747
|
};
|
722
748
|
|
723
749
|
Handlebars.AST.CommentNode = function(comment) {
|
@@ -727,14 +753,16 @@ Handlebars.log = function(level, str) { Handlebars.logger.log(level, str); };
|
|
727
753
|
|
728
754
|
})();;
|
729
755
|
// lib/handlebars/utils.js
|
756
|
+
|
757
|
+
var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];
|
758
|
+
|
730
759
|
Handlebars.Exception = function(message) {
|
731
760
|
var tmp = Error.prototype.constructor.apply(this, arguments);
|
732
761
|
|
733
|
-
|
734
|
-
|
762
|
+
// Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.
|
763
|
+
for (var idx = 0; idx < errorProps.length; idx++) {
|
764
|
+
this[errorProps[idx]] = tmp[errorProps[idx]];
|
735
765
|
}
|
736
|
-
|
737
|
-
this.message = tmp.message;
|
738
766
|
};
|
739
767
|
Handlebars.Exception.prototype = new Error();
|
740
768
|
|
@@ -748,6 +776,7 @@ Handlebars.SafeString.prototype.toString = function() {
|
|
748
776
|
|
749
777
|
(function() {
|
750
778
|
var escape = {
|
779
|
+
"&": "&",
|
751
780
|
"<": "<",
|
752
781
|
">": ">",
|
753
782
|
'"': """,
|
@@ -755,7 +784,7 @@ Handlebars.SafeString.prototype.toString = function() {
|
|
755
784
|
"`": "`"
|
756
785
|
};
|
757
786
|
|
758
|
-
var badChars =
|
787
|
+
var badChars = /[&<>"'`]/g;
|
759
788
|
var possible = /[&<>"'`]/;
|
760
789
|
|
761
790
|
var escapeChar = function(chr) {
|
@@ -776,11 +805,7 @@ Handlebars.SafeString.prototype.toString = function() {
|
|
776
805
|
},
|
777
806
|
|
778
807
|
isEmpty: function(value) {
|
779
|
-
if (
|
780
|
-
return true;
|
781
|
-
} else if (value === null) {
|
782
|
-
return true;
|
783
|
-
} else if (value === false) {
|
808
|
+
if (!value && value !== 0) {
|
784
809
|
return true;
|
785
810
|
} else if(Object.prototype.toString.call(value) === "[object Array]" && value.length === 0) {
|
786
811
|
return true;
|
@@ -919,7 +944,7 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
919
944
|
// evaluate it by executing `blockHelperMissing`
|
920
945
|
this.opcode('pushProgram', program);
|
921
946
|
this.opcode('pushProgram', inverse);
|
922
|
-
this.opcode('
|
947
|
+
this.opcode('pushHash');
|
923
948
|
this.opcode('blockValue');
|
924
949
|
} else {
|
925
950
|
this.ambiguousMustache(mustache, program, inverse);
|
@@ -928,7 +953,7 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
928
953
|
// evaluate it by executing `blockHelperMissing`
|
929
954
|
this.opcode('pushProgram', program);
|
930
955
|
this.opcode('pushProgram', inverse);
|
931
|
-
this.opcode('
|
956
|
+
this.opcode('pushHash');
|
932
957
|
this.opcode('ambiguousBlockValue');
|
933
958
|
}
|
934
959
|
|
@@ -938,19 +963,24 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
938
963
|
hash: function(hash) {
|
939
964
|
var pairs = hash.pairs, pair, val;
|
940
965
|
|
941
|
-
this.opcode('
|
966
|
+
this.opcode('pushHash');
|
942
967
|
|
943
968
|
for(var i=0, l=pairs.length; i<l; i++) {
|
944
969
|
pair = pairs[i];
|
945
970
|
val = pair[1];
|
946
971
|
|
947
|
-
this.
|
972
|
+
if (this.options.stringParams) {
|
973
|
+
this.opcode('pushStringParam', val.stringModeValue, val.type);
|
974
|
+
} else {
|
975
|
+
this.accept(val);
|
976
|
+
}
|
977
|
+
|
948
978
|
this.opcode('assignToHash', pair[0]);
|
949
979
|
}
|
950
980
|
},
|
951
981
|
|
952
982
|
partial: function(partial) {
|
953
|
-
var
|
983
|
+
var partialName = partial.partialName;
|
954
984
|
this.usePartial = true;
|
955
985
|
|
956
986
|
if(partial.context) {
|
@@ -959,7 +989,7 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
959
989
|
this.opcode('push', 'depth0');
|
960
990
|
}
|
961
991
|
|
962
|
-
this.opcode('invokePartial',
|
992
|
+
this.opcode('invokePartial', partialName.name);
|
963
993
|
this.opcode('append');
|
964
994
|
},
|
965
995
|
|
@@ -1000,17 +1030,17 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1000
1030
|
simpleMustache: function(mustache, program, inverse) {
|
1001
1031
|
var id = mustache.id;
|
1002
1032
|
|
1003
|
-
|
1004
|
-
|
1005
|
-
|
1006
|
-
|
1007
|
-
this.opcode('lookupOnContext', id.parts[0]);
|
1008
|
-
for(var i=1, l=id.parts.length; i<l; i++) {
|
1009
|
-
this.opcode('lookup', id.parts[i]);
|
1010
|
-
}
|
1033
|
+
if (id.type === 'DATA') {
|
1034
|
+
this.DATA(id);
|
1035
|
+
} else if (id.parts.length) {
|
1036
|
+
this.ID(id);
|
1011
1037
|
} else {
|
1038
|
+
// Simplified ID for `this`
|
1039
|
+
this.addDepth(id.depth);
|
1040
|
+
this.opcode('getContext', id.depth);
|
1012
1041
|
this.opcode('pushContext');
|
1013
1042
|
}
|
1043
|
+
|
1014
1044
|
this.opcode('resolvePossibleLambda');
|
1015
1045
|
},
|
1016
1046
|
|
@@ -1030,13 +1060,24 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1030
1060
|
ID: function(id) {
|
1031
1061
|
this.addDepth(id.depth);
|
1032
1062
|
this.opcode('getContext', id.depth);
|
1033
|
-
|
1063
|
+
|
1064
|
+
var name = id.parts[0];
|
1065
|
+
if (!name) {
|
1066
|
+
this.opcode('pushContext');
|
1067
|
+
} else {
|
1068
|
+
this.opcode('lookupOnContext', id.parts[0]);
|
1069
|
+
}
|
1034
1070
|
|
1035
1071
|
for(var i=1, l=id.parts.length; i<l; i++) {
|
1036
1072
|
this.opcode('lookup', id.parts[i]);
|
1037
1073
|
}
|
1038
1074
|
},
|
1039
1075
|
|
1076
|
+
DATA: function(data) {
|
1077
|
+
this.options.data = true;
|
1078
|
+
this.opcode('lookupData', data.id);
|
1079
|
+
},
|
1080
|
+
|
1040
1081
|
STRING: function(string) {
|
1041
1082
|
this.opcode('pushString', string.string);
|
1042
1083
|
},
|
@@ -1061,6 +1102,7 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1061
1102
|
},
|
1062
1103
|
|
1063
1104
|
addDepth: function(depth) {
|
1105
|
+
if(isNaN(depth)) { throw new Error("EWOT"); }
|
1064
1106
|
if(depth === 0) { return; }
|
1065
1107
|
|
1066
1108
|
if(!this.depths[depth]) {
|
@@ -1102,7 +1144,7 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1102
1144
|
}
|
1103
1145
|
|
1104
1146
|
this.opcode('getContext', param.depth || 0);
|
1105
|
-
this.opcode('pushStringParam', param.
|
1147
|
+
this.opcode('pushStringParam', param.stringModeValue, param.type);
|
1106
1148
|
} else {
|
1107
1149
|
this[param.type](param);
|
1108
1150
|
}
|
@@ -1116,7 +1158,7 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1116
1158
|
if(mustache.hash) {
|
1117
1159
|
this.hash(mustache.hash);
|
1118
1160
|
} else {
|
1119
|
-
this.opcode('
|
1161
|
+
this.opcode('pushHash');
|
1120
1162
|
}
|
1121
1163
|
|
1122
1164
|
return params;
|
@@ -1133,7 +1175,7 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1133
1175
|
if(mustache.hash) {
|
1134
1176
|
this.hash(mustache.hash);
|
1135
1177
|
} else {
|
1136
|
-
this.opcode('
|
1178
|
+
this.opcode('pushHash');
|
1137
1179
|
}
|
1138
1180
|
|
1139
1181
|
return params;
|
@@ -1227,7 +1269,8 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1227
1269
|
if (!this.isChild) {
|
1228
1270
|
var namespace = this.namespace;
|
1229
1271
|
var copies = "helpers = helpers || " + namespace + ".helpers;";
|
1230
|
-
if(this.environment.usePartial) { copies = copies + " partials = partials || " + namespace + ".partials;"; }
|
1272
|
+
if (this.environment.usePartial) { copies = copies + " partials = partials || " + namespace + ".partials;"; }
|
1273
|
+
if (this.options.data) { copies = copies + " data = data || {};"; }
|
1231
1274
|
out.push(copies);
|
1232
1275
|
} else {
|
1233
1276
|
out.push('');
|
@@ -1307,7 +1350,7 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1307
1350
|
|
1308
1351
|
this.replaceStack(function(current) {
|
1309
1352
|
params.splice(1, 0, current);
|
1310
|
-
return
|
1353
|
+
return "blockHelperMissing.call(" + params.join(", ") + ")";
|
1311
1354
|
});
|
1312
1355
|
},
|
1313
1356
|
|
@@ -1419,7 +1462,7 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1419
1462
|
this.context.aliases.functionType = '"function"';
|
1420
1463
|
|
1421
1464
|
this.replaceStack(function(current) {
|
1422
|
-
return "typeof " + current + " === functionType ? " + current + "() : " + current;
|
1465
|
+
return "typeof " + current + " === functionType ? " + current + ".apply(depth0) : " + current;
|
1423
1466
|
});
|
1424
1467
|
},
|
1425
1468
|
|
@@ -1436,6 +1479,16 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1436
1479
|
});
|
1437
1480
|
},
|
1438
1481
|
|
1482
|
+
// [lookupData]
|
1483
|
+
//
|
1484
|
+
// On stack, before: ...
|
1485
|
+
// On stack, after: data[id], ...
|
1486
|
+
//
|
1487
|
+
// Push the result of looking up `id` on the current data
|
1488
|
+
lookupData: function(id) {
|
1489
|
+
this.pushStack(this.nameLookup('data', id, 'data'));
|
1490
|
+
},
|
1491
|
+
|
1439
1492
|
// [pushStringParam]
|
1440
1493
|
//
|
1441
1494
|
// On stack, before: ...
|
@@ -1444,9 +1497,24 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1444
1497
|
// This opcode is designed for use in string mode, which
|
1445
1498
|
// provides the string value of a parameter along with its
|
1446
1499
|
// depth rather than resolving it immediately.
|
1447
|
-
pushStringParam: function(string) {
|
1500
|
+
pushStringParam: function(string, type) {
|
1448
1501
|
this.pushStackLiteral('depth' + this.lastContext);
|
1449
|
-
|
1502
|
+
|
1503
|
+
this.pushString(type);
|
1504
|
+
|
1505
|
+
if (typeof string === 'string') {
|
1506
|
+
this.pushString(string);
|
1507
|
+
} else {
|
1508
|
+
this.pushStackLiteral(string);
|
1509
|
+
}
|
1510
|
+
},
|
1511
|
+
|
1512
|
+
pushHash: function() {
|
1513
|
+
this.push('{}');
|
1514
|
+
|
1515
|
+
if (this.options.stringParams) {
|
1516
|
+
this.register('hashTypes', '{}');
|
1517
|
+
}
|
1450
1518
|
},
|
1451
1519
|
|
1452
1520
|
// [pushString]
|
@@ -1554,7 +1622,7 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1554
1622
|
var nextStack = this.nextStack();
|
1555
1623
|
|
1556
1624
|
this.source.push('if (foundHelper) { ' + nextStack + ' = foundHelper.call(' + helper.callParams + '); }');
|
1557
|
-
this.source.push('else { ' + nextStack + ' = ' + nonHelper + '; ' + nextStack + ' = typeof ' + nextStack + ' === functionType ? ' + nextStack + '() : ' + nextStack + '; }');
|
1625
|
+
this.source.push('else { ' + nextStack + ' = ' + nonHelper + '; ' + nextStack + ' = typeof ' + nextStack + ' === functionType ? ' + nextStack + '.apply(depth0) : ' + nextStack + '; }');
|
1558
1626
|
},
|
1559
1627
|
|
1560
1628
|
// [invokePartial]
|
@@ -1572,7 +1640,7 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1572
1640
|
}
|
1573
1641
|
|
1574
1642
|
this.context.aliases.self = "this";
|
1575
|
-
this.pushStack("self.invokePartial(" + params.join(", ") + ")
|
1643
|
+
this.pushStack("self.invokePartial(" + params.join(", ") + ")");
|
1576
1644
|
},
|
1577
1645
|
|
1578
1646
|
// [assignToHash]
|
@@ -1584,6 +1652,13 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1584
1652
|
// and pushes the hash back onto the stack.
|
1585
1653
|
assignToHash: function(key) {
|
1586
1654
|
var value = this.popStack();
|
1655
|
+
|
1656
|
+
if (this.options.stringParams) {
|
1657
|
+
var type = this.popStack();
|
1658
|
+
this.popStack();
|
1659
|
+
this.source.push("hashTypes['" + key + "'] = " + type + ";");
|
1660
|
+
}
|
1661
|
+
|
1587
1662
|
var hash = this.topStack();
|
1588
1663
|
|
1589
1664
|
this.source.push(hash + "['" + key + "'] = " + value + ";");
|
@@ -1653,21 +1728,28 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1653
1728
|
},
|
1654
1729
|
|
1655
1730
|
pushStack: function(item) {
|
1656
|
-
this.
|
1657
|
-
this.
|
1658
|
-
|
1731
|
+
var stack = this.incrStack();
|
1732
|
+
this.source.push(stack + " = " + item + ";");
|
1733
|
+
this.compileStack.push(stack);
|
1734
|
+
return stack;
|
1659
1735
|
},
|
1660
1736
|
|
1661
1737
|
replaceStack: function(callback) {
|
1662
|
-
var
|
1738
|
+
var stack = this.topStack(),
|
1739
|
+
item = callback.call(this, stack);
|
1663
1740
|
|
1664
|
-
|
1665
|
-
|
1741
|
+
// Prevent modification of the context depth variable. Through replaceStack
|
1742
|
+
if (/^depth/.test(stack)) {
|
1743
|
+
stack = this.nextStack();
|
1744
|
+
}
|
1745
|
+
|
1746
|
+
this.source.push(stack + " = " + item + ";");
|
1747
|
+
return stack;
|
1666
1748
|
},
|
1667
1749
|
|
1668
1750
|
nextStack: function(skipCompileStack) {
|
1669
1751
|
var name = this.incrStack();
|
1670
|
-
this.compileStack.push(
|
1752
|
+
this.compileStack.push(name);
|
1671
1753
|
return name;
|
1672
1754
|
},
|
1673
1755
|
|
@@ -1722,7 +1804,7 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1722
1804
|
// the params and contexts arguments are passed in arrays
|
1723
1805
|
// to fill in
|
1724
1806
|
setupParams: function(paramSize, params) {
|
1725
|
-
var options = [], contexts = [], param, inverse, program;
|
1807
|
+
var options = [], contexts = [], types = [], param, inverse, program;
|
1726
1808
|
|
1727
1809
|
options.push("hash:" + this.popStack());
|
1728
1810
|
|
@@ -1751,12 +1833,15 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1751
1833
|
params.push(param);
|
1752
1834
|
|
1753
1835
|
if(this.options.stringParams) {
|
1836
|
+
types.push(this.popStack());
|
1754
1837
|
contexts.push(this.popStack());
|
1755
1838
|
}
|
1756
1839
|
}
|
1757
1840
|
|
1758
1841
|
if (this.options.stringParams) {
|
1759
1842
|
options.push("contexts:[" + contexts.join(",") + "]");
|
1843
|
+
options.push("types:[" + types.join(",") + "]");
|
1844
|
+
options.push("hashTypes:hashTypes");
|
1760
1845
|
}
|
1761
1846
|
|
1762
1847
|
if(this.options.data) {
|
@@ -1802,16 +1887,28 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1802
1887
|
})(Handlebars.Compiler, Handlebars.JavaScriptCompiler);
|
1803
1888
|
|
1804
1889
|
Handlebars.precompile = function(string, options) {
|
1805
|
-
|
1890
|
+
if (typeof string !== 'string') {
|
1891
|
+
throw new Handlebars.Exception("You must pass a string to Handlebars.compile. You passed " + string);
|
1892
|
+
}
|
1806
1893
|
|
1894
|
+
options = options || {};
|
1895
|
+
if (!('data' in options)) {
|
1896
|
+
options.data = true;
|
1897
|
+
}
|
1807
1898
|
var ast = Handlebars.parse(string);
|
1808
1899
|
var environment = new Handlebars.Compiler().compile(ast, options);
|
1809
1900
|
return new Handlebars.JavaScriptCompiler().compile(environment, options);
|
1810
1901
|
};
|
1811
1902
|
|
1812
1903
|
Handlebars.compile = function(string, options) {
|
1813
|
-
|
1904
|
+
if (typeof string !== 'string') {
|
1905
|
+
throw new Handlebars.Exception("You must pass a string to Handlebars.compile. You passed " + string);
|
1906
|
+
}
|
1814
1907
|
|
1908
|
+
options = options || {};
|
1909
|
+
if (!('data' in options)) {
|
1910
|
+
options.data = true;
|
1911
|
+
}
|
1815
1912
|
var compiled;
|
1816
1913
|
function compile() {
|
1817
1914
|
var ast = Handlebars.parse(string);
|
@@ -1885,7 +1982,7 @@ Handlebars.VM = {
|
|
1885
1982
|
} else if (!Handlebars.compile) {
|
1886
1983
|
throw new Handlebars.Exception("The partial " + name + " could not be compiled when running in runtime-only mode");
|
1887
1984
|
} else {
|
1888
|
-
partials[name] = Handlebars.compile(partial);
|
1985
|
+
partials[name] = Handlebars.compile(partial, {data: data !== undefined});
|
1889
1986
|
return partials[name](context, options);
|
1890
1987
|
}
|
1891
1988
|
}
|