Skip to content

Instantly share code, notes, and snippets.

@evanxg852000
Created December 24, 2018 14:53
Show Gist options
  • Save evanxg852000/9599125ab21757fe61d4ba4ce31f4a5f to your computer and use it in GitHub Desktop.
Save evanxg852000/9599125ab21757fe61d4ba4ce31f4a5f to your computer and use it in GitHub Desktop.
class Templater {
...
_parse(ast, stops){
while(this._parser.pos < this._parser.tokens.length){
let token = this._parser.tokens[this._parser.pos]
let expr = token.replace(/[%{}]/g, '').trim().split(/\s(.+)/)
if(stops && Array.isArray(expr) && stops.includes(expr[0])) {
this._parser.pos += 1
return expr[0] //stop parsing nested block
}
//output
if(token.startsWith('{{')){
let outNode = new OutNode(this._parser, [token])
outNode.parse(ast)
continue
}
let keyword = expr[0]
//extend
if(keyword === 'extends'){
let templateNode = new TemplateNode(this._parser, expr)
templateNode.parse(ast)
continue
}
//block
if(keyword === 'block'){
let blockNode = new BlockNode(this._parser, expr)
blockNode.parse(ast)
continue
}
//if
if(keyword === 'if'){
let ifNode = new IfNode(this._parser, expr)
ifNode.parse(ast)
continue
}
//for
if(keyword === 'for'){
let forNode = new ForNode(this._parser, expr)
forNode.parse(ast)
continue
}
//text
let textNode = new TextNode(this._parser, [token])
textNode.parse(ast)
}
}
...
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment