X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FGitalist.git;a=blobdiff_plain;f=lib%2FGitalist%2FContentMangler%2FResolver%2FDefault.pm;fp=lib%2FGitalist%2FContentMangler%2FResolver%2FDefault.pm;h=23d409dccc2372d3168e959529cebaa67ce881b6;hp=29aeda4b81b1f639898406a115cec6502829a2ed;hb=a8f570133294adb58620440e75c2cca0d32e0934;hpb=4837a63fb61dfee92c49482940b0e5ace16141f6 diff --git a/lib/Gitalist/ContentMangler/Resolver/Default.pm b/lib/Gitalist/ContentMangler/Resolver/Default.pm index 29aeda4..23d409d 100644 --- a/lib/Gitalist/ContentMangler/Resolver/Default.pm +++ b/lib/Gitalist/ContentMangler/Resolver/Default.pm @@ -1,12 +1,51 @@ use MooseX::Declare; +use Syntax::Highlight::Engine::Kate (); + +our @interpreters = ( + 'awk', + 'bash', + 'ksh', + 'make', + 'node', + 'perl', + 'prolog', + 'python', + 'ruby', + 'sh', + 'tcl', +); + +our %interpretersx = ( + 'awk' => 'AWK', + 'ksh' => 'Bash', + 'make' => 'Makefile', + 'node' => 'Javascript', + 'sh' => 'Bash', +); class Gitalist::ContentMangler::Resolver::Default with Gitalist::ContentMangler::Resolver { method resolve ($data) { - # This should be pulled out of $self->config - my $language; - $language = 'Perl' if $data->{filename} =~ /\.p[lm]$/i; - $language = 'Diff' if $data->{action} eq 'diff_fancy'; + if($data->{action} eq 'diff_fancy') { + return 'Gitalist::ContentMangler::Transformer::SyntaxHighlight' => {language => 'Diff', css => 'Diff'}; + } + my $kate = Syntax::Highlight::Engine::Kate->new(); + # Detect .t files as perl code + $kate->extensions->{'*.t'} = ['Perl']; + my $language = $kate->languagePropose($data->{filename}) || $kate->languagePropose(lc $data->{filename}); + if(!$language && exists($data->{blob})) { + my $interp = substr(${$data->{blob}}, 0, 256); + if($interp =~ /^#!(?:\S*\/)?([^\s\/]+)/) { + my $interp = $1; + + for my $interpreter (@interpreters) { + if($interp =~ /$interpreter/) { + $language = $interpretersx{$interpreter} || ucfirst $interpreter; + last; + } + } + } + } return unless $language; - return 'Gitalist::ContentMangler::Transformer::SyntaxHighlight' => {language => $language, css => $language}; + return 'Gitalist::ContentMangler::Transformer::SyntaxHighlight' => {language => $language, css => 'Code'}; } }