From 72e53c38d2566326c65771d4e3d2f9bd7fe119c0 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 30 Nov 2019 06:45:33 +0100 Subject: [PATCH] Add IdentWriter --- indent.go | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 indent.go diff --git a/indent.go b/indent.go new file mode 100644 index 0000000..213ff19 --- /dev/null +++ b/indent.go @@ -0,0 +1,39 @@ +package gold + +import ( + "io" + "strings" + "sync" +) + +type IndentWriter struct { + Indent uint + Forward io.Writer + + initialWrite sync.Once +} + +// Write is used to write more content to the reflow buffer. +func (w *IndentWriter) Write(b []byte) (int, error) { + w.initialWrite.Do(func() { + w.Forward.Write([]byte(strings.Repeat(" ", int(w.Indent)))) + }) + + for _, c := range string(b) { + w.Forward.Write([]byte{byte(c)}) + if c == '\n' { + // end of current line + w.Forward.Write([]byte(strings.Repeat(" ", int(w.Indent)))) + } else { + // any other character + } + } + + return len(b), nil +} + +// Close will finish the reflow operation. Always call it before trying to +// retrieve the final result. +func (w *IndentWriter) Close() error { + return nil +}