all repos — htmlformat @ 09c6d471f34326c8631ebcc204beb3e1e702f1d0

Go package and CLI tool used to format HTML

fix some <pre> edge cases unescaping entities inside <pre><code> tags whitespace handling

Alin
commit

09c6d471f34326c8631ebcc204beb3e1e702f1d0

parent

69d6c2d86b95f2897d9751c22d14277419276c6e

1 file changed, 8 insertions(+), 8 deletions(-)

changed files
M format.goformat.go
@@ -123,7 +123,7 @@ func printNode(w io.Writer, n *html.Node, pre bool, level int) (err error) {
switch n.Type { case html.TextNode: if pre { - if _, err = fmt.Fprint(w, n.Data); err != nil { + if _, err = fmt.Fprint(w, html.EscapeString(n.Data)); err != nil { return } return nil
@@ -171,8 +171,8 @@ }
} } case html.ElementNode: - if n.PrevSibling == nil || - (n.PrevSibling.Type != html.TextNode || unicode.IsSpace(getLastRune(n.PrevSibling.Data))) { + if !pre && (n.PrevSibling == nil || + (n.PrevSibling.Type != html.TextNode || unicode.IsSpace(getLastRune(n.PrevSibling.Data)))) { if err = printIndent(w, level); err != nil { return }
@@ -189,16 +189,16 @@ }
if _, err = fmt.Fprint(w, ">"); err != nil { return } - if !hasSingleTextChild(n) { + if !pre && !hasSingleTextChild(n) { if _, err = fmt.Fprint(w, "\n"); err != nil { return } } if !isVoidElement(n) { - if err = printChildren(w, n, n.Data == "pre", level+1); err != nil { + if err = printChildren(w, n, pre || n.Data == "pre", level+1); err != nil { return } - if isSpecialContentElement(n) || !hasSingleTextChild(n) { + if !pre && (isSpecialContentElement(n) || !hasSingleTextChild(n)) { if err = printIndent(w, level); err != nil { return }
@@ -207,9 +207,9 @@ if _, err = fmt.Fprintf(w, "</%s>", n.Data); err != nil {
return } - if n.NextSibling == nil || + if !pre && (n.NextSibling == nil || (n.NextSibling.Type == html.ElementNode) || - (n.NextSibling.Type == html.TextNode && !unicode.IsPunct(getFirstRune(n.NextSibling.Data))) { + (n.NextSibling.Type == html.TextNode && !unicode.IsPunct(getFirstRune(n.NextSibling.Data)))) { if _, err = fmt.Fprint(w, "\n"); err != nil { return }