initial commit
This commit is contained in:
commit
078bd90570
9 changed files with 374 additions and 0 deletions
129
tool/generate.go
Normal file
129
tool/generate.go
Normal file
|
|
@ -0,0 +1,129 @@
|
|||
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)
|
||||
}
|
||||
12
tool/template.gotmpl
Normal file
12
tool/template.gotmpl
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
package catppuccin
|
||||
|
||||
import "github.com/charmbracelet/lipgloss"
|
||||
|
||||
type Palette struct {
|
||||
{{ range colorVars }}{{ "\t" }}{{ . }} lipgloss.Color{{ "\n" }}{{ end }}
|
||||
}
|
||||
{{ range $var, $p := palettes }}
|
||||
var {{ $var }} = Palette{
|
||||
{{ range $_, $c := $p.Colors }}{{ "\t" }}{{ .VarName }}: lipgloss.Color("{{ .Hex }}"),{{ "\n" }}{{ end }}
|
||||
}{{ end }}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue