[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 メーリングリストの案内