1 // Copyright 2013 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
5 // TODO(bradfitz,adg): move to util
11 var spaces = []byte(" ") // 32 spaces seems like a good number
18 // A tconv is an io.Writer filter for converting leading tabs into spaces.
21 state int // indenting or collecting
22 indent int // valid if state == indenting
26 func (p *tconv) writeIndent() (err error) {
28 for i >= len(spaces) {
30 if _, err = p.output.Write(spaces); err != nil {
36 _, err = p.output.Write(spaces[0:i])
41 func (p *tconv) Write(data []byte) (n int, err error) {
45 pos := 0 // valid if p.state == collecting
47 for n, b = range data {
52 p.indent += p.p.TabWidth
55 if _, err = p.output.Write(data[n : n+1]); err != nil {
63 if err = p.writeIndent(); err != nil {
71 if _, err = p.output.Write(data[pos : n+1]); err != nil {
78 if pos < n && p.state == collecting {
79 _, err = p.output.Write(data[pos:])