X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/odin-cgi/blobdiff_plain/7f77ead8af9c6100f0bf4f259b5be780c4b0d86f..3badae73c1e4ed7cfb05ca0a5d7b4f06882f80e3:/mason/pastebin/%show
diff --git a/mason/pastebin/%show b/mason/pastebin/%show
index 6ec0bb2..3a8edb3 100644
--- a/mason/pastebin/%show
+++ b/mason/pastebin/%show
@@ -1,3 +1,27 @@
+%# -*-html-*-
+%#
+%# Pastebin display webservice for Odin
+%#
+%# (c) 2015 Mark Wooding
+%#
+%#----- Licensing notice ----------------------------------------------------
+%#
+%# This file is part of the `odin.gg' service, `odin-cgi'.
+%#
+%# `odin-cgi' is free software; you can redistribute it and/or modify
+%# it under the terms of the GNU Affero General Public License as
+%# published by the Free Software Foundation; either version 3 of the
+%# License, or (at your option) any later version.
+%#
+%# `odin-cgi' is distributed in the hope that it will be useful,
+%# but WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+%# GNU Affero General Public License for more details.
+%#
+%# You should have received a copy of the GNU Affero General Public
+%# License along with `odin-cgi'; if not, see
+%#
% if ($lang eq 'txt') { +<% $content |h %>\ ++% } elsif ($lang =~ /^hl:(.*)$/) { ++% filter "highlight", $m, $content, +% "highlight", "-Ohtml", "-f", "-t8", "-S$1"; ++% } elsif ($lang eq "md") { +% filter "markdown", $m, $content, +% "markdown", "-fnohtml,autolink,safelink,footnote"; % } else { -<%perl> - my $kid = open my $fh, "-|" // die "fork: $!"; - if ($kid == 0) { - open my $hl, "|-", "highlight", "-Ohtml", "-f", "-t8", "-S$lang" - or die "open highlight: $!"; - syswrite $hl, $content // die "highlight write: $!"; - close $hl or die "highlight kid: $!, $?"; - exit 0; - } else { - while (sysread $fh, my $buf, 8192) { $m->print($buf); } - close $fh and waitpid $kid, 0 - or die "highlight parent: $!, $?"; - } -%perl> -% } +++I don't know how to display content with language + ‘<% $lang |h %>’. This is a bug in the Pastebin program. + Here's the raw text, in case that's useful. +
+<% $content |h %>\+% } &> %# <%args> @@ -56,4 +82,20 @@ %# <%once> use utf8; + use POSIX qw(_exit); + + sub filter ($$$@) { + my ($what, $m, $content, @cmd) = @_; + my $kid = open my $fh, "-|" // die "fork: $!"; + if ($kid == 0) { + open my $hl, "|-", @cmd or die "open $what: $!"; + syswrite $hl, $content // die "$what write: $!"; + close $hl or die "$what kid: $!, $?"; + _exit 0; + } else { + while (sysread $fh, my $buf, 8192) { $m->print($buf); } + close $fh and waitpid $kid, 0 + or die "$what parent: $!, $?"; + } + } %once>