...
1 package styles
2
3 import (
4 "embed"
5 "io/fs"
6 "sort"
7
8 "github.com/alecthomas/chroma/v2"
9 )
10
11
12 var embedded embed.FS
13
14
15 var Registry = func() map[string]*chroma.Style {
16 registry := map[string]*chroma.Style{}
17
18 files, err := fs.ReadDir(embedded, ".")
19 if err != nil {
20 panic(err)
21 }
22 for _, file := range files {
23 if file.IsDir() {
24 continue
25 }
26 r, err := embedded.Open(file.Name())
27 if err != nil {
28 panic(err)
29 }
30 style, err := chroma.NewXMLStyle(r)
31 if err != nil {
32 panic(err)
33 }
34 registry[style.Name] = style
35 _ = r.Close()
36 }
37 return registry
38 }()
39
40
41 var Fallback = Registry["swapoff"]
42
43
44 func Register(style *chroma.Style) *chroma.Style {
45 Registry[style.Name] = style
46 return style
47 }
48
49
50 func Names() []string {
51 out := []string{}
52 for name := range Registry {
53 out = append(out, name)
54 }
55 sort.Strings(out)
56 return out
57 }
58
59
60 func Get(name string) *chroma.Style {
61 if style, ok := Registry[name]; ok {
62 return style
63 }
64 return Fallback
65 }
66
View as plain text