aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/w3mman
diff options
context:
space:
mode:
authorTatsuya Kinoshita <tats@vega.ocn.ne.jp>2011-05-04 07:18:09 +0000
committerTatsuya Kinoshita <tats@vega.ocn.ne.jp>2011-05-04 07:18:09 +0000
commit5f8e0f8ef9a422691dd72e8a953a42a41478fcb4 (patch)
tree4b2df4796a534793648b3c4fc532fc36bd0cd525 /scripts/w3mman
parentReleasing debian version 0.3-2.4 (diff)
downloadw3m-debian/0.5.1-1.tar.gz
w3m-debian/0.5.1-1.zip
Releasing debian version 0.5.1-1debian/0.5.1-1
Diffstat (limited to 'scripts/w3mman')
-rw-r--r--scripts/w3mman/.cvsignore5
-rw-r--r--scripts/w3mman/Makefile.in96
-rw-r--r--scripts/w3mman/README54
-rw-r--r--scripts/w3mman/hlink.cgi97
-rw-r--r--scripts/w3mman/w3mman.1.in53
-rw-r--r--scripts/w3mman/w3mman.in41
-rw-r--r--scripts/w3mman/w3mman2html.cgi.in274
7 files changed, 620 insertions, 0 deletions
diff --git a/scripts/w3mman/.cvsignore b/scripts/w3mman/.cvsignore
new file mode 100644
index 0000000..e867c6e
--- /dev/null
+++ b/scripts/w3mman/.cvsignore
@@ -0,0 +1,5 @@
+w3mman
+w3mman2html.cgi
+w3mman.1
+
+Makefile
diff --git a/scripts/w3mman/Makefile.in b/scripts/w3mman/Makefile.in
new file mode 100644
index 0000000..ab941c5
--- /dev/null
+++ b/scripts/w3mman/Makefile.in
@@ -0,0 +1,96 @@
+@SET_MAKE@
+SHELL=@SHELL@
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+DOMAIN = $(PACKAGE)
+srcidr=@srcdir@
+top_srcdir=@top_srcdir@
+VPATH= $(srcdir):.
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+bindir = @bindir@
+datadir = @datadir@
+libdir = @libdir@
+includedir = @includedir@
+infodir = @infodir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+oldincludedir = @oldincludedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+top_srcdir = @top_srcdir@
+VPATH = $(top_srcdir):.
+DESTDIR =
+
+CGIBIN_DIR = $(libexecdir)/$(PACKAGE)/cgi-bin
+AUXBIN_DIR = $(libexecdir)/$(PACKAGE)
+HELP_DIR = @HELP_DIR@
+RC_DIR = @RC_DIR@
+ETC_DIR = $(sysconfdir)
+CONF_DIR = $(sysconfdir)/$(PACKAGE)
+BIN_DIR = $(bindir)
+MAN1_DIR = $(mandir)/man1
+
+TARGETS = w3mman
+CGIBIN_TARGETS = w3mman2html.cgi
+MAN1_TARGETS = w3mman.1
+MAN_TARGETS = $(MAN1_TARGETS)
+
+MKDIR = mkdir -p
+INSTALL = @INSTALL@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_MAN = @INSTALL_DATA@
+
+all: $(TARGETS) $(CGIBIN_TARGETS) $(MAN_TARGETS)
+
+# do nothing
+$(TARGETS) $(CGIBIN_TARGETS) $(MAN_TARGETS):
+
+install: $(TARGETS) $(CGIBIN_TARGETS) $(MAN_TARGETS)
+ -$(MKDIR) $(DESTDIR)$(BIN_DIR)
+ -$(MKDIR) $(DESTDIR)$(CGIBIN_DIR)
+ -$(MKDIR) $(DESTDIR)$(MAN1_DIR)
+ for file in $(TARGETS); \
+ do \
+ $(INSTALL_SCRIPT) $$file $(DESTDIR)$(BIN_DIR); \
+ done
+ for file in $(CGIBIN_TARGETS); \
+ do \
+ $(INSTALL_SCRIPT) $$file $(DESTDIR)$(CGIBIN_DIR); \
+ done
+ for file in $(MAN1_TARGETS); \
+ do \
+ $(INSTALL_MAN) $$file $(DESTDIR)$(MAN1_DIR); \
+ done
+
+uninstall:
+ -for file in $(TARGETS); \
+ do \
+ rm -f $(BIN_DIR)/$$file; \
+ done
+ -for file in $(CGIBIN_TARGETS); \
+ do \
+ rm -f $(CGIBIN_DIR)/$$file; \
+ done
+ -for file in $(MAN1_TARGETS); \
+ do \
+ rm -f $(MAN1_DIR)/$$file; \
+ done
+
+clean:
+
+distclean:
+ -rm -f $(TARGETS) $(CGIBIN_TARGETS) $(MAN_TARGETS)
+ -rm -f Makefile
+
+dist: all
+ @-rm -fr $(distdir)/w3mman
+ -$(MKDIR) $(distdir)/w3mman
+ cp Makefile README w3mman.in w3mman2html.cgi.in hlink.cgi w3mman.1.in $(distdir)/w3mman
+ ( cd $(distdir); tar -cf - w3mman | GZIP='' gzip ) \
+ > $(distdir)/w3mman.tar.gz
+ -rm -fr $(distdir)/w3mman
+
diff --git a/scripts/w3mman/README b/scripts/w3mman/README
new file mode 100644
index 0000000..3bcbb3b
--- /dev/null
+++ b/scripts/w3mman/README
@@ -0,0 +1,54 @@
+
+w3mman
+
+ 他のマニュアルやヘッダファイルにリンクをはることができる
+ man コマンドの代替コマンドです。
+
+使用法
+
+ w3mman
+ w3mman <command>[(<section>)]
+ w3mman [<section>] <command>
+ w3mman -k <keyword>
+
+環境変数
+
+ W3MMAN_W3M
+ 使用する w3m コマンドを指定します(デフォルトは w3m)
+ W3MMAN_MAN
+ 使用する man コマンドを指定します(デフォルトは man)
+
+インストール
+
+ make install
+ 必要なら PERL, MAN, LIBDIR を設定してください。
+ w3mman2html.cgi もインストールされます。
+
+================
+
+w3mman2html.cgi
+
+使用法
+
+ w3m file:///$LIB/w3mman2html.cgi
+ w3m file:///$LIB/w3mman2html.cgi?<command>[(<section>)]
+ w3m file:///$LIB/w3mman2html.cgi?man=<command>[&section=<section>]
+ w3m file:///$LIB/w3mman2html.cgi?keyword=<keyword>
+
+インストール
+
+ make install
+ 必要なら PERL, MAN, LIBDIR を設定してください。
+ w3mman もインストールされます。
+
+================
+
+hlink.cgi
+
+ ヘッダファイルなどにリンクを張る
+
+インストール
+
+ /$LIB/ にコピー
+ w3mman2html.cgi で使用するならば $CGI2 に設定してください。
+
diff --git a/scripts/w3mman/hlink.cgi b/scripts/w3mman/hlink.cgi
new file mode 100644
index 0000000..a92ac1d
--- /dev/null
+++ b/scripts/w3mman/hlink.cgi
@@ -0,0 +1,97 @@
+#!/usr/local/bin/perl
+
+$SCRIPT_NAME = $ENV{'SCRIPT_NAME'} || $0;
+$CGI = "file://$SCRIPT_NAME?";
+
+if ($ENV{'QUERY_STRING'}) {
+ $file = $ENV{'QUERY_STRING'};
+} else {
+ $file = $ARGV[0];
+}
+$file = &cleanup($file);
+
+if (-d $file) {
+ print <<EOF;
+Location: file:$file
+EOF
+ exit;
+}
+if (! open(FILE, "< $file")) {
+ $file = &html_quote($file);
+ $_ = "$file: " . &html_quote($!);
+ print <<EOF;
+Content-Type: text/html
+
+<head><title>$file</title></head>
+<b>$_</b>
+EOF
+ exit 1;
+}
+
+$file = &html_quote($file);
+($dir = $file) =~ s@[^/]*$@@;
+
+print <<EOF;
+Content-Type: text/html
+
+<head><title>$file</title></head>
+<pre>
+EOF
+while (<FILE>) {
+ $_ = &html_quote($_);
+
+ s/^(\#\s*include\s+)(\&quot;.*\&quot;|\&lt\;.*\&gt\;)/$1 . &header_ref($2)/ge;
+
+ print;
+}
+close(FILE);
+print "</pre>\n";
+
+sub header_ref {
+ local($_) = @_;
+ local($d);
+
+ if (s/^\&quot;//) {
+ s/\&quot;$//;
+ return "&quot;<a href=\"$CGI$dir$_\">$_</a>&quot;";
+ }
+ s/^\&lt\;//;
+ s/\&gt\;$//;
+
+ for $d (
+ "/usr/include",
+ "/usr/local/include",
+ "/usr/X11R6/include",
+ "/usr/X11/include",
+ "/usr/X/include",
+ "/usr/include/X11"
+ ) {
+ -f "$d/$_" && return "&lt;<a href=\"$CGI$d/$_\">$_</a>&gt;";
+ }
+ return $_;
+}
+
+
+sub html_quote {
+ local($_) = @_;
+ local(%QUOTE) = (
+ '<', '&lt;',
+ '>', '&gt;',
+ '&', '&amp;',
+ '"', '&quot;',
+ );
+ s/[<>&"]/$QUOTE{$&}/g;
+ return $_;
+}
+
+sub cleanup {
+ local($_) = @_;
+
+ s@//+@/@g;
+ s@/\./@/@g;
+ while(m@/\.\./@) {
+ s@^/(\.\./)+@/@;
+ s@/[^/]+/\.\./@/@;
+ }
+ return $_;
+}
diff --git a/scripts/w3mman/w3mman.1.in b/scripts/w3mman/w3mman.1.in
new file mode 100644
index 0000000..eb30237
--- /dev/null
+++ b/scripts/w3mman/w3mman.1.in
@@ -0,0 +1,53 @@
+.TH W3MMAN 1 "Mar 14, 2002"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh disable hyphenation
+.\" .hy enable hyphenation
+.\" .ad l left justify
+.\" .ad b justify to both left and right margins
+.\" .nf disable filling
+.\" .fi enable filling
+.\" .br insert line break
+.\" .sp <n> insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+w3mman \- an interface to the on-line reference manuals by w3m(1)
+.SH SYNOPSIS
+.B w3mman
+.RI "[-M " path ] " " [ section ] " page"
+.br
+.B w3mman
+.RI "[-M " path "] -k " keyword
+.SH DESCRIPTION
+.B w3mman
+is the system's manual pager by
+.BR w3m (1).
+.SH OPTIONS
+A summary of options is included below.
+.TP
+.BI \-M " path"
+Specify
+.I path
+as MANPATH.
+.TP
+.B \-k " keyword"
+Specify
+.I keyword.
+.SH ENVIRONMENT
+.TP
+.B W3MMAN_W3M
+If W3MMAN_W3M is set, its value is used instead of @W3M@.
+.TP
+.B W3MMAN_MAN
+If W3MMAN_MAN is set, its value is used instead of @MAN@.
+.SH FILES
+.TP
+.I @libexecdir@/@PACKAGE@/cgi-bin/w3mman2html.cgi
+convert manual page to html.
+.SH SEE ALSO
+.BR man (1),
+.BR w3m (1).
+.SH AUTHOR
+This manual page was written by Fumitoshi UKAI <ukai@debian.or.jp>,
+for the Debian GNU/Linux system (but may be used by others).
diff --git a/scripts/w3mman/w3mman.in b/scripts/w3mman/w3mman.in
new file mode 100644
index 0000000..6c6f65d
--- /dev/null
+++ b/scripts/w3mman/w3mman.in
@@ -0,0 +1,41 @@
+#!@PERL@
+
+@W3M = split(' ', $ENV{'W3MMAN_W3M'} || '@W3M@');
+$ENV{'W3MMAN_MAN'} ||= '@MAN@';
+$SCRIPT = 'file:///$LIB/w3mman2html.cgi';
+
+sub usage {
+ ($_ = $0) =~ s@.*/@@;
+ print STDERR "$_ [-M <path>] [[<section>] <command>]\n";
+ print STDERR "$_ [-M <path>] [-k <keyword>]\n";
+ exit 1;
+}
+
+$query = "";
+while (@ARGV) {
+ $_ = shift @ARGV;
+ if (/^-M$/) {
+ @ARGV || &usage();
+ $ENV{'MANPATH'} = shift @ARGV;
+ } elsif (/^-k$/) {
+ @ARGV || &usage();
+ $query = "?keyword=" . &form_encode(shift @ARGV);
+ } elsif (/^-/) {
+ &usage();
+ } elsif (/^\d/ || $_ eq 'n') {
+ @ARGV || &usage();
+ $query = "?quit=ok&man=" . &form_encode(shift @ARGV);
+ $query .= "&section=" . &form_encode($_);
+ } else {
+ $query = "?quit=ok&man=" . &form_encode($_);
+ }
+}
+
+exec @W3M, "$SCRIPT$query";
+
+sub form_encode {
+ local($_) = @_;
+ s/[\000-\040\+:#?&%<>"\177-\377]/sprintf('%%%02X', unpack('C', $&))/eg;
+ return $_;
+}
+
diff --git a/scripts/w3mman/w3mman2html.cgi.in b/scripts/w3mman/w3mman2html.cgi.in
new file mode 100644
index 0000000..f41d487
--- /dev/null
+++ b/scripts/w3mman/w3mman2html.cgi.in
@@ -0,0 +1,274 @@
+#!@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/\&/\&amp;/g;
+ s/\</\&lt;/g;
+ s/\>/\&gt;/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)*\&lt;)([\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: EXIT
+EOF
+ 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>
+EOF
+
+sub 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) = (
+ '<', '&lt;',
+ '>', '&gt;',
+ '&', '&amp;',
+ '"', '&quot;',
+ );
+ s/[<>&"]/$QUOTE{$&}/g;
+ return $_;
+}
+
+sub form_decode {
+ local($_) = @_;
+ s/\+/ /g;
+ s/%([\da-f][\da-f])/pack('c', hex($1))/egi;
+ return $_;
+}
+