44 lines
1.1 KiB
Go
44 lines
1.1 KiB
Go
|
package gohtml
|
||
|
|
||
|
import "bytes"
|
||
|
|
||
|
// Column to wrap lines to (disabled by default)
|
||
|
var LineWrapColumn = 0
|
||
|
|
||
|
// Maxmimum characters a long word can extend past LineWrapColumn without wrapping
|
||
|
var LineWrapMaxSpillover = 5
|
||
|
|
||
|
// An htmlDocument represents an HTML document.
|
||
|
type htmlDocument struct {
|
||
|
elements []element
|
||
|
}
|
||
|
|
||
|
// html generates an HTML source code and returns it.
|
||
|
func (htmlDoc *htmlDocument) html() string {
|
||
|
return string(htmlDoc.bytes())
|
||
|
}
|
||
|
|
||
|
// bytes reads from htmlDocument's internal array of elements and returns HTML source code
|
||
|
func (htmlDoc *htmlDocument) bytes() []byte {
|
||
|
bf := &formattedBuffer{
|
||
|
buffer: &bytes.Buffer{},
|
||
|
|
||
|
lineWrapColumn: LineWrapColumn,
|
||
|
lineWrapMaxSpillover: LineWrapMaxSpillover,
|
||
|
|
||
|
indentString: defaultIndentString,
|
||
|
indentLevel: startIndent,
|
||
|
}
|
||
|
|
||
|
isPreviousNodeInline := true
|
||
|
for _, child := range htmlDoc.elements {
|
||
|
isPreviousNodeInline = child.write(bf, isPreviousNodeInline)
|
||
|
}
|
||
|
return bf.buffer.Bytes()
|
||
|
}
|
||
|
|
||
|
// append appends an element to the htmlDocument.
|
||
|
func (htmlDoc *htmlDocument) append(e element) {
|
||
|
htmlDoc.elements = append(htmlDoc.elements, e)
|
||
|
}
|