[Mew-dist 06766] Re: pick problem
Kazumasa Utashiro
utashiro at example.com
1998年 10月 21日 (水) 23:28:04 JST
From: SAKAI Kiyotaka <ksakai at example.com>
Subject: [Mew-dist 06704] Re: pick problem
Date: Fri, 16 Oct 1998 09:41:54 +0900
> > 今、気が付きましたが $main::opt_delimiter を無視しちゃってます。imgrep
> > は、RFC822 的フォーマットを前提にして構わない様な気がするんですが、い
> > けませんかね?
>
> > $main::opt_delimiter は正規表現なので、そのまま $/ に設定できないんで
> > すよ。
>
> opt_delimiter は、+draft の中も検索対象にしたいという要望のために入れ
> たのだったと思います。
ううむ、そうでしたか。そんなのいいじゃん、と言おうかと思ったけど、実装
してみました。オプションは無視しちゃっているので、後で方針を決めて整理
する必要があります。
MIME decode の機能も入れました。何故かうまく動かないメッセージがあった
ので、EncDec.c も少し直しました。
--utashiro
-------------- next part --------------
*** /usr/local/src/im-102/IM/EncDec.pm Mon Oct 19 21:49:59 1998
--- EncDec.pm Wed Oct 21 23:14:52 1998
***************
*** 158,164 ****
my $in = shift;
return '' if ($in eq '');
if ($in =~ /"/) {
! if ($in =~ /^([^"]*)("[^"]*")(.*)$/) {
return mime_decode_string($1) . $2 . mime_decode_string($3);
} else { # unblanced "
return $in;
--- 158,164 ----
my $in = shift;
return '' if ($in eq '');
if ($in =~ /"/) {
! if ($in =~ /^([^"]*)("[^"]*")([\0-\255]*)$/) {
return mime_decode_string($1) . $2 . mime_decode_string($3);
} else { # unblanced "
return $in;
*** /usr/local/src/im-102/IM/Grep.pm Mon Oct 19 21:49:59 1998
--- Grep.pm Wed Oct 21 23:16:53 1998
***************
*** 18,23 ****
--- 18,24 ----
use IM::Util;
use IM::Folder qw(message_range);
use IM::Japanese;
+ use IM::EncDec qw(mime_decode_string);
use integer;
use strict;
use vars qw(@ISA @EXPORT);
***************
*** 50,55 ****
--- 51,59 ----
my $range_element = '(\\d+|cur|first|last|next|prev|new)';
my $range_regexp = "($range_element(-$range_element|:[+-]?\\d+)?|all)";
+ # end of header in draft message
+ my $draft_delimiter = "\n----\n";
+
sub grep_folder ($$@) {
my ($folder, $eval_string, @ranges) = @_;
my $folder_dir;
***************
*** 87,96 ****
im_debug("uniqified messages \"@src_msgs\"\n") if &debug('all');
my $m;
- GREP:
foreach $m (@src_msgs) {
! my ($all, $head, $body) = ('', '', '');
unless (open(MES, "< $m")) {
if (! $main::opt_quiet) {
--- 91,106 ----
im_debug("uniqified messages \"@src_msgs\"\n") if &debug('all');
+ # dirty quick hack to determine what part is required
+ # should be implemented better
+ my(%find) = ('head' => scalar($eval_string =~ /\$head\s*=~/),
+ 'body' => scalar($eval_string =~ /\$body\s*=~/),
+ 'all' => scalar($eval_string =~ /\$all\s*=~/));
+
my $m;
foreach $m (@src_msgs) {
! my($all, $head, $body) = ('', '', '');
! local($/);
unless (open(MES, "< $m")) {
if (! $main::opt_quiet) {
***************
*** 98,124 ****
}
next;
}
- do {
- local($/) = "";
! # dirty quick hack to determine what part is required
! # should be implemented better
! my(%find) = ('head' => scalar($eval_string =~ /\$head\s*=~/),
! 'body' => scalar($eval_string =~ /\$body\s*=~/),
! 'all' => scalar($eval_string =~ /\$all\s*=~/));
!
! $head = <MES>; # read $head anyway
! undef $/;
! if ($find{'body'}) { # read $body if necessary
! $body = <MES>;
! }
! if ($find{'all'}) { # construct $all if necessary
! $all = $head . ($body ? $body : scalar(<MES>));
! }
! };
close(MES);
! $head =~ s/\n\s+/ /g; # fix continuation lines
if (eval $eval_string) {
push(@messages, $m);
}
--- 108,140 ----
}
next;
}
! $/ = '';
! $head = <MES>; # read $head anyway
!
! # if the header contains draft-style header delimiter,
! # truncate the header and seek to the beginning of body.
! my $p = index($head, $draft_delimiter);
! if ($p >= 0) {
! seek(MES, $p + length($draft_delimiter), 0);
! substr($head, $p) = '';
! }
!
! undef $/;
! if ($find{'body'}) { # read $body if necessary
! $body = <MES>;
! }
! if ($find{'all'}) { # construct $all if necessary
! $all = $head . ($body ? $body : scalar(<MES>));
! }
!
close(MES);
! if ($find{'head'} || $find{'all'}) {
! $head =~ s/\n\s+/ /g; # fix continuation lines
! $head = mime_decode_string($head);
! }
!
if (eval $eval_string) {
push(@messages, $m);
}
***************
*** 297,305 ****
}
$field =~ s/([@\/])/\\$1/g;
$pattern =~ s/([@\/])/\\$1/g;
!
if ($field eq 'body') {
- $pattern = make_japanese_pattern($pattern);
$string = "\$$field =~ /$pattern/om$case_flag";
} elsif ($field =~ /^(all|head)$/) {
$string = "\$$field =~ /$pattern/om$case_flag";
--- 313,321 ----
}
$field =~ s/([@\/])/\\$1/g;
$pattern =~ s/([@\/])/\\$1/g;
!
! $pattern = make_japanese_pattern($pattern);
if ($field eq 'body') {
$string = "\$$field =~ /$pattern/om$case_flag";
} elsif ($field =~ /^(all|head)$/) {
$string = "\$$field =~ /$pattern/om$case_flag";
Mew-dist メーリングリストの案内