diff options
Diffstat (limited to 'vendor/github.com/mattn/go-colorable/noncolorable.go')
-rw-r--r-- | vendor/github.com/mattn/go-colorable/noncolorable.go | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/vendor/github.com/mattn/go-colorable/noncolorable.go b/vendor/github.com/mattn/go-colorable/noncolorable.go new file mode 100644 index 0000000..9721e16 --- /dev/null +++ b/vendor/github.com/mattn/go-colorable/noncolorable.go | |||
@@ -0,0 +1,55 @@ | |||
1 | package colorable | ||
2 | |||
3 | import ( | ||
4 | "bytes" | ||
5 | "io" | ||
6 | ) | ||
7 | |||
8 | // NonColorable hold writer but remove escape sequence. | ||
9 | type NonColorable struct { | ||
10 | out io.Writer | ||
11 | } | ||
12 | |||
13 | // NewNonColorable return new instance of Writer which remove escape sequence from Writer. | ||
14 | func NewNonColorable(w io.Writer) io.Writer { | ||
15 | return &NonColorable{out: w} | ||
16 | } | ||
17 | |||
18 | // Write write data on console | ||
19 | func (w *NonColorable) Write(data []byte) (n int, err error) { | ||
20 | er := bytes.NewReader(data) | ||
21 | var bw [1]byte | ||
22 | loop: | ||
23 | for { | ||
24 | c1, err := er.ReadByte() | ||
25 | if err != nil { | ||
26 | break loop | ||
27 | } | ||
28 | if c1 != 0x1b { | ||
29 | bw[0] = c1 | ||
30 | w.out.Write(bw[:]) | ||
31 | continue | ||
32 | } | ||
33 | c2, err := er.ReadByte() | ||
34 | if err != nil { | ||
35 | break loop | ||
36 | } | ||
37 | if c2 != 0x5b { | ||
38 | continue | ||
39 | } | ||
40 | |||
41 | var buf bytes.Buffer | ||
42 | for { | ||
43 | c, err := er.ReadByte() | ||
44 | if err != nil { | ||
45 | break loop | ||
46 | } | ||
47 | if ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '@' { | ||
48 | break | ||
49 | } | ||
50 | buf.Write([]byte(string(c))) | ||
51 | } | ||
52 | } | ||
53 | |||
54 | return len(data), nil | ||
55 | } | ||