diff options
author | Tatsuya Kinoshita <tats@vega.ocn.ne.jp> | 2011-05-04 07:05:14 +0000 |
---|---|---|
committer | Tatsuya Kinoshita <tats@vega.ocn.ne.jp> | 2011-05-04 07:05:14 +0000 |
commit | 72f72d64a422d6628c4796f5c0bf2e508f134214 (patch) | |
tree | 0c9ea90cc53310832c977265521fb44db24a515e /scripts/w3mhelp.cgi.in | |
parent | Adding upstream version 0.3 (diff) | |
download | w3m-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.in | 323 |
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 = ( + '<', '<', + '>', '>', + '&', '&' +); + +$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&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 $_; +} |