TinkerBell/0.31

2001.09.05

TinkerBell/0.3 は、HTMLページをブラウザがロードすることで自動実行される「通常」の(スタティックな)リモートSSTPのほか、クリックなどのイベントによってインタラクティブに駆動されるダイナミックSSTPをサポートします。また、ランダム性をサポートする予定です。ネット上に「ミニゴースト」を構築して、リモートのシェルに憑依することができます。

TinkerBell/0.3 では、埋め込み先のHTMLページ、埋め込むコード、外部ライブラリのすべてをSJISで記述しなければなりませんが、デフォルトではUTF-8でURLエンコーディングを行い、UTF-8でSSTPを行います。しかし、charset="Shift_JIS" と明示する場合は、SJISでSSTPを行います。この場合、実際には、Netscape4, Netscape6, Mozilla では、SJISでURLエンコーディングを行い、MSIE では、SJISのダブルバイト文字をそのままURLの一部としてブラウザに処理させます。

MagicQuote

TinkerBell/0.31 は、MagicQuote をサポートします。「¥¥n、¥¥s[数字]、¥¥w数字一桁」の3パターンに関しては、¥¥を単に¥とタイプしても自動的に補完する機能です。¥¥と二重打ちしても同じ意味になります。そのほかのさくらスクリプトのタグで¥で始まるものは、JavaScript内では¥¥とエスケープする必要があります。(%〜は、そのままでOK)

MagicQuote はデフォルトでは有効ですが、magic_quote = false によって無効化することもできます。

バッファリングを利用したスタティックなティンカーベル

<script type="text/javascript"><!--

Self("¥s[7]こんにちは!");
Kero("¥s[10]何、怒ってるの?¥w8¥w8‥‥ねえ?");
Self("¥n¥n¥s[0]なんでもない!");

TinkerMagic();//--></script>

このように、Self() と Kero() を任意の順序で任意回呼び出すことで、スクリプトはバッファに蓄積されます。関数の戻り値は、その時点でのバッファの内容です。TinkerMagic() を呼び出すと、バッファはCGI側にフラッシュされて、SSTPが起動されます。

Self() と Kero() は、スコープを設定する以外、与えられた引数を手つかずのまま、さくらスクリプトとして解釈します。

最も簡単なティンカーベル

これは、TinkerBell/0.2 の書式ですが、0.3での拡張として、MagicQuoteを利用することもできます。

Wendy="ねえ、%keroname";
Peter="なんや、%selfname?";
Wendy2="¥s[4]困ったの‥‥¥w8¥w8とっても!";
Peter2="どないしたんねん。";

TinkerBell/0.3 では、変数は、Wendy4, Peter4 まで用意されています。変数が空でないとき、行末には、自動的に、tink_new_line(デフォルトでは「¥¥w4¥¥n¥¥n」) が付加されます。したがって、最もシンプルなかけあいであれば、自分で改行を指示しなくてもスクリプト的に補完されますが、そのかわり、変数が変わると(例、Wendy と Wendy2 )必ず改行されてしまいます。tink_new_line = "" などとして行末自動付加コードを変更することも可能ですが、その場合は、上の、Self(), Kero() を使ったほうが効率が良いです。

Wendy(つまり、self の最初のセリフ)がサーフィス指定を含まない場合、自動で行頭に、s[0] 指定を付加します(これは一行めのみの機能で、Wendy2 以下には適用されません)。

sstp() によるダイナミックSSTP

sstp() は、呼び出された時点で、その引数をCGIに渡すので、イベント駆動型の関数としてべんりです。

DynamicSSTP を利用するには、そのページ内に、name=tink_img という画像を含めなければなりません。TinkerBell は、この画像を動的に置き換える操作によって、CGIを起動します。

sstp() の引数は、SakuraScriptに対応する文字列で、MagicQuote されない¥hと¥uについては¥をエスケープしなければなりません。MagicQuote されるタグについては、エスケープしてもしなくてもかまいません。

<a href="#"
onClick="sstp('¥¥h¥¥s[0]こんにちは、ティンク!¥¥uそればっかりや');return false;">
ここをクリックすると実行</a>

ここをクリックすると実行

実行結果:

バッファリングを利用したダイナミックSSTP

ためす

<a href="#"
onClick="h('¥s[7]ぷんぷん。¥n¥n許せない!');u('へらへら');h('¥n¥n‥‥¥w8へらへらするなっ!');u('¥n¥nえんいー。');e();return false;">ためす</a>

見ての通りです。h() と u() は内部的にバッファにつけくわえるだけで、それだけでは何もしません。e() を呼んだ時点で、バッファの内容がSSTPされます。

実際の使い方

TinkerBell/0.31 は、TinkerBell/0.3 の最初の公開バージョンで、試験的なものです。ページのheadで
<script type="text/javascript"
src="http://www.faireal.net/TinkerBell/0.31">
</script>
と記述することにより(※)、インターネット上から、これらのライブラリ関数を利用できます。詳細については、JavaScriptのソースPerlのソースを見てください。自由に利用、改変できます。ご自分のサーバにアップロードして用いてもかまいませんが、ちょちょっとテストするだけのつもりなので、CGIが返す画像については書庫などにしていません。

※ 一部のおろかなブラウザは、TinkerBell/0.31 というファイル名を認識できずエラーを起こします。これを回避するには、ファイル名を TinkerBell/tb031.js としてください。前者は後者へのシンボリックリンクにすぎません。


faireal.net <webmaster@faireal.net>