skulduggery.go (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
// // Copyright (c) 2019 Ted Unangst <tedu@tedunangst.com> // // Permission to use, copy, modify, and distribute this software for any // purpose with or without fee is hereby granted, provided that the above // copyright notice and this permission notice appear in all copies. // // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR // ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. package main import ( "regexp" "github.com/mattn/go-runewidth" ) var bigboldshitz = "๐๐๐๐๐๐ ๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐" var lilboldshitz = "๐๐๐๐๐๐๐ ๐ก๐ข๐ฃ๐ค๐ฅ๐ฆ๐ง๐จ๐ฉ๐ช๐ซ๐ฌ๐ญ๐ฎ๐ฏ๐ฐ๐ฑ๐ฒ๐ณ" var biggothshitz = "๐ฌ๐ญ๐ฎ๐ฏ๐ฐ๐ฑ๐ฒ๐ณ๐ด๐ต๐ถ๐ท๐ธ๐น๐บ๐ป๐ผ๐ฝ๐พ๐ฟ๐๐๐๐๐๐ " var lilgothshitz = "๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐" var bigitalshitz = "๐จ๐ฉ๐ช๐ซ๐ฌ๐ญ๐ฎ๐ฏ๐ฐ๐ฑ๐ฒ๐ณ๐ด๐ต๐ถ๐ท๐ธ๐น๐บ๐ป๐ผ๐ฝ๐พ๐ฟ๐๐" var lilitalshitz = "๐๐๐๐ ๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐" var bigbangshitz = "๐ธ๐นโ๐ป๐ผ๐ฝ๐พโ๐๐๐๐๐โ๐โโโ๐๐๐๐๐๐๐โค" var lilbangshitz = "๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐ ๐ก๐ข๐ฃ๐ค๐ฅ๐ฆ๐ง๐จ๐ฉ๐ช๐ซ" var re_alltheshitz = regexp.MustCompile(`([` + bigboldshitz + lilboldshitz + biggothshitz + lilgothshitz + bigitalshitz + lilitalshitz + bigbangshitz + lilbangshitz + `] ?){3,}`) // this may not be especially fast func unpucker(s string) string { fixer := func(r string) string { x := make([]byte, len(r)) xi := 0 loop1: for _, c := range r { xi++ if c == ' ' { x[xi] = ' ' continue } for _, set := range []string{bigboldshitz, biggothshitz, bigitalshitz, bigbangshitz} { i := 0 for _, rr := range set { if rr == c { x[xi] = byte('A' + i) continue loop1 } i++ } } for _, set := range []string{lilboldshitz, lilgothshitz, lilitalshitz, lilbangshitz} { i := 0 for _, rr := range set { if rr == c { x[xi] = byte('a' + i) continue loop1 } i++ } } x[xi] = '.' } return string(x) } s = re_alltheshitz.ReplaceAllStringFunc(s, fixer) zw := false for _, c := range s { if runewidth.RuneWidth(c) == 0 { zw = true break } } if zw { x := make([]byte, 0, len(s)) zw = false for _, c := range s { if runewidth.RuneWidth(c) == 0 { if zw { continue } zw = true } else { zw = false } q := string(c) x = append(x, []byte(q)...) } return string(x) } return s } |