From a7e8c337dbc16602d3a0f7e9061041be9ce521a7 Mon Sep 17 00:00:00 2001 From: Sasha Koshka Date: Thu, 12 Dec 2024 00:26:22 -0500 Subject: [PATCH] providers/strings: Add string functions provider --- providers/strings/strings.go | 73 ++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 providers/strings/strings.go diff --git a/providers/strings/strings.go b/providers/strings/strings.go new file mode 100644 index 0000000..e056d42 --- /dev/null +++ b/providers/strings/strings.go @@ -0,0 +1,73 @@ +package strings + +import "strings" +import "unicode" +import "html/template" +import "git.tebibyte.media/sashakoshka/step" + +var _ step.FuncProvider = new(Provider) + +// Provider provides string functions. +type Provider struct { + +} + +// Package fulfills the step.Provider interface. +func (this *Provider) Package () string { + return "strings" +} + +// FuncMap fulfills the step.FuncProvider interface. +func (this *Provider) FuncMap () template.FuncMap { + return template.FuncMap { + "strip": funcStrip, + "stripAny": funcStripAny, + "stripNonLetters": funcStripNonLetters, + "stripNonPrintables": funcStripNonPrintables, + "stripSlashes": funcStripSlashes, + } +} + +func funcStrip (input string) string { + output := strings.Builder { } + for _, run := range input { + if !unicode.IsSpace(run) { + output.WriteRune(run) + } + } + return output.String() +} + +func funcStripAny (chars, input string) string { + output := strings.Builder { } + for _, run := range input { + if strings.IndexRune(chars, run) < 0 { + output.WriteRune(run) + } + } + return output.String() +} + +func funcStripNonLetters (input string) string { + output := strings.Builder { } + for _, run := range input { + if unicode.IsLetter(run) { + output.WriteRune(run) + } + } + return output.String() +} + +func funcStripNonPrintables (input string) string { + output := strings.Builder { } + for _, run := range input { + if unicode.IsPrint(run) { + output.WriteRune(run) + } + } + return output.String() +} + +func funcStripSlashes (input string) string { + return strings.ReplaceAll(input, "/", "") +}