2 * KANJI Code conversion routines.
7 1 EUC-JP 0208 0xA1 - 0xFE 0xA1 - 0xFE
8 2 EUC-CN 0xA1 - 0xF7 0xA1 - 0xFE
9 3 EUC-KR 0xA1 - 0xFE 0xA1 - 0xFE
10 4 EUC-TW 0xA1 - 0xFE 0xA1 - 0xFE
11 5 big-5 0x80 - 0xFE 0x40 - 0x7E
17 #include <ptexenc/c-auto.h>
18 #include <ptexenc/kanjicnv.h>
20 boolean isEUCkanji1(int c)
23 return (0xa1 <= c && c <= 0xfe);
26 boolean isEUCkanji2(int c)
29 return (0xa1 <= c && c <= 0xfe);
32 boolean isSJISkanji1(int c)
35 return ((0x81 <= c && c <= 0x9f) || (0xe0 <= c && c <= 0xfc));
38 boolean isSJISkanji2(int c)
41 return (0x40 <= c && c <= 0xfc && c != 0x7f);
44 /* EUC <=> JIS X 0208 code conversion */
45 int EUCtoJIS(int kcode)
47 return (kcode & 0x7f7f);
50 int JIStoEUC(int kcode)
52 return (kcode | 0x8080);
55 /* Shift JIS <=> JIS Kanji code conversion */
56 int SJIStoJIS(int kcode)
62 byte1 -= ( byte1>=0xa0 ) ? 0xc1 : 0x81;
63 kcode = ((byte1<<1) + 0x21)<<8;
64 if ( byte2 >= 0x9f ) {
66 kcode |= (byte2 - 0x7e) & 0xff;
68 kcode |= (byte2 - ((byte2<=0x7e) ? 0x1f : 0x20 )) & 0xff;
73 int JIStoSJIS(int kcode)
80 nh = ((high-0x21)>>1) + 0x81;
81 if (nh > 0x9f) nh += 0x40;
87 if (isSJISkanji1(nh) && isSJISkanji2(nl)) {
94 /* Shift JIS <=> EUC Kanji code conversion */
95 int SJIStoEUC(int kcode)
97 return JIStoEUC(SJIStoJIS(kcode));
100 int EUCtoSJIS(int kcode)
102 return JIStoSJIS(EUCtoJIS(kcode));
105 /* KUTEN to JIS kanji code conversion */
106 int KUTENtoJIS(int kcode)
108 /* in case of undefined in kuten code table */
109 if (HI(kcode) == 0 || HI(kcode) > 95) return -1;
110 if (LO(kcode) == 0 || LO(kcode) > 95) return -1;
112 return kcode + 0x2020;