package color import "github.com/gookit/color" type Color color.Color var ( yellow = SprintFunc(color.New(color.FgYellow)) yellowBold = SprintFunc(color.New(color.FgYellow, color.Bold)) green = SprintFunc(color.New(color.FgGreen)) greenBold = SprintFunc(color.New(color.FgGreen, color.Bold)) greenBg = SprintFunc(color.New(color.FgBlack, color.BgGreen)) magentaBg = SprintFunc(color.New(color.FgBlack, color.BgMagenta)) red = SprintFunc(color.New(color.FgRed)) redBold = SprintFunc(color.New(color.FgRed, color.Bold)) cyan = SprintFunc(color.New(color.FgCyan)) cyanBold = SprintFunc(color.New(color.FgCyan, color.Bold)) cyanBg = SprintFunc(color.New(color.BgCyan, color.FgBlack)) white = SprintFunc(color.New()) whiteBold = SprintFunc(color.New(color.Bold)) blackBg = SprintFunc(color.New(color.BgBlack, color.FgWhite)) black = SprintFunc(color.New(color.FgBlack)) ) func SprintFunc(c color.Style) func(args ...interface{}) string { return func(args ...interface{}) string { return c.Sprint(args...) } } type Option func(*options) type options struct { bold bool bg bool } func newOptions(opts []Option) options { options := options{} for i := range opts { if opts[i] == nil { continue } opts[i](&options) } return options } func Bold(o *options) { o.bold = true } func Background(o *options) { o.bg = true } func Yellow(opts ...Option) func(a ...interface{}) string { options := newOptions(opts) if options.bold { return yellowBold } return yellow } func Green(opts ...Option) func(a ...interface{}) string { options := newOptions(opts) if options.bold { return greenBold } if options.bg { return greenBg } return green } func Red(opts ...Option) func(a ...interface{}) string { options := newOptions(opts) if options.bold { return redBold } return red } func White(opts ...Option) func(a ...interface{}) string { options := newOptions(opts) if options.bold { return whiteBold } return white } func Cyan(opts ...Option) func(a ...interface{}) string { options := newOptions(opts) if options.bold { return cyanBold } if options.bg { return cyanBg } return cyan } func Black(opts ...Option) func(a ...interface{}) string { options := newOptions(opts) if options.bg { return blackBg } return black } func Magenta(opts ...Option) func(a ...interface{}) string { options := newOptions(opts) if options.bg { return magentaBg } return magentaBg } func HSL256(h, s, l float64, opts ...Option) func(a ...interface{}) string { options := newOptions(opts) val := color.HSL(h, s, l).C256().Value() c := color.S256(val) if options.bg { fg := color.White.C256().Value() if l > 0.5 { fg = color.Black.C256().Value() } c = color.S256(fg, val) } if options.bold { c.AddOpts(color.Bold) } return func(a ...interface{}) string { return c.Sprint(a...) } }