diff options
author | Akinori Ito <aito@eie.yz.yamagata-u.ac.jp> | 2001-11-08 05:14:08 +0000 |
---|---|---|
committer | Akinori Ito <aito@eie.yz.yamagata-u.ac.jp> | 2001-11-08 05:14:08 +0000 |
commit | 68a07bf03b7624c9924065cce9ffa45497225834 (patch) | |
tree | c2adb06a909a8594445e4a3f8587c4bad46e3ecd /w3m-doc/sample | |
download | w3m-68a07bf03b7624c9924065cce9ffa45497225834.tar.gz w3m-68a07bf03b7624c9924065cce9ffa45497225834.zip |
Initial revision
Diffstat (limited to '')
-rw-r--r-- | w3m-doc/sample/README | 41 | ||||
-rw-r--r-- | w3m-doc/sample/define.wd | 4 | ||||
-rw-r--r-- | w3m-doc/sample/html.wd | 18 | ||||
-rwxr-xr-x | w3m-doc/sample/keymap.cgi | 268 | ||||
-rw-r--r-- | w3m-doc/sample/s.wd | 8 | ||||
-rw-r--r-- | w3m-doc/sample/sample.html | 6 | ||||
-rw-r--r-- | w3m-doc/sample/sample.wd | 11 | ||||
-rwxr-xr-x | w3m-doc/sample/w3mdoc.pl | 102 |
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> Key<td> Command<td> 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\"> $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/\&/\&/g; + s/\</\</g; + s/\>/\>/g; + s/\"/\"/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); +} + |