source: optional syntax highlighting
authorMischa POSLAWSKY <perl@shiar.org>
Mon, 19 Oct 2009 14:06:01 +0000 (14:06 +0000)
committerMischa POSLAWSKY <perl@shiar.org>
Mon, 19 Oct 2009 14:06:01 +0000 (14:06 +0000)
Gracefully fall back to no markup if Text::VimColor cannot be used.

The latest version 0.11 contains a bug which makes it fail under at least
FCGI, so require a future release which will hopefully contain the fix at
https://rt.cpan.org/Ticket/Display.html?id=50646 (until then apply it
manually and just call it v0.12).

source.plp

index 7640ae0..f713a73 100644 (file)
@@ -44,35 +44,39 @@ else {
        }
        -r $source or die "Requested file not found\n";
 
-       require Text::VimColor;
-       delete $Text::VimColor::SYNTAX_TYPE{Underlined};
-       my %TYPETAG = (
-               Statement => 'strong',
-               Error     => 'em',
-               Todo      => 'em',
-       );
+       if (eval { require Text::VimColor and Text::VimColor->VERSION(0.12) }) {
+               delete $Text::VimColor::SYNTAX_TYPE{Underlined};
+               my %TYPETAG = (
+                       Statement => 'strong',
+                       Error     => 'em',
+                       Todo      => 'em',
+               );
 
-       my $hl = Text::VimColor->new(
-               file => $source,
-               vim_options => [@Text::VimColor::VIM_OPTIONS, '+:set enc=utf-8'],
-       );
-       my $parsed = $hl->marked;
-       print "<pre>\n";
-       foreach (@$parsed) {
-               my $tag = $_->[0] && ($TYPETAG{ $_->[0] } || 'span');
-               my $arg = '';
-               print "<$tag$arg class=\"sy-\l$_->[0]\">" if $tag;
-               if (!$_->[0] || $_->[0] eq 'Constant'
-               and $_->[1] =~ s{^(['"]?)(/?[a-z0-9_.]+\.(?:plp?|css|js))(?=\1$)}{}) {
-                       printf '%s<a href="%s">%s</a>', $1, "/source/$2", $2;
+               my $hl = Text::VimColor->new(
+                       file => $source,
+                       vim_options => [@Text::VimColor::VIM_OPTIONS, '+:set enc=utf-8'],
+               );
+               my $parsed = $hl->marked;
+               print "<pre>\n";
+               foreach (@$parsed) {
+                       my $tag = $_->[0] && ($TYPETAG{ $_->[0] } || 'span');
+                       my $arg = '';
+                       print "<$tag$arg class=\"sy-\l$_->[0]\">" if $tag;
+                       if (!$_->[0] || $_->[0] eq 'Constant'
+                       and $_->[1] =~ s{^(['"]?)(/?[a-z0-9_.]+\.(?:plp?|css|js))(?=\1$)}{}) {
+                               printf '%s<a href="%s">%s</a>', $1, "/source/$2", $2;
+                       }
+                       if (!$_->[0] and $_->[1] =~ s/^(\s*)([A-Z]\w+(?:::\w+)+)(?![^;\s])//) {
+                               printf '%s<a href="%s">%s</a>', $1, "/source/$2", $2;
+                       }
+                       print Text::VimColor::_xml_escape($_->[1]);
+                       print "</$tag>" if $tag;
                }
-               if (!$_->[0] and $_->[1] =~ s/^(\s*)([A-Z]\w+(?:::\w+)+)(?![^;\s])//) {
-                       printf '%s<a href="%s">%s</a>', $1, "/source/$2", $2;
-               }
-               print Text::VimColor::_xml_escape($_->[1]);
-               print "</$tag>" if $tag;
+               print "</pre>\n";
+       }
+       else {
+               print "<pre>\n", EscapeHTML(ReadFile($source)), "</pre>\n";
        }
-       print "</pre>\n";
 }
 :>
 <p class="footer">