diff options
Diffstat (limited to 'schmutz.go')
-rw-r--r-- | schmutz.go | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/schmutz.go b/schmutz.go new file mode 100644 index 0000000..c567ccb --- /dev/null +++ b/schmutz.go @@ -0,0 +1,65 @@ +package main + +import ( + "bufio" + "flag" + "io" + "math/rand" + "os" +) + +func main() { + small := []rune{'\u0323', '\u0307', '\u0312'} + large := []rune{'\u0314', '\u031C', '\u0358', '\u0353', '\u0335'} + strikeOut := []rune{'\u0337', '\u0338', '\u0336', '\u0335', + '\u20d2', '\u20d3', '\u20e5', '\u20e6', '\u20eb'} + + var useSmall = flag.Bool("feinstaub", false, "spray dust on your text") + var useLarge = flag.Bool("grobe-mettwurst", false, "a cookie got mangled in your typewriter") + var useStrikeout = flag.Bool("nein-nein-nein", false, "this is unacceptable") + var prob = flag.Float64("p", 0.1, "probability between 0.0 and 1.0") + + flag.Parse() + + runes := []rune{} + + if *useSmall { + runes = append(runes, small...) + } + + if *useLarge { + runes = append(runes, large...) + } + + if *useStrikeout { + runes = append(runes, strikeOut...) + } + + if len(runes) == 0 { + runes = append(runes, small...) + } + + in := bufio.NewReader(os.Stdin) + + for { + str, err := in.ReadString('\n') + + if err != nil { + break + } + + io.WriteString(os.Stdout, mangle(str, runes, *prob)) + } +} + +func mangle(text string, runes []rune, prob float64) (result string) { + for _, rune := range text { + result += string(rune) + + if rand.Intn(100) <= int(100.0*prob) { + result += string(runes[rand.Intn(len(runes))]) + } + } + + return +} |