mirror of
https://github.com/golang/go
synced 2024-11-25 07:17:56 -07:00
exp/template: add builtin len function
R=golang-dev, dsymonds CC=golang-dev https://golang.org/cl/4868045
This commit is contained in:
parent
2e394c51d9
commit
b1d1da405a
@ -232,6 +232,8 @@ Predefined global functions are named as follows.
|
|||||||
js
|
js
|
||||||
Returns the escaped JavaScript equivalent of the textual
|
Returns the escaped JavaScript equivalent of the textual
|
||||||
representation of its arguments.
|
representation of its arguments.
|
||||||
|
len
|
||||||
|
Returns the integer length of its argument.
|
||||||
not
|
not
|
||||||
Returns the boolean negation of its single argument.
|
Returns the boolean negation of its single argument.
|
||||||
or
|
or
|
||||||
|
@ -331,6 +331,12 @@ var execTests = []execTest{
|
|||||||
{"map[WRONG]", "{{index .MSI 10}}", "", tVal, false},
|
{"map[WRONG]", "{{index .MSI 10}}", "", tVal, false},
|
||||||
{"double index", "{{index .SMSI 1 `eleven`}}", "11", tVal, true},
|
{"double index", "{{index .SMSI 1 `eleven`}}", "11", tVal, true},
|
||||||
|
|
||||||
|
// Len.
|
||||||
|
{"slice", "{{len .SI}}", "3", tVal, true},
|
||||||
|
{"map", "{{len .MSI }}", "3", tVal, true},
|
||||||
|
{"len of int", "{{len 3}}", "", tVal, false},
|
||||||
|
{"len of nothing", "{{len .Empty0}}", "", tVal, false},
|
||||||
|
|
||||||
// With.
|
// With.
|
||||||
{"with true", "{{with true}}{{.}}{{end}}", "true", tVal, true},
|
{"with true", "{{with true}}{{.}}{{end}}", "true", tVal, true},
|
||||||
{"with false", "{{with false}}{{.}}{{else}}FALSE{{end}}", "FALSE", tVal, true},
|
{"with false", "{{with false}}{{.}}{{else}}FALSE{{end}}", "FALSE", tVal, true},
|
||||||
|
@ -27,6 +27,7 @@ var builtins = FuncMap{
|
|||||||
"html": HTMLEscaper,
|
"html": HTMLEscaper,
|
||||||
"index": index,
|
"index": index,
|
||||||
"js": JSEscaper,
|
"js": JSEscaper,
|
||||||
|
"len": length,
|
||||||
"not": not,
|
"not": not,
|
||||||
"or": or,
|
"or": or,
|
||||||
"print": fmt.Sprint,
|
"print": fmt.Sprint,
|
||||||
@ -140,6 +141,21 @@ func index(item interface{}, indices ...interface{}) (interface{}, os.Error) {
|
|||||||
return v.Interface(), nil
|
return v.Interface(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Length
|
||||||
|
|
||||||
|
// length returns the length of the item, with an error if it has no defined length.
|
||||||
|
func length(item interface{}) (int, os.Error) {
|
||||||
|
v, isNil := indirect(reflect.ValueOf(item))
|
||||||
|
if isNil {
|
||||||
|
return 0, fmt.Errorf("len of nil pointer")
|
||||||
|
}
|
||||||
|
switch v.Kind() {
|
||||||
|
case reflect.Array, reflect.Chan, reflect.Map, reflect.Slice, reflect.String:
|
||||||
|
return v.Len(), nil
|
||||||
|
}
|
||||||
|
return 0, fmt.Errorf("len of type %s", v.Type())
|
||||||
|
}
|
||||||
|
|
||||||
// Boolean logic.
|
// Boolean logic.
|
||||||
|
|
||||||
func truth(a interface{}) bool {
|
func truth(a interface{}) bool {
|
||||||
|
Loading…
Reference in New Issue
Block a user