Namazu-devel-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

employing libguile



検索結果をカスタマイズする方法について考えていると、こんな連
想が浮かびました。

  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