aboutsummaryrefslogtreecommitdiffstats
path: root/w3m-doc/sample
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 /w3m-doc/sample
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 'w3m-doc/sample')
-rw-r--r--w3m-doc/sample/README41
-rw-r--r--w3m-doc/sample/define.wd4
-rw-r--r--w3m-doc/sample/html.wd18
-rwxr-xr-xw3m-doc/sample/keymap.cgi268
-rw-r--r--w3m-doc/sample/s.wd8
-rw-r--r--w3m-doc/sample/sample.html6
-rw-r--r--w3m-doc/sample/sample.wd11
-rwxr-xr-xw3m-doc/sample/w3mdoc.pl102
8 files changed, 458 insertions, 0 deletions
diff --git a/w3m-doc/sample/README b/w3m-doc/sample/README
new file mode 100644
index 0000000..7bb9dab
--- /dev/null
+++ b/w3m-doc/sample/README
@@ -0,0 +1,41 @@
+
+使い方
+ perl w3mdoc.pl sample.wd > sample.html
+
+展開されるもの
+
+* @xxx.yyy@
+
+ @define 〜 @end 内で定義された値に展開される。
+
+* @YYY(xxx)@
+
+ @code 〜 @end 内で定義された関数を呼び出して展開される。
+
+ 例)
+ URL(xxx) xxx.url
+ LINK(xxx) <A HREF="xxx.url">xxx.title</A>
+ MAILTO(xxx) <A HREF="mailto:xxx.address">xxx.name</A>
+
+コマンド一覧
+
+* 定義
+ @define
+ xxx.yyy zzz
+ @end
+
+ xxx.yyy を zzz と定義する。xxx は以下の関数の引数にもなる。
+ 例は define.wd を参照。
+
+* コード(関数定義)
+ @code
+ コード
+ @end
+
+ w3mdoc を実装している言語のコードを直接書く。とりあえず perl5。
+ 例は html.wd を参照。
+
+* インクルード
+ @include file
+
+ ファイルを include する。
diff --git a/w3m-doc/sample/define.wd b/w3m-doc/sample/define.wd
new file mode 100644
index 0000000..f588f4c
--- /dev/null
+++ b/w3m-doc/sample/define.wd
@@ -0,0 +1,4 @@
+@define
+hsaka.url http://www2u.biglobe.ne.jp/~hsaka/
+hsaka.title 坂本浩則のホームページ
+@end
diff --git a/w3m-doc/sample/html.wd b/w3m-doc/sample/html.wd
new file mode 100644
index 0000000..1b1d7f2
--- /dev/null
+++ b/w3m-doc/sample/html.wd
@@ -0,0 +1,18 @@
+@code
+sub URL {
+ $_[0]->CHECK(qw(url));
+ $_[0]->{url};
+}
+sub LINK {
+ $_[0]->CHECK(qw(url title));
+ "<A HREF=\"$_[0]->{url}\">$_[0]->{title}</A>";
+}
+sub LINK_SEC {
+ $_[0]->CHECK(qw(url section title));
+ "<A HREF=\"$_[0]->{url}\">$_[0]->{section} $_[0]->{title}</A>";
+}
+sub MAILTO {
+ $_[0]->CHECK(qw(address name));
+ "<A HREF=\"mailto:$_[0]->{address}\">$_[0]->{name}</A>";
+}
+@end
diff --git a/w3m-doc/sample/keymap.cgi b/w3m-doc/sample/keymap.cgi
new file mode 100755
index 0000000..f68f5fb
--- /dev/null
+++ b/w3m-doc/sample/keymap.cgi
@@ -0,0 +1,268 @@
+#!/usr/local/bin/perl
+
+$QUERY = $ENV{'QUERY_STRING'};
+$KEYMAP = "$ENV{'HOME'}/.w3m/keymap";
+
+if ($QUERY) {
+ # &write_keymap($QUERY);
+ print <<EOF;
+Content-Type: text/html
+w3m-control: DELETE_PREVBUF
+w3m-control: BACK
+
+EOF
+ exit;
+}
+&init_func();
+@key = ();
+@func = ();
+@data = ();
+open(KEYMAP, $KEYMAP);
+while (<KEYMAP>) {
+ s/^keymap\s+// || next;
+ (($k, $_) = &getQWord($_)) || next;
+ (($f, $_) = &getWord($_)) || next;
+ $FUNC_EXIST{$f} || next;
+ ($d, $_) = &getQWord($_);
+ push(@key, $k);
+ push(@func, $f);
+ push(@data, $d);
+}
+close(KEYMAP);
+
+$N = @key;
+
+print <<EOF;
+Content-Type: text/html
+
+<head><title>Keymap Setting</title></head>
+<h1>Keymap Setting</h1>
+<form action="file:///\$LIB/keymap.cgi">
+<table>
+<tr><td>&nbsp;Key<td>&nbsp;Command<td>&nbsp;Argument
+<tr><td><input name=k_$N size=6>
+<td><select name=f_$N>
+EOF
+&print_func();
+print <<EOF;
+</select>
+<td><input name=d_$N>
+<td><input type=submit name=ok value=Ok>
+<tr><td colspan=4><hr>
+EOF
+$i = 0;
+while(@key) {
+ $k = &Q(shift @key);
+ $f = shift @func;
+ $d = &Q(shift @data);
+ print <<EOF;
+<tr><td><input type=hidden name=k_$i value=\"$k\">&nbsp;$k
+<td><select name=f_$i>
+EOF
+ &print_func($f);
+ print <<EOF;
+</select>
+<td><input name=d_$i value=\"$d\">
+<td><input type=checkbox name=del_$i>Delete
+EOF
+ $i++;
+}
+print <<EOF;
+</table>
+</form>
+EOF
+
+sub write_keymap {
+ local($query) = @_;
+ @key = ();
+ @func = ();
+ @data = ();
+
+ for $q (split('&', $query)) {
+ ($_, $d) = split('=', $q);
+ if (s/^k_//) {
+ $key[$_] = $d;
+ } elsif (s/^f_//) {
+ $func[$_] = $d;
+ } elsif (s/^d_//) {
+ $data[$_] = $d;
+ } elsif (s/^del_//) {
+ $del[$_] = 1;
+ }
+ }
+ open(KEYMAP, "> ${KEYMAP}") || next;
+ while(@key) {
+ $k = &UQ(shift @key);
+ $f = shift @func;
+ $d = &UQ(shift @data);
+ ($f =~ /^\w/) || next;
+ (shift @del) && next;
+ print KEYMAP "keymap\t$k\t$f";
+ if ($d ne '') {
+ if ($d =~ /[\"\'\\\s]/) {
+ $d =~ s/([\"\\])/\\$1/g;
+ print KEYMAP "\t\t\"$d\"";
+ } else {
+ $d =~ s/([\"\\])/\\$1/g;
+ print KEYMAP "\t\t$d";
+ }
+ }
+ print KEYMAP "\n";
+ }
+ close(KEYMAP);
+}
+
+sub UQ {
+ local($_) = @_;
+ s/\+/ /g;
+ s/%([\da-f][\da-f])/pack('c', hex($1))/egi;
+ return $_;
+}
+
+sub Q {
+ local($_) = @_;
+ s/\&/\&amp;/g;
+ s/\</\&lt;/g;
+ s/\>/\&gt;/g;
+ s/\"/\&quot;/g;
+ return $_;
+}
+
+sub getQWord {
+ local($_) = @_;
+ local($x) = '';
+ s/^\s+//;
+ while($_ ne '') {
+ if (s/^\'(([^\'\\]|\\.)*)\'// ||
+ s/^\"(([^\"\\]|\\.)*)\"// ||
+ s/^([^\'\"\\\s]+)// || s/^\\(.)//) {
+ $x .= $1;
+ } else {
+ last;
+ }
+ }
+ return ($x, $_);
+}
+
+sub getWord {
+ local($_) = @_;
+ s/^\s+//;
+ s/^(\S+)// || return ();
+ return ($1, $_);
+}
+
+sub print_func {
+ local($f) = @_;
+ for(@FUNC_LIST) {
+ if ($f eq $_) {
+ print "<option selected>$_\n";
+ } else {
+ print "<option>$_\n";
+ }
+ }
+}
+
+sub init_func {
+ @FUNC_LIST = ();
+ %FUNC_EXIST = ();
+ while(<DATA>) {
+ chop;
+ push(@FUNC_LIST, $_);
+ $FUNC_EXIST{$_} = 1;
+ }
+}
+
+__END__
+- - - - - - -
+ABORT
+ADD_BOOKMARK
+BACK
+BEGIN
+BOOKMARK
+CENTER_H
+CENTER_V
+COOKIE
+DELETE_PREVBUF
+DICT_WORD
+DICT_WORD_AT
+DOWN
+DOWNLOAD
+EDIT
+EDIT_SCREEN
+END
+ESCBMAP
+ESCMAP
+EXEC_SHELL
+EXIT
+EXTERN
+EXTERN_LINK
+FRAME
+GOTO
+GOTO_LINE
+GOTO_LINK
+HELP
+HISTORY
+INFO
+INIT_MAILCAP
+INTERRUPT
+LEFT
+LINE_BEGIN
+LINE_END
+LINE_INFO
+LINK_BEGIN
+LINK_END
+LOAD
+MAIN_MENU
+MARK
+MARK_MID
+MARK_URL
+MENU
+MOUSE
+MOUSE_TOGGLE
+MOVE_DOWN
+MOVE_LEFT
+MOVE_RIGHT
+MOVE_UP
+NEXT_LINK
+NEXT_MARK
+NEXT_PAGE
+NEXT_WORD
+NOTHING
+NULL
+OPTIONS
+PCMAP
+PEEK
+PEEK_LINK
+PIPE_SHELL
+PREV_LINK
+PREV_MARK
+PREV_PAGE
+PREV_WORD
+PRINT
+QUIT
+READ_SHELL
+REDRAW
+REG_MARK
+RELOAD
+RIGHT
+SAVE
+SAVE_IMAGE
+SAVE_LINK
+SAVE_SCREEN
+SEARCH
+SEARCH_BACK
+SEARCH_FORE
+SEARCH_NEXT
+SEARCH_PREV
+SELECT
+SHELL
+SHIFT_LEFT
+SHIFT_RIGHT
+SOURCE
+SUSPEND
+UP
+VIEW
+VIEW_BOOKMARK
+VIEW_IMAGE
+WHEREIS
+WRAP_TOGGLE
diff --git a/w3m-doc/sample/s.wd b/w3m-doc/sample/s.wd
new file mode 100644
index 0000000..02ae4ce
--- /dev/null
+++ b/w3m-doc/sample/s.wd
@@ -0,0 +1,8 @@
+@include html.wd
+@include define.wd
+
+これはサンプルです。
+<P>
+\@hsaka.url\@ = @hsaka.url@
+<BR>
+\@LINK(hsaka)\@ = @LINK(hsaka)@
diff --git a/w3m-doc/sample/sample.html b/w3m-doc/sample/sample.html
new file mode 100644
index 0000000..b58b0c7
--- /dev/null
+++ b/w3m-doc/sample/sample.html
@@ -0,0 +1,6 @@
+
+これはサンプルです。
+<P>
+@hsaka.url@ = http://www2u.biglobe.ne.jp/~hsaka/
+<BR>
+@LINK(hsaka)@ = <A HREF="http://www2u.biglobe.ne.jp/~hsaka/">坂本浩則のホームページ</A>
diff --git a/w3m-doc/sample/sample.wd b/w3m-doc/sample/sample.wd
new file mode 100644
index 0000000..0edfd0c
--- /dev/null
+++ b/w3m-doc/sample/sample.wd
@@ -0,0 +1,11 @@
+@include html.wd
+@define
+hsaka.url http://www2u.biglobe.ne.jp/~hsaka/
+hsaka.title 坂本浩則のホームページ
+@end
+
+これはサンプルです。
+<P>
+\@hsaka.url\@ = @hsaka.url@
+<BR>
+\@LINK(hsaka)\@ = @LINK(hsaka)@
diff --git a/w3m-doc/sample/w3mdoc.pl b/w3m-doc/sample/w3mdoc.pl
new file mode 100755
index 0000000..6097926
--- /dev/null
+++ b/w3m-doc/sample/w3mdoc.pl
@@ -0,0 +1,102 @@
+#!/usr/local/bin/perl
+
+package w3mdoc;
+
+sub CHECK {
+ my($a, @b) = @_;
+ for(@b) {
+ defined($a->{$_}) || die("\"$a->{id}.$_\" is not defined.\n");
+ }
+}
+
+sub DEF {
+ my($a, $b, $c) = @_;
+
+ if (! defined($data->{$a})) {
+ $data->{$a} = bless { id => $a };
+ }
+ $data->{$a}{$b} = $c;
+}
+
+sub SUB {
+ local($_) = @_;
+ my($a, $b);
+
+ if (/^\@(\w+)\.(\w+)\@$/) {
+ ($a, $b) = ($1, $2);
+ defined($data->{$a}) || die("\"$a.$b\" is not defined.\n");
+ $data->{$a}->CHECK($b);
+ return $data->{$a}{$b};
+ }
+ if (/^\@(\w+)\((\w+)\)\@$/) {
+ ($a, $b) = ($1, $2);
+ defined(&{$a}) || die("\"$a()\" is not defined.\n");
+ defined($data->{$b}) || die("\"$a($b)\" is not defined.\n");
+ return $data->{$b}->$a();
+ }
+ return '@';
+}
+
+package main;
+
+@ARGV || unshift(@ARGV, "-");
+while(@ARGV) {
+ $file = shift @ARGV;
+ &make_doc($file);
+}
+
+sub make_doc {
+ my($file) = @_;
+ my($in_def, $in_code, $code, $a, $b);
+ local(*F);
+ local($_);
+
+ open(F, $file) || die("$file: $!\n");
+ $in_def = 0;
+ $in_code = 0;
+ while(<F>) {
+ if ($in_def) {
+ if (/^\@end/) {
+ $in_def = 0;
+ next;
+ }
+ s/^\s+//;
+ s/^(\w+)\.(\w+)// || next;
+ ($a, $b) = ($1, $2);
+ s/^\s+//;
+ s/\s+$//;
+ &w3mdoc::DEF($a, $b, $_);
+ next;
+ }
+ if ($in_code) {
+ if (/^\@end/) {
+ eval "package w3mdoc; $code";
+ $in_code = 0;
+ next;
+ }
+ $code .= $_;
+ next;
+ }
+ if (/^\@define/) {
+ $in_def = 1;
+ next;
+ }
+ if (/^\@code/) {
+ $in_code = 1;
+ $code = "";
+ next;
+ }
+ if (s/^\@include\s+//) {
+ s/\s+$//;
+ &make_doc($_);
+ next;
+ }
+ if (/^\@/) {
+ die("unknown command: $_");
+ }
+ s/(\\@|\@(\w+(\.\w+|\(\w+\)))\@)/&w3mdoc::SUB($1)/eg;
+ print;
+ }
+ close(F);
+}
+