Syntax higlighting improvements
[catagits/Gitalist.git] / lib / Gitalist / ContentMangler / Resolver / Default.pm
CommitLineData
7c781a87 1use MooseX::Declare;
a8f57013 2use Syntax::Highlight::Engine::Kate ();
3
4our @interpreters = (
5 'awk',
6 'bash',
7 'ksh',
8 'make',
9 'node',
10 'perl',
11 'prolog',
12 'python',
13 'ruby',
14 'sh',
15 'tcl',
16);
17
18our %interpretersx = (
19 'awk' => 'AWK',
20 'ksh' => 'Bash',
21 'make' => 'Makefile',
22 'node' => 'Javascript',
23 'sh' => 'Bash',
24);
7c781a87 25
26class Gitalist::ContentMangler::Resolver::Default with Gitalist::ContentMangler::Resolver {
27 method resolve ($data) {
a8f57013 28 if($data->{action} eq 'diff_fancy') {
29 return 'Gitalist::ContentMangler::Transformer::SyntaxHighlight' => {language => 'Diff', css => 'Diff'};
30 }
31 my $kate = Syntax::Highlight::Engine::Kate->new();
32 # Detect .t files as perl code
33 $kate->extensions->{'*.t'} = ['Perl'];
34 my $language = $kate->languagePropose($data->{filename}) || $kate->languagePropose(lc $data->{filename});
35 if(!$language && exists($data->{blob})) {
36 my $interp = substr(${$data->{blob}}, 0, 256);
37 if($interp =~ /^#!(?:\S*\/)?([^\s\/]+)/) {
38 my $interp = $1;
39
40 for my $interpreter (@interpreters) {
41 if($interp =~ /$interpreter/) {
42 $language = $interpretersx{$interpreter} || ucfirst $interpreter;
43 last;
44 }
45 }
46 }
47 }
bfa60830 48 return unless $language;
a8f57013 49 return 'Gitalist::ContentMangler::Transformer::SyntaxHighlight' => {language => $language, css => 'Code'};
7c781a87 50 }
bfa60830 51}