Namazu-devel-ja(旧)


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

(proposal) uncompressing documents before indexing (namazu-bugs-ja#113)



Full_Name: zunda
Version: namazu-2.0.10
OS: Kondara 2.1RC2
Submission from: (NULL) (130.183.134.190)


はじめまして、ずんだあんと申します。諸事情により、ハンドルネームでの投
稿をご了承いただければ、うれしく思います。

さて、最近、ローカルにインストールされているman pageのインデックスを作
る必要があり、mknmzを利用させていただいているのですが、

・メディアタイプに、text/x-roffを指定しないとプレインテキストとして認識
  されてしまうman pageがある。また、フィルタが落ちてしまう場合もある。
・mknmz時にメディアタイプをtext/x-roffを指定してしまうと、gzipやbzip2さ
  れているman pageが解凍されないまま、text/x-roffとして処理されてしまい、
  これらのファイルのインデックスがうまく作れない。

という問題につきあたりました。

とりあえずの対策として、mknmz時に、まず、 MMagicで自動的にメディアタイプ
を認識させ、もし、そのメディアタイプのフィルタが、recursive に 1 を返す
ようなら、まずはそのフィルタを通してから、更に次のフィルタを通すように、
mknmzを変更してみました。この結果、 bzip2.pl、compress.pl、gzip.pl が使
える場合には、まずこれを使ってから、更に、コマンドラインで指定されたメディ
アタイプに対応したフィルタを通すようになります。

手元では期待通りに動いているようですので、以下にパッチを添付いたします。
もし、JitterBugの制限で全文が投稿されていないようでしたら、下記URLに同じ
ものを置いてありますので、お手数ですが、ご覧ください。

http://www.kondara.org/~zunda/SOURCES/namazu-2.0.10-recursive_filter.patch

*** namazu-2.0.10/scripts/mknmz.in.orig Mon Mar  4 17:01:56 2002
--- namazu-2.0.10/scripts/mknmz.in      Mon Mar  4 17:02:53 2002
***************
*** 740,771 ****
      my $mtype;
      my $called_dt = 0;
      while (1) {
!       if (defined $MediaType) {
!           $mtype = $MediaType;
        } else {
!           my $mtype_n;
!           if ($shelter_cfile ne "") {
!               $mtype_n = $Magic->checktype_byfilename($shelter_cfile);
!           } else {
!               $mtype_n = $Magic->checktype_byfilename($cfile);
!           }
!           my $mtype_c = $Magic->checktype_data($$contref);
!           my $mtype_m;
!           $mtype_m = $Magic->checktype_magic($$contref)
!             if ((! defined $mtype_c) ||
!                 $mtype_c =~
!                 /^(text\/html|text\/plain|application\/octet-stream)$/);
!           $mtype_c = $mtype_m
!               if (defined $mtype_m &&
!                   $mtype_m !~
!                   /^(text\/html|text\/plain|application\/octet-stream)$/);
!           $mtype_c = 'text/plain' unless defined $mtype_c;
!           if ($called_dt) {
!               $mtype = $mtype_c;
!           } else {
!               $mtype = decide_type($mtype_n, $mtype_c);
!               $called_dt = 1;
!           }
        }
        util::dprint(_("Detected type: ")."$mtype\n");

--- 740,775 ----
      my $mtype;
      my $called_dt = 0;
      while (1) {
!       # At first, let MMagic detect the media type
!       my $mtype_n;
!       if ($shelter_cfile ne "") {
!           $mtype_n = $Magic->checktype_byfilename($shelter_cfile);
!       } else {
!           $mtype_n = $Magic->checktype_byfilename($cfile);
!       }
!       my $mtype_c = $Magic->checktype_data($$contref);
!       my $mtype_m;
!       $mtype_m = $Magic->checktype_magic($$contref)
!         if ((! defined $mtype_c) ||
!             $mtype_c =~
!             /^(text\/html|text\/plain|application\/octet-stream)$/);
!       $mtype_c = $mtype_m
!           if (defined $mtype_m &&
!               $mtype_m !~
!               /^(text\/html|text\/plain|application\/octet-stream)$/);
!       $mtype_c = 'text/plain' unless defined $mtype_c;
!       if ($called_dt) {
!           $mtype = $mtype_c;
        } else {
!           $mtype = decide_type($mtype_n, $mtype_c);
!           $called_dt = 1;
!       }
!
!       # If it is a recursive filter, let's use the detected media type
!       # before applying command line specified media type because the
!       # document is probably compressed
!       if ((! $var::RECURSIVE_ACTIONS{$mtype}) && (defined $MediaType)) {
!           $mtype = $MediaType;
        }
        util::dprint(_("Detected type: ")."$mtype\n");