diff options
author | kpdecker <kpdecker@gmail.com> | 2014-11-28 17:26:52 -0600 |
---|---|---|
committer | kpdecker <kpdecker@gmail.com> | 2014-11-28 17:26:52 -0600 |
commit | 8a6796e5c09686b47945a35826d77680d589d07c (patch) | |
tree | 9cb768c41e6c3b3b39f9bcd5072ea9f472d3c1c6 /lib/handlebars/compiler/helpers.js | |
parent | 95b23095c097447ff4e1059720abfd2132cb9b2d (diff) | |
download | handlebars.js-8a6796e5c09686b47945a35826d77680d589d07c.zip handlebars.js-8a6796e5c09686b47945a35826d77680d589d07c.tar.gz handlebars.js-8a6796e5c09686b47945a35826d77680d589d07c.tar.bz2 |
Move Jison parsing out of AST into helpers
Diffstat (limited to 'lib/handlebars/compiler/helpers.js')
-rw-r--r-- | lib/handlebars/compiler/helpers.js | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/lib/handlebars/compiler/helpers.js b/lib/handlebars/compiler/helpers.js index 3d5144f..f215049 100644 --- a/lib/handlebars/compiler/helpers.js +++ b/lib/handlebars/compiler/helpers.js @@ -24,6 +24,43 @@ export function stripComment(comment) { .replace(/-?-?~?\}\}$/, ''); } +export function preparePath(data, parts, locInfo) { + /*jshint -W040 */ + locInfo = this.locInfo(locInfo); + + var original = data ? '@' : '', + dig = [], + depth = 0, + depthString = ''; + + for(var i=0,l=parts.length; i<l; i++) { + var part = parts[i].part; + original += (parts[i].separator || '') + part; + + if (part === '..' || part === '.' || part === 'this') { + if (dig.length > 0) { + throw new Exception('Invalid path: ' + original, {loc: locInfo}); + } else if (part === '..') { + depth++; + depthString += '../'; + } + } else { + dig.push(part); + } + } + + return new this.PathExpression(data, depth, dig, original, locInfo); +} + +export function prepareMustache(sexpr, open, strip, locInfo) { + /*jshint -W040 */ + // Must use charAt to support IE pre-10 + var escapeFlag = open.charAt(3) || open.charAt(2), + escaped = escapeFlag !== '{' && escapeFlag !== '&'; + + return new this.MustacheStatement(sexpr, escaped, strip, this.locInfo(locInfo)); +} + export function prepareRawBlock(openRawBlock, content, close, locInfo) { /*jshint -W040 */ if (openRawBlock.sexpr.path.original !== close) { |