diff --git a/internal/code-generator/assets/mime.go.tmpl b/internal/code-generator/assets/mime.go.tmpl new file mode 100644 index 0000000..d8dcff3 --- /dev/null +++ b/internal/code-generator/assets/mime.go.tmpl @@ -0,0 +1,11 @@ +package data + +// CODE GENERATED AUTOMATICALLY WITH gopkg.in/src-d/enry.v1/internal/code-generator +// THIS FILE SHOULD NOT BE EDITED BY HAND +// Extracted from github/linguist commit: {{ getCommit }} + +var LanguagesMime = map[string]string{ + {{range $language, $mime := . -}} + "{{$language}}": "{{$mime -}}", + {{end -}} +} diff --git a/internal/code-generator/generator/mime.go b/internal/code-generator/generator/mime.go new file mode 100644 index 0000000..91e88f8 --- /dev/null +++ b/internal/code-generator/generator/mime.go @@ -0,0 +1,53 @@ +package generator + +import ( + "bytes" + "html/template" + "io" + "io/ioutil" + + yaml "gopkg.in/yaml.v2" +) + +func Mime(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 := buildLanguageMimeMap(languages) + + buf := &bytes.Buffer{} + if err := executeMimeTemplate(buf, langMimeMap, tmplPath, tmplName, commit); err != nil { + return err + } + + return formatedWrite(outPath, buf.Bytes()) +} + +func buildLanguageMimeMap(languages map[string]*languageInfo) map[string]string { + langMimeMap := make(map[string]string) + for lang, info := range languages { + langMimeMap[lang] = info.MimeType + } + + return langMimeMap +} + +func executeMimeTemplate(out io.Writer, langMimeMap map[string]string, tmplPath, tmplName, commit string) error { + fmap := template.FuncMap{ + "getCommit": func() string { return commit }, + } + + t := template.Must(template.New(tmplName).Funcs(fmap).ParseFiles(tmplPath)) + if err := t.Execute(out, langMimeMap); err != nil { + return err + } + + return nil +}