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:
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
-}