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  }