add meta data (language, description, keywords)
[sheet.git] / source.plp
index 7640ae00b1210e2f08de4a12f0068af018a22c20..a813db4a3cd03cc4c4899e4dd59abbb0d78abc8d 100644 (file)
@@ -1,22 +1,28 @@
 <(common.inc.plp)><:
        our $VERSION = 'v1.0';
 
+       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>
+<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') :>
 </head>
 
 <body id="source">
 <:
 
-my $source = $ENV{PATH_INFO};
-$source =~ s{^/}{};
-
 if (not $source) {
        print "<h1>Source files</h1>";
 
@@ -44,35 +50,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">