solarized-emacs

a fork of Bozhidar Batsov's solarized-emacs
git clone https://git.trogloxene.org/solarized-emacs.git
Log | Files | Refs | README

commit 8bbca96b0f4875d237eff749d4d7d5938263ff80
parent e076a291382828d6fef2787480c667f7a6f387af
Author: Thomas Frössman <thomasf@jossystem.se>
Date:   Thu,  9 Jan 2020 20:57:40 +0100

move bulk of colorlab code out of this repo

Diffstat:
Mcolorlab/go.mod | 2+-
Mcolorlab/go.sum | 2++
Mcolorlab/main.go | 238+++++++++++++++++++++++++++++++++++++++----------------------------------------
Dcolorlab/pkg/clab/colorfinder.go | 49-------------------------------------------------
Dcolorlab/pkg/clab/colorlist.go | 36------------------------------------
Dcolorlab/pkg/clab/colortransformer.go | 5-----
Dcolorlab/pkg/clab/hexcolor.go | 23-----------------------
Dcolorlab/pkg/clab/namedcolors.go | 104-------------------------------------------------------------------------------
Dcolorlab/pkg/clab/package.go | 2--
Dcolorlab/pkg/colors/colors.go | 122-------------------------------------------------------------------------------
Dcolorlab/pkg/emacs/emacs.go | 83-------------------------------------------------------------------------------
Dcolorlab/pkg/generator/accentpair.go | 116-------------------------------------------------------------------------------
Dcolorlab/pkg/generator/package.go | 2--
Dcolorlab/pkg/generator/palette.go | 52----------------------------------------------------
Dcolorlab/pkg/sol/accents.go | 141-------------------------------------------------------------------------------
Dcolorlab/pkg/sol/base.go | 125-------------------------------------------------------------------------------
Dcolorlab/pkg/sol/package.go | 2--
Dcolorlab/pkg/sol/solarized.go | 26--------------------------
Dcolorlab/pkg/sol/sort.go | 70----------------------------------------------------------------------
19 files changed, 120 insertions(+), 1080 deletions(-)

diff --git a/colorlab/go.mod b/colorlab/go.mod @@ -2,4 +2,4 @@ module github.com/bbatsov/solarized-emacs/colorlab go 1.13 -require github.com/lucasb-eyer/go-colorful v1.0.3 +require github.com/go-pa/colorlab v0.0.0-20200109195310-116d31aa4563 diff --git a/colorlab/go.sum b/colorlab/go.sum @@ -1,2 +1,4 @@ +github.com/go-pa/colorlab v0.0.0-20200109195310-116d31aa4563 h1:y+zDQdfglX5wDpHM0DPcQwPZ0s82Ie19LxAnfgqSa7I= +github.com/go-pa/colorlab v0.0.0-20200109195310-116d31aa4563/go.mod h1:mpKpk8RRh1QW2dFo8KynJ55tVYa1KIXyW8DQhFbo+sk= github.com/lucasb-eyer/go-colorful v1.0.3 h1:QIbQXiugsb+q10B+MI+7DI1oQLdmnep86tWFlaaUAac= github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= diff --git a/colorlab/main.go b/colorlab/main.go @@ -5,11 +5,7 @@ import ( "fmt" "os" - "github.com/bbatsov/solarized-emacs/colorlab/pkg/clab" - "github.com/bbatsov/solarized-emacs/colorlab/pkg/colors" - "github.com/bbatsov/solarized-emacs/colorlab/pkg/emacs" - "github.com/bbatsov/solarized-emacs/colorlab/pkg/generator" - "github.com/bbatsov/solarized-emacs/colorlab/pkg/sol" + cl "github.com/go-pa/colorlab" ) // Options are command line flags . @@ -31,52 +27,52 @@ func main() { for _, pal := range palettes { fmt.Println(pal.Name) nc := pal.Generate() - emacs.PrintAlist(os.Stdout, nc, 0) + cl.PrintAlist(os.Stdout, nc, 0) // nc.FilterPrefix("base").PrintAlist(os.Stdout, 0) // Merge(nc.FilterSuffix("-d"), oldDarkAccents.NamedColors().WithSuffix("-do")).PrintAlist(os.Stdout, 0) // Merge(nc.FilterSuffix("-l"), oldLightAccents.NamedColors().WithSuffix("-lo")).PrintAlist(os.Stdout, 0) if !opts.NoElispUpdate { - emacs.RewritePalette(nc, pal.Name) + cl.RewritePalette(nc, pal.Name) } } fmt.Println("\n-----\n") } var ( - default1BgFg = generator.AccentPairGenerator{ + default1BgFg = cl.AccentPairGenerator{ BlendBackgroundAmout: 0.85, BlendForegroundAmout: 0.3, Gamma: 0.01, MinimumLightnessDifference: 0.35, - ForegroundBlendFinder: clab.ExtremeColorFgFinder, - BackgroundBlendFinder: clab.ExtremeColorBgFinder, + ForegroundBlendFinder: cl.ExtremeColorFgFinder, + BackgroundBlendFinder: cl.ExtremeColorBgFinder, } - default2BgFg = generator.AccentPairGenerator{ + default2BgFg = cl.AccentPairGenerator{ BlendBackgroundAmout: 0.6, BlendForegroundAmout: 0.45, Gamma: 0.04, MinimumLightnessDifference: 0.35, - ForegroundBlendFinder: clab.ExtremeColorFgFinder, - BackgroundBlendFinder: clab.ExtremeColorBgFinder, + ForegroundBlendFinder: cl.ExtremeColorFgFinder, + BackgroundBlendFinder: cl.ExtremeColorBgFinder, } - palettes = []generator.Palette{ + palettes = []cl.Palette{ { Name: "solarized-dark", Solarized: solarized, - Accent1Pair: generator.AccentPairGenerator{ + Accent1Pair: cl.AccentPairGenerator{ BlendBackgroundAmout: default1BgFg.BlendBackgroundAmout, BlendForegroundAmout: default1BgFg.BlendForegroundAmout, Gamma: default1BgFg.Gamma, - ForegroundBlendFinder: clab.NamedColorFinder("base1"), + ForegroundBlendFinder: cl.NamedColorFinder("base1"), BackgroundBlendFinder: default1BgFg.BackgroundBlendFinder, MinimumLightnessDifference: 0.4, }, - Accent2Pair: generator.AccentPairGenerator{ + Accent2Pair: cl.AccentPairGenerator{ BlendBackgroundAmout: default2BgFg.BlendBackgroundAmout, BlendForegroundAmout: default2BgFg.BlendForegroundAmout, Gamma: default2BgFg.Gamma, - ForegroundBlendFinder: clab.NamedColorFinder("base1"), + ForegroundBlendFinder: cl.NamedColorFinder("base1"), BackgroundBlendFinder: default2BgFg.BackgroundBlendFinder, MinimumLightnessDifference: 0.4, }, @@ -91,19 +87,19 @@ var ( { Name: "solarized-dark-high-contrast", Solarized: solarizedDarkHighContrast, - Accent1Pair: generator.AccentPairGenerator{ + Accent1Pair: cl.AccentPairGenerator{ BlendBackgroundAmout: default1BgFg.BlendBackgroundAmout, BlendForegroundAmout: default1BgFg.BlendForegroundAmout, Gamma: default1BgFg.Gamma, - ForegroundBlendFinder: clab.NamedColorFinder("base1"), + ForegroundBlendFinder: cl.NamedColorFinder("base1"), BackgroundBlendFinder: default1BgFg.BackgroundBlendFinder, MinimumLightnessDifference: 0.4, }, - Accent2Pair: generator.AccentPairGenerator{ + Accent2Pair: cl.AccentPairGenerator{ BlendBackgroundAmout: default2BgFg.BlendBackgroundAmout, BlendForegroundAmout: default2BgFg.BlendForegroundAmout, Gamma: default2BgFg.Gamma, - ForegroundBlendFinder: clab.NamedColorFinder("base1"), + ForegroundBlendFinder: cl.NamedColorFinder("base1"), BackgroundBlendFinder: default2BgFg.BackgroundBlendFinder, MinimumLightnessDifference: 0.4, }, @@ -143,39 +139,39 @@ var ( } // The original solarized color palette - solarized = sol.Solarized{ - Base: sol.Base{ - Base03: colors.SolarizedBase03, - Base02: colors.SolarizedBase02, - Base01: colors.SolarizedBase01, - Base00: colors.SolarizedBase00, - Base0: colors.SolarizedBase0, - Base1: colors.SolarizedBase1, - Base2: colors.SolarizedBase2, - Base3: colors.SolarizedBase3, + solarized = cl.Solarized{ + Base: cl.Base{ + Base03: cl.SolarizedBase03, + Base02: cl.SolarizedBase02, + Base01: cl.SolarizedBase01, + Base00: cl.SolarizedBase00, + Base0: cl.SolarizedBase0, + Base1: cl.SolarizedBase1, + Base2: cl.SolarizedBase2, + Base3: cl.SolarizedBase3, }, - Accents: sol.Accents{ - Blue: colors.SolarizedBlue, - Cyan: colors.SolarizedCyan, - Green: colors.SolarizedGreen, - Magenta: colors.SolarizedMagenta, - Orange: colors.SolarizedOrange, - Red: colors.SolarizedRed, - Violet: colors.SolarizedViolet, - Yellow: colors.SolarizedYellow, + Accents: cl.Accents{ + Blue: cl.SolarizedBlue, + Cyan: cl.SolarizedCyan, + Green: cl.SolarizedGreen, + Magenta: cl.SolarizedMagenta, + Orange: cl.SolarizedOrange, + Red: cl.SolarizedRed, + Violet: cl.SolarizedViolet, + Yellow: cl.SolarizedYellow, }, } - solarizedDarkHighContrast = sol.Solarized{ + solarizedDarkHighContrast = cl.Solarized{ Base: solarized.Base.Clone().ChangeLightness(0.04, -0.02), Accents: solarized.Accents.Clone().ChangeLightness(0.05), } - solarizedLightHighContrast = sol.Solarized{ + solarizedLightHighContrast = cl.Solarized{ Base: solarized.Base.Clone().ChangeLightness(0.02, -0.05), Accents: solarized.Accents.Clone().ChangeLightness(-0.05), } // the current -d colors in the emacs theme - oldDarkAccents = sol.Accents{ + oldDarkAccents = cl.Accents{ Blue: "#00629D", Cyan: "#00736F", Green: "#546E00", @@ -186,7 +182,7 @@ var ( Yellow: "#7B6000", } // the current -l colors in the emacs theme - oldLightAccents = sol.Accents{ + oldLightAccents = cl.Accents{ Blue: "#69B7F0", Cyan: "#69CABF", Green: "#B4C342", @@ -196,94 +192,94 @@ var ( Violet: "#9EA0E5", Yellow: "#DEB542", } - gruvboxDark = sol.Solarized{ - Base: sol.Base{ - Base03: colors.GruvboxDark0, - Base02: colors.GruvboxDark0Soft, - Base01: colors.GruvboxDark4, - Base00: colors.GruvboxDark0, - Base0: colors.GruvboxLight4, - Base1: colors.GruvboxLight3, - Base2: colors.GruvboxLight4, - Base3: colors.GruvboxLight0, + gruvboxDark = cl.Solarized{ + Base: cl.Base{ + Base03: cl.GruvboxDark0, + Base02: cl.GruvboxDark0Soft, + Base01: cl.GruvboxDark4, + Base00: cl.GruvboxDark0, + Base0: cl.GruvboxLight4, + Base1: cl.GruvboxLight3, + Base2: cl.GruvboxLight4, + Base3: cl.GruvboxLight0, }, - Accents: sol.Accents{ - Blue: colors.GruvboxBlue, - Cyan: colors.GruvboxAqua, - Green: colors.GruvboxGreen, - Magenta: colors.GruvboxBrightPurple, - Orange: colors.GruvboxOrange, - Red: colors.GruvboxBrightRed, - Violet: colors.GruvboxPurple, - Yellow: colors.GruvboxYellow, + Accents: cl.Accents{ + Blue: cl.GruvboxBlue, + Cyan: cl.GruvboxAqua, + Green: cl.GruvboxGreen, + Magenta: cl.GruvboxBrightPurple, + Orange: cl.GruvboxOrange, + Red: cl.GruvboxBrightRed, + Violet: cl.GruvboxPurple, + Yellow: cl.GruvboxYellow, }, } // note: not inversed here - gruvboxLight = sol.Solarized{ - Base: sol.Base{ - Base03: colors.GruvboxDark0, - Base02: colors.GruvboxDark0Soft, - Base01: colors.GruvboxDark3, - Base00: colors.GruvboxDark4, - Base0: colors.GruvboxDark1, - Base1: colors.GruvboxLight4, - Base2: colors.GruvboxLight1, - Base3: colors.GruvboxLight0, + gruvboxLight = cl.Solarized{ + Base: cl.Base{ + Base03: cl.GruvboxDark0, + Base02: cl.GruvboxDark0Soft, + Base01: cl.GruvboxDark3, + Base00: cl.GruvboxDark4, + Base0: cl.GruvboxDark1, + Base1: cl.GruvboxLight4, + Base2: cl.GruvboxLight1, + Base3: cl.GruvboxLight0, }, - Accents: sol.Accents{ - Blue: colors.GruvboxDarkBlue, - Cyan: colors.GruvboxAqua, - Green: colors.GruvboxGreen, - Magenta: colors.GruvboxBrightPurple, - Orange: colors.GruvboxDarkOrange, - Red: colors.GruvboxDarkRed, - Violet: colors.GruvboxDarkPurple, - Yellow: colors.GruvboxDarkYellow, + Accents: cl.Accents{ + Blue: cl.GruvboxDarkBlue, + Cyan: cl.GruvboxAqua, + Green: cl.GruvboxGreen, + Magenta: cl.GruvboxBrightPurple, + Orange: cl.GruvboxDarkOrange, + Red: cl.GruvboxDarkRed, + Violet: cl.GruvboxDarkPurple, + Yellow: cl.GruvboxDarkYellow, }, } - zenburn = sol.Solarized{ - Base: sol.Base{ - Base03: colors.ZenburnBg, - Base02: colors.ZenburnBgP1, - Base01: clab.HexColor(colors.ZenburnFgM1).Blend(colors.ZenburnFg, 0.3), - Base00: colors.ZenburnBgP3, - Base0: colors.ZenburnFg, - Base1: colors.ZenburnFgP1, - Base2: clab.HexColor(colors.ZenburnFgP1).Blend(colors.ZenburnFgP2, 0.5), - Base3: colors.ZenburnFgP2, + zenburn = cl.Solarized{ + Base: cl.Base{ + Base03: cl.ZenburnBg, + Base02: cl.ZenburnBgP1, + Base01: cl.HexColor(cl.ZenburnFgM1).Blend(cl.ZenburnFg, 0.3), + Base00: cl.ZenburnBgP3, + Base0: cl.ZenburnFg, + Base1: cl.ZenburnFgP1, + Base2: cl.HexColor(cl.ZenburnFgP1).Blend(cl.ZenburnFgP2, 0.5), + Base3: cl.ZenburnFgP2, }, - Accents: sol.Accents{ - Blue: colors.ZenburnBlue, - Cyan: colors.ZenburnCyan, - Green: colors.ZenburnGreen, - Magenta: colors.ZenburnMagenta, - Orange: colors.ZenburnOrange, - Red: colors.ZenburnRed, - Violet: clab.HexColor(colors.ZenburnBlue).Blend(colors.ZenburnMagenta, 0.5), - Yellow: colors.ZenburnYellow, + Accents: cl.Accents{ + Blue: cl.ZenburnBlue, + Cyan: cl.ZenburnCyan, + Green: cl.ZenburnGreen, + Magenta: cl.ZenburnMagenta, + Orange: cl.ZenburnOrange, + Red: cl.ZenburnRed, + Violet: cl.HexColor(cl.ZenburnBlue).Blend(cl.ZenburnMagenta, 0.5), + Yellow: cl.ZenburnYellow, }, } - monokai = sol.Solarized{ - Base: sol.Base{ - Base03: colors.Monokai03, - Base02: colors.Monokai02, - Base01: colors.Monokai01, - Base00: colors.Monokai00, - Base0: colors.Monokai0, - Base1: colors.Monokai0, - Base2: colors.Monokai0, - Base3: colors.Monokai0, + monokai = cl.Solarized{ + Base: cl.Base{ + Base03: cl.Monokai03, + Base02: cl.Monokai02, + Base01: cl.Monokai01, + Base00: cl.Monokai00, + Base0: cl.Monokai0, + Base1: cl.Monokai0, + Base2: cl.Monokai0, + Base3: cl.Monokai0, }, - Accents: sol.Accents{ - Blue: colors.MonokaiBlue, - Cyan: colors.MonokaiCyan, - Green: colors.MonokaiGreen, - Magenta: colors.MonokaiMagenta, - Orange: colors.MonokaiOrange, - Red: colors.MonokaiRed, - Violet: colors.MonokaiViolet, - Yellow: colors.MonokaiYellow, + Accents: cl.Accents{ + Blue: cl.MonokaiBlue, + Cyan: cl.MonokaiCyan, + Green: cl.MonokaiGreen, + Magenta: cl.MonokaiMagenta, + Orange: cl.MonokaiOrange, + Red: cl.MonokaiRed, + Violet: cl.MonokaiViolet, + Yellow: cl.MonokaiYellow, }, } ) diff --git a/colorlab/pkg/clab/colorfinder.go b/colorlab/pkg/clab/colorfinder.go @@ -1,49 +0,0 @@ -package clab - -import ( - "log" - - "github.com/lucasb-eyer/go-colorful" -) - -// Find a specific color in a Solarized based on some preconditon -type ColorFinder func(NamedColors) colorful.Color - -// NamedColorFinder extracts a named color from a palette -func NamedColorFinder(name string) ColorFinder { - return func(colors NamedColors) colorful.Color { - c, ok := colors[name] - if !ok { - log.Fatalf("color %s not in list: %v", name, colors) - } - return c.Color() - } -} - -// BgFinder returns base03 from the input Solarized -func BgFinder(nc NamedColors) colorful.Color { - return NamedColorFinder("base03")(nc) - -} - -// FgFinder finds base0 from the input Solarized -func FgFinder(nc NamedColors) colorful.Color { - return NamedColorFinder("base0")(nc) - -} - -// ExtremeColorFgFinder finds the darkest base tone for light on dark or the lightest color for dark on light. -func ExtremeColorFgFinder(nc NamedColors) colorful.Color { - if nc.IsDarkOnBright("base03", "base0") { - return nc.ColorList().ByLightnessDesc()[0] - } - return nc.ColorList().ByLightness()[0] -} - -// ExtremeColorFgFinder finds the lightest base tone for light on dark or the darkest color for dark on light. -func ExtremeColorBgFinder(nc NamedColors) colorful.Color { - if nc.IsDarkOnBright("base03", "base0") { - return nc.ColorList().ByLightness()[0] - } - return nc.ColorList().ByLightnessDesc()[0] -} diff --git a/colorlab/pkg/clab/colorlist.go b/colorlab/pkg/clab/colorlist.go @@ -1,36 +0,0 @@ -package clab - -import ( - "sort" - - "github.com/lucasb-eyer/go-colorful" -) - -type ColorList []colorful.Color - -// returns the ColorList ordered by Lightness, darkest first -func (c ColorList) ByLightness() ColorList { - res := c - sort.Sort(ByLightness(res)) - return res -} - -// returns the ColorList ordered by Lightness, lightest first -func (c ColorList) ByLightnessDesc() ColorList { - res := c - sort.Sort(sort.Reverse(ByLightness(res))) - return res -} - -// ByLightness sorts a list of colors by LAB L(ightness) value -type ByLightness ColorList - -func (a ByLightness) Len() int { return len(a) } -func (a ByLightness) Swap(i, j int) { a[i], a[j] = a[j], a[i] } -func (a ByLightness) Less(i, j int) bool { - lightness := func(c colorful.Color) float64 { - l, _, _ := c.Lab() - return l - } - return lightness(a[i]) < lightness(a[j]) -} diff --git a/colorlab/pkg/clab/colortransformer.go b/colorlab/pkg/clab/colortransformer.go @@ -1,5 +0,0 @@ -package clab - -import "github.com/lucasb-eyer/go-colorful" - -type ColorTransformer func(colorful.Color) colorful.Color diff --git a/colorlab/pkg/clab/hexcolor.go b/colorlab/pkg/clab/hexcolor.go @@ -1,23 +0,0 @@ -package clab - -import "github.com/lucasb-eyer/go-colorful" - -type HexColor string - -func (h HexColor) Color() colorful.Color { - col, err := colorful.Hex(string(h)) - if err != nil { - panic(err) - } - return col -} - -func (h HexColor) Blend(hc HexColor, t float64) HexColor { - c1 := h.Color() - c2 := hc.Color() - return HexColor(c1.BlendLab(c2, t).Clamped().Hex()) -} - -func NewHexColor(c colorful.Color) HexColor { - return HexColor(c.Clamped().Hex()) -} diff --git a/colorlab/pkg/clab/namedcolors.go b/colorlab/pkg/clab/namedcolors.go @@ -1,104 +0,0 @@ -package clab - -import ( - "fmt" - "log" - "strings" - - "github.com/lucasb-eyer/go-colorful" -) - -type NamedColors map[string]HexColor - -// WithPrefix returns a copy of named colors where all keys are prefixed. -func (n NamedColors) WithPrefix(prefix string) NamedColors { - nc := make(NamedColors, len(n)) - for k, v := range n { - nc[fmt.Sprintf("%s%s", prefix, k)] = v - } - return nc -} - -// WithSuffix returns a copy of named colors where all keys are suffixed. -func (n NamedColors) WithSuffix(suffix string) NamedColors { - nc := make(NamedColors, len(n)) - for k, v := range n { - nc[fmt.Sprintf("%s%s", k, suffix)] = v - } - return nc -} - -func (n NamedColors) FilterSuffix(suffix ...string) NamedColors { - nc := make(NamedColors, len(n)) - for k, v := range n { - loop: - for _, s := range suffix { - if strings.HasSuffix(k, s) { - nc[k] = v - break loop - } - } - } - return nc -} - -func (n NamedColors) FilterPrefix(prefix ...string) NamedColors { - nc := make(NamedColors, len(n)) - for k, v := range n { - loop: - for _, p := range prefix { - if strings.HasPrefix(k, p) { - nc[k] = v - break loop - } - } - } - return nc -} - -func (n NamedColors) ColorList() ColorList { - var res ColorList - for _, v := range n { - res = append(res, v.Color()) - - } - return res -} - -// Returns true if the LAB lightness of bgName is larger than fgName. -func (nc NamedColors) IsDarkOnBright(bgName, fgName string) bool { - lightness := func(c colorful.Color) float64 { - l, _, _ := c.Lab() - return l - } - - // bg, ok := nc["base03"] - bg, ok := nc[bgName] - if !ok { - log.Fatalf("base03 not found in: ", nc) - } - - // fg := nc["base0"] - fg := nc[fgName] - if !ok { - log.Fatalf("base0 not found in: ", nc) - } - - bgl := lightness(bg.Color()) - fgl := lightness(fg.Color()) - if fgl == bgl { - log.Fatalf("bg (%v) and fg (%v) are not supposed to have equal lightness: %v %v", bg, fg, bgl, fgl) - } - return fgl > bgl -} - -// Merge merges multiple NamedColors -func Merge(nc ...NamedColors) NamedColors { - res := make(NamedColors) - for _, nc := range nc { - for k, v := range nc { - res[k] = v - } - } - return res -} diff --git a/colorlab/pkg/clab/package.go b/colorlab/pkg/clab/package.go @@ -1,2 +0,0 @@ -// Package clab contains general utulities for working with palette colors -package clab diff --git a/colorlab/pkg/colors/colors.go b/colorlab/pkg/colors/colors.go @@ -1,122 +0,0 @@ -// Package colors contains color constants for various palettes -package colors - -const ( - SolarizedBase03 = "#002b36" - SolarizedBase02 = "#073642" - SolarizedBase01 = "#586e75" - SolarizedBase00 = "#657b83" - SolarizedBase0 = "#839496" - SolarizedBase1 = "#93a1a1" - SolarizedBase2 = "#eee8d5" - SolarizedBase3 = "#fdf6e3" - SolarizedBlue = "#268bd2" - SolarizedCyan = "#2aa198" - SolarizedGreen = "#859900" - SolarizedMagenta = "#d33682" - SolarizedOrange = "#cb4b16" - SolarizedRed = "#dc322f" - SolarizedViolet = "#6c71c4" - SolarizedYellow = "#b58900" - - GruvboxDark0Hard = "#1d2021" - GruvboxDark0 = "#282828" - GruvboxDark0Soft = "#32302f" - GruvboxDark1 = "#3c3836" - GruvboxDark2 = "#504945" - GruvboxDark3 = "#665c54" - GruvboxDark4 = "#7c6f64" - GruvboxGray = "#928374" - GruvboxLight0Hard = "#f9f5d7" - GruvboxLight0 = "#fbf1c7" - GruvboxLight0Soft = "#f2e5bc" - GruvboxLight1 = "#ebdbb2" - GruvboxLight2 = "#d5c4a1" - GruvboxLight3 = "#bdae93" - GruvboxLight4 = "#a89984" - GruvboxRed = "#cc241d" - GruvboxGreen = "#98971a" - GruvboxYellow = "#d79921" - GruvboxBlue = "#458588" - GruvboxPurple = "#b16286" - GruvboxAqua = "#689d6a" - GruvboxOrange = "#d65d0e" - GruvboxBrightRed = "#fb4933" - GruvboxBrightGreen = "#b8bb26" - GruvboxBrightYellow = "#fabd2f" - GruvboxBrightBlue = "#83a598" - GruvboxBrightPurple = "#d3869b" - GruvboxBrightAqua = "#8ec07c" - GruvboxBrightOrange = "#fe8019" - GruvboxDarkRed = "#9d0006" - GruvboxDarkGreen = "#79740e" - GruvboxDarkYellow = "#b57614" - GruvboxDarkBlue = "#076678" - GruvboxDarkPurple = "#8f3f71" - GruvboxDarkAqua = "#427b58" - GruvboxDarkOrange = "#af3a03" - - ZenburnFgM1 = "#656555" - ZenburnFgM05 = "#989890" - ZenburnFg = "#DCDCCC" - ZenburnFgP1 = "#FFFFEF" - ZenburnFgP2 = "#FFFFFD" - ZenburnBgM2 = "#000000" - ZenburnBgM1 = "#2B2B2B" - ZenburnBgM08 = "#303030" - ZenburnBgM05 = "#383838" - ZenburnBg = "#3F3F3F" - ZenburnBgP05 = "#494949" - ZenburnBgP1 = "#4F4F4F" - ZenburnBgP2 = "#5F5F5F" - ZenburnBgP3 = "#6F6F6F" - ZenburnRedM6 = "#6C3333" - ZenburnRedM5 = "#7C4343" - ZenburnRedM4 = "#8C5353" - ZenburnRedM3 = "#9C6363" - ZenburnRedM2 = "#AC7373" - ZenburnRedM1 = "#BC8383" - ZenburnRed = "#CC9393" - ZenburnRedP1 = "#DCA3A3" - ZenburnRedP2 = "#ECB3B3" - ZenburnOrange = "#DFAF8F" - ZenburnYellowM2 = "#D0BF8F" - ZenburnYellowM1 = "#E0CF9F" - ZenburnYellow = "#F0DFAF" - ZenburnGreenM5 = "#2F4F2F" - ZenburnGreenM4 = "#3F5F3F" - ZenburnGreenM3 = "#4F6F4F" - ZenburnGreenM2 = "#5F7F5F" - ZenburnGreenM1 = "#6F8F6F" - ZenburnGreen = "#7F9F7F" - ZenburnGreenP1 = "#8FB28F" - ZenburnGreenP2 = "#9FC59F" - ZenburnGreenP3 = "#AFD8AF" - ZenburnGreenP4 = "#BFEBBF" - ZenburnCyan = "#93E0E3" - ZenburnBlueP3 = "#BDE0F3" - ZenburnBlueP2 = "#ACE0E3" - ZenburnBlueP1 = "#94BFF3" - ZenburnBlue = "#8CD0D3" - ZenburnBlueM1 = "#7CB8BB" - ZenburnBlueM2 = "#6CA0A3" - ZenburnBlueM3 = "#5C888B" - ZenburnBlueM4 = "#4C7073" - ZenburnBlueM5 = "#366060" - ZenburnMagenta = "#DC8CC3" - - // ehm, monokaiXX are probably not "correct" in any way - Monokai03 = "#272822" - Monokai02 = "#3E3D31" - Monokai01 = "#75715E" - Monokai00 = "#49483E" - Monokai0 = "#F8F8F2" - MonokaiYellow = "#E6DB74" - MonokaiOrange = "#FD971F" - MonokaiRed = "#F92672" - MonokaiMagenta = "#FD5FF0" - MonokaiBlue = "#66D9EF" - MonokaiGreen = "#A6E22E" - MonokaiCyan = "#A1EFE4" - MonokaiViolet = "#AE81FF" -) diff --git a/colorlab/pkg/emacs/emacs.go b/colorlab/pkg/emacs/emacs.go @@ -1,83 +0,0 @@ -// Package emacs contains features specific for generating elisp themes -package emacs - -import ( - "bufio" - "bytes" - "fmt" - "io" - "io/ioutil" - "log" - "os" - "strconv" - "strings" - - "github.com/bbatsov/solarized-emacs/colorlab/pkg/clab" - "github.com/bbatsov/solarized-emacs/colorlab/pkg/sol" -) - -// PrintAlist prints the named colors list in a way that is compatible with solarized-palettes.el. -func PrintAlist(w io.Writer, n clab.NamedColors, indent int) (int, error) { - keys := sol.OrderedKeys(n) - var longestKey int - for _, n := range keys { - l := len(n) - if l > longestKey { - longestKey = l - } - } - longestKey = longestKey - prefix := "" - for i := 0; i < indent; i++ { - prefix += " " - - } - var nt int - - for _, name := range keys { - n, err := fmt.Fprintf(w, "%s(%-"+strconv.Itoa(longestKey)+"s . \"%s\")\n", prefix, name, n[name]) - n = n + nt - if err != nil { - return nt, err - } - - } - return nt, nil -} - -func RewritePalette(nc clab.NamedColors, paletteName string) { - - var dst bytes.Buffer - - file, err := os.Open("../solarized-palettes.el") - if err != nil { - log.Fatal(err) - } - defer file.Close() - - scanner := bufio.NewScanner(file) - var insideReplacement bool - for scanner.Scan() { - txt := scanner.Text() - if insideReplacement && strings.HasSuffix(txt, ";; palette end") { - insideReplacement = false - } - if !insideReplacement { - dst.WriteString(txt) - dst.WriteString("\n") - - } - if strings.HasSuffix(txt, fmt.Sprintf(";; %s palette", paletteName)) { - insideReplacement = true - PrintAlist(&dst, nc, 4) - } - } - - if err := scanner.Err(); err != nil { - log.Fatal(err) - } - - file.Close() - ioutil.WriteFile("../solarized-palettes.el", dst.Bytes(), 0x776) - -} diff --git a/colorlab/pkg/generator/accentpair.go b/colorlab/pkg/generator/accentpair.go @@ -1,116 +0,0 @@ -package generator - -import ( - "fmt" - "math" - - "github.com/bbatsov/solarized-emacs/colorlab/pkg/clab" - "github.com/bbatsov/solarized-emacs/colorlab/pkg/sol" - "github.com/lucasb-eyer/go-colorful" -) - -// AccentPairGenerator generates paris of background and foreground colors that are meant to be used in pairs. -type AccentPairGenerator struct { - BlendBackgroundAmout float64 - BlendForegroundAmout float64 - Gamma float64 - MinimumLightnessDifference float64 - - BackgroundBlendFinder clab.ColorFinder - ForegroundBlendFinder clab.ColorFinder -} - -func (g *AccentPairGenerator) Generate(solarized sol.Solarized) (backgrounds, foregrounds sol.Accents) { - lightnessReport := false - solarized = solarized.Clone() - cs := solarized.Accents.Colors() - - light := func(c colorful.Color) float64 { - l, _, _ := c.Lab() - return l - } - var bgs, fgs [8]colorful.Color - for idx, v := range cs { - if lightnessReport { - fmt.Println(" ") - } - - blendBgColor := g.BackgroundBlendFinder(solarized.Base.NamedColors()) - blendFgColor := g.ForegroundBlendFinder(solarized.Base.NamedColors()) - - bg := v.BlendLab(blendBgColor, g.BlendBackgroundAmout) - fg := v.BlendLab(blendFgColor, g.BlendForegroundAmout) - if lightnessReport { - { - l, _, _ := blendBgColor.Lab() - fmt.Printf(" | b1 %.2f %s", l, solarized.Base03) - } - { - l, _, _ := blendFgColor.Lab() - fmt.Printf(" f1 %.2f %s", l, solarized.Base0) - } - } - - lFg := light(blendFgColor) - lBg := light(blendBgColor) - - lc := lFg - lBg - if lightnessReport { - fmt.Printf(" lc %.2f", lc) - } - bl, ba, bb := bg.Lab() - fl, fa, fb := fg.Lab() - - if lightnessReport { - fmt.Printf(" | b2 %.2f %s", bl, bg.Clamped().Hex()) - fmt.Printf(" f2 %.2f %s", fl, fg.Clamped().Hex()) - fmt.Printf(" lc %.2f", fl-bl) - } - // nlb := bl + (fl-bl)*0.5 + lc*0.5 - // nlf := bl + (fl-bl)*0.5 - lc*0.5 - // nlf := lFg - // nlb := lBg - - nlb := bl - nlf := fl - if fl > bl { - nlb = nlb - g.Gamma - nlf = nlf - g.Gamma - } else { - nlb = nlb + g.Gamma - nlf = nlf + g.Gamma - } - - if (math.Max(nlf, nlb) - math.Min(nlf, nlb)) < g.MinimumLightnessDifference { - diff := (g.MinimumLightnessDifference - (math.Max(math.Abs(nlf), math.Abs(nlb)) - math.Min(math.Abs(nlf), math.Abs(nlb)))) - m := 1.0 - if bl > fl { - m = -1 - } - nlf = nlf + nlf/1*diff*m - nlb = nlb - nlb/1*diff*m - if lightnessReport { - fmt.Printf(" adj %.2f ", diff) - } - } else { - if lightnessReport { - fmt.Printf(" ") - } - } - - fg = colorful.Lab(nlf, fa, fb) - bg = colorful.Lab(nlb, ba, bb) - if lightnessReport { - fmt.Printf(" | b3 %.2f %s", nlb, bg.Clamped().Hex()) - fmt.Printf(" f3 %.2f %s", nlf, fg.Clamped().Hex()) - fmt.Printf(" lc %.2f", nlf-nlb) - } - bgs[idx] = bg - fgs[idx] = fg - - } - if lightnessReport { - fmt.Println("\n\n") - } - return sol.NewAccents(bgs), sol.NewAccents(fgs) -} diff --git a/colorlab/pkg/generator/package.go b/colorlab/pkg/generator/package.go @@ -1,2 +0,0 @@ -// Package generator contains utilities for enhancing a palette with variations of colors -package generator diff --git a/colorlab/pkg/generator/palette.go b/colorlab/pkg/generator/palette.go @@ -1,52 +0,0 @@ -package generator - -import ( - "github.com/bbatsov/solarized-emacs/colorlab/pkg/clab" - "github.com/bbatsov/solarized-emacs/colorlab/pkg/sol" -) - -// Palette . -type Palette struct { - Name string - Inverse bool - Solarized sol.Solarized - - Accent1Pair AccentPairGenerator - Accent2Pair AccentPairGenerator -} - -func (p Palette) Generate() clab.NamedColors { - - pal := p.Solarized - - corrected := pal - if p.Inverse { - corrected = pal.Inverse() - } - - bgs, fgs := p.Accent1Pair.Generate(corrected) - hbgs, hfgs := p.Accent2Pair.Generate(corrected) - cols := clab.Merge( - pal.NamedColors(), - fgs.NamedColors().WithSuffix("-1fg"), - bgs.NamedColors().WithSuffix("-1bg"), - hfgs.NamedColors().WithSuffix("-2fg"), - hbgs.NamedColors().WithSuffix("-2bg"), - - pal.Accents. - ChangeSaturation(0.2). - Blend(pal.Base03, .2). - ChangeLightness(-.1). - NamedColors(). - WithSuffix("-d"), - - pal.Accents. - ChangeSaturation(0.2). - Blend(pal.Base2, .2). - ChangeLightness(.05). - NamedColors(). - WithSuffix("-l"), - ) - return cols - -} diff --git a/colorlab/pkg/sol/accents.go b/colorlab/pkg/sol/accents.go @@ -1,141 +0,0 @@ -package sol - -import ( - "github.com/bbatsov/solarized-emacs/colorlab/pkg/clab" - "github.com/lucasb-eyer/go-colorful" -) - -// Accents . -type Accents struct { - Yellow clab.HexColor - Orange clab.HexColor - Red clab.HexColor - Magenta clab.HexColor - Violet clab.HexColor - Blue clab.HexColor - Cyan clab.HexColor - Green clab.HexColor -} - -type AccentColors [8]colorful.Color - -func NewAccents(cc [8]colorful.Color) Accents { - return Accents{ - Yellow: clab.HexColor(cc[0].Clamped().Hex()), - Orange: clab.HexColor(cc[1].Clamped().Hex()), - Red: clab.HexColor(cc[2].Clamped().Hex()), - Magenta: clab.HexColor(cc[3].Clamped().Hex()), - Violet: clab.HexColor(cc[4].Clamped().Hex()), - Blue: clab.HexColor(cc[5].Clamped().Hex()), - Cyan: clab.HexColor(cc[6].Clamped().Hex()), - Green: clab.HexColor(cc[7].Clamped().Hex()), - } -} -func (s Accents) Clone() Accents { - return Accents{ - Yellow: s.Yellow, - Orange: s.Orange, - Red: s.Red, - Magenta: s.Magenta, - Violet: s.Violet, - Blue: s.Blue, - Cyan: s.Cyan, - Green: s.Green, - } -} - -func (s Accents) Colors() AccentColors { - a := s.colorArray() - return [8]colorful.Color{ - a[0].Color(), - a[1].Color(), - a[2].Color(), - a[3].Color(), - a[4].Color(), - a[5].Color(), - a[6].Color(), - a[7].Color(), - } -} -func (a Accents) ChangeLightness(amount float64) Accents { - cc := a.Colors() - lightness := func(c colorful.Color, v float64) colorful.Color { - l, a, b := c.Lab() - l = l + v - return colorful.Lab(l, a, b) - } - cc[0] = lightness(cc[0], amount) - cc[1] = lightness(cc[1], amount) - cc[2] = lightness(cc[2], amount) - cc[3] = lightness(cc[3], amount) - cc[4] = lightness(cc[4], amount) - cc[5] = lightness(cc[5], amount) - cc[6] = lightness(cc[6], amount) - cc[7] = lightness(cc[7], amount) - return NewAccents(cc) -} -func (a Accents) ChangeSaturation(amount float64) Accents { - cc := a.Colors() - saturation := func(c colorful.Color, v float64) colorful.Color { - h, s, l := c.Hsl() - // s = math.Min(math.Max(s+v, 0), 1) - s = s + v - return colorful.Hsl(h, s, l) - } - cc[0] = saturation(cc[0], amount) - cc[1] = saturation(cc[1], amount) - cc[2] = saturation(cc[2], amount) - cc[3] = saturation(cc[3], amount) - cc[4] = saturation(cc[4], amount) - cc[5] = saturation(cc[5], amount) - cc[6] = saturation(cc[6], amount) - cc[7] = saturation(cc[7], amount) - return NewAccents(cc) -} - -func (a Accents) Blend(hc clab.HexColor, amount float64) Accents { - c := hc.Color() - cc := a.Colors() - cc[0] = cc[0].BlendLab(c, amount) - cc[1] = cc[1].BlendLab(c, amount) - cc[2] = cc[2].BlendLab(c, amount) - cc[3] = cc[3].BlendLab(c, amount) - cc[4] = cc[4].BlendLab(c, amount) - cc[5] = cc[5].BlendLab(c, amount) - cc[6] = cc[6].BlendLab(c, amount) - cc[7] = cc[7].BlendLab(c, amount) - return NewAccents(cc) -} - -func (ac Accents) NamedColors() clab.NamedColors { - nc := make(clab.NamedColors, 8) - arr := ac.colorArray() - for idx, hex := range arr { - nc[accentNames[idx]] = hex - } - return nc -} - -func (s Accents) colorArray() [8]clab.HexColor { - return [8]clab.HexColor{ - s.Yellow, - s.Orange, - s.Red, - s.Magenta, - s.Violet, - s.Blue, - s.Cyan, - s.Green, - } -} - -var accentNames = [8]string{ - 0: "yellow", - 1: "orange", - 2: "red", - 3: "magenta", - 4: "violet", - 5: "blue", - 6: "cyan", - 7: "green", -} diff --git a/colorlab/pkg/sol/base.go b/colorlab/pkg/sol/base.go @@ -1,125 +0,0 @@ -package sol - -import ( - "github.com/bbatsov/solarized-emacs/colorlab/pkg/clab" - "github.com/lucasb-eyer/go-colorful" -) - -type Base struct { - Base03 clab.HexColor - Base02 clab.HexColor - Base01 clab.HexColor - Base00 clab.HexColor - Base0 clab.HexColor - Base1 clab.HexColor - Base2 clab.HexColor - Base3 clab.HexColor -} - -type BaseColors [8]colorful.Color - -func NewBase(bc [8]colorful.Color) Base { - return Base{ - Base03: clab.HexColor(bc[0].Clamped().Hex()), - Base02: clab.HexColor(bc[1].Clamped().Hex()), - Base01: clab.HexColor(bc[2].Clamped().Hex()), - Base00: clab.HexColor(bc[3].Clamped().Hex()), - Base0: clab.HexColor(bc[4].Clamped().Hex()), - Base1: clab.HexColor(bc[5].Clamped().Hex()), - Base2: clab.HexColor(bc[6].Clamped().Hex()), - Base3: clab.HexColor(bc[7].Clamped().Hex()), - } -} -func (s Base) Clone() Base { - return Base{ - Base03: s.Base03, - Base02: s.Base02, - Base01: s.Base01, - Base00: s.Base00, - Base0: s.Base0, - Base1: s.Base1, - Base2: s.Base2, - Base3: s.Base3, - } -} -func (s Base) NamedColors() clab.NamedColors { - nc := make(clab.NamedColors, 8) - arr := s.colorArray() - for idx, hex := range arr { - nc[baseNames[idx]] = hex - } - return nc -} - -func (s Base) Colors() BaseColors { - a := s.colorArray() - return [8]colorful.Color{ - a[0].Color(), - a[1].Color(), - a[2].Color(), - a[3].Color(), - a[4].Color(), - a[5].Color(), - a[6].Color(), - a[7].Color(), - } -} - -func (s Base) colorArray() [8]clab.HexColor { - return [8]clab.HexColor{ - s.Base03, - s.Base02, - s.Base01, - s.Base00, - s.Base0, - s.Base1, - s.Base2, - s.Base3, - } -} - -// Returns true if the LAB lightness of base0 is larger than base03. -func (b Base) IsDarkOnBright() bool { - return b.NamedColors().IsDarkOnBright("base03", "base0") -} - -var baseNames = [8]string{ - 0: "base03", - 1: "base02", - 2: "base01", - 3: "base00", - 4: "base0", - 5: "base1", - 6: "base2", - 7: "base3", -} - -func (s Base) Inverse() Base { - return Base{ - Base03: s.Base3, - Base02: s.Base2, - Base01: s.Base1, - Base00: s.Base0, - Base0: s.Base00, - Base1: s.Base01, - Base2: s.Base02, - Base3: s.Base03, - } -} -func (b Base) ChangeLightness(amountFgs, amountBgs float64) Base { - cc := b.Colors() - lightness := func(c colorful.Color, v float64) colorful.Color { - l, a, b := c.Lab() - l = l + v - return colorful.Lab(l, a, b) - } - cc[0] = lightness(cc[0], amountBgs) - cc[1] = lightness(cc[1], amountBgs) - cc[2] = lightness(cc[2], amountFgs) - cc[3] = lightness(cc[3], amountBgs) - cc[4] = lightness(cc[4], amountFgs) - cc[5] = lightness(cc[5], amountFgs) - cc[6] = lightness(cc[6], amountFgs) - cc[7] = lightness(cc[7], amountFgs) - return NewBase(cc) -} diff --git a/colorlab/pkg/sol/package.go b/colorlab/pkg/sol/package.go @@ -1,2 +0,0 @@ -// Package sol contains functionality specific to the structure of a solarize palette -package sol diff --git a/colorlab/pkg/sol/solarized.go b/colorlab/pkg/sol/solarized.go @@ -1,26 +0,0 @@ -package sol - -import "github.com/bbatsov/solarized-emacs/colorlab/pkg/clab" - -type Solarized struct { - Base - Accents -} - -func (s Solarized) Clone() Solarized { - return Solarized{ - Base: s.Base.Clone(), - Accents: s.Accents.Clone(), - } -} - -func (s Solarized) Inverse() Solarized { - return Solarized{ - Base: s.Base.Inverse(), - Accents: s.Accents.Clone(), - } -} - -func (s Solarized) NamedColors() clab.NamedColors { - return clab.Merge(s.Base.NamedColors(), s.Accents.NamedColors()) -} diff --git a/colorlab/pkg/sol/sort.go b/colorlab/pkg/sol/sort.go @@ -1,70 +0,0 @@ -package sol - -import ( - "sort" - "strings" - - "github.com/bbatsov/solarized-emacs/colorlab/pkg/clab" -) - -// Orderedkeys returns the keys in a order that is like how solarized names should be ordered. -// -// primary orer is: -// -// 1. base names -// 2. accent colors -// 3. names that contain base names -// 4. names that contain accent color names -// 5. the rest -// -// secondary sort order is by string comparison. -// -func OrderedKeys(n clab.NamedColors) []string { - var names []string - for k, _ := range n { - names = append(names, k) - } - sort.Sort(sort.StringSlice(names)) - - var allNames []string - for _, n := range baseNames { - allNames = append(allNames, n) - } - for _, n := range accentNames { - allNames = append(allNames, n) - } - score := func(idx int, exact bool) int { - s := (len(allNames) - idx) + 1 - if exact { - s = s + len(allNames) - } - return s - } - sort.SliceStable(names, func(i int, j int) bool { - var is, js int // scores - in := names[i] - jn := names[j] - scoring: - for sortIdx, sortName := range allNames { - if is == 0 { - // log.Println(in, sortName) - if strings.Contains(in, sortName) { - is = score(sortIdx, in == sortName) - // fmt.Println("score in", in, sortName, is) - } - } - if js == 0 { - if strings.Contains(jn, sortName) { - js = score(sortIdx, jn == sortName) - // fmt.Println("score j", jn, sortName, js) - } - } - if is != 0 && js != 0 { - break scoring - } - } - // log.Println(is, js, in,jn) - return is > js - }) - return names -}