]> Sergey Matveev's repositories - public-inbox.git/blobdiff - Documentation/txt2pre
txt2pre: remove CGI.pm dependency
[public-inbox.git] / Documentation / txt2pre
index f84f9c0685ece45da6dcdc555ce343cc43ce7e08..2dd1597c9a24002ee6f23579c0780da2fad2a93c 100755 (executable)
@@ -1,23 +1,31 @@
 #!/usr/bin/env perl
-# Copyright (C) 2014, Eric Wong <normalperson@yhbt.net> and all contributors
-# License: AGPLv3 or later (https://www.gnu.org/licenses/agpl-3.0.txt)
+# Copyright (C) 2014-2016 all contributors <meta@public-inbox.org>
+# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 #
 # Stupid script to make HTML from preformatted, utf-8 text versions,
 # only generating links for http(s).  Markdown does too much
 # and requires indentation to output preformatted text.
 use strict;
 use warnings;
-use CGI qw/escapeHTML/;
 use Encode qw/encode/;
 my $str = eval { local $/; <> };
-$str = escapeHTML($str);
+my %xhtml_map = (
+       '"' => '&#34;',
+       '&' => '&#38;',
+       "'" => '&#39;',
+       '<' => '&lt;',
+       '>' => '&gt;',
+);
+$str =~ s/([<>&'"])/$xhtml_map{$1}/ge;
 $str = encode('us-ascii', $str, Encode::HTMLCREF);
 my ($title) = ($str =~ /\A([^\n]+)/);
 
 # temporarily swap &gt; for escape so our s!! to add href works.
 # there's probably a way to do this with only a single s!! ...
 $str =~ s!&gt;!\e!g;
-$str =~ s!\b(https?://[\w+\+\&\?\.\%\;/-]+)!<a\nhref="$1"\n>$1</a>!g;
+$str =~ s!\b((nntp|ftp|https?)://[\w+\+\&\?\.\%\;/#-]+)!<a
+href="$1"\n>$1</a>!g;
+
 $str =~ s!\e!&gt;!g; # swap escapes back to &gt;
 
 print '<html><head>',