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)