home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2007 September / PCWSEP07.iso / Software / Linux / Linux Mint 3.0 Light / LinuxMint-3.0-Light.iso / casper / filesystem.squashfs / usr / lib / w3m / cgi-bin / w3mhelp.cgi < prev    next >
Encoding:
Text File  |  2007-01-22  |  7.8 KB  |  324 lines

  1. #!/usr/bin/perl
  2. # $Id: w3mhelp.cgi.in,v 1.28 2004/03/22 17:03:13 ukai Exp $
  3.  
  4. if ( $^O =~ /^(ms)?(dos|win(32|nt)?)/i ) {
  5.   $CYGPATH = 1;
  6. }
  7.  
  8. $prefix = "/usr";
  9. $helpdir = "${prefix}/share/w3m";
  10. if ($CYGPATH) {
  11.   $helpdir = &cygwin_pathconv($helpdir);
  12. }
  13. unshift(@INC, $helpdir);
  14. @docdirs = split(" ", "doc:en_English doc-jp:ja_Japanese");
  15.  
  16. require "w3mhelp-funcname.pl";
  17. require "w3mhelp-funcdesc.en.pl";
  18. $lang = 'en';
  19. $charset = 'US-ASCII';
  20.  
  21. %htmlesc = (
  22.     '<', '<',
  23.     '>', '>',
  24.     '&', '&'
  25. );
  26.  
  27. $RC_DIR = '~/.w3m';
  28. $RC_DIR =~ s/^~/$ENV{'HOME'}/;
  29. if ($CYGPATH) {
  30.   $RC_DIR = &cygwin_pathconv("$RC_DIR");
  31. }
  32. $keymap = "$RC_DIR/keymap";
  33. $version = '*unknown*';
  34. if (defined($ENV{'QUERY_STRING'})) {
  35.     print "QUERY_STRING=$ENV{'QUERY_STRING'}\n";
  36.     if ($ENV{'QUERY_STRING'} =~ /(^|&)version=([^&]*)/) {
  37.     $version = $2;
  38.     $version =~ s/\+|%([0-9A-Fa-f][0-9A-Fa-f])/$& eq '+' ? ' ' : pack('C', hex($1))/ge;
  39.     $version =~ s/w3m\///;
  40.     }
  41.     if ($ENV{'QUERY_STRING'} =~ /(^|&)lang=([^&]*)/) {
  42.     local($tlang) = $2;
  43.     $tlang =~ s/\+|%([0-9A-Fa-f][0-9A-Fa-f])/$& eq '+' ? ' ' : pack('C', hex($1))/ge;
  44.     $tlang =~ tr/A-Z/a-z/;
  45.     if ($tlang !~ /^[a-z][a-z]$/) {
  46.         $tlang = 'en';
  47.     }
  48.     # print "tlang=$tlang\n";
  49.     eval {require "w3mhelp-funcdesc.$tlang.pl";};
  50.     if (defined(%funcdesc)) {
  51.         $lang = $tlang;
  52.     }
  53.     }
  54. }
  55.  
  56. %f = %keyfunc;
  57. %keyfunc = ();
  58. while (($key, $fname) = each %f) {
  59.     $key = &norm_key($key);
  60.     $keyfunc{$key} = $fname;
  61. }
  62.  
  63. if (-f $keymap) {
  64.     open(KEYMAP, "< $keymap") || die "cannot open keymap: $keymap, $!";
  65.     &load_keymap(*KEYMAP, $func);
  66.     close(KEYMAP);
  67. }
  68.  
  69. local (%funckeydesc, $key, $fname, $desc);
  70.  
  71. %funcname = (%funcname, %buf_funcname, %lineedit_funcname, %menu_funcname);
  72.  
  73. %funcdesc = (%funcdesc, %buf_funcdesc, %lineedit_funcdesc, %menu_funcdesc);
  74. while (($fname, $desc) = each %funcdesc) {
  75.     $funckeydesc{$funcname{$fname}} = "$fname\n$desc\n";
  76. }
  77.  
  78. while (($key, $fname) = each %keyfunc) {
  79.     $keydata{$key} && next;
  80.     $funckeydesc{$funcname{$fname}} .= "$key,";
  81. }
  82. while (($key, $fname) = each %buf_keyfunc) {
  83.     $funckeydesc{$funcname{$fname}} .= "$key,";
  84. }
  85. while (($key, $fname) = each %lineedit_keyfunc) {
  86.     $funckeydesc{$funcname{$fname}} .= "$key,";
  87. }
  88. while (($key, $fname) = each %menu_keyfunc) {
  89.     $funckeydesc{$funcname{$fname}} .= "$key,";
  90. }
  91.  
  92. print <<HEADING;
  93. Content-Type: text/html; charset=$charset
  94.  
  95. <HTML>
  96. <HEAD>
  97. <TITLE>w3m help page</TITLE>
  98. </HEAD>
  99. <BODY>
  100. <CENTER>
  101. ******* 
  102. <A HREF="http://w3m.sourceforge.net/">w3m</A>
  103.  (WWW-wo-Miru)  Version $version by 
  104. <A HREF="mailto:aito\@fw.ipsj.or.jp">A.ITO</A> ********<BR>
  105.              ***** Key assign table *****
  106. </CENTER>
  107.  
  108. HEADING
  109.  
  110. $q_version = $version;
  111. $q_version =~ s/[^A-Za-z0-9_\$\.\-]/sprintf('%%%02X', ord($&))/ge;
  112. $script = "<A HREF=\"$ENV{'SCRIPT_NAME'}?version=$q_version&lang=";
  113.  
  114. # doc:en_English doc-jp:ja_Japanese
  115. for $otherlang (@docdirs) {
  116.     local(@d) = split(/[:_]/, $otherlang);
  117.     
  118.     if ($d[1] ne $lang) {
  119.     $d[1] =~ s/[^A-Za-z0-9_\$\.\-]/sprintf('%%%02X', ord($&))/ge;
  120.     print $script, $d[1], "\">$d[2] version</A>\n";
  121.     }
  122. }
  123.  
  124. $keymap =~ s/[<>&]/$htmlesc{$&}/ge;
  125. $head = "Show keymap file";
  126. if (defined($title{$head})) {
  127.     $head = $title{$head};
  128.     $head =~ s/[<>&]/$htmlesc{$&}/ge;
  129. }
  130. print "<P><A HREF=\"$keymap\">$head</A>\n";
  131.  
  132. &show_keymap("Page/Cursor motion", 
  133.          split(" ", "pgFore pgBack movR movL movD movU
  134.         movR1 movL1 movD1 movU1 ldown1 lup1
  135.         shiftl shiftr col1L col1R linbeg linend ctrCsrH ctrCsrV
  136.         goLine goLineF goLineL movRW movLW
  137.         topA lastA nextA prevA movlistMn
  138.         nextR nextL nextD nextU nextRD nextLU
  139.         undoPos redoPos"));
  140.  
  141. &show_keymap("Hyperlink operation",
  142.          split(" ", "followA tabA svA followI svI submitForm
  143.         curURL peekURL peekIMG pginfo curlno chkURL chkWORD chkNMID
  144.         rFrame extbrz linkbrz linkLst listMn linkMn accessKey"));
  145.  
  146. &show_keymap("File/Stream operation",
  147.          split(" ", "goURL gorURL tabURL tabrURL ldfile readsh pipesh
  148.         pipeBuf"));
  149.  
  150. &show_keymap("Buffer operation",
  151.          split(" ", "backBf nextBf prevBf selMn selBuf vwSrc svSrc svBuf
  152.         editBf editScr reload reshape rdrwSc dispI stopI"));
  153.  
  154. &show_keymap("Tab operation",
  155.          split(" ", "newT closeT nextT prevT tabMn tabR tabL"));
  156.  
  157. &show_keymap("Bookmark operation",
  158.          split(" ", "ldBmark adBmark"));
  159.  
  160. &show_keymap("Search",
  161.          split(" ", "srchfor srchbak srchnxt srchprv isrchfor isrchbak"));
  162.  
  163. &show_keymap("Dictionary look-up",
  164.          split(" ", "dictword dictwordat"));
  165.  
  166. &show_keymap("Mark operation",
  167.          split(" ", "_mark nextMk prevMk reMark"));
  168.  
  169. &show_keymap("Miscellany",
  170.          split(" ", "mainMn ldhelp ldOpt dispVer cooLst ldHist ldDL
  171.         docCSet defCSet
  172.         msgs msToggle wrapToggle execCmd setAlarm setOpt setEnv defKey
  173.         reinit execsh susp qquitfm quitfm"));
  174.  
  175. &show_keymap_data("User defined keymaps");
  176.  
  177. print "<BR>\n<HR WIDTH=80%>\n";
  178.  
  179. &show_keymap("Buffer selection mode",
  180.          split(" ", "buffer_next buffer_prev buffer_delete buffer_go"));
  181.  
  182. print "<BR>\n<HR WIDTH=80%>\n";
  183.  
  184. &show_keymap("Line-edit mode",
  185.          split(" ", "lineedit_forward lineedit_back lineedit_backspace 
  186.         lineedit_delete lineedit_kill_after lineedit_kill_before
  187.         lineedit_top lineedit_bottom lineedit_prev lineedit_next
  188.         lineedit_editor lineedit_complete lineedit_accept"));
  189.  
  190. print "<BR>\n<HR WIDTH=80%>\n";
  191.  
  192. &show_keymap("Popup menu",
  193.          split(" ", "menu_select menu_close menu_cancel menu_down menu_up
  194.         menu_line_up menu_line_down menu_top menu_last menu_next
  195.         menu_prev menu_search_fore menu_search_back menu_search_next
  196.         menu_search_prev menu_suspend"));
  197.  
  198. print <<PAGE;
  199. <HR>
  200. </BODY>
  201. </HTML>
  202. PAGE
  203.  
  204. exit 0;
  205.  
  206. sub load_keymap {
  207.     local(*FH) = shift;
  208.     local($func) = @_;
  209.  
  210.     while (<FH>) {
  211.     /^#/ && next;
  212.     s/^\s*keymap\s+// || next;
  213.     s/^(\"(\\\"|[^\"])+\"|\'(\\\'|[^\'])+\'|\S+)\s+(\S+)\s*// || next;
  214.     ($key, $fname) = ($1, $4);
  215.     $data = $_;
  216.     $fname =~ tr/a-z/A-Z/;
  217.     defined($funcdesc{$fname}) || next;
  218.     $key =~ s/^["'](.*)["']$/$1/;
  219.     $key = &norm_key($key);
  220.     $keyfunc{$key} = $fname;
  221.     if ($data) {
  222.         $keydata{$key} = $data;
  223.     } else {
  224.         delete $keydata{$key};
  225.     }
  226.     }
  227. }
  228.  
  229. sub norm_key {
  230.     local($_) = @_;
  231.  
  232.     s/(ESC|SPC|TAB|DEL|UP|DOWN|RIGHT|LEFT)/\U$1/i;
  233.     s/\\(.)/$1/g;
  234.     s/(^|\s+|-)\^(.)/${1}C-$2/g;
  235.     s/(^|\s+|-)(C-\[|M-)/${1}ESC-/g;
  236.     if (/^ESC-\[/) {
  237.     /^ESC-\[A$/ && return "UP";
  238.     /^ESC-\[B$/ && return "DOWN";
  239.     /^ESC-\[C$/ && return "RIGHT";
  240.     /^ESC-\[D$/ && return "LEFT";
  241.     }
  242.     s/(^|\s+|-)ESC-\[/$1\^\[\[/g;
  243.     s/(^|\s+|-)ESC-\^(.)/${1}ESC-C-$2/g;
  244.     s/(^|\s+|-)(ESC-)?C-[iI]/$1${2}TAB/g;
  245.     s/(^|\s+|-)(ESC-)?C-\?/$1${2}DEL/g;
  246.     return $_;
  247. }
  248.  
  249. sub show_keymap {
  250.     local($head, @list) = @_;
  251.     local($fid);
  252.     local($attr) = " WIDTH=140";
  253.  
  254.     if (defined($title{$head})) {
  255.     $head = $title{$head};
  256.     $head =~ s/[<>&]/$htmlesc{$&}/ge;
  257.     }
  258.  
  259.     print <<PAGE;
  260. <H2>$head</H2>
  261. <table cellpadding=0>
  262. PAGE
  263.     foreach $fid (@list) {
  264.     local ($name, $desc, $keys) = split("\n", $funckeydesc{$fid}, 3);
  265.     $keys =~ s/,$//;
  266.     $keys = '<NOT ASSIGNED>' if ($keys eq '');
  267.     $keys =~ s/[<>&]/$htmlesc{$&}/ge;
  268.     if ($name =~ /:/) {
  269.         $name = "";
  270.     } else {
  271.         $name =~ s/[<>&]/$htmlesc{$&}/ge;
  272.         $name = " (<b>$name</b>)";
  273.     }
  274.     $desc =~ s/[<>&]/$htmlesc{$&}/ge;
  275.     print <<PAGE;
  276. <TR><TD$attr>$keys<TD><NOBR>$desc$name</NOBR>
  277. PAGE
  278.     $attr = "";
  279.     }
  280.     print "</table>\n";
  281. }
  282.  
  283. sub show_keymap_data {
  284.     local($head, @list) = @_;
  285.     local($fid);
  286.     local($attr) = " WIDTH=140";
  287.  
  288.     if (defined($title{$head})) {
  289.     $head = $title{$head};
  290.     $head =~ s/[<>&]/$htmlesc{$&}/ge;
  291.     }
  292.  
  293.     print <<PAGE;
  294. <H2>$head</H2>
  295. <table cellpadding=0>
  296. PAGE
  297.     foreach $keys (sort keys %keydata) {
  298.     $keys =~ s/[<>&]/$htmlesc{$&}/ge;
  299.     $name = $keyfunc{$keys};
  300.     $data = $keydata{$keys};
  301.     $name =~ s/[<>&]/$htmlesc{$&}/ge;
  302.     $data =~ s/[<>&]/$htmlesc{$&}/ge;
  303.     print <<PAGE;
  304. <TR><TD$attr>$keys<TD>$name<TD><NOBR>$data</NOBR>
  305. PAGE
  306.     $attr = "";
  307.     }
  308.     print "</table>\n";
  309. }
  310.  
  311.  
  312. sub cygwin_pathconv {
  313.   local($_) = @_;
  314.   local(*CYGPATH);
  315.  
  316.   open(CYGPATH, '-|') || exec('cygpath', '-w', $_);
  317.   $_ = <CYGPATH>;
  318.   close(CYGPATH);
  319.   s/\r?\n$//;
  320.   s!\\!/!g;
  321.   s!/$!!;
  322.   return $_;
  323. }
  324.