Namazu-devel-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
employing libguile
- From: Satoru Takabayashi <satoru-t@xxxxxxxxxxxxxxxxxx>
- Date: Thu, 24 Aug 2000 17:29:10 +0900
- X-ml-name: namazu-devel-ja
- X-mail-count: 00725
検索結果をカスタマイズする方法について考えていると、こんな連
想が浮かびました。
customizable? -> programmable? -> embedded language? -> Guile!
namazu.cgi に libguile
<http://www.fsf.org/software/guile/guile.html> を埋め込んで
検索結果を Scheme で自由自在にカスタマイズしようというアイディ
アです。
こんな感じ:
<html>
...
{{
;; 2重のbraceで囲まれた部分に Scheme のコードを埋め込みます
}}
...
現在、
{{ (nmz-cgi-index-value 'files) }}
の文書がインデックス化され、
{{ (nmz-cgi-index-value 'keywords) }}
個のキーワードが登録されています。
</p>
<p>
<strong>インデックスの最終更新日:
{{ (nmz-cgi-index-value 'last-updated) }}
...
<form method="get" action="{{ (nmz-cgi-action-uri)) }}">
<p>
現在は *.c に埋め込まれたメッセージがありますが、これはすべ
て外に出して、 NMZ.* ファイルで変更可能にすべきでしょうね。
設定ファイルも Scheme で書きます。こんな感じ:
(nmz-set-index! "~/Namazu")
(nmz-add-replace! "/home/foo/www/" "http://localhost:/~foo/")
(nmz-add-alias! "namazu" "/home/foo/Namazu/namazu")
(nmz-set-lang! "ja")
S式に恐怖を感じる人がいるかもしれませんが、この程度の記述な
ら大丈夫でしょう。もちろん、 Scheme を知っている人なら、
(cond ((string-match "3.0" (nmz-version))
...)
((string-match "4.0" (nmz-version))
...)
(else
...))
のように条件分岐したり、好きなようにプログラムできます。
うーむ、どうせなら、中心の部分だけを Cで書いて、残りの雑多な
部分は Scheme で書く、という方針が正しい気がしてきたぞ。ちょ
うど sawfish <http://sawmill.sourceforge.net/> の機能の大半
が Lisp で書かれているように。よく考えてみよう。
-- Satoru Takabayashi