📄 w3mman2html.cgi.in
字号:
#!@PERL@$MAN = $ENV{'W3MMAN_MAN'} || '@MAN@';$QUERY = $ENV{'QUERY_STRING'} || $ARGV[0];$SCRIPT_NAME = $ENV{'SCRIPT_NAME'} || $0;$CGI = "file://$SCRIPT_NAME";$CGI2 = "file:";# $CGI2 = "file:///\$LIB/hlink.cgi?";$SQUEEZE = 1;$ENV{'PAGER'} = 'cat';if ($QUERY =~ /\=/) { for (split('&', $QUERY)) { ($v, $q) = split('=', $_, 2); $query{$v} = &form_decode($q); }} else { $QUERY =~ s/^man=//; $query{"man"} = &form_decode($QUERY);}if (! $query{"man"}) { if ($query{"keyword"}) { $keyword = $query{"keyword"}; $k = &html_quote($keyword); print <<EOF;Content-Type: text/html<html><head><title>man -k $k</title></head><body><h2>man -k <b>$k</b></h2><ul>EOF $keyword =~ s:([^-\w\200-\377.,])::g; open(F, "$MAN -k $keyword 2> /dev/null |"); @line = (); while(<F>) { chop; $_ = &html_quote($_); s/(\s+-.*)$//; $title = $1; s@(\w[\w.\-]*(\s*\,\s*\w[\w.\-]*)*)\s*(\([\dn]\w*\))@&keyword_ref($1, $3)@ge; print "<li>$_$title\n"; } close(F); print <<EOF;</ul></body></html>EOF exit; } print <<EOF;Content-Type: text/html<html><head><title>man</title></head><body><form action="$CGI"><table><tr><td>Manual:<td><input name=man><tr><td>Section:<td><input name=section><tr><td>Keyword:<td><input name=keyword><tr><td><td><input type=submit> <input type=reset></table></form></body></html>EOF exit;}$man = $query{"man"};if ($man =~ s/\((\w+)\)$//) { $section = $1; $man_section = "$man($1)";} elsif ($query{"section"}) { $section = $query{"section"}; $man_section = "$man($section)";} else { $section = ""; $man_section = "$man";}$section =~ s:([^-\w\200-\377.,])::g;$man =~ s:([^-\w\200-\377.,])::g;open(F, "$MAN $section $man 2> /dev/null |");$ok = 0;undef $header;$blank = -1;$cmd = "";$prev = "";while(<F>) { if (! defined($header)) { /^\s*$/ && next; $header = $_; $space = $header; chop $space; $space =~ s/\S.*//; } elsif ($_ eq $header) { # delete header $blank = -1; next; } elsif (!/\010/ && /^$space[\w\200-\377].*\s\S/o) { # delete footer $blank = -1; next; } if ($SQUEEZE) { if (/^\s*$/) { $blank || $blank++; next; } elsif ($blank) { $blank > 0 && print "\n"; $blank = 0; } } s/\&/\&/g; s/\</\</g; s/\>/\>/g; s@([\200-\377].)(\010{1,2}\1)+@<b>$1</b>@g; s@(\&\w+;|.)(\010\1)+@<b>$1</b>@g; s@__\010{1,2}((\<b\>)?[\200-\377].(\</b\>)?)@<u>$1</u>@g; s@_\010((\<b\>)?(\&\w+\;|.)(\</b\>)?)@<u>$1</u>@g; s@((\<b\>)?[\200-\377].(\</b\>)?)\010{1,2}__@<u>$1</u>@g; s@((\<b\>)?(\&\w+\;|.)(\</b\>)?)\010_@<u>$1</u>@g; s@.\010(.)@$1@g; s@\</b\>\</u\>\<b\>_\</b\>\<u\>\<b\>@_@g; s@\</u\>\<b\>_\</b\>\<u\>@_@g; s@\</u\>\<u\>@@g; s@\</b\>\<b\>@@g; if (! $ok) { /^No/ && last; print <<EOF;Content-Type: text/html<html><head><title>man $man_section</title></head><body><pre>EOF print; $ok = 1; next; } s@(http|ftp)://[\w.\-/~]+[\w/]@<a href="$&">$&</a>@g; s@(\W)(mailto:)?(\w[\w.\-]*\@\w[\w.\-]*\.[\w.\-]*\w)@$1<a href="mailto:$3">$2$3</a>@g; s@(\W)(\~?/[\w.][\w.\-/~]*)@$1 . &file_ref($2)@ge; s@(include(<\/?[bu]\>|\s)*\<)([\w.\-/]+)@$1 . &include_ref($3)@ge; if ($prev && m@^\s*(\<[bu]\>)*(\w[\w.\-]*)(\</[bu]\>)*(\([\dm]\w*\))@) { $cmd .= "$2$4"; $prev =~ s@(\w[\w.\-]*-)((\</[bu]\>)*\s*)$@<a href="$CGI?$cmd">$1</a>$2@; print $prev; $prev = ''; s@^(\s*(\<[bu]\>)*)(\w[\w.\-]*)@@; print "$1<a href=\"$CGI?$cmd\">$3</a>"; } elsif ($prev) { print $prev; $prev = ''; } s@(\w[\w.\-]*)((\</[bu]\>)*)(\([\dm]\w*\))@<a href="$CGI?$1$4">$1</a>$2$4@g; if (m@(\w[\w.\-]*)-(\</[bu]\>)*\s*$@) { $cmd = $1; $prev = $_; next; } print;}if ($prev) { print $prev;}close(F);if (! $ok) { if ($query{'quit'}) { print STDERR "No manual entry for $man_section.\n"; print <<EOF;w3m-control: EXITEOF exit 1; } print <<EOF;Content-Type: text/html<html><head><title>man $man_section</title></head><body><pre>EOF print "No manual entry for <B>$man_section</B>.\n";}print <<EOF;</pre></body></html>EOFsub is_command { local($_) = @_; local($p); (! -d && -x) || return 0; if (! defined(%PATH)) { for $p (split(":", $ENV{'PATH'})) { $p =~ s@/+$@@; $PATH{$p} = 1; } } s@/[^/]*$@@; return defined($PATH{$_});}sub file_ref { local($_) = @_; if (&is_command($_)) { ($man = $_) =~ s@.*/@@; return "<a href=\"$CGI?$man\">$_</a>"; } if (/^\~/ || -f || -d) { return "<a href=\"$CGI2$_\">$_</a>"; } return $_;}sub include_ref { local($_) = @_; local($d); for $d ( "/usr/include", "/usr/local/include", "/usr/X11R6/include", "/usr/X11/include", "/usr/X/include", "/usr/include/X11" ) { -f "$d/$_" && return "<a href=\"$CGI2$d/$_\">$_</a>"; } return $_;}sub keyword_ref { local($_, $s) = @_; local(@a) = (); for (split(/\s*,\s*/)) { push(@a, "<a href=\"$CGI?$_$s\">$_</a>"); } return join(", ", @a) . $s;}sub html_quote { local($_) = @_; local(%QUOTE) = ( '<', '<', '>', '>', '&', '&', '"', '"', ); s/[<>&"]/$QUOTE{$&}/g; return $_;}sub form_decode { local($_) = @_; s/\+/ /g; s/%([\da-f][\da-f])/pack('c', hex($1))/egi; return $_;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -