streamline ANSI color code generation for faster execution

This was significantly faster, wow
This commit is contained in:
raf 2024-06-07 17:04:40 +03:00
parent fea3864961
commit 6f68697db7
No known key found for this signature in database
GPG key ID: 02D1DD3FA08B6B29

View file

@ -13,35 +13,35 @@ var CLRR = []byte("\x1b[0m")
type Color struct { type Color struct {
disable bool disable bool
values [256]string values [256][]byte
cvalues [256][]byte
} }
func (c *Color) Compute() { func (c *Color) Compute() {
const WHITEB = "\x1b[1;37m" const WHITEB = "\x1b[1;37m"
for i := 0; i < 256; i++ { for i := 0; i < 256; i++ {
var fg, bg string var fg, bg []byte
lowVis := i == 0 || (i >= 16 && i <= 20) || (i >= 232 && i <= 242) lowVis := i == 0 || (i >= 16 && i <= 20) || (i >= 232 && i <= 242)
if lowVis { if lowVis {
fg = WHITEB + "\x1b[38;5;" + "255" + "m" fg = append([]byte(WHITEB), []byte("\x1b[38;5;255m")...)
bg = "\x1b[48;5;" + strconv.Itoa(int(i)) + "m" bg = []byte("\x1b[48;5;" + strconv.Itoa(i) + "m")
} else { } else {
fg = "\x1b[38;5;" + strconv.Itoa(int(i)) + "m" fg = []byte("\x1b[38;5;" + strconv.Itoa(i) + "m")
bg = "" bg = nil
} }
c.values[i] = bg + fg c.values[i] = append(bg, fg...)
c.cvalues[i] = []byte(bg + fg)
} }
} }
func (c *Color) Colorize(s string, clr byte) string { func (c *Color) Colorize(s string, clr byte) string {
const NOCOLOR = "\x1b[0m" const NOCOLOR = "\x1b[0m"
return c.values[clr] + s + NOCOLOR colorCode := c.values[clr]
return string(append(append(colorCode, s...), []byte(NOCOLOR)...))
} }
// function to colorize bytes - avoiding string conversions // function to colorize bytes - avoiding string conversions
func (c *Color) Colorize2(clr byte) ([]byte, []byte) { func (c *Color) Colorize2(clr byte) ([]byte, []byte) {
return c.cvalues[clr], CLRR colorCode := c.values[clr]
return colorCode, CLRR
} }