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