aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/w3mhelp.cgi.in
diff options
context:
space:
mode:
authorTatsuya Kinoshita <tats@vega.ocn.ne.jp>2011-05-04 07:05:14 +0000
committerTatsuya Kinoshita <tats@vega.ocn.ne.jp>2011-05-04 07:05:14 +0000
commit72f72d64a422d6628c4796f5c0bf2e508f134214 (patch)
tree0c9ea90cc53310832c977265521fb44db24a515e /scripts/w3mhelp.cgi.in
parentAdding upstream version 0.3 (diff)
downloadw3m-upstream/0.5.1.tar.gz
w3m-upstream/0.5.1.zip
Adding upstream version 0.5.1upstream/0.5.1
Diffstat (limited to 'scripts/w3mhelp.cgi.in')
-rw-r--r--scripts/w3mhelp.cgi.in323
1 files changed, 323 insertions, 0 deletions
diff --git a/scripts/w3mhelp.cgi.in b/scripts/w3mhelp.cgi.in
new file mode 100644
index 0000000..135b835
--- /dev/null
+++ b/scripts/w3mhelp.cgi.in
@@ -0,0 +1,323 @@
+#!@PERL@
+# $Id: w3mhelp.cgi.in,v 1.28 2004/03/22 17:03:13 ukai Exp $
+
+if ( $^O =~ /^(ms)?(dos|win(32|nt)?)/i ) {
+ $CYGPATH = 1;
+}
+
+$prefix = "@prefix@";
+$helpdir = "@HELP_DIR@";
+if ($CYGPATH) {
+ $helpdir = &cygwin_pathconv($helpdir);
+}
+unshift(@INC, $helpdir);
+@docdirs = split(" ", "@DOCDIRS@");
+
+require "w3mhelp-funcname.pl";
+require "w3mhelp-funcdesc.en.pl";
+$lang = 'en';
+$charset = 'US-ASCII';
+
+%htmlesc = (
+ '<', '&lt;',
+ '>', '&gt;',
+ '&', '&amp;'
+);
+
+$RC_DIR = '@RC_DIR@';
+$RC_DIR =~ s/^~/$ENV{'HOME'}/;
+if ($CYGPATH) {
+ $RC_DIR = &cygwin_pathconv("$RC_DIR");
+}
+$keymap = "$RC_DIR/keymap";
+$version = '*unknown*';
+if (defined($ENV{'QUERY_STRING'})) {
+ print "QUERY_STRING=$ENV{'QUERY_STRING'}\n";
+ if ($ENV{'QUERY_STRING'} =~ /(^|&)version=([^&]*)/) {
+ $version = $2;
+ $version =~ s/\+|%([0-9A-Fa-f][0-9A-Fa-f])/$& eq '+' ? ' ' : pack('C', hex($1))/ge;
+ $version =~ s/w3m\///;
+ }
+ if ($ENV{'QUERY_STRING'} =~ /(^|&)lang=([^&]*)/) {
+ local($tlang) = $2;
+ $tlang =~ s/\+|%([0-9A-Fa-f][0-9A-Fa-f])/$& eq '+' ? ' ' : pack('C', hex($1))/ge;
+ $tlang =~ tr/A-Z/a-z/;
+ if ($tlang !~ /^[a-z][a-z]$/) {
+ $tlang = 'en';
+ }
+ # print "tlang=$tlang\n";
+ eval {require "w3mhelp-funcdesc.$tlang.pl";};
+ if (defined(%funcdesc)) {
+ $lang = $tlang;
+ }
+ }
+}
+
+%f = %keyfunc;
+%keyfunc = ();
+while (($key, $fname) = each %f) {
+ $key = &norm_key($key);
+ $keyfunc{$key} = $fname;
+}
+
+if (-f $keymap) {
+ open(KEYMAP, "< $keymap") || die "cannot open keymap: $keymap, $!";
+ &load_keymap(*KEYMAP, $func);
+ close(KEYMAP);
+}
+
+local (%funckeydesc, $key, $fname, $desc);
+
+%funcname = (%funcname, %buf_funcname, %lineedit_funcname, %menu_funcname);
+
+%funcdesc = (%funcdesc, %buf_funcdesc, %lineedit_funcdesc, %menu_funcdesc);
+while (($fname, $desc) = each %funcdesc) {
+ $funckeydesc{$funcname{$fname}} = "$fname\n$desc\n";
+}
+
+while (($key, $fname) = each %keyfunc) {
+ $keydata{$key} && next;
+ $funckeydesc{$funcname{$fname}} .= "$key,";
+}
+while (($key, $fname) = each %buf_keyfunc) {
+ $funckeydesc{$funcname{$fname}} .= "$key,";
+}
+while (($key, $fname) = each %lineedit_keyfunc) {
+ $funckeydesc{$funcname{$fname}} .= "$key,";
+}
+while (($key, $fname) = each %menu_keyfunc) {
+ $funckeydesc{$funcname{$fname}} .= "$key,";
+}
+
+print <<HEADING;
+Content-Type: text/html; charset=$charset
+
+<HTML>
+<HEAD>
+<TITLE>w3m help page</TITLE>
+</HEAD>
+<BODY>
+<CENTER>
+*******
+<A HREF="http://w3m.sourceforge.net/">w3m</A>
+ (WWW-wo-Miru) Version $version by
+<A HREF="mailto:aito\@fw.ipsj.or.jp">A.ITO</A> ********<BR>
+ ***** Key assign table *****
+</CENTER>
+
+HEADING
+
+$q_version = $version;
+$q_version =~ s/[^A-Za-z0-9_\$\.\-]/sprintf('%%%02X', ord($&))/ge;
+$script = "<A HREF=\"$ENV{'SCRIPT_NAME'}?version=$q_version&amp;lang=";
+
+# doc:en_English doc-jp:ja_Japanese
+for $otherlang (@docdirs) {
+ local(@d) = split(/[:_]/, $otherlang);
+
+ if ($d[1] ne $lang) {
+ $d[1] =~ s/[^A-Za-z0-9_\$\.\-]/sprintf('%%%02X', ord($&))/ge;
+ print $script, $d[1], "\">$d[2] version</A>\n";
+ }
+}
+
+$keymap =~ s/[<>&]/$htmlesc{$&}/ge;
+$head = "Show keymap file";
+if (defined($title{$head})) {
+ $head = $title{$head};
+ $head =~ s/[<>&]/$htmlesc{$&}/ge;
+}
+print "<P><A HREF=\"$keymap\">$head</A>\n";
+
+&show_keymap("Page/Cursor motion",
+ split(" ", "pgFore pgBack movR movL movD movU
+ movR1 movL1 movD1 movU1 ldown1 lup1
+ shiftl shiftr col1L col1R linbeg linend ctrCsrH ctrCsrV
+ goLine goLineF goLineL movRW movLW
+ topA lastA nextA prevA movlistMn
+ nextR nextL nextD nextU nextRD nextLU
+ undoPos redoPos"));
+
+&show_keymap("Hyperlink operation",
+ split(" ", "followA tabA svA followI svI submitForm
+ curURL peekURL peekIMG pginfo curlno chkURL chkWORD chkNMID
+ rFrame extbrz linkbrz linkLst listMn linkMn accessKey"));
+
+&show_keymap("File/Stream operation",
+ split(" ", "goURL gorURL tabURL tabrURL ldfile readsh pipesh
+ pipeBuf"));
+
+&show_keymap("Buffer operation",
+ split(" ", "backBf nextBf prevBf selMn selBuf vwSrc svSrc svBuf
+ editBf editScr reload reshape rdrwSc dispI stopI"));
+
+&show_keymap("Tab operation",
+ split(" ", "newT closeT nextT prevT tabMn tabR tabL"));
+
+&show_keymap("Bookmark operation",
+ split(" ", "ldBmark adBmark"));
+
+&show_keymap("Search",
+ split(" ", "srchfor srchbak srchnxt srchprv isrchfor isrchbak"));
+
+&show_keymap("Dictionary look-up",
+ split(" ", "dictword dictwordat"));
+
+&show_keymap("Mark operation",
+ split(" ", "_mark nextMk prevMk reMark"));
+
+&show_keymap("Miscellany",
+ split(" ", "mainMn ldhelp ldOpt dispVer cooLst ldHist ldDL
+ docCSet defCSet
+ msgs msToggle wrapToggle execCmd setAlarm setOpt setEnv defKey
+ reinit execsh susp qquitfm quitfm"));
+
+&show_keymap_data("User defined keymaps");
+
+print "<BR>\n<HR WIDTH=80%>\n";
+
+&show_keymap("Buffer selection mode",
+ split(" ", "buffer_next buffer_prev buffer_delete buffer_go"));
+
+print "<BR>\n<HR WIDTH=80%>\n";
+
+&show_keymap("Line-edit mode",
+ split(" ", "lineedit_forward lineedit_back lineedit_backspace
+ lineedit_delete lineedit_kill_after lineedit_kill_before
+ lineedit_top lineedit_bottom lineedit_prev lineedit_next
+ lineedit_editor lineedit_complete lineedit_accept"));
+
+print "<BR>\n<HR WIDTH=80%>\n";
+
+&show_keymap("Popup menu",
+ split(" ", "menu_select menu_close menu_cancel menu_down menu_up
+ menu_line_up menu_line_down menu_top menu_last menu_next
+ menu_prev menu_search_fore menu_search_back menu_search_next
+ menu_search_prev menu_suspend"));
+
+print <<PAGE;
+<HR>
+</BODY>
+</HTML>
+PAGE
+
+exit 0;
+
+sub load_keymap {
+ local(*FH) = shift;
+ local($func) = @_;
+
+ while (<FH>) {
+ /^#/ && next;
+ s/^\s*keymap\s+// || next;
+ s/^(\"(\\\"|[^\"])+\"|\'(\\\'|[^\'])+\'|\S+)\s+(\S+)\s*// || next;
+ ($key, $fname) = ($1, $4);
+ $data = $_;
+ $fname =~ tr/a-z/A-Z/;
+ defined($funcdesc{$fname}) || next;
+ $key =~ s/^["'](.*)["']$/$1/;
+ $key = &norm_key($key);
+ $keyfunc{$key} = $fname;
+ if ($data) {
+ $keydata{$key} = $data;
+ } else {
+ delete $keydata{$key};
+ }
+ }
+}
+
+sub norm_key {
+ local($_) = @_;
+
+ s/(ESC|SPC|TAB|DEL|UP|DOWN|RIGHT|LEFT)/\U$1/i;
+ s/\\(.)/$1/g;
+ s/(^|\s+|-)\^(.)/${1}C-$2/g;
+ s/(^|\s+|-)(C-\[|M-)/${1}ESC-/g;
+ if (/^ESC-\[/) {
+ /^ESC-\[A$/ && return "UP";
+ /^ESC-\[B$/ && return "DOWN";
+ /^ESC-\[C$/ && return "RIGHT";
+ /^ESC-\[D$/ && return "LEFT";
+ }
+ s/(^|\s+|-)ESC-\[/$1\^\[\[/g;
+ s/(^|\s+|-)ESC-\^(.)/${1}ESC-C-$2/g;
+ s/(^|\s+|-)(ESC-)?C-[iI]/$1${2}TAB/g;
+ s/(^|\s+|-)(ESC-)?C-\?/$1${2}DEL/g;
+ return $_;
+}
+
+sub show_keymap {
+ local($head, @list) = @_;
+ local($fid);
+ local($attr) = " WIDTH=140";
+
+ if (defined($title{$head})) {
+ $head = $title{$head};
+ $head =~ s/[<>&]/$htmlesc{$&}/ge;
+ }
+
+ print <<PAGE;
+<H2>$head</H2>
+<table cellpadding=0>
+PAGE
+ foreach $fid (@list) {
+ local ($name, $desc, $keys) = split("\n", $funckeydesc{$fid}, 3);
+ $keys =~ s/,$//;
+ $keys = '<NOT ASSIGNED>' if ($keys eq '');
+ $keys =~ s/[<>&]/$htmlesc{$&}/ge;
+ if ($name =~ /:/) {
+ $name = "";
+ } else {
+ $name =~ s/[<>&]/$htmlesc{$&}/ge;
+ $name = " (<b>$name</b>)";
+ }
+ $desc =~ s/[<>&]/$htmlesc{$&}/ge;
+ print <<PAGE;
+<TR><TD$attr>$keys<TD><NOBR>$desc$name</NOBR>
+PAGE
+ $attr = "";
+ }
+ print "</table>\n";
+}
+
+sub show_keymap_data {
+ local($head, @list) = @_;
+ local($fid);
+ local($attr) = " WIDTH=140";
+
+ if (defined($title{$head})) {
+ $head = $title{$head};
+ $head =~ s/[<>&]/$htmlesc{$&}/ge;
+ }
+
+ print <<PAGE;
+<H2>$head</H2>
+<table cellpadding=0>
+PAGE
+ foreach $keys (sort keys %keydata) {
+ $keys =~ s/[<>&]/$htmlesc{$&}/ge;
+ $name = $keyfunc{$keys};
+ $data = $keydata{$keys};
+ $name =~ s/[<>&]/$htmlesc{$&}/ge;
+ $data =~ s/[<>&]/$htmlesc{$&}/ge;
+ print <<PAGE;
+<TR><TD$attr>$keys<TD>$name<TD><NOBR>$data</NOBR>
+PAGE
+ $attr = "";
+ }
+ print "</table>\n";
+}
+
+
+sub cygwin_pathconv {
+ local($_) = @_;
+ local(*CYGPATH);
+
+ open(CYGPATH, '-|') || exec('cygpath', '-w', $_);
+ $_ = <CYGPATH>;
+ close(CYGPATH);
+ s/\r?\n$//;
+ s!\\!/!g;
+ s!/$!!;
+ return $_;
+}