MM-48089 Compile regular expressions once instead of doing it with every call to MarkdownToHTML

Этот коммит содержится в:
Maximilian Ripper
2023-01-18 14:28:55 +01:00
родитель 7e1e1ea5e8
Коммит dd0eac29d0

Просмотреть файл

@@ -35,18 +35,19 @@ func StripMarkdown(markdown string) (string, error) {
return strings.TrimSpace(buf.String()), nil return strings.TrimSpace(buf.String()), nil
} }
var relLinkReg = regexp.MustCompile(`\[(.*)]\((/.*)\)`)
var blockquoteReg = regexp.MustCompile(`^|\n(>)`)
// MarkdownToHTML takes a string containing Markdown and returns a string with HTML tagged version // MarkdownToHTML takes a string containing Markdown and returns a string with HTML tagged version
func MarkdownToHTML(markdown, siteURL string) (string, error) { func MarkdownToHTML(markdown, siteURL string) (string, error) {
// Turn relative links into absolute links // Turn relative links into absolute links
relLinkRe := regexp.MustCompile(`\[(.*)]\((/.*)\)`) absLinkMarkdown := relLinkReg.ReplaceAllFunc([]byte(markdown), func(s []byte) []byte {
absLinkMarkdown := relLinkRe.ReplaceAllFunc([]byte(markdown), func(s []byte) []byte { out := relLinkReg.ReplaceAllString(string(s), "[$1]("+siteURL+"$2)")
out := relLinkRe.ReplaceAllString(string(s), "[$1]("+siteURL+"$2)")
return []byte(out) return []byte(out)
}) })
// Unescape any blockquote text to be parsed by the markdown parser. // Unescape any blockquote text to be parsed by the markdown parser.
re := regexp.MustCompile(`^|\n(>)`) markdownClean := blockquoteReg.ReplaceAllFunc(absLinkMarkdown, func(s []byte) []byte {
markdownClean := re.ReplaceAllFunc(absLinkMarkdown, func(s []byte) []byte {
out := html.UnescapeString(string(s)) out := html.UnescapeString(string(s))
return []byte(out) return []byte(out)
}) })