namazu-dev(ring)


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

Re: File::MMagic



<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)