This commit is contained in:
Tomas Dvorak
2025-11-14 15:53:12 +01:00
parent f3db65d350
commit c941313fd5
149 changed files with 4366 additions and 12935 deletions
+52
View File
@@ -1,8 +1,10 @@
package services
import (
"html"
"regexp"
"strings"
"unicode/utf8"
)
// A compact list of Czech and English bad words with family-friendly replacements.
@@ -138,6 +140,56 @@ func FilterBadWords(s string) (string, bool) {
return out, replaced
}
func MaskBadWords(s string) (string, []string) {
if strings.TrimSpace(s) == "" { return s, nil }
out := s
originals := []string{}
for _, cr := range compiledRepls {
out = cr.re.ReplaceAllStringFunc(out, func(m string) string {
originals = append(originals, m)
n := len([]rune(m))
if n <= 0 { return m }
return strings.Repeat("*", n)
})
}
return out, originals
}
func MaskBadWordsHTML(s string) string {
if strings.TrimSpace(s) == "" { return html.EscapeString(s) }
var b strings.Builder
i := 0
for i < len(s) {
sub := s[i:]
best := ""
bestLen := 0
for _, cr := range compiledRepls {
if loc := cr.re.FindStringIndex(sub); loc != nil && loc[0] == 0 {
m := sub[:loc[1]]
if len(m) > bestLen {
best = m
bestLen = len(m)
}
}
}
if bestLen > 0 {
n := utf8.RuneCountInString(best)
b.WriteString(`<span class="cw" title="`)
b.WriteString(html.EscapeString(best))
b.WriteString(`">`)
b.WriteString(strings.Repeat("*", n))
b.WriteString("</span>")
i += bestLen
continue
}
r, size := utf8.DecodeRuneInString(sub)
if r == utf8.RuneError && size == 0 { break }
b.WriteString(html.EscapeString(sub[:size]))
i += size
}
return b.String()
}
// ContainsSensitiveWords returns true and the matched words if content contains strong/explicit terms.
func ContainsSensitiveWords(s string) (bool, []string) {
if strings.TrimSpace(s) == "" { return false, nil }