Expunge revision histories in files.
[sw-tools] / perl / SWInfo.pm
index 276ac05..4ff6e2c 100644 (file)
@@ -1,6 +1,6 @@
 # -*-perl-*-
 #
-# $Id: SWInfo.pm,v 1.2 1999/08/18 17:10:07 mdw Exp $
+# $Id: SWInfo.pm,v 1.5 2004/04/08 01:52:19 mdw Exp $
 #
 # Read and output GNU Info files
 #
 # along with sw-tools; if not, write to the Free Software Foundation,
 # Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
-#----- Revision history -----------------------------------------------------
-#
-# $Log: SWInfo.pm,v $
-# Revision 1.2  1999/08/18 17:10:07  mdw
-# Slight improvements to URL and email address parsing.
-#
-# Revision 1.1  1999/07/30 18:46:37  mdw
-# New CGI script for browsing installed software and documentation.
-#
-
 #----- Package preamble -----------------------------------------------------
 
 package SWInfo;
@@ -77,11 +67,10 @@ sub subst($$$) {
 
   # --- Transform it into something that won't get mangled ---
 
-  $node =~ s/[+&=%]|[^ -~]/sprintf("%%%02x", ord($&))/eg;
-  $node =~ tr/ /+/;
+  $node = SWCGI::sanitize($node);
 
   ($dir = $i->{dir}) =~ s:$C{prefix}/info/?::;
-  $dir = "&dir=$dir" if $dir;
+  $dir = "&dir=" . SWCGI::sanitize($dir) if $dir;
 
   return "<a href=\"$ref?act=info&file=$file&node=$node$dir\">$oref</a>$tail";
 }
@@ -109,8 +98,8 @@ sub info {
   # --- Now translate the node into HTML, first line first ---
 
   $n =~ s/\&/&amp;/;
-  $n =~ s/\</&lt;/;
-  $n =~ s/\>/&gt;/;
+  $n =~ s/\</&lt;</;
+  $n =~ s/\>/>&gt;/;
   $n =~ s/\A( [^\n]* Next:\ *) ([^,\n]*) / $1 . subst($2, $file, $i) /eix;
   $n =~ s/\A( [^\n]* Prev:\ *) ([^,\n]*) / $1 . subst($2, $file, $i) /eix;
   $n =~ s/\A( [^\n]* Up:\ *) ([^,\n]*) / $1 . subst($2, $file, $i) /eix;
@@ -144,9 +133,29 @@ sub info {
   }
   $out .= $n;
 
-  $out =~ s!\b(https?|ftp|file|news):[^]&)\s]*[^]&).,\s\'\"]!<a href="$&">$&</a>!g;
-  $out =~ s!(?:\bmailto:)?([^\s()&;:{}.,\`\"][^\s()&;:{}\`\"]*\@[^\s()&;:{}\'\"]*[^\s()&;:{}.,\'\"])!<a href="mailto:$1">$&</a>!g;
-  $out =~ s!([-_.\w]+)\((\d+\w*)\)!SWMan::subst("$1($2)", $1, $2)!eg;
+  # --- Spot URLs (except `mailto') ---
+
+  $out =~ s! \b (http s? | ftp | file | news) :
+            [^]<>)\s]* [^]<>).,\s\']
+          !urlsubst($&, $&)!egx;
+
+  # --- Spot email addresses (including `mailto' URLs) ---
+
+  $out =~ s! (?:\bmailto:)?
+            ([^\s()<>&;:{}.,\`\'\"] [^\s()<>&;:{}\`\'\"]*
+             \@
+             [^\s()<>&;:{}\'\"]* [^\s()<>&;:{}.,\'\"])
+          !<a href="mailto:$1">$&</a>!gx;
+
+  # --- Spot manpage references ---
+
+  $out =~ s! ([-_.\w]+) \( (\d+\w*) \)
+          !SWMan::subst("$1($2)", $1, $2)!egx;
+
+  # --- Fix up the HTML ---
+
+  $out =~ s/\&lt;\</&lt;/g;
+  $out =~ s/\>\&gt;/&gt;/g;
 
   header("Info: ($file)$node");
   print("<pre>\n$out</pre>\n");