all repos — htmlformat @ 54f5496cd6f828fb782b2b90f183efe4a07ec95b

Go package and CLI tool used to format HTML

collapse whitespace like in HTML spec

Alan Pearce
commit

54f5496cd6f828fb782b2b90f183efe4a07ec95b

parent

9acc11ddafad03291646c107496b3aa77096903b

1 file changed, 18 insertions(+), 1 deletion(-)

changed files
M format.goformat.go
@@ -70,6 +70,23 @@ func isEmptyTextNode(n *html.Node) bool {
return n.Type == html.TextNode && strings.TrimSpace(n.Data) == "" } +func collapseWhitespace(in string) string { + leading := unicode.IsSpace(getFirstRune(in)) + trailing := unicode.IsSpace(getLastRune(in)) + + out := strings.TrimSpace(in) + switch { + case leading && trailing: + return " " + out + " " + case leading: + return " " + out + case trailing: + return out + " " + default: + return out + } +} + func getFirstRune(s string) rune { r, _ := utf8.DecodeRuneInString(s) return r
@@ -124,7 +141,7 @@ if _, err = fmt.Fprintln(w); err != nil {
return } } else { - if _, err = fmt.Fprint(w, s); err != nil { + if _, err = fmt.Fprint(w, collapseWhitespace(s)); err != nil { return } if !hasSingleTextChild(n.Parent) &&