[Mew-dist 04063] Re: charset=shift_jis

SAKAI Kiyotaka ksakai at example.com
1998年 3月 3日 (火) 10:54:35 JST


>> In article <19980302171742Q.utashiro at example.com>, Kazumasa Utashiro <utashiro at example.com> writes:

> とすると、仮名が終わった後で G1 に Latin-1 を designate して、次にまた
> 仮名が出て来た時に X0201 を designate するのが冗長になるわけですが、こ
> れは気にしないか、その方がいいという判断ですね。

> ただ、漢字と仮名が繰り返し出て来る文章の場合は、

> 	ESC-$(B ...漢字... ESC-)I ...仮名... ESC-A ...漢字... ESC-(B

> としたい気がします。しかし「漢字-仮名-ASCII」と続いたら、何処で G0 を 
> ASCII に戻すのか... この辺が正規化が難しいという結縁なんですね。

では、この 2つも頑張ってやるようにしてみました。
-- 
酒井 清隆 (E-mail: ksakai at example.com)


Index: EncDec.pm.in
===================================================================
RCS file: /home/cvsroot/im-87/IM.in/EncDec.pm.in,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 EncDec.pm.in
--- EncDec.pm.in	1998/03/03 00:31:06	1.1.1.1
+++ EncDec.pm.in	1998/03/03 01:50:35
@@ -229,8 +229,13 @@
 
 sub shift_jis_to_ctext ($) {
     my $str = shift;
-    $str =~ s/(([\x81-\x9f\xe0-\xef].)+)/"\e\$(B" . s2j($1) . "\e(B"/ge;
-    $str =~ s/([\xa0-\xdf]+)/\e)I\1\e-A/g;
+    my $kanji = "[\x81-\x9f\xe0-\xef].";
+    my $kana = "[\xa0-\xdf]";
+
+    $str =~ s/($kanji($kanji|$kana)*$kanji|($kanji)+)/\e\$\(B\1\e\(B/g;
+    $str =~ s/(($kanji)+)/s2j($1)/ge;
+    $str =~ s/($kana)/\e\)I\1/;
+    $str =~ s/($kana)([^\xa0-\xdf]*$)/\1\e-A\2/;
     return $str;
 }
 
@@ -241,10 +246,7 @@
 
     while ($str) {
 	($c1, $c2, $str) = unpack('CCa*', $str);
-	if (0xa1 <= $c1 && $c1 <= 0xdf) {
-	    $c2 = $c1;
-	    $c1 = 0x8e;
-	} elsif ($c2 >= 0x9f) {
+	if ($c2 >= 0x9f) {
 	    $c1 = $c1 * 2 - ($c1 >= 0xe0 ? 0xe0 : 0x60);
 	    $c2 += 2;
 	} else {



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