Go: How would you "Pretty Print"/"Prettify" HTML?
go, html, pretty-print, xml, xml-parsing
Solution
I faced a same problem and I just solved it by creating an HTML formatting package in Go by myself.
Here it is:
GoHTML - HTML formatter for Go
Please check this package out.
Thanks,
Keiji
Problem
In Python, PHP, and many other languages, it is possible to convert a html document and "prettify" it. In Go, this is very easily done for JSON and XML (from a struct/interface) using the MarshIndent function. Example for XML in Go: http://play.golang.org/p/aBNfNxTEG1 ``` package main import ( "encoding/xml" "fmt" "os" ) func main() { type Address struct { City, State string } type Person struct { XMLName xml.Name `xml:"person"` Id int `xml:"id,attr"` FirstName string `xml:"name>first"` LastName string `xml:"name>last"` Age int `xml:"age"` Height float32 `xml:"height,omitempty"` Married bool Address Comment string `xml:",comment"` } v := &Person{Id: 13, FirstName: "John", LastName: "Doe", Age: 42} v.Comment = " Need more details. " v.Address = Address{"Hanga Roa", "Easter Island"} output, err := xml.MarshalIndent(v, " ", " ") if err != nil { fmt.Printf("error: %v\n", err) } os.Stdout.Write(output) } ``` However, this only works for converting struct/interface into a []byte. What I want is convert a string of html code and indent automatically. Example: Raw HTML ``` <!doctype html><html><head> <title>Website Title</title> </head><body> <div class="random-class"> <h1>I like pie</h1><p>It's true!</p></div> </body></html> ``` Prettified HTML ``` <!doctype html> <html> <head> <title>Website Title</title> </head> <body> <div class="random-class"> <h1>I like pie</h1> <p>It's true!</p> </div> </body> </html> ``` How would this be done just using a string?