summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--internal/filter/filters.go161
1 files changed, 161 insertions, 0 deletions
diff --git a/internal/filter/filters.go b/internal/filter/filters.go
index 56d1714..8e6018e 100644
--- a/internal/filter/filters.go
+++ b/internal/filter/filters.go
@@ -8,6 +8,11 @@ var FilterList = map[string]func() Filter{
"uppercase": NewUppercaseFilter,
"lowercase": NewLowercaseFilter,
"lowercase_extra": NewLowercaseFilterWithExtraSteps,
+ "doubler": NewDoubleFilter,
+ "inverse": NewInverseFilter,
+ "l33t": NewLeetFilter,
+ "reverse": NewReverseFilter,
+ "uwu": NewUwuFilter,
}
func NewUppercaseFilter() Filter {
@@ -44,3 +49,159 @@ func NewLowercaseFilterWithExtraSteps() Filter {
return filter
}
+
+func doubleFilterAction(content string) string {
+ var temp strings.Builder
+
+ for _, character := range content {
+ for i := 0; i < 2; i++ {
+ temp.WriteString(string(character))
+ }
+ }
+
+ return temp.String()
+}
+
+func NewDoubleFilter() Filter {
+ filter := Filter{
+ name: "Doubler",
+ action: doubleFilterAction,
+ subfilters: []Filter{},
+ }
+
+ return filter
+}
+
+func inverseFilterAction(content string) string {
+ var temp strings.Builder
+
+ for _, character := range content {
+ strchar := string(character)
+ lower := strings.ToLower(strchar)
+ upper := strings.ToUpper(strchar)
+
+ if strchar == lower {
+ temp.WriteString(upper)
+ }
+
+ if strchar == upper {
+ temp.WriteString(lower)
+ }
+ }
+
+ return temp.String()
+}
+
+func NewInverseFilter() Filter {
+ filter := Filter{
+ name: "Inverse case",
+ action: inverseFilterAction,
+ subfilters: []Filter{},
+ }
+
+ return filter
+}
+
+func leetFilterAction(content string) string {
+ replacements := map[string]string{
+ "e": "3",
+ "E": "3",
+ "i": "1",
+ "I": "1",
+ "a": "4",
+ "A": "4",
+ "b": "8",
+ "B": "8",
+ "t": "7",
+ "T": "7",
+ "o": "0",
+ "O": "0",
+ }
+
+ var temp strings.Builder
+
+ for _, character := range content {
+ strchar := string(character)
+ value, ok := replacements[strchar]
+ if ok {
+ temp.WriteString(value)
+ } else {
+ temp.WriteString(strchar)
+ }
+ }
+
+ return temp.String()
+}
+
+func NewLeetFilter() Filter {
+ filter := Filter{
+ name: "l33t",
+ action: leetFilterAction,
+ subfilters: []Filter{},
+ }
+
+ return filter
+}
+
+// https://stackoverflow.com/a/1754209
+func reverseString(content string) string {
+ n := 0
+ rune := make([]rune, len(content))
+ for _, r := range content {
+ rune[n] = r
+ n++
+ }
+ rune = rune[0:n]
+
+ for i := 0; i < n/2; i++ {
+ rune[i], rune[n-1-i] = rune[n-1-i], rune[i]
+ }
+
+ output := string(rune)
+ return output
+}
+
+func NewReverseFilter() Filter {
+ filter := Filter{
+ name: "Reverser",
+ action: reverseString,
+ subfilters: []Filter{},
+ }
+
+ return filter
+}
+
+func uwuFilterAction(content string) string {
+ var temp strings.Builder
+
+ replacements := map[string]string{
+ "r": "w",
+ "u": "uwu",
+ "l": "w",
+ "R": "W",
+ "U": "UWU",
+ "L": "W",
+ }
+
+ for _, character := range content {
+ strchar := string(character)
+ value, ok := replacements[strchar]
+ if ok {
+ temp.WriteString(value)
+ } else {
+ temp.WriteString(strchar)
+ }
+ }
+
+ return temp.String()
+}
+
+func NewUwuFilter() Filter {
+ filter := Filter{
+ name: "Uwuifier",
+ action: uwuFilterAction,
+ subfilters: []Filter{},
+ }
+
+ return filter
+}