| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- // Copyright 2014 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.
- package bind
- import (
- "bytes"
- "fmt"
- )
- type Printer struct {
- Buf *bytes.Buffer
- IndentEach []byte
- indentText []byte
- needIndent bool
- }
- func (p *Printer) writeIndent() error {
- if !p.needIndent {
- return nil
- }
- p.needIndent = false
- _, err := p.Buf.Write(p.indentText)
- return err
- }
- func (p *Printer) Write(b []byte) (n int, err error) {
- wrote := 0
- for len(b) > 0 {
- if err := p.writeIndent(); err != nil {
- return wrote, err
- }
- i := bytes.IndexByte(b, '\n')
- if i < 0 {
- break
- }
- n, err = p.Buf.Write(b[0 : i+1])
- wrote += n
- if err != nil {
- return wrote, err
- }
- b = b[i+1:]
- p.needIndent = true
- }
- if len(b) > 0 {
- n, err = p.Buf.Write(b)
- wrote += n
- }
- return wrote, err
- }
- func (p *Printer) Printf(format string, args ...interface{}) {
- if _, err := fmt.Fprintf(p, format, args...); err != nil {
- panic(fmt.Sprintf("printer: %v", err))
- }
- }
- func (p *Printer) Indent() {
- p.indentText = append(p.indentText, p.IndentEach...)
- }
- func (p *Printer) Outdent() {
- if len(p.indentText) > len(p.IndentEach)-1 {
- p.indentText = p.indentText[len(p.IndentEach):]
- }
- }
|