// closeBlock : OPEN_ENDBLOCK helperName CLOSE func (p *parser) parseCloseBlock(block *ast.BlockStatement) { // OPEN_ENDBLOCK tok := p.shift() if tok.Kind != lexer.TokenOpenEndBlock { errExpected(lexer.TokenOpenEndBlock, tok) } // helperName endId := p.parseHelperName() closeName, ok := ast.HelperNameStr(endId) if !ok { errNode(endId, "Erroneous closing expression") } openName := block.Expression.Canonical() if openName != closeName { errNode(endId, fmt.Sprintf("%s doesn't match %s", openName, closeName)) } // CLOSE tokClose := p.shift() if tokClose.Kind != lexer.TokenClose { errExpected(lexer.TokenClose, tokClose) } block.CloseStrip = ast.NewStrip(tok.Val, tokClose.Val) }
// setBlockInverseStrip is called when parsing `block` (openBlock | openInverse) and `inverseChain` // // TODO: This was totally cargo culted ! CHECK THAT ! // // cf. prepareBlock() in: // https://github.com/wycats/handlebars.js/blob/master/lib/handlebars/compiler/helper.js func setBlockInverseStrip(block *ast.BlockStatement) { if block.Inverse == nil { return } if block.Inverse.Chained { b, _ := block.Inverse.Body[0].(*ast.BlockStatement) b.CloseStrip = block.CloseStrip } block.InverseStrip = block.Inverse.Strip }