namazu-dev(ring)


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

Re: divide filtering process.



  野首です。ちょっと間が空いてしまいましたが...

<199907131711.CAA17118@xxxxxxxxxxxxxx>の記事において
masao@xxxxxxxxxxさんは書きました。

>> text/plain; x-type=rfcと認識したメール2通の内、
>> 一通はRFC全文が転載されているメール。
>> もう一通は文中に、
>> Category: international
>> という一行がある文章でした。
>> ## と書くと、このメールもRFCと認識されてしまうのだろうか? :-)

  これは自分の意図とは違う動作です ^^; ざっとソースを見返して、原因が
わかりましたので修正しました。

  自分としては、%SPECIALSに指定された正規表現を検索したときに、もっと
も前の位置でマッチしたものをそのファイルの形式とみなすつもりで以下のコー
ドを書きました。

	my ($token, %val);
	foreach my $type (keys %SPECIALS) {
	    my $token = '(' . 
	      (join '|', sort {length($a) <=> length($b)} @{$SPECIALS{$type}})
		. ')';
	    if ($data =~ /$token/mg) {
		$val{$type} = pos($data);
	    }
	}

  しかし、$data =~ /$token/mg は一度マッチすると2度目は以前にマッチし
た位置から$tokenのマッチを行おうとするので、意図した動作にならないので
した。そこで、

	my ($token, %val);
	foreach my $type (keys %SPECIALS) {
	    my $token = '(' . 
	      (join '|', sort {length($a) <=> length($b)} @{$SPECIALS{$type}})
		. ')';
	    my $tdata = $data;
	    if ($tdata =~ /$token/mg) {
		$val{$type} = pos($tdata);
	    }
	}

  として希望する動作を得られるようになりました。高久さんのレポートおか
げです。どうもありがとうございました。

  これとは別件ですが、knok-filter-1ブランチでのファイルサイズの表示が
おかしかったので、修正してcommitしました。
-- 
野首 貴嗣
E-mail: knok@xxxxxxxxxxxxx (private)
        nokubi@xxxxxxxxx (official)