X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/sw-tools/blobdiff_plain/961ce1c2fa0e71e5ffc0c16a1d4fa58802a36a1c..HEAD:/perl/SWMan.pm
diff --git a/perl/SWMan.pm b/perl/SWMan.pm
index 23f0104..439a133 100644
--- a/perl/SWMan.pm
+++ b/perl/SWMan.pm
@@ -1,6 +1,6 @@
# -*-perl-*-
#
-# $Id: SWMan.pm,v 1.1 1999/07/30 18:46:37 mdw Exp $
+# $Id: SWMan.pm,v 1.5 2004/04/08 01:52:19 mdw Exp $
#
# Display and other fiddling of manual pages
#
@@ -25,13 +25,6 @@
# 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: SWMan.pm,v $
-# Revision 1.1 1999/07/30 18:46:37 mdw
-# New CGI script for browsing installed software and documentation.
-#
-
#----- Package preamble -----------------------------------------------------
package SWMan;
@@ -45,7 +38,7 @@ use SWConfig;
use SWCGI qw(:DEFAULT :layout);
@ISA = qw(Exporter);
-@EXPORT_OK = qw(subst check);
+@EXPORT_OK = qw(subst urlsubst check);
#----- Useful functions -----------------------------------------------------
@@ -100,8 +93,22 @@ sub check($$) {
sub subst($$$) {
my ($s, $n, $sec) = @_;
check($n, $sec) and
- return "$s";
- return "$s";
+ return sprintf("$s",
+ SWCGI::sanitize($n));
+ return $s;
+}
+
+# --- @urlsubst(URL, STRING)@ ---
+#
+# Substitutes in a URL reference. The important bit is that embedded `&'
+# characters are un-entitied from `&'. This doesn't seem to upset
+# Netscape or Lynx as much as I'd expect (or, in fact, at all), but it's
+# slightly untidy.
+
+sub urlsubst($$) {
+ my ($url, $name) = @_;
+ $url =~ s/\&\;/&/;
+ return "$name";
}
# --- @sections()@ ---
@@ -263,8 +270,8 @@ sub man {
# --- Translate the character if it's magical ---
$ch eq "&" and $ch = "&";
- $ch eq "<" and $ch = "<";
- $ch eq ">" and $ch = ">";
+ $ch eq "<" and $ch = "<<";
+ $ch eq ">" and $ch = ">>";
$l .= $ch;
}
$state and $l .= "$state>";
@@ -288,19 +295,24 @@ sub man {
# --- And email and hypertext references too ---
$l =~ s! ((?:\<[bi]\>)*) # Leading highlighting
- ((?:http|ftp) # A protocol name
- :// # The important and obvious bit
- [^]&)\s]+ # Most characters are allowed
- [^]&).,\s\'\"]) # Don't end on punctuation
+ ( \b (?: http s? | ftp | file | news ) # A protocol name
+ : # The important and obvious bit
+ [^]<>)\s<>\'\"]+ # Most characters are allowed
+ [^]<>).,\s<>\'\"]) # Don't end on punctuation
((?:\[bi]\>)*) # Closing tags, optional
- !$&!gx;
+ !urlsubst($2, $&)!egx;
- $l =~ s! ((?:\<[bi]\>)*)
- ( [^\s()&;{}<>,.\`\"] [^\s()&;{}<>\`\"]* \@
- [^\s()&;{}<>\'\"]* [^\s()&;{}<>.,\'\"])
+ $l =~ s! ( (?:\<[bi]\>)* (?:\bmailto:)? )
+ ( [^\s()<>;:{}&<>,.\`\'\"] [^\s()<>;:{}&<>\`\'\"]* \@
+ [^\s()<>;:{&}<>\'\"]* [^\s()<>;:{}&<>.,\'\"])
((?:\[bi]\>)*)
!$&!gx;
+ # --- Fix up the HTML ---
+
+ $l =~ s/\<\;\</g;
+ $l =~ s/\>\>\;/>/g;
+
# --- Done! ---
print $l, "\n";