mirror of
https://github.com/ralsina/tartrazine.git
synced 2025-05-24 16:21:14 -03:00
Add support for Roff man pages filenames
This commit is contained in:
parent
d7f6b27b7d
commit
cb353b4b05
21
common.go
21
common.go
@ -22,6 +22,7 @@ var DefaultStrategies = []Strategy{
|
||||
GetLanguagesByFilename,
|
||||
GetLanguagesByShebang,
|
||||
GetLanguagesByExtension,
|
||||
GetLanguagesByManpage,
|
||||
GetLanguagesByContent,
|
||||
GetLanguagesByClassifier,
|
||||
}
|
||||
@ -383,6 +384,26 @@ func GetLanguagesByExtension(filename string, _ []byte, _ []string) []string {
|
||||
return nil
|
||||
}
|
||||
|
||||
var (
|
||||
manpageExtension = regex.MustCompile(`\.(?:[1-9](?:[a-z_]+[a-z_0-9]*)?|0p|n|man|mdoc)(?:\.in)?$`)
|
||||
)
|
||||
|
||||
// GetLanguagesByManpage returns a slice of possible manpage languages for the given filename.
|
||||
// It complies with the signature to be a Strategy type.
|
||||
func GetLanguagesByManpage(filename string, _ []byte, _ []string) []string {
|
||||
filename = strings.ToLower(filename)
|
||||
|
||||
// Check if matches Roff man page filenames
|
||||
if manpageExtension.Match([]byte(filename)) {
|
||||
return []string{
|
||||
"Roff Manpage",
|
||||
"Roff",
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func getDotIndexes(filename string) []int {
|
||||
dots := make([]int, 0, 2)
|
||||
for i, letter := range filename {
|
||||
|
@ -290,6 +290,30 @@ func (s *EnryTestSuite) TestGetLanguagesByExtension() {
|
||||
}
|
||||
}
|
||||
|
||||
func (s *EnryTestSuite) TestGetLanguagesByManpage() {
|
||||
tests := []struct {
|
||||
name string
|
||||
filename string
|
||||
content []byte
|
||||
candidates []string
|
||||
expected []string
|
||||
}{
|
||||
{name: "TestGetLanguagesByManpage_1", filename: "bsdmalloc.3malloc", expected: []string{"Roff Manpage", "Roff"}},
|
||||
{name: "TestGetLanguagesByManpage_2", filename: "dirent.h.0p", expected: []string{"Roff Manpage", "Roff"}},
|
||||
{name: "TestGetLanguagesByManpage_3", filename: "linguist.1gh", expected: []string{"Roff Manpage", "Roff"}},
|
||||
{name: "TestGetLanguagesByManpage_4", filename: "test.1.in", expected: []string{"Roff Manpage", "Roff"}},
|
||||
{name: "TestGetLanguagesByManpage_5", filename: "test.man.in", expected: []string{"Roff Manpage", "Roff"}},
|
||||
{name: "TestGetLanguagesByManpage_6", filename: "test.mdoc.in", expected: []string{"Roff Manpage", "Roff"}},
|
||||
{name: "TestGetLanguagesByManpage_7", filename: "foo.h", expected: nil},
|
||||
{name: "TestGetLanguagesByManpage_8", filename: "", expected: nil},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
languages := GetLanguagesByManpage(test.filename, test.content, test.candidates)
|
||||
assert.Equal(s.T(), test.expected, languages, fmt.Sprintf("%v: languages = %v, expected: %v", test.name, languages, test.expected))
|
||||
}
|
||||
}
|
||||
|
||||
func (s *EnryTestSuite) TestGetLanguagesByClassifier() {
|
||||
test := []struct {
|
||||
name string
|
||||
|
Loading…
x
Reference in New Issue
Block a user