github.com/charmbracelet/glamour@v0.7.0/ansi/templatehelper.go (about)

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