github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/internal/output/colorstyle/ansi.go (about)

     1  //go:build !windows
     2  // +build !windows
     3  
     4  package colorstyle
     5  
     6  import (
     7  	"io"
     8  
     9  	"github.com/ActiveState/cli/internal/logging"
    10  )
    11  
    12  type Styler struct {
    13  	writer io.Writer
    14  }
    15  
    16  var ansiStyleMap = map[Style]string{
    17  	Default:   "\x1b[39",
    18  	Dim:       "\x1b[2",
    19  	Reset:     "\x1b[0",
    20  	Reversed:  "\x1b[7",
    21  	Bold:      "\x1b[1",
    22  	Underline: "\x1b[4",
    23  	Black:     "\x1b[30",
    24  	Red:       "\x1b[31",
    25  	Green:     "\x1b[32",
    26  	Yellow:    "\x1b[33",
    27  	Blue:      "\x1b[34",
    28  	Magenta:   "\x1b[35",
    29  	Cyan:      "\x1b[36",
    30  	White:     "\x1b[37",
    31  	Orange:    "\x1b[38;5;208",
    32  }
    33  
    34  func New(writer io.Writer) *Styler {
    35  	return &Styler{writer}
    36  }
    37  
    38  func (w *Styler) SetStyle(s Style, bright bool) {
    39  	resolvedStyle := ansiStyleMap[s]
    40  	if bright {
    41  		resolvedStyle = resolvedStyle + ";1"
    42  	}
    43  	_, err := w.writer.Write([]byte(resolvedStyle + "m"))
    44  	if err != nil {
    45  		logging.Error("Error writing to writer: %v", err)
    46  	}
    47  }