forked from lug/matterbridge
		
	
		
			
				
	
	
		
			46 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
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()
 | 
						|
}
 |