mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-14 20:37:55 -05:00
75 lines
2 KiB
Go
75 lines
2 KiB
Go
|
// Copyright 2015 The Go Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style
|
||
|
// license that can be found in the LICENSE file.
|
||
|
|
||
|
// This file contains the code to handle template options.
|
||
|
|
||
|
package template
|
||
|
|
||
|
import "strings"
|
||
|
|
||
|
// missingKeyAction defines how to respond to indexing a map with a key that is not present.
|
||
|
type missingKeyAction int
|
||
|
|
||
|
const (
|
||
|
mapInvalid missingKeyAction = iota // Return an invalid reflect.Value.
|
||
|
mapZeroValue // Return the zero value for the map element.
|
||
|
mapError // Error out
|
||
|
)
|
||
|
|
||
|
type option struct {
|
||
|
missingKey missingKeyAction
|
||
|
}
|
||
|
|
||
|
// Option sets options for the template. Options are described by
|
||
|
// strings, either a simple string or "key=value". There can be at
|
||
|
// most one equals sign in an option string. If the option string
|
||
|
// is unrecognized or otherwise invalid, Option panics.
|
||
|
//
|
||
|
// Known options:
|
||
|
//
|
||
|
// missingkey: Control the behavior during execution if a map is
|
||
|
// indexed with a key that is not present in the map.
|
||
|
// "missingkey=default" or "missingkey=invalid"
|
||
|
// The default behavior: Do nothing and continue execution.
|
||
|
// If printed, the result of the index operation is the string
|
||
|
// "<no value>".
|
||
|
// "missingkey=zero"
|
||
|
// The operation returns the zero value for the map type's element.
|
||
|
// "missingkey=error"
|
||
|
// Execution stops immediately with an error.
|
||
|
//
|
||
|
func (t *Template) Option(opt ...string) *Template {
|
||
|
t.init()
|
||
|
for _, s := range opt {
|
||
|
t.setOption(s)
|
||
|
}
|
||
|
return t
|
||
|
}
|
||
|
|
||
|
func (t *Template) setOption(opt string) {
|
||
|
if opt == "" {
|
||
|
panic("empty option string")
|
||
|
}
|
||
|
elems := strings.Split(opt, "=")
|
||
|
switch len(elems) {
|
||
|
case 2:
|
||
|
// key=value
|
||
|
switch elems[0] {
|
||
|
case "missingkey":
|
||
|
switch elems[1] {
|
||
|
case "invalid", "default":
|
||
|
t.option.missingKey = mapInvalid
|
||
|
return
|
||
|
case "zero":
|
||
|
t.option.missingKey = mapZeroValue
|
||
|
return
|
||
|
case "error":
|
||
|
t.option.missingKey = mapError
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
panic("unrecognized option: " + opt)
|
||
|
}
|