diff --git a/helpers/docshelper.go b/helpers/docshelper.go new file mode 100644 index 000000000..742b7bcf0 --- /dev/null +++ b/helpers/docshelper.go @@ -0,0 +1,60 @@ +package helpers + +import ( + "fmt" + "path/filepath" + "sort" + "strings" + + "github.com/alecthomas/chroma/lexers" + "github.com/gohugoio/hugo/docshelper" +) + +// This is is just some helpers used to create some JSON used in the Hugo docs. +func init() { + + docsProvider := func() map[string]interface{} { + docs := make(map[string]interface{}) + + var chromaLexers []interface{} + + sort.Sort(lexers.Registry.Lexers) + + for _, l := range lexers.Registry.Lexers { + + config := l.Config() + + var filenames []string + filenames = append(filenames, config.Filenames...) + filenames = append(filenames, config.AliasFilenames...) + + aliases := config.Aliases + + for _, filename := range filenames { + alias := strings.TrimSpace(strings.TrimPrefix(filepath.Ext(filename), ".")) + if alias != "" { + aliases = append(aliases, alias) + } + } + + sort.Strings(aliases) + aliases = UniqueStrings(aliases) + + lexerEntry := struct { + Name string + Aliases []string + }{ + config.Name, + aliases, + } + + chromaLexers = append(chromaLexers, lexerEntry) + + docs["lexers"] = chromaLexers + } + return docs + + } + + docshelper.AddDocProvider("chroma", docsProvider) +}