chiark / gitweb /
bin/populate-lang-table, mason/pastebin/%show: Segregate `highlight' languages.
authorMark Wooding <mdw@distorted.org.uk>
Mon, 10 Apr 2017 14:54:51 +0000 (15:54 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Mon, 10 Apr 2017 14:54:51 +0000 (15:54 +0100)
Rename languages processed by `highlight' to be `hl:BLAH'.  This will
break existing deployments.  Benefit: now I can add new language tags
which don't interfere with `highlight'.

bin/populate-lang-table
mason/pastebin/%show

index a5b6bee..407a940 100755 (executable)
@@ -9,11 +9,11 @@ my %newlang, %oldlang;
 open my $fh, "-|", "highlight", "-p" or die "highlight: $!";
 while (<$fh>) {
   my ($descr, $lang) = /^(.*\S)\s*:\s*(\S+)(?:\s.*|)$/;
-  next unless defined $lang;
-  $newlang{$lang} = $descr;
+  next if !defined $lang or $lang eq "txt";
+  $newlang{"hl:$lang"} = $descr;
 }
 close $fh or die "close highlight: $! $?";
-$newlang{"txt"} //= "Plain text";
+$newlang{"txt"} = "Plain text";
 
 Odin::xact {
   my $h = $db->selectall_hashref
index 6ec0bb2..9e6afab 100644 (file)
     "$Odin::PASTEBIN/$tag" |h %></a>
 </div>
 % }
-<pre class="paste">
 % if ($lang eq 'txt') {
+<pre class="paste">
 <% $content |h %>\
-% } else {
+</pre>
+% } elsif ($lang =~ /^hl:(.*)$/) {
+<pre class="paste">
 <%perl>
+       my $hl_lang = $1;
        my $kid = open my $fh, "-|" // die "fork: $!";
        if ($kid == 0) {
-         open my $hl, "|-", "highlight", "-Ohtml", "-f", "-t8", "-S$lang"
+         open my $hl, "|-", "highlight", "-Ohtml", "-f", "-t8", "-S$hl_lang"
            or die "open highlight: $!";
          syswrite $hl, $content // die "highlight write: $!";
          close $hl or die "highlight kid: $!, $?";
            or die "highlight parent: $!, $?";
        }
 </%perl>
-% }
 </pre>
+% } else {
+<div class="note">
+<p>I don't know how to display content with language
+  &lsquo;<% $lang |h %>&rsquo;.  This is a bug in the Pastebin program.
+  Here's the raw text, in case that's useful.
+</div>
+<pre class="paste">
+<% $content |h %>\
+</pre>
+% }
 </&>
 %#
 <%args>