namazu-dev(ring)


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

Re: divide filtering process.



knok@xxxxxxxxxxxxx (NOKUBI Takatsugu) wrote:

>> # filter分離版は現在gzip, man, rfcmまでが実装できています。
>
>  とりあえず、一通りの作業は完了したのでcommitしました。

さきほど co して確認してみました。まだよく見ていませんが、フィ
ルタ処理が load_document に統合されているあたり、私の期待通
りの実装で嬉しいです。:)

ところで、 gzip.pl.inの

    if ($stat == Z_OK() or $stat == Z_STREAM_END()) {
	$$contref = $inf;
    } else {
	die 'Bad compressed data.';
    }

で die するのはよくないと思います。 warn するだけでよいでしょ
う。その際、 $$contref を "" にして。

それから、

    $$contref = join('', <$fh>);

のようなコードは遅いので、 readfile という効率のよいサブルー
チン (試作品をメイル末尾に添付) を util.pl に用意して

    $$contref = util::readfile($fh);

のように書くとよい気がします。…と思って、 util.pl を見てみ
たら、read_file といういまいちなサブルーチンがすでにありまし
た。これはそのうちボツにします。

# util.pl で定義するような、高頻度で使われるサブルーチンには
# 短い名前をつけた方がよい気がしてきました。 The Practice of
# Programming では 1ペイジ目から名前付け規則についての解説が
# 始まっています。要点をまとめると、 "Use descriptive names
# for globals, short names for locals."  "Be conistent.",
# "Use active names for functions." (active verbs), "Be
# accurate" になります。ちなみに、"Programmers are often
# encouraged to use long variable names regardless of
# context. That is a mistake: clarity is often achieved
# through brevity." だそうです。ためになるなあ。:-)

>  実は、filter.plに残っている古いコードの残骸を除去するという作業がま
>だ残っていますが、これはぼちぼちとやって行きます。
>
>  次は、できるだけたくさんのファイルをindexさせて、問題がないかの検証
>をしてゆきます。

よろしくお願いします。 Word文書や PDF用のフィルタも用意して
くださいませ。:-)

# フィルタ担当は野首さんということで :-)

-- Satoru Takabayashi

readfile サブルーチンはこんな感じかな?
(コード変換の処理をオプションで指定できた方がよさそう)

#
# readfile:
#
# Reads a specified file and returns its content.
# Takes one argument which can be a file name or IO::File object.
#
my $MAX_SIZE = 100000;
sub readfile ($) {
    my ($arg) = @_;

    my $fh;
    if (ref $arg) {
	if ($arg =~ /^IO::File/) {
	    $fh = $arg;
	} else {
	    warn "$arg: not an IO::File object!\n";
	    return "";
	}
    } else {
	$fh = fopen_or_die($arg);
    }

    my $cont = "";
    my $size = -s $fh;
    if ($size > $MAX_SIZE) {
	warn "$arg: too large!\n";
	return "";
    }
    read $fh, $cont, $size;

    return $cont;
}