You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

noncolorable.go 951B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package colorable
  2. import (
  3. "bytes"
  4. "io"
  5. )
  6. // NonColorable holds writer but removes escape sequence.
  7. type NonColorable struct {
  8. out io.Writer
  9. }
  10. // NewNonColorable returns new instance of Writer which removes escape sequence from Writer.
  11. func NewNonColorable(w io.Writer) io.Writer {
  12. return &NonColorable{out: w}
  13. }
  14. // Write writes data on console
  15. func (w *NonColorable) Write(data []byte) (n int, err error) {
  16. er := bytes.NewReader(data)
  17. var bw [1]byte
  18. loop:
  19. for {
  20. c1, err := er.ReadByte()
  21. if err != nil {
  22. break loop
  23. }
  24. if c1 != 0x1b {
  25. bw[0] = c1
  26. w.out.Write(bw[:])
  27. continue
  28. }
  29. c2, err := er.ReadByte()
  30. if err != nil {
  31. break loop
  32. }
  33. if c2 != 0x5b {
  34. continue
  35. }
  36. var buf bytes.Buffer
  37. for {
  38. c, err := er.ReadByte()
  39. if err != nil {
  40. break loop
  41. }
  42. if ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '@' {
  43. break
  44. }
  45. buf.Write([]byte(string(c)))
  46. }
  47. }
  48. return len(data), nil
  49. }