package main import ( "fmt" "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, correction bool) string { formatInline := 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 } format := func(s string) string { lines := strings.Split(s, "\n") for i, line := range lines { lines[i] = formatInline(line) } return strings.Join(lines, "\n") } 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:])) str := b.String() if correction { str = fmt.Sprintf("%s %s", str, loadedLocale["correction"]) } return str }