[Mew-dist 03585] Re: EUC code to imput

SAKAI Kiyotaka ksakai at example.com
1998年 1月 30日 (金) 12:01:34 JST


>> In article <19980130111002F.tanaka at example.com>, Kaz.Tanaka at example.com (田中一義) writes:

> # Mew 本体ではなく imput の質問なんですが、ここでいいのでしょうか?

いいと思います。

>  やむなく EUC コードを imput に食わせてメールする必要がでました。
> そこで、以下のように走らせて実験をしています。

> %imput --JPconv=on --DefCode=euc tanaka < eucfile

>  ところが、EUC ファイルによっては、極端にこの処理に時間がかかるのです。
> 始めは死んだかと思いました。 :-O

> eucfile  の内容はわずかこの一行です。

> もういわないからよく聞けよ

> 0000000     e2a4    a6a4    a4a4    efa4    caa4    a4a4    aba4    e9a4
> 0000020     e8a4    afa4    b9ca    b1a4    e8a4    000a                

>  これはとんでもなく時間がかかってしまうのです。(当方で 1 min 程度)

Japanese.pm で、/^($C_ascii$C_SorE)+$C_ascii$/ という正規表現に「もう
いわないからよく聞けよ」という文字列をマッチさせると、ものすごく時間が
かかってしまうのが原因ですね。

とりあえず、以下のように正規表現にマッチさせる順序を変更したら時間がか
からなくなりましたが、正規表現の内容を変更するのが本当のような気もしま
す。
-- 
酒井 清隆 (E-mail: ksakai at example.com)


Index: Japanese.pm.in
===================================================================
RCS file: /home/cvsroot/im-84/IM.in/Japanese.pm.in,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 Japanese.pm.in
--- Japanese.pm.in	1998/01/28 09:09:11	1.1.1.1
+++ Japanese.pm.in	1998/01/30 02:55:55
@@ -83,12 +83,12 @@
 	return 'ascii';
     } elsif ($line =~ /^$C_ascii($C_jis($C_jis_roman)+)+$/o) {
 	    return 'jis';
-    } elsif ($line =~ /^($C_ascii$C_SorE)+$C_ascii$/o) {
-	    return 'sORe';
-    } elsif ($line =~ /^($C_ascii($C_sjis|$C_sjis_kana))+$C_ascii$/o) {
-	    return 'sjis';
     } elsif ($line =~ /^($C_ascii($C_euc|$C_euc_kana))+$C_ascii$/o) {
 	    return 'euc';
+    } elsif ($line =~ /^($C_ascii($C_sjis|$C_sjis_kana))+$C_ascii$/o) {
+	    return 'sjis';
+    } elsif ($line =~ /^($C_ascii$C_SorE)+$C_ascii$/o) {
+	    return 'sORe';
 #   } elsif ($line =~ /$C_8bit/o) {
 #	return '8bit';
     }
@@ -187,6 +187,12 @@
     } elsif ($line =~ /^$C_ascii($C_jis($C_jis_roman)+)+$/o) {
 	im_debug("source is jis\n") if (&debug("japanese"));
 	return $line;
+    } elsif ($line =~ /^($C_ascii($C_euc|$C_euc_kana))+$C_ascii$/o) {
+	im_debug("source is euc\n") if (&debug('japanese'));
+	return &conv_from_euc($line);
+    } elsif ($line =~ /^($C_ascii($C_sjis|$C_sjis_kana))+$C_ascii$/o) {
+	im_debug("source is sjis\n") if (&debug('japanese'));
+	return &conv_from_sjis($line);
     } elsif ($line =~ /^($C_ascii$C_SorE)+$C_ascii$/o) {
 	my ($c) = $main::Body_code;
 	$c = uc($main::Default_code) if ($c eq '');
@@ -196,12 +202,6 @@
 	} else {
 	    return &conv_from_euc($line);
 	}
-    } elsif ($line =~ /^($C_ascii($C_euc|$C_euc_kana))+$C_ascii$/o) {
-	im_debug("source is euc\n") if (&debug('japanese'));
-	return &conv_from_euc($line);
-    } elsif ($line =~ /^($C_ascii($C_sjis|$C_sjis_kana))+$C_ascii$/o) {
-	im_debug("source is sjis\n") if (&debug('japanese'));
-	return &conv_from_sjis($line);
     }
     im_debug("source is unknown, nothing done\n") if (&debug('japanese'));
     return $line;



Mew-dist メーリングリストの案内