324 lines
7.8 KiB
Plaintext
324 lines
7.8 KiB
Plaintext
#!@PERL@
|
|
# $Id: w3mhelp.cgi.in,v 1.29 2007/05/29 11:50:24 inu Exp $
|
|
|
|
if ( $^O =~ /^(ms)?(dos|win(32|nt)?)/i ) {
|
|
$CYGPATH = 1;
|
|
}
|
|
|
|
$prefix = "@prefix@";
|
|
$datarootdir = "@datarootdir@";
|
|
$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 (%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> ********
|
|
</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 doc-de:de_German
|
|
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]]</A>\n";
|
|
}
|
|
}
|
|
|
|
$keymap =~ s/[<>&]/$htmlesc{$&}/ge;
|
|
$head = 'Current keymap file';
|
|
if (defined($title{$head})) {
|
|
$head = $title{$head};
|
|
$head =~ s/[<>&]/$htmlesc{$&}/ge;
|
|
}
|
|
print "<P><A HREF=\"$keymap\">$head</A>\n";
|
|
|
|
&show_keymap('In-page Navigation',
|
|
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 Operations',
|
|
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 Operations',
|
|
split(" ", "goURL gorURL tabURL tabrURL ldfile readsh pipesh
|
|
pipeBuf"));
|
|
|
|
&show_keymap('Buffer Operations',
|
|
split(" ", "backBf nextBf prevBf selMn selBuf vwSrc svSrc svBuf
|
|
editBf editScr reload reshape rdrwSc dispI stopI"));
|
|
|
|
&show_keymap('Tab Operations',
|
|
split(" ", "newT closeT nextT prevT tabMn tabR tabL"));
|
|
|
|
&show_keymap('Bookmark Management',
|
|
split(" ", "ldBmark adBmark"));
|
|
|
|
&show_keymap('Searches',
|
|
split(" ", "srchfor srchbak srchnxt srchprv isrchfor isrchbak"));
|
|
|
|
&show_keymap('Dictionary Lookup',
|
|
split(" ", "dictword dictwordat"));
|
|
|
|
&show_keymap('Mark Operations',
|
|
split(" ", "_mark nextMk prevMk reMark"));
|
|
|
|
&show_keymap('Miscellaneous',
|
|
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 key bindings');
|
|
|
|
print "<BR>\n<HR WIDTH=80%>\n";
|
|
|
|
&show_keymap('Buffer and Tab Selection Mode',
|
|
split(" ", "buffer_next buffer_prev buffer_delete buffer_go"));
|
|
|
|
print "<BR>\n<HR WIDTH=80%>\n";
|
|
|
|
&show_keymap('Input Line Editing 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 Mode',
|
|
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 $_;
|
|
}
|