129 lines
2.2 KiB
Go
129 lines
2.2 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
_ "embed"
|
|
"encoding/json"
|
|
"flag"
|
|
"go/format"
|
|
"os"
|
|
"strings"
|
|
"text/template"
|
|
)
|
|
|
|
//go:embed template.gotmpl
|
|
var tmpl string
|
|
|
|
type hsl struct {
|
|
H float64 `json:"h"`
|
|
S float64 `json:"s"`
|
|
L float64 `json:"l"`
|
|
}
|
|
|
|
type rgb struct {
|
|
R float64 `json:"r"`
|
|
G float64 `json:"g"`
|
|
B float64 `json:"b"`
|
|
}
|
|
|
|
type paletteColor struct {
|
|
Name string `json:"name"`
|
|
Order uint `json:"order"`
|
|
Hex string `json:"hex"`
|
|
RGB rgb `json:"rgb"`
|
|
HSL hsl `json:"hsl"`
|
|
Accent bool `json:"accent"`
|
|
}
|
|
|
|
func (c paletteColor) VarName() string {
|
|
return strings.Join(strings.Split(c.Name, " "), "")
|
|
}
|
|
|
|
type palette struct {
|
|
Name string `json:"name"`
|
|
Emoji string `json:"emoji"`
|
|
Order int `json:"order"`
|
|
Dark bool `json:"dark"`
|
|
Colors map[string]paletteColor `json:"colors"`
|
|
VarName string
|
|
}
|
|
|
|
type paletteFile struct {
|
|
Version string `json:"version"`
|
|
Latte palette `json:"latte"`
|
|
Frappe palette `json:"frappe"`
|
|
Macchiato palette `json:"macchiato"`
|
|
Mocha palette `json:"mocha"`
|
|
}
|
|
|
|
func exists(file string) bool {
|
|
_, err := os.Stat(file)
|
|
if err != nil {
|
|
|
|
}
|
|
return !os.IsNotExist(err)
|
|
}
|
|
|
|
func main() {
|
|
flag.Parse()
|
|
|
|
if !exists("palette.json") {
|
|
os.Exit(1)
|
|
}
|
|
|
|
f, err := os.Open("palette.json")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
var paletteFile paletteFile
|
|
err = json.NewDecoder(f).Decode(&paletteFile)
|
|
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
buf := new(bytes.Buffer)
|
|
|
|
funcs := template.FuncMap{
|
|
"palettes": func() map[string]palette {
|
|
return map[string]palette{
|
|
"Latte": paletteFile.Latte,
|
|
"Frappe": paletteFile.Frappe,
|
|
"Macchiato": paletteFile.Macchiato,
|
|
"Mocha": paletteFile.Mocha,
|
|
}
|
|
},
|
|
"colorVars": func() []string {
|
|
keys := make([]string, len(paletteFile.Latte.Colors))
|
|
|
|
for _, c := range paletteFile.Latte.Colors {
|
|
keys[c.Order] = c.VarName()
|
|
}
|
|
|
|
return keys
|
|
},
|
|
}
|
|
|
|
t, err := template.New("").Funcs(funcs).Parse(tmpl)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
err = t.Execute(buf, nil)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
bs, err := format.Source(buf.Bytes())
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
f, err = os.Create("colors.go")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
f.Write(bs)
|
|
}
|