[Mew-dist 1577] Re: Mew 1.89 & IM 62
Motonori Nakamura
motonori at example.com
1997年 8月 21日 (木) 16:01:36 JST
>>>>> On Thu, 21 Aug 1997 13:13:13 +0900, Hiroaki Matsui <matu at example.com> said:
matu> Iso2022jp.pm で定義されている header_iso2022jp_conv の
:
matu> 個所で、$field_name と $field_value がどちらも空になる
matu> ことがあるようです。
それもありましたし、この他にも問題がありました。
im-62 に以下のパッチを当てください。
# //g の意味がなくなっていたので、結局 $&, $' に戻しました。
# 小さなプログラムで確かめてみると、(.*) でマッチさせて
# $n で拾うより、$' つかった方が速かったけど…
- motonori
diff -ur ../im-62/IM.in/Iso2022jp.pm.in ./IM.in/Iso2022jp.pm.in
--- ../im-62/IM.in/Iso2022jp.pm.in Wed Aug 20 14:34:11 1997
+++ ./IM.in/Iso2022jp.pm.in Thu Aug 21 15:30:44 1997
@@ -64,9 +64,9 @@
my ($line_out, $line_work) = ('', '');
im_debug("encoding structured: $line_in\n") if (&debug('encode'));
while ($line_in ne '') {
- if ($line_in =~ /^($Jis_kanji[^\e]+$Jis_roman)(.*)/os){
+ if ($line_in =~ /^($Jis_kanji[^\e]+$Jis_roman([ \t]*$Jis_kanji[^\e]+$Jis_roman)*)(.*)/os){
$c = $1;
- $line_in = $2;
+ $line_in = $3;
$need_encode = 1;
} elsif ($line_in =~ /^($Jis_roman)(.*)/os) { # XXXX
$c = $1;
@@ -251,7 +251,7 @@
$this_space = '';
$line_out = '';
im_debug("encoding unstructured: $line_in\n") if (&debug('encode'));
- while ("$line_in" ne '') {
+ while ($line_in ne '') {
if ($line_in =~ /^\n([ \t]*)(.*)/s) { # fold headdings
$line_in = $2;
if ($this_space ne '') {
@@ -277,10 +277,10 @@
if ($line_in =~ /^($C_pascii)(.*)/os) {
$line_in = $2;
$this_word .= $1;
- } elsif ($line_in =~ /^($Jis_kanji[^\e]+$Jis_roman)(.*)/os){
+ } elsif ($line_in =~ /^($Jis_kanji[^\e]+$Jis_roman([ \t]*$Jis_kanji[^\e]+$Jis_roman)*)(.*)/os) {
last
if ($this_code ne 'us-ascii' && $this_code ne 'iso-2022-jp');
- $line_in = $2;
+ $line_in = $3;
$this_word .= $1;
$this_code = 'iso-2022-jp';
} elsif ($line_in =~ /^($Jis_roman)(.*)/os){ # XXX
@@ -296,8 +296,7 @@
} else {
# anything else (XXX should be Q-encoded?)
last if ($this_code ne 'us-ascii' && $this_code ne 'unknown');
- my $tmp;
- ($tmp, $line_in) = unpack('a a*', $line_in);
+ (my $tmp, $line_in) = unpack('a a*', $line_in);
$this_word .= $tmp;
$this_code = 'unknown';
}
@@ -462,20 +461,21 @@
$c = 'jis';
}
if ($c eq 'jis') {
- $$header[$i] =~ /^([\w-]+:\s*)(.*)$/;
- $field_name = $1;
- $field_value = $2;
- if ($field_name =~ /^Apparently-To:/i
- || $field_name =~ /^(Resent-)?(To|Cc|Bcc|Dcc|From|Sender|Reply-To):/i
- || $field_name =~ /^Originator:/i
- || $field_name =~ /^Errors-To:/i
- || $field_name =~ /^Return-Receipt-To:/i) {
- # structured field
- my $l = &struct_iso2022jp_mimefy($field_value);
- return -1 if ($l eq '');
- $$header[$i] = "$field_name$l";
- } else {
- $$header[$i] = $field_name.&line_iso2022jp_mimefy($field_value);
+ if ($$header[$i] =~ /^([\w-]+:\s*)(.*)/s) {
+ $field_name = $1;
+ $field_value = $2;
+ if ($field_name =~ /^Apparently-To:/i
+ || $field_name =~ /^(Resent-)?(To|Cc|Bcc|Dcc|From|Sender|Reply-To):/i
+ || $field_name =~ /^Originator:/i
+ || $field_name =~ /^Errors-To:/i
+ || $field_name =~ /^Return-Receipt-To:/i) {
+ # structured field
+ my $l = &struct_iso2022jp_mimefy($field_value);
+ return -1 if ($l eq '');
+ $$header[$i] = "$field_name$l";
+ } else {
+ $$header[$i] = $field_name.&line_iso2022jp_mimefy($field_value);
+ }
}
}
im_debug("Iso2022jp: converted: $$header[$i]\n")
diff -ur ../im-62/IM.in/Japanese.pm.in ./IM.in/Japanese.pm.in
--- ../im-62/IM.in/Japanese.pm.in Wed Aug 20 14:34:11 1997
+++ ./IM.in/Japanese.pm.in Thu Aug 21 15:09:31 1997
@@ -178,7 +178,7 @@
return $line;
} elsif ($line =~ /^($C_ascii$C_SorE)+$C_ascii$/o) {
my ($c) = $main::Body_code;
- $c = up($main::Default_code) if ($c eq '');
+ $c = uc($main::Default_code) if ($c eq '');
im_debug("source is sjis or euc, $c assumed\n") if (&debug('japanese'));
if ($c eq 'SJIS') {
return &conv_from_sjis($line);
@@ -204,8 +204,7 @@
#
sub conv_from_sjis {
my $line = shift;
-
- $line =~ s/($C_sjis|$C_sjis_kana)(.*)/&s2j($1, $4).$4/geo;
+ $line =~ s/($C_sjis|$C_sjis_kana)/&s2j($&, $')/geo;
return $line;
}
@@ -270,7 +269,7 @@
#
sub conv_from_euc {
my $line = shift;
- $line =~ s/($C_euc|$C_euc_kana)(.*)/&e2j($1, $4).$4/geo;
+ $line =~ s/($C_euc|$C_euc_kana)/&e2j($&, $')/geo;
return $line;
}
# e2j() is based on _euc2jis() of jcode.pl-1.9/2.0 by utashiro at example.com
Mew-dist メーリングリストの案内