74 lines
1.5 KiB
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, "/", "")
|
|
}
|