// LineNumber computes the line number in the input source for the given node // within the given template. func (r *Registry) LineNumber(templateName string, node ast.Node) int { var src, ok = r.sourceByTemplateName[templateName] if !ok { log.Println("template not found:", templateName) return 0 } return 1 + strings.Count(src[:node.Position()], "\n") }
// parseTernary parses the ternary operator within an expression. // itemTernIf has already been read, and the condition is provided. func (t *tree) parseTernary(cond ast.Node) ast.Node { n1 := t.parseExpr(0) t.expect(itemColon, "ternary") n2 := t.parseExpr(0) result := &ast.TernNode{cond.Position(), cond, n1, n2} if t.peek().typ == itemColon { t.next() return t.parseTernary(result) } return result }