[BUG] Make chroma match case-insenstive

- In the case that [go-enry](https://github.com/go-enry/go-enry/)
returned langauge doesn't match a lexer name (Either because its not
available or because it doesn't match Chroma's name), a last effort
attempt is made to use Chroma's matching.
- go-enry already applies `strings.ToLower` onto the filename to avoid
being case-sensitive, add the same code for Chroma's matching. The code
being used doesn't rely on the filename being case senstive for correct
matching.
- Adds unit test.
- Resolves #752

(cherry picked from commit dcc442351d)
This commit is contained in:
Gusted 2024-10-11 15:26:02 +02:00 committed by forgejo-backport-action
parent 5ffa1ee883
commit aec4a0dd59
2 changed files with 8 additions and 2 deletions

View file

@ -96,7 +96,7 @@ func Code(fileName, language, code string) (output template.HTML, lexerName stri
} }
if lexer == nil { if lexer == nil {
lexer = lexers.Match(fileName) lexer = lexers.Match(strings.ToLower(fileName))
if lexer == nil { if lexer == nil {
lexer = lexers.Fallback lexer = lexers.Fallback
} }
@ -165,7 +165,7 @@ func File(fileName, language string, code []byte) ([]template.HTML, string, erro
lexer = lexers.Get(guessLanguage) lexer = lexers.Get(guessLanguage)
if lexer == nil { if lexer == nil {
lexer = lexers.Match(fileName) lexer = lexers.Match(strings.ToLower(fileName))
if lexer == nil { if lexer == nil {
lexer = lexers.Fallback lexer = lexers.Fallback
} }

View file

@ -109,6 +109,12 @@ c=2
), ),
lexerName: "Python", lexerName: "Python",
}, },
{
name: "DOS.PAS",
code: "",
want: lines(""),
lexerName: "ObjectPascal",
},
} }
for _, tt := range tests { for _, tt := range tests {