Namazu文書フィルタの作成方法
〜 Namazu 2.0 用 〜

2001/9/21  Kenji Suzuki 
2001/7/7   Kenji Suzuki 
version 0.0.3

-----------------------------------------------
作成中です。add_magic() などはよく見ていません。
誤り、不足、わかりにくい点などありましたら、
お知らせ下さい。
-----------------------------------------------


■文書フィルタとは何か?
インデックス対象のファイルから必要な情報(テキスト)を抽出するための
モジュール(Perl で記述)です。
ファイルの種類別に、文書フィルタを用意することで、様々なタイプの
ファイルを Namazu の検索対象とすることが可能になっています。
「重み付け」や「要約」も文書フィルタで行うことができます。


■文書フィルタのインストール先
{prefix}/share/namazu/filter/ にインストールされます。標準では、
/usr/local/share/namazu/filter/ です。 
新規に作成した文書フィルタは、そこにインストールすれば、自動的に
利用可能になります。


■文書フィルタのインターフェイス
文書フィルタでは、以下のサブルーチンを必ず定義します。

mediatype()
status()
recursive()
pre_codeconv()
post_codeconv()
add_magic($)
filter($$$$$)


●mediatype()
処理するファイルのメディア・タイプを返します。

text/x-hdml
application/postscript
application/x-compress
など。

フィルタが複数のメディア・タイプで定義される種類のデータに対応できる
場合は複数のメディアタイプを配列で返します(eg. mailnews.pl)。
また、メディア・タイプは IANA に登録されているものを利用することが
推奨されます。


●status()
通常 yes を返します。文書フィルタが外部コマンドを利用していて
そのコマンドがシステム上にない場合など、正しく処理できない場合は、
no を返します。


●recursive()
gzip で圧縮された HTMLファイルの場合、最初は、application/x-gzip
として処理し、その後は、text/html として処理する必要があります。
このようにフィルタの適用を再帰的に行いたい場合は 1 を、
それ以外は 0 を返します。


●pre_codeconv()
filter() を呼ぶ前に、文書の漢字コード変換をしたい場合は 1。
それ以外の場合は 0 を返します。Namazu は内部的に EUC を
使っていますので、漢字コードは EUC に変換されます。


●post_codeconv()
filter() を呼んだ後で、文書の漢字コード変換をしたい場合は 1。
それ以外の場合は 0 を返します。Namazu は内部的に EUC を
使っていますので、漢字コードは EUC に変換されます。


●add_magic()
File::MMagic でファイルの種類が認識できない場合に、
File::MMagic のメソッドを使って、ファイル内容認識のための
情報を追加します。

$magic->addSpecials

  例:
  $magic->addSpecials('text/x-hdml', '<[Hh][Dd][Mm][Ll][^>]*>');
  $magic->addSpecials("text/plain; x-type=rfc",
                        "^Network Working Group",
                        "^Request [fF]or Comments",
                        "^Obsoletes:",
                        "^Category:",
                        "^Updates:");

$magic->addFileExts
  拡張子を指定します。magic entry がうまく書けない Microsoft Office 
  suites document 向けにしかたなく用意している?

  例:
  $magic->addFileExts('^rfc\d+\.txt$', 'text/plain; x-type=rfc');
  $magic->addFileExts('\\.tex$', 'application/x-tex');

$magic->addMagicEntry
  magic entry を指定します。

  例:
  $magic->addMagicEntry('0    string          \