librepをバックエンドに動作するLisp栞です。
Windows等の他OSでも、librepさえ移植すればrep-shioriはそのまま移植できますが、少なくともこのページで公開しているrep-shioriは偽林檎専用です。残念な事ですが、この栞を用いて作成したゴーストは当分の間もしくは永久に、偽林檎上でしか動作しません。
rep-shiori #0 [2669hit][2003/04/02]
過去のバージョンの日付を全て表示
rep-shioriの動作に必要なファイルは、ghost/master/repinit.jl、あるいはそれをコンパイルしたrepinit.jlcのみです。
ゴースト起動時、rep-shioriはload-pathにそのゴーストのghost/masterディレクトリを追加した後、repinit.jlまたはrepinit.jlcをロード、実行します。
アンロード時には何らかのフックを呼ぶようにする予定ですが、今の所は何もしません。
本体から発行されたSHIORI/3.0リクエストを、rep-shioriはそのままキーと値に分解し、alistを生成します。そのようなalistを引数として、関数shiori-3.0-get(GETリクエストの場合)またはshiori-3.0-notify(NOTIFYリクエストの場合)を呼びます。この時、Charsetヘッダは付かずに、常にUTF-8の状態で渡されます。従って、rep-shioriから呼ばれるコードはUTF-8さえ扱えれば良い事になります。
shiori-3.0-getやshiori-3.0-notifyはrep-shioriの動作に必須です。これを定義しなかった場合、ゴーストは一切動作しません。
例:
GET SHIORI/3.0
Sender: NiseRingo
ID: OnBoot
このようなリクエストは、rep-shioriによって次のようなalistに分解されます。
(("Sender" . "NiseRingo")
("ID" . "OnBoot"))
shiori-3.0-getが、引数で渡されたものと同じ形式のalistを返せば、それがSHIORI/3.0の応答となります。alistの代わりにnilを返しても良く、その場合は"SHIORI/3.0 204 No Content"を返した事になります。
尚、shiori-3.0-notifyが何らかの値を返したとしても、rep-shioriはそれを単に捨てます。
例:
(("Sender" . "テスト")
("Value" . "\\h\\s[0]こんにちは\\e"))
このような応答は、rep-shioriによって次のようなSHIORI/3.0レスポンスに組み立てられます。
SHIORI/3.0 200 OK
Sender: テスト
Value: \h\s[0]こんにちは\e
librepのライセンスを継承し、GPLとします。
但し、rep-shioriが読み込んで実行するlispのコードはlibrepとリンクされるのではなくlibrepによってinterpretされる存在であるため、GPLライセンスを継承する必要は無いと考えます。従って、この栞を用いて作成したゴーストは、必ずしもそのlispのコードをソースの状態で配布する必要はありません。(コンパイルしたjlcファイルのみで良いという事です。)