Skip to content

Commit

Permalink
Merge cb65dd3 into a7b3b31
Browse files Browse the repository at this point in the history
  • Loading branch information
snaggen committed Apr 1, 2019
2 parents a7b3b31 + cb65dd3 commit 220d20d
Show file tree
Hide file tree
Showing 8 changed files with 587 additions and 92 deletions.
120 changes: 84 additions & 36 deletions aurora.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,15 +40,31 @@ type Aurora interface {
Blue(arg interface{}) Value
Magenta(arg interface{}) Value
Cyan(arg interface{}) Value
LightGray(arg interface{}) Value
Gray(arg interface{}) Value
LightRed(arg interface{}) Value
LightGreen(arg interface{}) Value
Yellow(arg interface{}) Value
LightBlue(arg interface{}) Value
LightMagenta(arg interface{}) Value
LightCyan(arg interface{}) Value
White(arg interface{}) Value
BgBlack(arg interface{}) Value
BgRed(arg interface{}) Value
BgGreen(arg interface{}) Value
BgBrown(arg interface{}) Value
BgBlue(arg interface{}) Value
BgMagenta(arg interface{}) Value
BgCyan(arg interface{}) Value
BgLightGray(arg interface{}) Value
BgGray(arg interface{}) Value
BgLightRed(arg interface{}) Value
BgLightGreen(arg interface{}) Value
BgYellow(arg interface{}) Value
BgLightBlue(arg interface{}) Value
BgLightMagenta(arg interface{}) Value
BgLightCyan(arg interface{}) Value
BgWhite(arg interface{}) Value
Bold(arg interface{}) Value
Inverse(arg interface{}) Value
Colorize(arg interface{}, color Color) Value
Expand All @@ -69,24 +85,40 @@ func NewAurora(enableColors bool) Aurora {

type auroraClear struct{}

func (auroraClear) Black(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) Red(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) Green(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) Brown(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) Blue(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) Magenta(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) Cyan(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) Gray(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) BgBlack(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) BgRed(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) BgGreen(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) BgBrown(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) BgBlue(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) BgMagenta(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) BgCyan(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) BgGray(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) Bold(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) Inverse(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) Black(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) Red(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) Green(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) Brown(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) Blue(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) Magenta(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) Cyan(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) LightGray(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) Gray(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) LightRed(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) LightGreen(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) Yellow(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) LightBlue(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) LightMagenta(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) LightCyan(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) White(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) BgBlack(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) BgRed(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) BgGreen(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) BgBrown(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) BgBlue(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) BgMagenta(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) BgCyan(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) BgLightGray(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) BgGray(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) BgLightRed(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) BgLightGreen(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) BgYellow(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) BgLightBlue(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) BgLightMagenta(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) BgLightCyan(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) BgWhite(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) Bold(arg interface{}) Value { return valueClear{arg} }
func (auroraClear) Inverse(arg interface{}) Value { return valueClear{arg} }

func (auroraClear) Colorize(arg interface{}, color Color) Value {
return valueClear{arg}
Expand All @@ -103,24 +135,40 @@ func (auroraClear) Sprintf(format interface{}, args ...interface{}) string {

type aurora struct{}

func (aurora) Black(arg interface{}) Value { return Black(arg) }
func (aurora) Red(arg interface{}) Value { return Red(arg) }
func (aurora) Green(arg interface{}) Value { return Green(arg) }
func (aurora) Brown(arg interface{}) Value { return Brown(arg) }
func (aurora) Blue(arg interface{}) Value { return Blue(arg) }
func (aurora) Magenta(arg interface{}) Value { return Magenta(arg) }
func (aurora) Cyan(arg interface{}) Value { return Cyan(arg) }
func (aurora) Gray(arg interface{}) Value { return Gray(arg) }
func (aurora) BgBlack(arg interface{}) Value { return BgBlack(arg) }
func (aurora) BgRed(arg interface{}) Value { return BgRed(arg) }
func (aurora) BgGreen(arg interface{}) Value { return BgGreen(arg) }
func (aurora) BgBrown(arg interface{}) Value { return BgBrown(arg) }
func (aurora) BgBlue(arg interface{}) Value { return BgBlue(arg) }
func (aurora) BgMagenta(arg interface{}) Value { return BgMagenta(arg) }
func (aurora) BgCyan(arg interface{}) Value { return BgCyan(arg) }
func (aurora) BgGray(arg interface{}) Value { return BgGray(arg) }
func (aurora) Bold(arg interface{}) Value { return Bold(arg) }
func (aurora) Inverse(arg interface{}) Value { return Inverse(arg) }
func (aurora) Black(arg interface{}) Value { return Black(arg) }
func (aurora) Red(arg interface{}) Value { return Red(arg) }
func (aurora) Green(arg interface{}) Value { return Green(arg) }
func (aurora) Brown(arg interface{}) Value { return Brown(arg) }
func (aurora) Blue(arg interface{}) Value { return Blue(arg) }
func (aurora) Magenta(arg interface{}) Value { return Magenta(arg) }
func (aurora) Cyan(arg interface{}) Value { return Cyan(arg) }
func (aurora) LightGray(arg interface{}) Value { return LightGray(arg) }
func (aurora) Gray(arg interface{}) Value { return Gray(arg) }
func (aurora) LightRed(arg interface{}) Value { return LightRed(arg) }
func (aurora) LightGreen(arg interface{}) Value { return LightGreen(arg) }
func (aurora) Yellow(arg interface{}) Value { return Yellow(arg) }
func (aurora) LightBlue(arg interface{}) Value { return LightBlue(arg) }
func (aurora) LightMagenta(arg interface{}) Value { return LightMagenta(arg) }
func (aurora) LightCyan(arg interface{}) Value { return LightCyan(arg) }
func (aurora) White(arg interface{}) Value { return White(arg) }
func (aurora) BgBlack(arg interface{}) Value { return BgBlack(arg) }
func (aurora) BgRed(arg interface{}) Value { return BgRed(arg) }
func (aurora) BgGreen(arg interface{}) Value { return BgGreen(arg) }
func (aurora) BgBrown(arg interface{}) Value { return BgBrown(arg) }
func (aurora) BgBlue(arg interface{}) Value { return BgBlue(arg) }
func (aurora) BgMagenta(arg interface{}) Value { return BgMagenta(arg) }
func (aurora) BgCyan(arg interface{}) Value { return BgCyan(arg) }
func (aurora) BgLightGray(arg interface{}) Value { return BgLightGray(arg) }
func (aurora) BgGray(arg interface{}) Value { return BgGray(arg) }
func (aurora) BgLightRed(arg interface{}) Value { return BgLightRed(arg) }
func (aurora) BgLightGreen(arg interface{}) Value { return BgLightGreen(arg) }
func (aurora) BgYellow(arg interface{}) Value { return BgYellow(arg) }
func (aurora) BgLightBlue(arg interface{}) Value { return BgLightBlue(arg) }
func (aurora) BgLightMagenta(arg interface{}) Value { return BgLightMagenta(arg) }
func (aurora) BgLightCyan(arg interface{}) Value { return BgLightCyan(arg) }
func (aurora) BgWhite(arg interface{}) Value { return BgWhite(arg) }
func (aurora) Bold(arg interface{}) Value { return Bold(arg) }
func (aurora) Inverse(arg interface{}) Value { return Inverse(arg) }

func (aurora) Colorize(arg interface{}, color Color) Value {
return Colorize(arg, color)
Expand Down
38 changes: 35 additions & 3 deletions aurora_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,15 +71,31 @@ func Test_auroraClear_methods(t *testing.T) {
test("Blue", a.Blue("x"))
test("Magenta", a.Magenta("x"))
test("Cyan", a.Cyan("x"))
test("LightGray", a.LightGray("x"))
test("Gray", a.Gray("x"))
test("LightRed", a.LightRed("x"))
test("LightGreen", a.LightGreen("x"))
test("Yellow", a.Yellow("x"))
test("LightBlue", a.LightBlue("x"))
test("LightMagenta", a.LightMagenta("x"))
test("LightCyan", a.LightCyan("x"))
test("White", a.White("x"))
test("BgBlack", a.BgBlack("x"))
test("BgRed", a.BgRed("x"))
test("BgGreen", a.BgGreen("x"))
test("BgBrown", a.BgBrown("x"))
test("BgBlue", a.BgBlue("x"))
test("BgMagenta", a.BgMagenta("x"))
test("BgCyan", a.BgCyan("x"))
test("BgLightGray", a.BgLightGray("x"))
test("BgGray", a.BgGray("x"))
test("BgLightRed", a.BgLightRed("x"))
test("BgLightGreen", a.BgLightGreen("x"))
test("BgYellow", a.BgYellow("x"))
test("BgLightBlue", a.BgLightBlue("x"))
test("BgLightMagenta", a.BgLightMagenta("x"))
test("BgLightCyan", a.BgLightCyan("x"))
test("BgWhite", a.BgWhite("x"))
test("Bold", a.Bold("x"))
test("Inverse", a.Inverse("x"))
test("Colorize", a.Colorize("x", RedFg|RedBg))
Expand All @@ -99,7 +115,7 @@ func Test_aurora_methods(t *testing.T) {
a := NewAurora(true)
test := func(mn string, v Value, clr Color) {
if !isColor(v, clr) {
t.Errorf("NewAurora(true).%s wrong color: %d", mn, v.Color())
t.Errorf("NewAurora(true).%s wrong color: %d expected %d", mn, v.Color(), clr)
} else if !isTail(v, 0) {
t.Errorf("NewAurora(true).%s unexpected tail value", mn)
} else if str, ok := v.Value().(string); !ok {
Expand All @@ -115,15 +131,31 @@ func Test_aurora_methods(t *testing.T) {
test("Blue", a.Blue("x"), BlueFg)
test("Magenta", a.Magenta("x"), MagentaFg)
test("Cyan", a.Cyan("x"), CyanFg)
test("Gray", a.Gray("x"), GrayFg)
test("LightGray", a.LightGray("x"), GrayFg)
test("Gray", a.Gray("x"), BlackFg|FgBrightFm)
test("LightRed", a.LightRed("x"), RedFg|FgBrightFm)
test("LightGreen", a.LightGreen("x"), GreenFg|FgBrightFm)
test("Yellow", a.Yellow("x"), BrownFg|FgBrightFm)
test("LightBlue", a.LightBlue("x"), BlueFg|FgBrightFm)
test("LightMagenta", a.LightMagenta("x"), MagentaFg|FgBrightFm)
test("LightCyan", a.LightCyan("x"), CyanFg|FgBrightFm)
test("White", a.White("x"), GrayFg|FgBrightFm)
test("BgBlack", a.BgBlack("x"), BlackBg)
test("BgRed", a.BgRed("x"), RedBg)
test("BgGreen", a.BgGreen("x"), GreenBg)
test("BgBrown", a.BgBrown("x"), BrownBg)
test("BgBlue", a.BgBlue("x"), BlueBg)
test("BgMagenta", a.BgMagenta("x"), MagentaBg)
test("BgCyan", a.BgCyan("x"), CyanBg)
test("BgGray", a.BgGray("x"), GrayBg)
test("BgLightGray", a.BgLightGray("x"), GrayBg)
test("BgGray", a.BgGray("x"), BlackBg|BgBrightFm)
test("BgLightRed", a.BgLightRed("x"), RedBg|BgBrightFm)
test("BgLightGreen", a.BgLightGreen("x"), GreenBg|BgBrightFm)
test("BgYellow", a.BgYellow("x"), BrownBg|BgBrightFm)
test("BgLightBlue", a.BgLightBlue("x"), BlueBg|BgBrightFm)
test("BgLightMagenta", a.BgLightMagenta("x"), MagentaBg|BgBrightFm)
test("BgLightCyan", a.BgLightCyan("x"), CyanBg|BgBrightFm)
test("BgWhite", a.BgWhite("x"), GrayBg|BgBrightFm)
test("Bold", a.Bold("x"), BoldFm)
test("Inverse", a.Inverse("x"), InverseFm)
test("Colorize", a.Colorize("x", RedFg|RedBg), RedFg|RedBg)
Expand Down
21 changes: 16 additions & 5 deletions color.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,10 @@ type Color int

// special formats
const (
BoldFm Color = 1 << iota // bold
InverseFm // inverse
BoldFm Color = 1 << iota // bold
InverseFm // inverse
FgBrightFm // bright foreground
BgBrightFm // bright background
)

// foreground
Expand Down Expand Up @@ -68,7 +70,7 @@ const (

// IsValid returns true if a color looks like valid
func (c Color) IsValid() bool {
return c&(BoldFm|InverseFm|maskFg|maskBg) != 0 || c == 0
return c&(BgBrightFm|FgBrightFm|BoldFm|InverseFm|maskFg|maskBg) != 0 || c == 0
}

const (
Expand Down Expand Up @@ -106,13 +108,22 @@ func (c Color) appendNos(bs []byte) []byte {
} else {
semicolon = true
}
bs = append(bs, '3', '0'+byte((c>>8)&0xff)-1)
if c&FgBrightFm != 0 {
bs = append(bs, '9', '0'+byte((c>>8)&0xff)-1)
} else {
bs = append(bs, '3', '0'+byte((c>>8)&0xff)-1)
}
}
if c&maskBg != 0 {
if semicolon {
bs = append(bs, ';')
}
bs = append(bs, '4', '0'+byte((c>>16)&0xff)-1)
if c&BgBrightFm != 0 {
bs = append(bs, '1', '0', '0'+byte((c>>16)&0xff)-1)
} else {
bs = append(bs, '4', '0'+byte((c>>16)&0xff)-1)

}
}
return bs
}
22 changes: 22 additions & 0 deletions color_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,25 @@ func TestColor_Nos(t *testing.T) {
t.Errorf("wrong Nos: want %q, got %q", want, nos)
}
}

func TestColor_Nos_Bright(t *testing.T) {
c := Color(0)
if c.Nos() != "" {
t.Error("some Nos for 0 color")
}
c = BoldFm | InverseFm | RedFg | MagentaBg | FgBrightFm
want := "1;7;91;45"
if nos := c.Nos(); nos != want {
t.Errorf("wrong Nos: want %q, got %q", want, nos)
}
c = InverseFm | BlackBg | BgBrightFm
want = "7;100"
if nos := c.Nos(); nos != want {
t.Errorf("wrong Nos: want %q, got %q", want, nos)
}
c = InverseFm | CyanBg | RedFg | FgBrightFm | BgBrightFm
want = "7;91;106"
if nos := c.Nos(); nos != want {
t.Errorf("wrong Nos: want %q, got %q", want, nos)
}
}

0 comments on commit 220d20d

Please sign in to comment.