summaryrefslogtreecommitdiff
path: root/teleirc/matterbridge/vendor/layeh.com/gumble/gumbleutil/textmessage.go
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-11-02 15:27:18 +0800
committerMistivia <i@mistivia.com>2025-11-02 15:27:18 +0800
commite9c24f4af7ed56760f6db7941827d09f6db9020b (patch)
tree62128c43b883ce5e3148113350978755779bb5de /teleirc/matterbridge/vendor/layeh.com/gumble/gumbleutil/textmessage.go
parent58d5e7cfda4781d8a57ec52aefd02983835c301a (diff)
add matterbridge
Diffstat (limited to 'teleirc/matterbridge/vendor/layeh.com/gumble/gumbleutil/textmessage.go')
-rw-r--r--teleirc/matterbridge/vendor/layeh.com/gumble/gumbleutil/textmessage.go45
1 files changed, 45 insertions, 0 deletions
diff --git a/teleirc/matterbridge/vendor/layeh.com/gumble/gumbleutil/textmessage.go b/teleirc/matterbridge/vendor/layeh.com/gumble/gumbleutil/textmessage.go
new file mode 100644
index 0000000..1ccb62b
--- /dev/null
+++ b/teleirc/matterbridge/vendor/layeh.com/gumble/gumbleutil/textmessage.go
@@ -0,0 +1,45 @@
+package gumbleutil
+
+import (
+ "bytes"
+ "encoding/xml"
+ "strings"
+
+ "layeh.com/gumble/gumble"
+)
+
+// PlainText returns the Message string without HTML tags or entities.
+func PlainText(tm *gumble.TextMessage) string {
+ d := xml.NewDecoder(strings.NewReader(tm.Message))
+ d.Strict = false
+ d.AutoClose = xml.HTMLAutoClose
+ d.Entity = xml.HTMLEntity
+
+ var b bytes.Buffer
+ newline := false
+ for {
+ t, _ := d.Token()
+ if t == nil {
+ break
+ }
+ switch node := t.(type) {
+ case xml.CharData:
+ if len(node) > 0 {
+ b.Write(node)
+ newline = false
+ }
+ case xml.StartElement:
+ switch node.Name.Local {
+ case "address", "article", "aside", "audio", "blockquote", "canvas", "dd", "div", "dl", "fieldset", "figcaption", "figure", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "header", "hgroup", "hr", "noscript", "ol", "output", "p", "pre", "section", "table", "tfoot", "ul", "video":
+ if !newline {
+ b.WriteByte('\n')
+ newline = true
+ }
+ case "br":
+ b.WriteByte('\n')
+ newline = true
+ }
+ }
+ }
+ return b.String()
+}