github.com/dennwc/enry@v1.6.4-0.20180424151738-42391b8e105b/internal/code-generator/generator/aliases.go (about) 1 package generator 2 3 import ( 4 "bytes" 5 "io" 6 "io/ioutil" 7 "strings" 8 "text/template" 9 10 yaml "gopkg.in/yaml.v2" 11 ) 12 13 // Aliases reads from fileToParse and builds source file from tmplPath. It complies with type File signature. 14 func Aliases(fileToParse, samplesDir, outPath, tmplPath, tmplName, commit string) error { 15 data, err := ioutil.ReadFile(fileToParse) 16 if err != nil { 17 return err 18 } 19 20 languages := make(map[string]*languageInfo) 21 if err := yaml.Unmarshal(data, &languages); err != nil { 22 return err 23 } 24 25 orderedLangList := getAlphabeticalOrderedKeys(languages) 26 languagesByAlias := buildAliasLanguageMap(languages, orderedLangList) 27 28 buf := &bytes.Buffer{} 29 if err := executeAliasesTemplate(buf, languagesByAlias, tmplPath, tmplName, commit); err != nil { 30 return err 31 } 32 33 return formatedWrite(outPath, buf.Bytes()) 34 } 35 36 func buildAliasLanguageMap(languages map[string]*languageInfo, orderedLangList []string) map[string]string { 37 aliasLangsMap := make(map[string]string) 38 for _, lang := range orderedLangList { 39 langInfo := languages[lang] 40 key := convertToAliasKey(lang) 41 aliasLangsMap[key] = lang 42 for _, alias := range langInfo.Aliases { 43 key := convertToAliasKey(alias) 44 aliasLangsMap[key] = lang 45 } 46 } 47 48 return aliasLangsMap 49 } 50 51 func convertToAliasKey(s string) (key string) { 52 key = strings.Replace(s, ` `, `_`, -1) 53 key = strings.ToLower(key) 54 return 55 } 56 57 func executeAliasesTemplate(out io.Writer, languagesByAlias map[string]string, aliasesTmplPath, aliasesTmpl, commit string) error { 58 fmap := template.FuncMap{ 59 "getCommit": func() string { return commit }, 60 } 61 62 t := template.Must(template.New(aliasesTmpl).Funcs(fmap).ParseFiles(aliasesTmplPath)) 63 if err := t.Execute(out, languagesByAlias); err != nil { 64 return err 65 } 66 67 return nil 68 }