github.com/xzntrc/go-enry/v2@v2.0.0-20230215091818-766cc1d65498/internal/code-generator/generator/langinfo.go (about) 1 package generator 2 3 import ( 4 "bytes" 5 "io" 6 "io/ioutil" 7 "sort" 8 9 "gopkg.in/yaml.v2" 10 ) 11 12 type languageInfo struct { 13 FSName string `yaml:"fs_name"` 14 Type string `yaml:"type,omitempty"` 15 Color string `yaml:"color,omitempty"` 16 Group string `yaml:"group,omitempty"` 17 Aliases []string `yaml:"aliases,omitempty"` 18 Extensions []string `yaml:"extensions,omitempty,flow"` 19 Interpreters []string `yaml:"interpreters,omitempty,flow"` 20 Filenames []string `yaml:"filenames,omitempty,flow"` 21 MimeType string `yaml:"codemirror_mime_type,omitempty,flow"` 22 TMScope string `yaml:"tm_scope"` 23 AceMode string `yaml:"ace_mode"` 24 CodeMirrorMode string `yaml:"codemirror_mode"` 25 Wrap bool `yaml:"wrap"` 26 LanguageID *int `yaml:"language_id,omitempty"` 27 } 28 29 func getAlphabeticalOrderedKeys(languages map[string]*languageInfo) []string { 30 keyList := make([]string, 0) 31 for lang := range languages { 32 keyList = append(keyList, lang) 33 } 34 35 sort.Strings(keyList) 36 return keyList 37 } 38 39 // LanguageInfo generates maps in Go with language name -> LanguageInfo and language ID -> LanguageInfo. 40 // It is of generator.File type. 41 func LanguageInfo(fileToParse, samplesDir, outPath, tmplPath, tmplName, commit string) error { 42 data, err := ioutil.ReadFile(fileToParse) 43 if err != nil { 44 return err 45 } 46 47 languages := make(map[string]*languageInfo) 48 if err := yaml.Unmarshal(data, &languages); err != nil { 49 return err 50 } 51 52 buf := &bytes.Buffer{} 53 if err := executeLanguageInfoTemplate(buf, languages, tmplPath, tmplName, commit); err != nil { 54 return err 55 } 56 57 return formatedWrite(outPath, buf.Bytes()) 58 } 59 60 func executeLanguageInfoTemplate(out io.Writer, languages map[string]*languageInfo, tmplPath, tmplName, commit string) error { 61 return executeTemplate(out, tmplName, tmplPath, commit, nil, languages) 62 }