diff options
| author | ayyansea <ayyansea@gmail.com> | 2024-11-22 23:20:48 +0300 |
|---|---|---|
| committer | ayyansea <ayyansea@gmail.com> | 2024-11-22 23:20:48 +0300 |
| commit | 1a1411acb16b53d08ed8088d7fd3fabbb253a4e8 (patch) | |
| tree | c18a52fc62b8f08835fe070fd498dda6a8697c3a /internal | |
| parent | e0ff742eaba8968e1d83d006216151b1e8fb3c86 (diff) | |
feat: add double, inverse, l33t, reverse and uwu Filters
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/filter/filters.go | 161 |
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 +} |
