mirror of
https://github.com/ralsina/tartrazine.git
synced 2024-11-10 21:42:22 +00:00
eb043e80a8
The Linguist-defined language IDs are important to our use case because they are used as database identifiers. This adds a new generator to extract the language IDs into a map and uses that to implement GetLanguageID. Because one language has the ID 0, there is no way to tell if a language name is found or not. If desired, we could add this by returning (string, bool) from GetLanguageID. But none of the other functions that take language names do this, so I didn't want to introduce it here.
49 lines
1.2 KiB
Go
49 lines
1.2 KiB
Go
package generator
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
"io/ioutil"
|
|
|
|
yaml "gopkg.in/yaml.v2"
|
|
)
|
|
|
|
// ID generates a map in Go with language name -> language ID.
|
|
// It is of generator.File type.
|
|
func ID(fileToParse, samplesDir, outPath, tmplPath, tmplName, commit string) error {
|
|
data, err := ioutil.ReadFile(fileToParse)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
languages := make(map[string]*languageInfo)
|
|
if err := yaml.Unmarshal(data, &languages); err != nil {
|
|
return err
|
|
}
|
|
|
|
langMimeMap := buildLanguageIDMap(languages)
|
|
|
|
buf := &bytes.Buffer{}
|
|
if err := executeIDTemplate(buf, langMimeMap, tmplPath, tmplName, commit); err != nil {
|
|
return err
|
|
}
|
|
|
|
return formatedWrite(outPath, buf.Bytes())
|
|
}
|
|
|
|
func buildLanguageIDMap(languages map[string]*languageInfo) map[string]int {
|
|
langIDMap := make(map[string]int)
|
|
for lang, info := range languages {
|
|
// NOTE: 0 is a valid language ID so checking the zero value would skip one language
|
|
if info.LanguageID != nil {
|
|
langIDMap[lang] = *info.LanguageID
|
|
}
|
|
}
|
|
|
|
return langIDMap
|
|
}
|
|
|
|
func executeIDTemplate(out io.Writer, langIDMap map[string]int, tmplPath, tmplName, commit string) error {
|
|
return executeTemplate(out, tmplName, tmplPath, commit, nil, langIDMap)
|
|
}
|