namazu-dev(ring)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: File::MMagic
- From: knok@xxxxxxxxxxxxx (NOKUBI Takatsugu)
- Date: Tue, 15 Jun 99 16:49:16 JST
<199906150603.PAA18203@xxxxxxxxxxxxxx>の記事において
satoru-t@xxxxxxxxxxxxxxxxxxさんは書きました。
>> > うう、ということはautomake/autoconfの使い方を覚えなければならないん
>> >ですね... できるだけそこは避けてきたのですが、ついに腹をくくらねばなら
>> >ない時期が来たようです ^^;
>>
>> そのくらい野首さんなら朝飯前でしょう。 :)
いやあ、やっぱり簡単とは言いがたいですよ ^^; とりあえずちょこちょこ
とマニュアルやWWWを見てます。
>> > せっかくなので、shared libraryを作成する部分もちゃんとconfigureから
>> >生成できるようにしたいと思います。現状ではGNU binutils以外を考慮してい
>> >ませんので。
>>
>> よく知りませんが、 NDTPD では GNU の libtool なるツールを使っ
>> ていますね。
む、そうなんですか。一度見てみます。
>> "text/rfc822" => [ "Received:",
>> ">From",
>> "Return-Path:",
>> "Cc:", ],
>> "text/news" => [ "Newsgroups:",
>> "Path:",
>> "Organization:" ],
>>
>> なるコードが見つかりましたが、この 2つは区別しないで
>> text/rfc822 にまとめてしまえばいいんじゃないでしょうか?
うーん、IANAに登録されているmedia typeはrfc822とnewsに分けてあるので、
できれば種別としては分けておきたいです。File::MMagic自体はNamazu専用と
いうわけではなく、一般的なmedia typeを返すようにしたいので...
# そんなわけで、これをCPANに登録してみました。
>> あと、text/x-mhonarc, text/x-man, text/x-rfc,
>> application/x-bzip といったあたりの識別も行ってもらえると助
>> かります。 (x- は不要?)
MHonArcとbzip2はmagicファイルを書くだけで済みました。以下のような感
じです。
0 string <!--\ MHonArc text/html; x-type=mhonarc
0 string BZh application/x-bzip2
前述の理由でMHonArcに独自のtypeを定義するのははばかられたので、
text/htmlのパラメータにxtype=mhonarcと指定する形にしてみました。
manについては、手元のソースではtext/x-roffというtypeを返すように実装
してあります。
問題はRFCなのですが... どういう方法で調べれば良いでしょうか? なにか
良い案があれば教えてください。
>> %HELPER_ACTIONS と %REQUIRE_ACTIONS 2つにわかれているとやや
>> こしいので、%REQUIRE_ACTIONS 1つだけでよい気がします。
それもそうですね。処理を行う関数名を固定にして、モジュール名だけ
%REQUIRE_ACTIONSで指定すればよさそうです。
>> >・@RECURSIVE_ACTIONSにて、再帰的に処理を行うMedia Typeを指定
>> > (圧縮データなど)
>>
>> 確かにこういった仕掛けは必要ですね。(ハッシュの方がよいので
>> は?)
あ、効率を考えたら確かにhashの方が良いかも知れません。
>> # .tar.gz を扱えると嬉しいかな? 検索結果は
>> # /somewhere/foo.tar.gz#filename みたいな感じで出力する仕様
>> # にして。これができるなら HTML の <a name="foo"> にも対応で
>> # きると思う。 (実装はちと難しそうですが)
これは私もちょっと考えました ^^; ただ、これはフィルタ処理の範疇では
なく、ファイル以外のデータを検索対象にする仕組みが必要だと思います。
こちらについてはまだあまり考えがまとまっていないのですが、とりあえず
・データの指示方法
(URI的な指示方法が良い?)
・データの取得方法
(指示されたデータの種類に適合したmodule/functionを呼ぶ?)
といった仕組みを考えればよさそうです。したがって、
>> for my $file (@target_files) {
>> my $mm = new File::MMagic;
>> my $type = $mm->checktype_filename($file);
>> my $content = read_document($file, $type);
>> :
>> }
File::MMagic::checktype_filenameはちょっと使えないかもしれません。手
元のバージョンではchecktype_contentsという関数も実装したので、そちらが
使えるでしょう。
for my $uri (@target_uris) {
my $mm = new File::MMagic;
my $content = get_document($uri); # ファイルで無いデータも取得
my $type = $mm->checktype_filename($content);
$content = process_document($content, $type); # 処理
:
}
という感じになると思います。
--
野首 貴嗣
E-mail: knok@xxxxxxxxxxxxx (private)
nokubi@xxxxxxxxx (official)