This repository has been archived on 2022-05-06. You can view files and clone it, but cannot push or open issues/pull-requests.
chromajson/cmd/chromajson/main.go

80 lines
1.4 KiB
Go

package main
import (
"flag"
"fmt"
"io"
"os"
"github.com/alecthomas/chroma/v2/quick"
"go.jolheiser.com/chromajson"
"go.jolheiser.com/chromajson/schema"
)
func main() {
fs := flag.NewFlagSet("chromajson", flag.ExitOnError)
styleFlag := fs.String("style", ".style.json", "Chroma JSON style config")
lintFlag := fs.Bool("lint", false, "Lint config and exit")
if err := fs.Parse(os.Args[1:]); err != nil {
fmt.Println(err)
return
}
if !*lintFlag && fs.NArg() == 0 {
fmt.Println("input argument is required to show style")
return
}
fi, err := os.Open(*styleFlag)
if err != nil {
fmt.Println(err)
return
}
defer fi.Close()
if *lintFlag {
lint(fi)
return
}
style, err := chromajson.LoadStyle(fi)
if err != nil {
fmt.Println(err)
return
}
if err := style.Register(); err != nil {
fmt.Println(err)
return
}
source, err := os.ReadFile(fs.Arg(0))
if err != nil {
fmt.Println(err)
return
}
if err := quick.Highlight(fs.Output(), string(source), "", "terminal256", style.Name); err != nil {
fmt.Println(err)
return
}
}
func lint(r io.Reader) {
ok, err := schema.Lint(r)
if ok {
fmt.Println("✅ Config is valid!")
return
}
fmt.Printf("❌ Config is invalid: %v\n", err)
rerrs, ok := err.(schema.ResultErrors)
if !ok {
fmt.Println(err)
return
}
for _, rerr := range rerrs {
fmt.Printf("In %s: %s\n", rerr.Field(), rerr.Description())
}
}