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, "$1")
s = italicRE.ReplaceAllString(s, "$1")
s = strikeRE.ReplaceAllString(s, "$1")
s = codeRE.ReplaceAllString(s, "$1")
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(``)
b.WriteString(url)
b.WriteString(``)
last = end
}
b.WriteString(format(text[last:]))
return b.String()
}