exp/template: add functions print and println.

R=golang-dev, adg
CC=golang-dev
https://golang.org/cl/4687041
This commit is contained in:
Rob Pike 2011-07-11 09:19:18 +10:00
parent 4acddca41b
commit abae847134
2 changed files with 22 additions and 10 deletions

View File

@ -207,8 +207,10 @@ var execTests = []execTest{
{"if emptymap", "{{if .MSIEmpty}}NON-EMPTY{{else}}EMPTY{{end}}", "EMPTY", tVal, true},
{"if map", "{{if .MSI}}NON-EMPTY{{else}}EMPTY{{end}}", "NON-EMPTY", tVal, true},
// Printf.
{"printf", `{{printf "hello, printf"}}`, "hello, printf", tVal, true},
// Print etc.
{"print", `{{print "hello, print"}}`, "hello, print", tVal, true},
{"print", `{{print 1 2 3}}`, "1 2 3", tVal, true},
{"println", `{{println 1 2 3}}`, "1 2 3\n", tVal, true},
{"printf int", `{{printf "%04x" 127}}`, "007f", tVal, true},
{"printf float", `{{printf "%g" 3.5}}`, "3.5", tVal, true},
{"printf complex", `{{printf "%g" 1+7i}}`, "(1+7i)", tVal, true},

View File

@ -17,17 +17,27 @@ import (
// FuncMap is the type of the map defining the mapping from names to functions.
// Each function must have either a single return value, or two return values of
// which the second has type os.Error.
// which the second has type os.Error. If the second argument evaluates to non-nil
// during execution, execution terminates and the error is returned by Execute.
type FuncMap map[string]interface{}
var funcs = map[string]reflect.Value{
"and": reflect.ValueOf(and),
"html": reflect.ValueOf(HTMLEscaper),
"index": reflect.ValueOf(index),
"js": reflect.ValueOf(JSEscaper),
"not": reflect.ValueOf(not),
"or": reflect.ValueOf(or),
"printf": reflect.ValueOf(fmt.Sprintf),
"and": reflect.ValueOf(and),
"html": reflect.ValueOf(HTMLEscaper),
"index": reflect.ValueOf(index),
"js": reflect.ValueOf(JSEscaper),
"not": reflect.ValueOf(not),
"or": reflect.ValueOf(or),
"print": reflect.ValueOf(fmt.Sprint),
"printf": reflect.ValueOf(fmt.Sprintf),
"println": reflect.ValueOf(fmt.Sprintln),
}
// Funcs adds to the global function map the elements of the
// argument map. It panics if a value in the map is not a function
// with appropriate return type.
func Funcs(funcMap FuncMap) {
addFuncs(funcs, funcMap)
}
// addFuncs adds to values the functions in funcs, converting them to reflect.Values.