...

Source file src/github.com/muesli/termenv/templatehelper.go

Documentation: github.com/muesli/termenv

     1  package termenv
     2  
     3  import (
     4  	"text/template"
     5  )
     6  
     7  // TemplateFuncs returns template helpers for the given output.
     8  func (o Output) TemplateFuncs() template.FuncMap {
     9  	return TemplateFuncs(o.Profile)
    10  }
    11  
    12  // TemplateFuncs contains a few useful template helpers.
    13  func TemplateFuncs(p Profile) template.FuncMap {
    14  	if p == Ascii {
    15  		return noopTemplateFuncs
    16  	}
    17  
    18  	return template.FuncMap{
    19  		"Color": func(values ...interface{}) string {
    20  			s := p.String(values[len(values)-1].(string))
    21  			switch len(values) {
    22  			case 2:
    23  				s = s.Foreground(p.Color(values[0].(string)))
    24  			case 3:
    25  				s = s.
    26  					Foreground(p.Color(values[0].(string))).
    27  					Background(p.Color(values[1].(string)))
    28  			}
    29  
    30  			return s.String()
    31  		},
    32  		"Foreground": func(values ...interface{}) string {
    33  			s := p.String(values[len(values)-1].(string))
    34  			if len(values) == 2 {
    35  				s = s.Foreground(p.Color(values[0].(string)))
    36  			}
    37  
    38  			return s.String()
    39  		},
    40  		"Background": func(values ...interface{}) string {
    41  			s := p.String(values[len(values)-1].(string))
    42  			if len(values) == 2 {
    43  				s = s.Background(p.Color(values[0].(string)))
    44  			}
    45  
    46  			return s.String()
    47  		},
    48  		"Bold":      styleFunc(p, Style.Bold),
    49  		"Faint":     styleFunc(p, Style.Faint),
    50  		"Italic":    styleFunc(p, Style.Italic),
    51  		"Underline": styleFunc(p, Style.Underline),
    52  		"Overline":  styleFunc(p, Style.Overline),
    53  		"Blink":     styleFunc(p, Style.Blink),
    54  		"Reverse":   styleFunc(p, Style.Reverse),
    55  		"CrossOut":  styleFunc(p, Style.CrossOut),
    56  	}
    57  }
    58  
    59  func styleFunc(p Profile, f func(Style) Style) func(...interface{}) string {
    60  	return func(values ...interface{}) string {
    61  		s := p.String(values[0].(string))
    62  		return f(s).String()
    63  	}
    64  }
    65  
    66  var noopTemplateFuncs = template.FuncMap{
    67  	"Color":      noColorFunc,
    68  	"Foreground": noColorFunc,
    69  	"Background": noColorFunc,
    70  	"Bold":       noStyleFunc,
    71  	"Faint":      noStyleFunc,
    72  	"Italic":     noStyleFunc,
    73  	"Underline":  noStyleFunc,
    74  	"Overline":   noStyleFunc,
    75  	"Blink":      noStyleFunc,
    76  	"Reverse":    noStyleFunc,
    77  	"CrossOut":   noStyleFunc,
    78  }
    79  
    80  func noColorFunc(values ...interface{}) string {
    81  	return values[len(values)-1].(string)
    82  }
    83  
    84  func noStyleFunc(values ...interface{}) string {
    85  	return values[0].(string)
    86  }
    87  

View as plain text