Files
lambda/gtk-xmpp-markup.go
T

49 lines
996 B
Go

package main
import (
"html"
"regexp"
"strings"
)
var (
urlRE = regexp.MustCompile(`https?://[^\s]+`)
boldRE = regexp.MustCompile(`\*([^*]+)\*`)
italicRE = regexp.MustCompile(`_([^_]+)_`)
strikeRE = regexp.MustCompile(`~([^~]+)~`)
codeRE = regexp.MustCompile("`([^`]+)`")
)
func XEPToPango(text string) string {
format := func(s string) string {
s = html.EscapeString(s)
s = boldRE.ReplaceAllString(s, "<b>$1</b>")
s = italicRE.ReplaceAllString(s, "<i>$1</i>")
s = strikeRE.ReplaceAllString(s, "<s>$1</s>")
s = codeRE.ReplaceAllString(s, "<tt>$1</tt>")
return s
}
var b strings.Builder
last := 0
for _, m := range urlRE.FindAllStringIndex(text, -1) {
start, end := m[0], m[1]
b.WriteString(format(text[last:start]))
url := html.EscapeString(text[start:end])
b.WriteString(`<a href="`)
b.WriteString(url)
b.WriteString(`">`)
b.WriteString(url)
b.WriteString(`</a>`)
last = end
}
b.WriteString(format(text[last:]))
return b.String()
}