chiark / gitweb /
bin/populate-lang-table, mason/pastebin/%show: Segregate `highlight' languages.
[odin-cgi] / mason / pastebin / %show
1 <&| SELF:wrapper,
2         title => Odin::escapify($m, $title) . " (odin.gg Paste Bin)" &>
3 <h1><tt>odin.gg</tt> Paste Bin: <% $title %></h1>
4 <div class="menu">
5   <span class="item"><a href="<% "$Odin::PASTEBIN/$tag?op=raw" |h %>">Raw</a></span>
6 % if (defined $edit) {
7   <span class="item"><a href="<% "$Odin::PASTEBIN/$tag?edit=$edit" |h %>">Edit</a></span>
8 % }
9   <span class="item"><a href="<% "$Odin::PASTEBIN/" |h %>">New</a></span>
10 </div>
11 % if (defined $honc) {
12 <div class="note">
13 <p>Your browser doesn't appear to be accepting my cookies.
14 <p>Don't share the link to this page with other people.  <b>If you do,
15   they'll be able to edit this paste just as you can</b>, using the
16   <b>Edit</b> link at the top of the page.
17 <p>Instead, share this link:
18   <a href="<% "$Odin::PASTEBIN/$tag" |h %>"><%
19     "$Odin::PASTEBIN/$tag" |h %></a>
20 </div>
21 % }
22 % if ($lang eq 'txt') {
23 <pre class="paste">
24 <% $content |h %>\
25 </pre>
26 % } elsif ($lang =~ /^hl:(.*)$/) {
27 <pre class="paste">
28 <%perl>
29         my $hl_lang = $1;
30         my $kid = open my $fh, "-|" // die "fork: $!";
31         if ($kid == 0) {
32           open my $hl, "|-", "highlight", "-Ohtml", "-f", "-t8", "-S$hl_lang"
33             or die "open highlight: $!";
34           syswrite $hl, $content // die "highlight write: $!";
35           close $hl or die "highlight kid: $!, $?";
36           exit 0;
37         } else {
38           while (sysread $fh, my $buf, 8192) { $m->print($buf); }
39           close $fh and waitpid $kid, 0
40             or die "highlight parent: $!, $?";
41         }
42 </%perl>
43 </pre>
44 % } else {
45 <div class="note">
46 <p>I don't know how to display content with language
47   &lsquo;<% $lang |h %>&rsquo;.  This is a bug in the Pastebin program.
48   Here's the raw text, in case that's useful.
49 </div>
50 <pre class="paste">
51 <% $content |h %>\
52 </pre>
53 % }
54 </&>
55 %#
56 <%args>
57         $content
58         $title
59         $lang
60         $tag
61         $honc
62         $edit
63 </%args>
64 %#
65 <%init>
66         my $db = Odin::open_db;
67 </%init>
68 %#
69 <%once>
70         use utf8;
71 </%once>