github.com/mineiros-io/terradoc@v0.0.9-0.20220711062319-018bd4ae81f5/internal/renderers/template_functions.go (about) 1 package renderers 2 3 import ( 4 "regexp" 5 "strings" 6 "text/template" 7 ) 8 9 var TemplatesFuncMap = template.FuncMap{ 10 "urlfragment": urlfragment, 11 "indent": indent, 12 "repeat": repeat, 13 "multiply": func(x, y int) int { return x * y }, 14 "getIndent": GetIndent, 15 "newline": newLine, 16 } 17 18 var urlfragmentRegex *regexp.Regexp 19 20 func urlfragment(str string) string { 21 val := urlfragmentRegex.ReplaceAllString(str, "") 22 23 return strings.ReplaceAll(strings.ToLower(val), " ", "-") 24 } 25 26 func newLine() string { 27 return "\n\n" 28 } 29 30 func GetIndent(level int) int { 31 return level*2 + 2 32 } 33 34 func indent(level int, v string) string { 35 indent := strings.Repeat(" ", level) 36 37 trimmedString := strings.TrimSpace(v) 38 if trimmedString == "" { 39 return "" 40 } 41 42 lines := strings.SplitAfter(trimmedString, "\n") 43 44 var result string 45 46 for _, line := range lines { 47 if strings.Trim(line, " ") == "\n" { 48 result += "\n" 49 } else { 50 result += indent + line 51 } 52 } 53 54 return result 55 } 56 57 func repeat(str string, n int) string { 58 return strings.Repeat(str, n) 59 } 60 61 func init() { 62 urlfragmentRegex = regexp.MustCompile("[^a-zA-Z0-9 -]+") 63 }