github.com/kovansky/hugo@v0.92.3-0.20220224232819-63076e4ff19f/helpers/docshelper.go (about)

     1  package helpers
     2  
     3  import (
     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.
    13  func 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  }