templatehelper.go

 1package ansi
 2
 3import (
 4	"regexp"
 5	"strings"
 6	"text/template"
 7
 8	"golang.org/x/text/cases"
 9	"golang.org/x/text/language"
10)
11
12// TemplateFuncMap contains a few useful template helpers.
13var (
14	TemplateFuncMap = template.FuncMap{
15		"Left": func(values ...interface{}) string {
16			s := values[0].(string)
17			n := values[1].(int)
18			if n > len(s) {
19				n = len(s)
20			}
21
22			return s[:n]
23		},
24		"Matches": func(values ...interface{}) bool {
25			ok, _ := regexp.MatchString(values[1].(string), values[0].(string))
26			return ok
27		},
28		"Mid": func(values ...interface{}) string {
29			s := values[0].(string)
30			l := values[1].(int)
31			if l > len(s) {
32				l = len(s)
33			}
34
35			if len(values) > 2 { //nolint:mnd
36				r := values[2].(int)
37				if r > len(s) {
38					r = len(s)
39				}
40				return s[l:r]
41			}
42			return s[l:]
43		},
44		"Right": func(values ...interface{}) string {
45			s := values[0].(string)
46			n := len(s) - values[1].(int)
47			if n < 0 {
48				n = 0
49			}
50
51			return s[n:]
52		},
53		"Last": func(values ...interface{}) string {
54			return values[0].([]string)[len(values[0].([]string))-1]
55		},
56		// strings functions
57		"Compare":      strings.Compare, // 1.5+ only
58		"Contains":     strings.Contains,
59		"ContainsAny":  strings.ContainsAny,
60		"Count":        strings.Count,
61		"EqualFold":    strings.EqualFold,
62		"HasPrefix":    strings.HasPrefix,
63		"HasSuffix":    strings.HasSuffix,
64		"Index":        strings.Index,
65		"IndexAny":     strings.IndexAny,
66		"Join":         strings.Join,
67		"LastIndex":    strings.LastIndex,
68		"LastIndexAny": strings.LastIndexAny,
69		"Repeat":       strings.Repeat,
70		"Replace":      strings.Replace,
71		"Split":        strings.Split,
72		"SplitAfter":   strings.SplitAfter,
73		"SplitAfterN":  strings.SplitAfterN,
74		"SplitN":       strings.SplitN,
75		"Title":        cases.Title(language.English).String,
76		"ToLower":      cases.Lower(language.English).String,
77		"ToTitle":      cases.Upper(language.English).String,
78		"ToUpper":      strings.ToUpper,
79		"Trim":         strings.Trim,
80		"TrimLeft":     strings.TrimLeft,
81		"TrimPrefix":   strings.TrimPrefix,
82		"TrimRight":    strings.TrimRight,
83		"TrimSpace":    strings.TrimSpace,
84		"TrimSuffix":   strings.TrimSuffix,
85	}
86)