source: json output option for perl includes
authorMischa POSLAWSKY <perl@shiar.org>
Wed, 15 Dec 2010 21:28:45 +0000 (22:28 +0100)
committerMischa POSLAWSKY <perl@shiar.org>
Wed, 15 Dec 2010 21:40:44 +0000 (22:40 +0100)
source.plp

index ee129ce..2ac4833 100644 (file)
@@ -3,9 +3,31 @@
 my $source = $ENV{PATH_INFO};
 $source =~ s{^/}{};
 
+if ($source =~ s{(?<=\Q.inc.pl\E)/jsonp?$}{} and -r $source) {
+       # convert perl include to json construct
+       eval {
+               my $data = do $source or die $@ || $! || 'read error';
+               require JSON;
+               my $converter = JSON->new;
+               $converter->utf8->indent->space_after->canonical;
+
+               $header{content_type} = 'application/json';
+               $header{content_type} = 'text/plain' if exists $get{debug};
+               print $_, '(' for $get{callback} // ();
+               print $converter->encode($data);
+               print     ')' for $get{callback} // ();
+               return 1;
+       } or do {
+               $header{status} = '500 File unavailable';
+               $header{content_type} = 'text/plain';
+               print "Conversion failed: $@";
+       };
+       exit;
+}
+
 Html({
        title => "$source source code",
-       version => 'v1.0',
+       version => 'v1.1',
        description => !$source ? 'Index of source files for this site.' : [
                "Source code of the $source file at this site,",
                "with syntax highlighted and references linked."
@@ -37,7 +59,7 @@ else {
        }
        elsif ($source =~ s{::}{/}g or !-e $source) {
                $source .= '.pm';
-               for (0 .. $#{@INC}) {
+               for (0 .. $#INC) {
                        -e ($_ = "$INC[$_]/$source") or next;
                        $source = $_;
                        last;