mirror of
https://github.com/ralsina/tartrazine.git
synced 2025-06-19 06:33:06 -03:00
changes in the API, ready to version 2
This commit is contained in:
@ -8,11 +8,11 @@ import (
|
||||
"regexp"
|
||||
)
|
||||
|
||||
type languageMatcher func ([]byte) (string, bool)
|
||||
type languageMatcher func ([]byte) []string
|
||||
|
||||
var contentMatchers = map[string]languageMatcher{
|
||||
{{ range $index, $disambiguator := . -}}
|
||||
{{ printf "%q" $disambiguator.Extension }}: func(i []byte) (string, bool) {
|
||||
{{ printf "%q" $disambiguator.Extension }}: func(i []byte) []string {
|
||||
{{ range $i, $language := $disambiguator.Languages -}}
|
||||
|
||||
{{- if not (avoidLanguage $language) }}
|
||||
@ -20,14 +20,14 @@ var contentMatchers = map[string]languageMatcher{
|
||||
{{- if gt $i 0 }} else {{ end -}}
|
||||
if {{- range $j, $heuristic := $language.Heuristics }} {{ $heuristic.Name }}.Match(i)
|
||||
{{- if lt $j (len $language.LogicRelations) }} {{index $language.LogicRelations $j}} {{- end -}} {{ end }} {
|
||||
return {{ printf "%q" $language.Language }}, true
|
||||
return []string{ {{- printf "%q" $language.Language -}} }
|
||||
}
|
||||
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end}}
|
||||
|
||||
return {{ returnLanguage $disambiguator.Languages }}, {{ safeLanguage $disambiguator.Languages }}
|
||||
return {{ returnLanguages $disambiguator.Languages | returnStringSlice }}
|
||||
},
|
||||
{{ end -}}
|
||||
}
|
||||
|
@ -4,8 +4,8 @@ package slinguist
|
||||
// THIS FILE SHOULD NOT BE EDITED BY HAND
|
||||
// Extracted from github/linguist commit: {{ getCommit }}
|
||||
|
||||
var languagesByFilename = map[string]string{
|
||||
{{range $filename, $language := . -}}
|
||||
"{{ $filename }}": {{- printf "%q" $language -}},
|
||||
var languagesByFilename = map[string][]string{
|
||||
{{range $filename, $languages := . -}}
|
||||
"{{ $filename }}": { {{- formatStringSlice $languages -}} },
|
||||
{{end -}}
|
||||
}
|
||||
|
@ -2,8 +2,8 @@ package generator
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"html/template"
|
||||
"io"
|
||||
"text/template"
|
||||
|
||||
yaml "gopkg.in/yaml.v2"
|
||||
)
|
||||
|
@ -3,6 +3,7 @@ package generator
|
||||
import (
|
||||
"bytes"
|
||||
"io"
|
||||
"strings"
|
||||
"text/template"
|
||||
|
||||
yaml "gopkg.in/yaml.v2"
|
||||
@ -25,20 +26,21 @@ func Filenames(data []byte, filenamesTmplPath, filenamesTmplName, commit string)
|
||||
return buf.Bytes(), nil
|
||||
}
|
||||
|
||||
func buildFilenameLanguageMap(languages map[string]*languageInfo) map[string]string {
|
||||
filenameLangMap := make(map[string]string)
|
||||
func buildFilenameLanguageMap(languages map[string]*languageInfo) map[string][]string {
|
||||
filenameLangMap := make(map[string][]string)
|
||||
for lang, langInfo := range languages {
|
||||
for _, filename := range langInfo.Filenames {
|
||||
filenameLangMap[filename] = lang
|
||||
filenameLangMap[filename] = append(filenameLangMap[filename], lang)
|
||||
}
|
||||
}
|
||||
|
||||
return filenameLangMap
|
||||
}
|
||||
|
||||
func executeFilenamesTemplate(out io.Writer, languagesByFilename map[string]string, filenamesTmplPath, filenamesTmpl, commit string) error {
|
||||
func executeFilenamesTemplate(out io.Writer, languagesByFilename map[string][]string, filenamesTmplPath, filenamesTmpl, commit string) error {
|
||||
fmap := template.FuncMap{
|
||||
"getCommit": func() string { return commit },
|
||||
"getCommit": func() string { return commit },
|
||||
"formatStringSlice": func(slice []string) string { return `"` + strings.Join(slice, `","`) + `"` },
|
||||
}
|
||||
|
||||
t := template.Must(template.New(filenamesTmpl).Funcs(fmap).ParseFiles(filenamesTmplPath))
|
||||
|
@ -24,6 +24,8 @@ func Heuristics(heuristics []byte, contentTmplPath, contentTmplName, commit stri
|
||||
}
|
||||
|
||||
return buf.Bytes(), nil
|
||||
// fmt.Println(string(buf.Bytes()))
|
||||
// return nil, nil
|
||||
}
|
||||
|
||||
const unknownLanguage = "OtherLanguage"
|
||||
@ -417,9 +419,15 @@ func executeContentTemplate(out io.Writer, disambiguators []*disambiguator, cont
|
||||
fmap := template.FuncMap{
|
||||
"getCommit": func() string { return commit },
|
||||
"getAllHeuristics": getAllHeuristics,
|
||||
"returnLanguage": returnLanguage,
|
||||
"safeLanguage": safeLanguage,
|
||||
"avoidLanguage": avoidLanguage,
|
||||
"returnStringSlice": func(slice []string) string {
|
||||
if len(slice) == 0 {
|
||||
return "nil"
|
||||
}
|
||||
|
||||
return `[]string{` + strings.Join(slice, `, `) + `}`
|
||||
},
|
||||
"returnLanguages": returnLanguages,
|
||||
"avoidLanguage": avoidLanguage,
|
||||
}
|
||||
|
||||
t := template.Must(template.New(contentTmpl).Funcs(fmap).ParseFiles(contentTmplPath))
|
||||
@ -458,18 +466,7 @@ func containsInvalidRegexp(reg string) bool {
|
||||
return strings.Contains(reg, `(?<`) || strings.Contains(reg, `\1`)
|
||||
}
|
||||
|
||||
func returnLanguage(langsHeuristics []*languageHeuristics) string {
|
||||
lang, _ := returnLangAndSafe(langsHeuristics)
|
||||
return lang
|
||||
}
|
||||
|
||||
func safeLanguage(langsHeuristics []*languageHeuristics) bool {
|
||||
_, safe := returnLangAndSafe(langsHeuristics)
|
||||
return safe
|
||||
}
|
||||
|
||||
func returnLangAndSafe(langsHeuristics []*languageHeuristics) (string, bool) {
|
||||
// at the moment, only returns one string although might be exists several language to return as a []string.
|
||||
func returnLanguages(langsHeuristics []*languageHeuristics) []string {
|
||||
langs := make([]string, 0)
|
||||
for _, langHeu := range langsHeuristics {
|
||||
if len(langHeu.Heuristics) == 0 {
|
||||
@ -477,12 +474,5 @@ func returnLangAndSafe(langsHeuristics []*languageHeuristics) (string, bool) {
|
||||
}
|
||||
}
|
||||
|
||||
lang := unknownLanguage
|
||||
safe := false
|
||||
if len(langs) != 0 {
|
||||
lang = langs[0]
|
||||
safe = len(langs) == 1
|
||||
}
|
||||
|
||||
return lang, safe
|
||||
return langs
|
||||
}
|
||||
|
@ -8,102 +8,102 @@ import (
|
||||
"regexp"
|
||||
)
|
||||
|
||||
type languageMatcher func([]byte) (string, bool)
|
||||
type languageMatcher func([]byte) []string
|
||||
|
||||
var contentMatchers = map[string]languageMatcher{
|
||||
".asc": func(i []byte) (string, bool) {
|
||||
".asc": func(i []byte) []string {
|
||||
if asc_PublicKey_Matcher_0.Match(i) {
|
||||
return "Public Key", true
|
||||
return []string{"Public Key"}
|
||||
} else if asc_AsciiDoc_Matcher_0.Match(i) {
|
||||
return "AsciiDoc", true
|
||||
return []string{"AsciiDoc"}
|
||||
} else if asc_AGSScript_Matcher_0.Match(i) {
|
||||
return "AGS Script", true
|
||||
return []string{"AGS Script"}
|
||||
}
|
||||
|
||||
return OtherLanguage, false
|
||||
return nil
|
||||
},
|
||||
".f": func(i []byte) (string, bool) {
|
||||
".f": func(i []byte) []string {
|
||||
if f_Forth_Matcher_0.Match(i) {
|
||||
return "Forth", true
|
||||
return []string{"Forth"}
|
||||
} else if f_FilebenchWML_Matcher_0.Match(i) {
|
||||
return "Filebench WML", true
|
||||
return []string{"Filebench WML"}
|
||||
} else if f_FORTRAN_Matcher_0.Match(i) {
|
||||
return "FORTRAN", true
|
||||
return []string{"FORTRAN"}
|
||||
}
|
||||
|
||||
return OtherLanguage, false
|
||||
return nil
|
||||
},
|
||||
".h": func(i []byte) (string, bool) {
|
||||
".h": func(i []byte) []string {
|
||||
if h_ObjectiveDashC_Matcher_0.Match(i) {
|
||||
return "Objective-C", true
|
||||
return []string{"Objective-C"}
|
||||
} else if h_CPlusPlus_Matcher_0.Match(i) || h_CPlusPlus_Matcher_1.Match(i) || h_CPlusPlus_Matcher_2.Match(i) || h_CPlusPlus_Matcher_3.Match(i) || h_CPlusPlus_Matcher_4.Match(i) || h_CPlusPlus_Matcher_5.Match(i) || h_CPlusPlus_Matcher_6.Match(i) {
|
||||
return "C++", true
|
||||
return []string{"C++"}
|
||||
}
|
||||
|
||||
return OtherLanguage, false
|
||||
return nil
|
||||
},
|
||||
".lsp": func(i []byte) (string, bool) {
|
||||
".lsp": func(i []byte) []string {
|
||||
if lsp_CommonLisp_Matcher_0.Match(i) {
|
||||
return "Common Lisp", true
|
||||
return []string{"Common Lisp"}
|
||||
} else if lsp_NewLisp_Matcher_0.Match(i) {
|
||||
return "NewLisp", true
|
||||
return []string{"NewLisp"}
|
||||
}
|
||||
|
||||
return OtherLanguage, false
|
||||
return nil
|
||||
},
|
||||
".lisp": func(i []byte) (string, bool) {
|
||||
".lisp": func(i []byte) []string {
|
||||
if lisp_CommonLisp_Matcher_0.Match(i) {
|
||||
return "Common Lisp", true
|
||||
return []string{"Common Lisp"}
|
||||
} else if lisp_NewLisp_Matcher_0.Match(i) {
|
||||
return "NewLisp", true
|
||||
return []string{"NewLisp"}
|
||||
}
|
||||
|
||||
return OtherLanguage, false
|
||||
return nil
|
||||
},
|
||||
".md": func(i []byte) (string, bool) {
|
||||
".md": func(i []byte) []string {
|
||||
if md_Markdown_Matcher_0.Match(i) || md_Markdown_Matcher_1.Match(i) {
|
||||
return "Markdown", true
|
||||
return []string{"Markdown"}
|
||||
} else if md_GCCmachinedescription_Matcher_0.Match(i) {
|
||||
return "GCC machine description", true
|
||||
return []string{"GCC machine description"}
|
||||
}
|
||||
|
||||
return "Markdown", true
|
||||
return []string{"Markdown"}
|
||||
},
|
||||
".ms": func(i []byte) (string, bool) {
|
||||
".ms": func(i []byte) []string {
|
||||
if ms_Groff_Matcher_0.Match(i) {
|
||||
return "Groff", true
|
||||
return []string{"Groff"}
|
||||
}
|
||||
|
||||
return "MAXScript", true
|
||||
return []string{"MAXScript"}
|
||||
},
|
||||
".mod": func(i []byte) (string, bool) {
|
||||
".mod": func(i []byte) []string {
|
||||
if mod_XML_Matcher_0.Match(i) {
|
||||
return "XML", true
|
||||
return []string{"XML"}
|
||||
} else if mod_ModulaDash2_Matcher_0.Match(i) || mod_ModulaDash2_Matcher_1.Match(i) {
|
||||
return "Modula-2", true
|
||||
return []string{"Modula-2"}
|
||||
}
|
||||
|
||||
return "Linux Kernel Module", false
|
||||
return []string{"Linux Kernel Module", "AMPL"}
|
||||
},
|
||||
".pro": func(i []byte) (string, bool) {
|
||||
".pro": func(i []byte) []string {
|
||||
if pro_Prolog_Matcher_0.Match(i) {
|
||||
return "Prolog", true
|
||||
return []string{"Prolog"}
|
||||
} else if pro_INI_Matcher_0.Match(i) {
|
||||
return "INI", true
|
||||
return []string{"INI"}
|
||||
} else if pro_QMake_Matcher_0.Match(i) && pro_QMake_Matcher_1.Match(i) {
|
||||
return "QMake", true
|
||||
return []string{"QMake"}
|
||||
} else if pro_IDL_Matcher_0.Match(i) {
|
||||
return "IDL", true
|
||||
return []string{"IDL"}
|
||||
}
|
||||
|
||||
return OtherLanguage, false
|
||||
return nil
|
||||
},
|
||||
".rpy": func(i []byte) (string, bool) {
|
||||
".rpy": func(i []byte) []string {
|
||||
if rpy_Python_Matcher_0.Match(i) {
|
||||
return "Python", true
|
||||
return []string{"Python"}
|
||||
}
|
||||
|
||||
return "Ren'Py", true
|
||||
return []string{"Ren'Py"}
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -4,9 +4,9 @@ package slinguist
|
||||
// THIS FILE SHOULD NOT BE EDITED BY HAND
|
||||
// Extracted from github/linguist commit: 0123456789abcdef0123456789abcdef01234567
|
||||
|
||||
var languagesByFilename = map[string]string{
|
||||
"APKBUILD": "Alpine Abuild",
|
||||
"CMakeLists.txt": "CMake",
|
||||
"Cakefile": "CoffeeScript",
|
||||
"mix.lock": "Elixir",
|
||||
var languagesByFilename = map[string][]string{
|
||||
"APKBUILD": {"Alpine Abuild"},
|
||||
"CMakeLists.txt": {"CMake"},
|
||||
"Cakefile": {"CoffeeScript"},
|
||||
"mix.lock": {"Elixir"},
|
||||
}
|
||||
|
@ -2,8 +2,8 @@ package generator
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"html/template"
|
||||
"io"
|
||||
"text/template"
|
||||
|
||||
yaml "gopkg.in/yaml.v2"
|
||||
)
|
||||
|
Reference in New Issue
Block a user