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