Skip to content

Commit

Permalink
- [*] move regexp to global vars to reduce allocs (#12)
Browse files Browse the repository at this point in the history
  • Loading branch information
alexandear authored Nov 28, 2024
1 parent 786e26b commit bd922ec
Showing 1 changed file with 10 additions and 8 deletions.
18 changes: 10 additions & 8 deletions xmlfmt.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,10 @@ import (
)

var (
reg = regexp.MustCompile(`<([/!]?)([^>]+?)(/?)>`)
reg = regexp.MustCompile(`<([/!]?)([^>]+?)(/?)>`)
reXMLComments = regexp.MustCompile(`(?s)(<!--)(.*?)(-->)`)
reSpaces = regexp.MustCompile(`(?s)>\s+<`)
reNewlines = regexp.MustCompile(`\r*\n`)
// NL is the newline string used in XML output.
NL = "\n"
)
Expand All @@ -33,20 +36,19 @@ func FormatXML(xmls, prefix, indent string, nestedTagsInComments ...bool) string
if len(nestedTagsInComments) > 0 {
nestedTagsInComment = nestedTagsInComments[0]
}
reXmlComments := regexp.MustCompile(`(?s)(<!--)(.*?)(-->)`)
src := regexp.MustCompile(`(?s)>\s+<`).ReplaceAllString(xmls, "><")
src := reSpaces.ReplaceAllString(xmls, "><")
if nestedTagsInComment {
src = reXmlComments.ReplaceAllStringFunc(src, func(m string) string {
parts := reXmlComments.FindStringSubmatch(m)
p2 := regexp.MustCompile(`\r*\n`).ReplaceAllString(parts[2], " ")
src = reXMLComments.ReplaceAllStringFunc(src, func(m string) string {
parts := reXMLComments.FindStringSubmatch(m)
p2 := reNewlines.ReplaceAllString(parts[2], " ")
return parts[1] + html.EscapeString(p2) + parts[3]
})
}
rf := replaceTag(prefix, indent)
r := prefix + reg.ReplaceAllStringFunc(src, rf)
if nestedTagsInComment {
r = reXmlComments.ReplaceAllStringFunc(r, func(m string) string {
parts := reXmlComments.FindStringSubmatch(m)
r = reXMLComments.ReplaceAllStringFunc(r, func(m string) string {
parts := reXMLComments.FindStringSubmatch(m)
return parts[1] + html.UnescapeString(parts[2]) + parts[3]
})
}
Expand Down

0 comments on commit bd922ec

Please # to comment.