step/providers/strings/strings.go

74 lines
1.5 KiB
Go

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, "/", "")
}