termcol: fix index numbers of 88-colour greyscale ramp
[sheet.git] / source.plp
index db3a4002876ac2ae0313cff324cc6f3cbb5a9dcf..de3ad544c6d3067dffe9319ef5b0fa83c7a2a9e8 100644 (file)
@@ -1,34 +1,29 @@
-<:
-use utf8;
-use strict;
-use warnings;
-
-our $VERSION = 'v1.0';
+<(common.inc.plp)><:
+       our $VERSION = 'v1.0';
 
-$header{content_type} = "text/html; charset=utf-8";
+       my $source = $ENV{PATH_INFO};
+       $source =~ s{^/}{};
 
 :><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
-<html>
+<html lang="en">
 
 <head>
 <meta http-equiv="content-type" content="<:= $header{content_type} :>">
-<title>sheet page source code</title>
-<link rel="stylesheet" type="text/css" media="all" href="/base.css"><:
-       my %styles = map {$_ => $_} qw(dark mono red);
-       our $style = exists $get{style} && $styles{$get{style}} || 'light';
-       printf(qq{\n<link rel="%s" type="text/css" media="all" href="%s" title="%s">},
-               $_ eq $style ? 'stylesheet' : 'alternate stylesheet', "/$_.css", $_
-       ) for keys %styles;
-:>
+<title><:= $source :> source code</title>
+<meta name="description" content="<:=
+       $source ? "Source code of local $source file"
+                 . ", with syntax highlighted and references linked."
+               : 'Index of source files for this site.'
+:>">
+<meta name="keywords" content="sheet, cheat, source, code, perl, plp, html, agpl">
+<:= stylesheet(qw'light dark mono red') :>
+<link rel="icon" type="image/png" href="/clip.png">
 </head>
 
 <body id="source">
 <:
 
-my $source = $ENV{PATH_INFO};
-$source =~ s{^/}{};
-
 if (not $source) {
        print "<h1>Source files</h1>";
 
@@ -36,7 +31,7 @@ if (not $source) {
        print '<ul>'."\n";
        for (glob '*.plp') {
                chomp;
-               printf '<li><a href="/source/%s">%1$s</a></li>'."\n", Entity($_);
+               printf '<li><a href="/source/%s">%1$s</a></li>'."\n", EscapeHTML($_);
        }
        print "</ul>\n\n";
 }
@@ -56,43 +51,49 @@ 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] 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;
+               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;
                }
-               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">
-       <a href="/" rel="home">sheet.shiar.nl</a>/source.<a href="/source/source.plp" rel="code">plp</a>
-       <a href="http://git.shiar.nl/sheet.git" rel="vcs-git" title="Git repository"><:= $VERSION :></a>
+       <a href="/" rel="home">sheet.shiar.nl</a>/source.<a href="/source/source.plp"
+        rel="code" title="Written in Perl">plp</a>
+       <a href="http://git.shiar.nl/sheet.git/history/HEAD:/source.plp"
+        rel="vcs-git" title="Git repository"><:= $VERSION :></a>
        created by <a href="http://shiar.nl/" rel="author">Shiar</a> •
-       <a title="Licensed under the GNU Affero General Public License, version 3" rel="copyright"
-          href="http://www.fsf.org/licensing/licenses/agpl-3.0.html">AGPLv3</a>
+       <a href="http://www.fsf.org/licensing/licenses/agpl-3.0.html" rel="copyright"
+        title="Licensed under the GNU Affero General Public License, version 3">AGPLv3</a>
 </p>
 
 </html>