X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FGitalist%2FView%2FSyntaxHighlight.pm;h=de745abebb6645505900c63169149bee474e41b1;hb=a8f570133294adb58620440e75c2cca0d32e0934;hp=c030f033f8418ed73e72cc9ed6a33b384befb84c;hpb=c8870bd37732961cdb6c22994839c8b43c33cc7a;p=catagits%2FGitalist.git diff --git a/lib/Gitalist/View/SyntaxHighlight.pm b/lib/Gitalist/View/SyntaxHighlight.pm index c030f03..de745ab 100644 --- a/lib/Gitalist/View/SyntaxHighlight.pm +++ b/lib/Gitalist/View/SyntaxHighlight.pm @@ -1,27 +1,36 @@ package Gitalist::View::SyntaxHighlight; use Moose; -use Gitalist; # ->path_to use namespace::autoclean; extends 'Catalyst::View'; use Syntax::Highlight::Engine::Kate (); -use Syntax::Highlight::Engine::Kate::Perl (); use HTML::Entities qw(encode_entities); sub process { my($self, $c) = @_; - if($c->stash->{filename} =~ /\.p[lm]$/) { - # via - # http://github.com/jrockway/angerwhale/blob/master/lib/Angerwhale/Format/Pod.pm#L136 - eval { + $c->res->body($self->render($c, $c->res->body, $c->stash)); +} + +sub render { + my ($self, $c, $blob, $args) = @_; + + # Don't bother with anything over 64kb, it'll be tragically slow. + return encode_entities $blob if length $blob > 65536; + + my $lang = $args->{language}; + + my $ret; + if($lang) { + # via http://github.com/jrockway/angerwhale/blob/master/lib/Angerwhale/Format/Pod.pm#L136 + $ret = eval { no warnings 'redefine'; local *Syntax::Highlight::Engine::Kate::Template::logwarning = sub { die @_ }; # i really don't care my $hl = Syntax::Highlight::Engine::Kate->new( - language => 'Perl', + language => $lang, substitutions => { "<" => "<", ">" => ">", @@ -42,14 +51,40 @@ sub process { }, ); - $c->stash->{blob} = $hl->highlightText($c->stash->{blob}); + my $hltxt = $hl->highlightText($blob); + $hltxt =~ s/([^[:ascii:]])/encode_entities($1)/eg; + $hltxt; }; warn $@ if $@; - } else { - $c->stash->{blob} = encode_entities($c->stash->{blob}); } - $c->forward('View::Default'); + return $ret || encode_entities($blob); } __PACKAGE__->meta->make_immutable; + +__END__ + +=head1 NAME + +Gitalist::View::SyntaxHighlight - Responsible for syntax highlighting code + +=head1 DESCRIPTION + +Catalyst View for Syntax highlighting. + +=head1 METHODS + +=head2 process + +=head2 highlight + +=head1 AUTHORS + +See L for authors. + +=head1 LICENSE + +See L for the license. + +=cut