1package helpers
2
3import (
4	"path/filepath"
5	"sort"
6	"strings"
7
8	"github.com/alecthomas/chroma/lexers"
9	"github.com/gohugoio/hugo/docshelper"
10)
11
12// This is is just some helpers used to create some JSON used in the Hugo docs.
13func init() {
14	docsProvider := func() docshelper.DocProvider {
15		var chromaLexers []interface{}
16
17		sort.Sort(lexers.Registry.Lexers)
18
19		for _, l := range lexers.Registry.Lexers {
20
21			config := l.Config()
22
23			var filenames []string
24			filenames = append(filenames, config.Filenames...)
25			filenames = append(filenames, config.AliasFilenames...)
26
27			aliases := config.Aliases
28
29			for _, filename := range filenames {
30				alias := strings.TrimSpace(strings.TrimPrefix(filepath.Ext(filename), "."))
31				if alias != "" {
32					aliases = append(aliases, alias)
33				}
34			}
35
36			aliases = UniqueStringsSorted(aliases)
37
38			lexerEntry := struct {
39				Name    string
40				Aliases []string
41			}{
42				config.Name,
43				aliases,
44			}
45
46			chromaLexers = append(chromaLexers, lexerEntry)
47
48		}
49
50		return docshelper.DocProvider{"chroma": map[string]interface{}{"lexers": chromaLexers}}
51	}
52
53	docshelper.AddDocProviderFunc(docsProvider)
54}
55