No. 211/622 Index Prev Next
Path: titcca!flab!ichikawa
From: ichikawa@flab.flab.fujitsu.JUNET (I.Ichikawa)
Newsgroups: fj.kanji
Subject: Re: hankaku-kana to zenkaku-kana convertor
Message-ID: < 2138@flab.flab.fujitsu.JUNET> 
Date: 27 Nov 87 05:00:32 GMT
References: < 2102@flab.flab.fujitsu.JUNET>  < 755@cskvax.csk.JUNET> 
Reply-To: ichikawa@flab.flab.fujitsu.JUNET (I.Ichikawa)
Distribution: fj
Organization: Fujitsu Laboratories Ltd., Kawasaki, Japan
Lines: 71

わかりました、SI,SOはJISということにしておきます。まあ、その方が助かりま
す。あっちゃこっちゃでしていた、SI,SOのチェックをとっぱずせます。

また、半角英字と全角英字ですが、1区3区ですみそうですね。でも、ここで、
問題です:
		\とか~はどうしませう?

ううむJISでいくのかなぁ?

そして、半角カナの濁点ですが、1文字先読みすれば可能です。つまり、カナを
あたかも2バイトコードとしてふるまいらせ、もし、濁点なぞでないならば、先
バイトのみ変換し、後バイトはあたかも今入力したふりをして処理をする、とい
う、goto的な処理をすれば、可能なのですが、(濁点ならば+1、半濁点ならば+2
ですむはず)、問題は、「" ら" に濁点」のようなことをされることです。
(コサキンふぁんならば、わかるはず:-)" マ" に濁点だとじゃいあんとろぼになる)

ということで、手を抜いて、濁点も一文字としてしまいましょうか。

そして、これが変換表です。(ここを調べるのがいちばんしんどかった)使っても
いいですよ。(おお、なんて太っ腹)ええい、変換ルーチンの一部まで付けちゃえ。


/* tables */
int     jktb[] = {
 /* C0- DF */
    0x253f, 0x2541, 0x2544, 0x2546, 0x2548, 0x254a, 0x254b, 0x254c,
    0x254d, 0x254e, 0x254f, 0x2552, 0x2555, 0x2558, 0x255b, 0x255e,
    0x255f, 0x2560, 0x2561, 0x2562, 0x2564, 0x2566, 0x2568, 0x2569,
    0x256a, 0x256b, 0x256c, 0x256d, 0x256f, 0x2573, 0x212b, 0x212c,
 /* A0- BF */
    0x2121, 0x2123, 0x2156, 0x2157, 0x2122, 0x2126, 0x2572, 0x2521,
    0x2523, 0x2525, 0x2527, 0x2529, 0x2563, 0x2565, 0x2567, 0x2543,
    0x213c, 0x2522, 0x2524, 0x2526, 0x2528, 0x252a, 0x252b, 0x252d,
    0x252f, 0x2531, 0x2533, 0x2535, 0x2537, 0x2539, 0x253b, 0x253d,
    0
};

int     sjktb[] = {
 /* C0- DF */
    0x0835e, 0x08360, 0x08363, 0x08365,
    0x08367, 0x08369, 0x0836a, 0x0836b,
    0x0836c, 0x0836d, 0x0836e, 0x08371,
    0x08374, 0x08377, 0x0837a, 0x0837d,
    0x0837e, 0x08380, 0x08381, 0x08382,
    0x08384, 0x08386, 0x08388, 0x08389,
    0x0838a, 0x0838b, 0x0838c, 0x0838d,
    0x0838f, 0x08393, 0x0814a, 0x0814b,
 /* A0- BF */
    0x08140, 0x08142, 0x08175, 0x08176,
    0x08141, 0x08145, 0x08392, 0x08340,
    0x08342, 0x08344, 0x08346, 0x08348,
    0x08383, 0x08385, 0x08387, 0x08362,
    0x0815b, 0x08341, 0x08343, 0x08345,
    0x08347, 0x08349, 0x0834a, 0x0834c,
    0x0834e, 0x08350, 0x08352, 0x08354,
    0x08356, 0x08358, 0x0835a, 0x0835c,
    0
};

kanji_kana (c, tbl)
int     c;
int     *tbl;
{
    register int    i;

    i = tbl[0x03f &  c];
    putchar (0x0ff &  (i >> 8));
    putchar (0x0ff &  i);
}

Next
Continue < 766@cskvax.csk.JUNET>
< 2168@flab.flab.fujitsu.JUNET>
< 1213@srava.sra.JUNET>
< 774@cskvax.csk.JUNET>