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