This commit was manufactured by cvs2svn to create tag 'LAST_STABLE'.
[claws.git] / libkcc / dec.c
blob84f04c5f562a66f16e64bc2899cee8859f6b71d5
1 #include "libkcc.h"
3 /*---------------------------------------------------------------------
4 TYPE
5 table
6 NAME
7 katakana, hiragana, dakuon - JIS X0201 kana to JIS kanji in DEC
8 ---------------------------------------------------------------------*/
9 unsigned short katakana[] = {
10 0, 0xa1a3, 0xa1d6, 0xa1d7, 0xa1a2, 0xa1a6, 0xa5f2, 0xa5a1,
11 0xa5a3, 0xa5a5, 0xa5a7, 0xa5a9, 0xa5e3, 0xa5e5, 0xa5e7, 0xa5c3,
12 0xa1bc, 0xa5a2, 0xa5a4, 0xa5a6, 0xa5a8, 0xa5aa, 0xa5ab, 0xa5ad,
13 0xa5af, 0xa5b1, 0xa5b3, 0xa5b5, 0xa5b7, 0xa5b9, 0xa5bb, 0xa5bd,
14 0xa5bf, 0xa5c1, 0xa5c4, 0xa5c6, 0xa5c8, 0xa5ca, 0xa5cb, 0xa5cc,
15 0xa5cd, 0xa5ce, 0xa5cf, 0xa5d2, 0xa5d5, 0xa5d8, 0xa5db, 0xa5de,
16 0xa5df, 0xa5e0, 0xa5e1, 0xa5e2, 0xa5e4, 0xa5e6, 0xa5e8, 0xa5e9,
17 0xa5ea, 0xa5eb, 0xa5ec, 0xa5ed, 0xa5ef, 0xa5f3, 0xa1ab, 0xa1ac,
20 unsigned short hiragana[] = {
21 0, 0xa1a3, 0xa1d6, 0xa1d7, 0xa1a2, 0xa1a6, 0xa4f2, 0xa4a1,
22 0xa4a3, 0xa4a5, 0xa4a7, 0xa4a9, 0xa4e3, 0xa4e5, 0xa4e7, 0xa4c3,
23 0xa1bc, 0xa4a2, 0xa4a4, 0xa4a6, 0xa4a8, 0xa4aa, 0xa4ab, 0xa4ad,
24 0xa4af, 0xa4b1, 0xa4b3, 0xa4b5, 0xa4b7, 0xa4b9, 0xa4bb, 0xa4bd,
25 0xa4bf, 0xa4c1, 0xa4c4, 0xa4c6, 0xa4c8, 0xa4ca, 0xa4cb, 0xa4cc,
26 0xa4cd, 0xa4ce, 0xa4cf, 0xa4d2, 0xa4d5, 0xa4d8, 0xa4db, 0xa4de,
27 0xa4df, 0xa4e0, 0xa4e1, 0xa4e2, 0xa4e4, 0xa4e6, 0xa4e8, 0xa4e9,
28 0xa4ea, 0xa4eb, 0xa4ec, 0xa4ed, 0xa4ef, 0xa4f3, 0xa1ab, 0xa1ac,
31 unsigned char dakuon[] = {
32 0, 0, 0, 0, 0, 0, 0, 0,
33 0, 0, 0, 0, 0, 0, 0, 0,
34 0, 0, 0, 0, 0, 0, 1, 1,
35 1, 1, 1, 1, 1, 1, 1, 1,
36 1, 1, 1, 1, 1, 0, 0, 0,
37 0, 0, 3, 3, 3, 3, 3, 0,
38 0, 0, 0, 0, 0, 0, 0, 0,
39 0, 0, 0, 0, 0, 0, 0, 0,
42 /*********************************************************/
43 unsigned short *kanatbl = katakana;
44 int lastkana=0;
45 extern bool nogaiji;
47 /*---------------------------------------------------------------------
48 NAME
49 decascii
50 ---------------------------------------------------------------------*/
51 void Kcc_decascii(ddd, c)
52 register int c;
53 char **ddd;
55 if (lastkana) {
56 **ddd = kanatbl[lastkana] >> 8; (*ddd)++;
57 **ddd = kanatbl[lastkana] & 0xff; (*ddd)++;
58 lastkana = 0;
60 **ddd = c; (*ddd)++;
63 /*---------------------------------------------------------------------
64 NAME
65 decgaiji
66 ---------------------------------------------------------------------*/
67 void Kcc_decgaiji(ddd, c1, c2)
68 register int c1, c2;
69 char **ddd;
71 if (lastkana) {
72 **ddd = kanatbl[lastkana] >> 8; (*ddd)++;
73 **ddd = kanatbl[lastkana] & 0xff; (*ddd)++;
74 lastkana = 0;
76 if (nogaiji) {
77 **ddd = ZENPAD >> 8 | 0x80; (*ddd)++;
78 **ddd = (ZENPAD & 0xff) | 0x80; (*ddd)++;
79 } else {
80 **ddd = c1 | 0x80; (*ddd)++;
81 **ddd = c2; (*ddd)++;
85 /*---------------------------------------------------------------------
86 NAME
87 deckana
88 ---------------------------------------------------------------------*/
89 void Kcc_deckana(ddd, c)
90 register int c;
91 char **ddd;
93 register int cc;
94 int i;
95 extern unsigned char dakuon[];
97 if (lastkana) {
98 cc = kanatbl[lastkana];
99 if ((c == 0x5e || c == 0x5f) &&
100 (i = dakuon[lastkana] & (c == 0x5e ? 1 : 2))) {
101 cc += i;
102 c = -1;
104 **ddd = cc >> 8; (*ddd)++;
105 **ddd = cc & 0xff; (*ddd)++;
107 if (c < 0x21 || 0x5f < c) {
108 if (c > 0) {
109 **ddd = ZENPAD >> 8; (*ddd)++;
110 **ddd = ZENPAD & 0xff; (*ddd)++;
112 lastkana = 0;
113 } else
114 lastkana = c - 0x20;
116 /*---------------------------------------------------------------------
117 NAME
118 deckanji
119 ---------------------------------------------------------------------*/
120 void Kcc_deckanji(ddd, c1, c2)
121 register int c1, c2;
122 char **ddd;
124 if (lastkana) {
125 **ddd = kanatbl[lastkana] >> 8; (*ddd)++;
126 **ddd = kanatbl[lastkana] & 0xff; (*ddd)++;
127 lastkana = 0;
129 **ddd = c1 | 0x80; (*ddd)++;
130 **ddd = c2 | 0x80; (*ddd)++;