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() }