...
1 package termenv
2
3 import (
4 "text/template"
5 )
6
7
8 func (o Output) TemplateFuncs() template.FuncMap {
9 return TemplateFuncs(o.Profile)
10 }
11
12
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