Syntax highlighting does not work for attachments with .pl extension
|Assignee:||Go MAEDA||% Done:|
The new syntax highlighter Rouge that was introduced in Redmine 4.0.0 supports many languages including Perl and Prolog.
However, Redmine 4.0.3 does not highlight attachments with ".pl" extension. It is because the extension is used for both Perl and Prolog source codes and Rouge cannot determine the language only with a filename. As a result, Rouge raises Rouge::Guesser::Ambiguous exception (Ambiguous guess: can't decide between ["prolog", "perl"]).
irb(main):001:0> Rouge::Lexer.guess_by_filename('hello.pl') Traceback (most recent call last): Rouge::Guesser::Ambiguous (Rouge::Guesser::Ambiguous)
The problem can be easily fixed by replacing
Index: lib/redmine/syntax_highlighting.rb =================================================================== --- lib/redmine/syntax_highlighting.rb (リビジョン 18114) +++ lib/redmine/syntax_highlighting.rb (作業コピー) @@ -85,7 +85,7 @@ # See also: https://github.com/jneen/rouge/pull/1078 text = text.gsub(/\r\n?/, "\n") - lexer =::Rouge::Lexer.guess_by_filename(filename) + lexer =::Rouge::Lexer.guess(:source => text, :filename => filename) formatter = ::Rouge::Formatters::HTML.new ::Rouge.highlight(text, lexer, CustomHTMLLinewise.new(formatter)) end
Redmine::SyntaxHighlighting.highlight_by_filename may not be able to determine the language by filename alone (#31285).
Patch by Go MAEDA.
Updated the test code.
- Subject changed from Syntax highlighting is not working for attachments with .pl extension to Syntax highlighting does not work for attachments with .pl extension
- Status changed from New to Closed
- Assignee set to Go MAEDA
- Resolution set to Fixed
Committed the patch.