# -*-perl-*-
#
-# $Id: SWInfo.pm,v 1.1 1999/07/30 18:46:37 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.1 1999/07/30 18:46:37 mdw
-# New CGI script for browsing installed software and documentation.
-#
-
#----- Package preamble -----------------------------------------------------
package SWInfo;
# --- 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";
}
# --- Now translate the node into HTML, first line first ---
$n =~ s/\&/&/;
- $n =~ s/\</</;
- $n =~ s/\>/>/;
+ $n =~ s/\</<</;
+ $n =~ s/\>/>>/;
$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;
}
$out .= $n;
- $out =~ s!(http|ftp)://[^]&)\s]*[^]&).,\s\'\"]!<a href="$&">$&</a>!g;
- $out =~ s![^\s()&;{}.,\`\"][^\s()&;{}\`\"]*\@[^\s()&;{}\'\"]*[^\s()&;{}.,\'\"]!<a href="mailto:$&">$&</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/\<\</</g;
+ $out =~ s/\>\>/>/g;
header("Info: ($file)$node");
print("<pre>\n$out</pre>\n");