| // Copyright 2013 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| // TODO(bradfitz,adg): move to util |
| var spaces = []byte(" ") // 32 spaces seems like a good number |
| // A tconv is an io.Writer filter for converting leading tabs into spaces. |
| state int // indenting or collecting |
| indent int // valid if state == indenting |
| func (p *tconv) writeIndent() (err error) { |
| if _, err = p.output.Write(spaces); err != nil { |
| _, err = p.output.Write(spaces[0:i]) |
| func (p *tconv) Write(data []byte) (n int, err error) { |
| pos := 0 // valid if p.state == collecting |
| if _, err = p.output.Write(data[n : n+1]); err != nil { |
| if err = p.writeIndent(); err != nil { |
| if _, err = p.output.Write(data[pos : n+1]); err != nil { |
| if pos < n && p.state == collecting { |
| _, err = p.output.Write(data[pos:]) |