diff options
| author | Tatsuya Kinoshita <tats@vega.ocn.ne.jp> | 2011-05-04 07:18:09 +0000 | 
|---|---|---|
| committer | Tatsuya Kinoshita <tats@vega.ocn.ne.jp> | 2011-05-04 07:18:09 +0000 | 
| commit | 5f8e0f8ef9a422691dd72e8a953a42a41478fcb4 (patch) | |
| tree | 4b2df4796a534793648b3c4fc532fc36bd0cd525 /w3m-doc/sample | |
| parent | Releasing debian version 0.3-2.4 (diff) | |
| download | w3m-5f8e0f8ef9a422691dd72e8a953a42a41478fcb4.tar.gz w3m-5f8e0f8ef9a422691dd72e8a953a42a41478fcb4.zip | |
Releasing debian version 0.5.1-1debian/0.5.1-1
Diffstat (limited to 'w3m-doc/sample')
| -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); +} + | 
