mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			75 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.0 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)
 | 
						|
}
 |