Namazu-devel-ja(旧)


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

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



Namazu projectの皆さま、野首さま、

man pageのメディアタイプの認識について、早速の回答をいただきありがとう
ございました。残念ながら、File-MMagicの差分を確認できませんでした。当方
のMUA(無料のメールアドレスにて大変失礼しております) の問題かもしれませ
ん。

さて、先日お伝えした、pltotrf.1.bz2 のインデックスの作成時にmknmzが異常
終了してしまう問題についてです。実は、pltotf.1.bz2 はログに残っていた、
インデックスを作成した最後のファイルで、実際にエラーを出していたのは、
この次にインデックスされる、pmake.1.bz2 でした。まずは、訂正とお詫びを
いたします。大変もうしわけありませんでした。

さて、このファイルは、普通に man pmake しても横5桁程度にしか整形されず、
man pageとしておかしなものです。このファイルについて、mknmz --debug して
みますと、bzip2.plの後に、
@@ Processing man file ... (using '/usr/bin/groff -man -Tascii')
というメッセージが出ましたので、これに倣い、mknmz、man.pl、util.pl から
以下のようなスクリプト test.pl を作り、実行してみました。

% (echo '.l1 100i'; bunzip2 -c /usr/share/man/man1/pmake.1.bz2) | ./test.pl

この結果、mknmz時に出るのと同じく、 
<standard input>:15: warning: `DT,' not defined (probable missing space after `DT')
<standard input>:563: warning: can't break line
<standard input>:563: warning: can't break line
<standard input>:563: warning: can't break line
  …中略…
<standard input>:823: warning: can't break line
<standard input>:823: warning: can't break line
<standard input>:824: fatal error: input stack limit exceeded (probable infinite
 loop)
というエラーメッセージの後、スクリプトが止まります。なお、例えば、

% (echo '.l1 100i'; bunzip2 -c /usr/share/man/man1/pltotf.1.bz2) | ./test.pl

を実行した際には、test.pl の最後の DONE!! が表示され、この行まで処理が
進んでいることがわかりました。

perlのバージョンは、v5.6.0、glibcは、2.2.4 です。他に必要な情報がありま 
したらお知らせください。野首さまには、別便にて、pmake.1.bz2 をお送りいた
します。

当方のうっかりミスで、余計なお手数をおかけしました。どうもすみませんでした。

ずんだあん

--- test.pl ---
#!/usr/bin/perl5 -w
use IO::File;

sub efopen ($) {
    my ($fname) = @_;
    my $fh = fopen($fname) || cdie("$fname: $!\n");
    return $fh;
}

sub fopen ($) {
    my ($fname) = @_;
    my $fh = new IO::File;
    if ($fh->open($fname)) {
        binmode($fh);
    } else {
        $fh = undef;
    }
    return $fh;
}

$$cont = "";
while (<>) {$$cont .= $_;}

$roffpath = "/usr/bin/groff";
$roffargs = "-man -Tascii";
$tmpfile = "/tmp/namazucheck/tmpfile";

my $fh = efopen("|$roffpath -man $roffargs > $tmpfile");
print $fh ".ll 100i\n";
print $fh $$cont;
print "DONE!!\n";