48 lines
853 B
Go
48 lines
853 B
Go
package dot
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
)
|
|
|
|
// graphWriter wraps a bytes.Buffer and tracks indent level levels.
|
|
type graphWriter struct {
|
|
bytes.Buffer
|
|
indent int
|
|
indentStr string
|
|
}
|
|
|
|
// Returns an initialized graphWriter at indent level 0.
|
|
func newGraphWriter() *graphWriter {
|
|
w := &graphWriter{
|
|
indent: 0,
|
|
}
|
|
w.init()
|
|
return w
|
|
}
|
|
|
|
// Prints to the buffer at the current indent level.
|
|
func (w *graphWriter) Printf(s string, args ...interface{}) {
|
|
w.WriteString(w.indentStr + fmt.Sprintf(s, args...))
|
|
}
|
|
|
|
// Increase the indent level.
|
|
func (w *graphWriter) Indent() {
|
|
w.indent++
|
|
w.init()
|
|
}
|
|
|
|
// Decrease the indent level.
|
|
func (w *graphWriter) Unindent() {
|
|
w.indent--
|
|
w.init()
|
|
}
|
|
|
|
func (w *graphWriter) init() {
|
|
indentBuf := new(bytes.Buffer)
|
|
for i := 0; i < w.indent; i++ {
|
|
indentBuf.WriteString("\t")
|
|
}
|
|
w.indentStr = indentBuf.String()
|
|
}
|