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'};
}
}
my($transformer, $config) = $self->resolve({
filename => $c->stash->{filename} || '',
+ blob => \$c->stash->{blob},
config => Gitalist->config->{'Model::ContentMangler'},
action => $c->action->name,
});
extends 'Catalyst::View';
use Syntax::Highlight::Engine::Kate ();
-use Syntax::Highlight::Engine::Kate::Perl ();
use HTML::Entities qw(encode_entities);
my ($self, $c, $blob, $args) = @_;
# Don't bother with anything over 64kb, it'll be tragically slow.
- return encode_entities $blob if length $blob > 8192;
+ return encode_entities $blob if length $blob > 65536;
my $lang = $args->{language};