X-Git-Url: https://git.distorted.org.uk/~mdw/sw-tools/blobdiff_plain/44b3c5890c87bc795256cd75bdd32d4279336aa9..HEAD:/perl/SWMan.pm diff --git a/perl/SWMan.pm b/perl/SWMan.pm index b27fca8..439a133 100644 --- a/perl/SWMan.pm +++ b/perl/SWMan.pm @@ -1,6 +1,6 @@ # -*-perl-*- # -# $Id: SWMan.pm,v 1.2 1999/08/18 17:10:07 mdw Exp $ +# $Id: SWMan.pm,v 1.5 2004/04/08 01:52:19 mdw Exp $ # # Display and other fiddling of manual pages # @@ -25,16 +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.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 SWMan; @@ -48,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 ----------------------------------------------------- @@ -103,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()@ --- @@ -266,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 .= ""; @@ -291,18 +295,23 @@ sub man { # --- And email and hypertext references too --- $l =~ s! ((?:\<[bi]\>)*) # Leading highlighting - ((?:https?|ftp|file|news) # A protocol name + ( \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 + [^]<>)\s<>\'\"]+ # Most characters are allowed + [^]<>).,\s<>\'\"]) # Don't end on punctuation ((?:\)*) # Closing tags, optional - !$1$&$3!gx; + !urlsubst($2, $&)!egx; - $l =~ s! ((?:\<[bi]\>)*(?:\bmailto:)?) - ( [^\s()&;:{}<>,.\`\"] [^\s()&;:{}<>\`\"]* \@ - [^\s()&;:{}<>\'\"]* [^\s()&;:{}<>.,\'\"]) + $l =~ s! ( (?:\<[bi]\>)* (?:\bmailto:)? ) + ( [^\s()<>;:{}&<>,.\`\'\"] [^\s()<>;:{}&<>\`\'\"]* \@ + [^\s()<>;:{&}<>\'\"]* [^\s()<>;:{}&<>.,\'\"]) ((?:\)*) - !$1$&$3!gx; + !$&!gx; + + # --- Fix up the HTML --- + + $l =~ s/\<\;\\>\;/>/g; # --- Done! ---