font: link digraph column header to digraphs page
[sheet.git] / source.plp
index 83a583385966b1b4285c0522667959ef294af682..f476ee8d3a2a41259cf67d00651cfe0d2a31c2ed 100644 (file)
@@ -3,9 +3,32 @@
 my $source = $ENV{PATH_INFO};
 $source =~ s{^/}{};
 
+if ($source =~ s{(?<=\Q.inc.pl\E)/jsonp?$}{} and -r $source) {
+       # convert perl include to json construct
+       checkmodified($source);
+       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 +60,7 @@ else {
        }
        elsif ($source =~ s{::}{/}g or !-e $source) {
                $source .= '.pm';
-               for (0 .. $#{@INC}) {
+               for (0 .. $#INC) {
                        -e ($_ = "$INC[$_]/$source") or next;
                        $source = $_;
                        last;
@@ -76,7 +99,10 @@ else {
                print "</pre>\n";
        }
        else {
-               print "<pre>\n", EscapeHTML(ReadFile($source)), "</pre>\n";
+               require Encode;
+               print "<pre>\n";
+               print EscapeHTML(Encode::decode_utf8(ReadFile($source)));
+               print "</pre>\n";
        }
 
        print "\n";