~ubuntu-branches/ubuntu/saucy/kakasi/saucy

« back to all changes in this revision

Viewing changes to src/kk2.c

  • Committer: Bazaar Package Importer
  • Author(s): Keita Maehara
  • Date: 2001-12-25 23:18:48 UTC
  • Revision ID: james.westby@ubuntu.com-20011225231848-oiu2kbbhoq80w774
Tags: upstream-2.3.4
ImportĀ upstreamĀ versionĀ 2.3.4

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * KAKASI (Kanji Kana Simple inversion program)
 
3
 * $Id: kk2.c,v 1.3 2001/01/16 07:51:47 rug Exp $
 
4
 * Copyright (C) 1992
 
5
 * Hironobu Takahashi (takahasi@tiny.or.jp)
 
6
 *
 
7
 * This program is free software; you can redistribute it and/or modify
 
8
 * it under the terms of the GNU General Public License as published by
 
9
 * the Free Software Foundation; either versions 2, or (at your option)
 
10
 * any later version.
 
11
 *
 
12
 * This program is distributed in the hope that it will be useful
 
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
15
 * GNU General Public License for more details.
 
16
 *
 
17
 * You should have received a copy of the GNU General Public License
 
18
 * along with KAKASI, see the file COPYING.  If not, write to the Free
 
19
 * Software Foundation Inc., 59 Temple Place - Suite 330, Boston, MA
 
20
 * 02111-1307, USA.
 
21
 */
 
22
 
 
23
#ifdef HAVE_CONFIG_H
 
24
# include <config.h>
 
25
#endif
 
26
 
 
27
#include <stdio.h>
 
28
#ifdef HAVE_STRING_H
 
29
# include <string.h>
 
30
#else
 
31
# include <strings.h>
 
32
#endif
 
33
#include "kakasi.h"
 
34
 
 
35
struct K2rom_tbl {
 
36
    unsigned char kana[10];
 
37
    char romaji[7];
 
38
}
 
39
K2rom_h_table[] = { 
 
40
 
 
41
    "\245\241", "a", "\245\242", "a", "\245\243", "i", "\245\244", "i", "\245\245", "u", "\245\246", "u",
 
42
    "\245\247", "e", "\245\250", "e", "\245\251", "o", "\245\252", "o",
 
43
 
 
44
    "\245\253", "ka", "\245\254", "ga", "\245\255", "ki", "\245\255\245\343", "kya", "\245\255\245\345", "kyu",
 
45
    "\245\255\245\347", "kyo", "\245\256", "gi", "\245\256\245\343", "gya", "\245\256\245\345", "gyu", "\245\256\245\347", "gyo",
 
46
    "\245\257", "ku", "\245\260", "gu", "\245\261", "ke", "\245\262", "ge", "\245\263", "ko", "\245\264", "go",
 
47
 
 
48
    "\245\265", "sa", "\245\266", "za", "\245\267", "shi", "\245\267\245\343", "sha", "\245\267\245\345", "shu",
 
49
    "\245\267\245\347", "sho", "\245\270", "ji", "\245\270\245\343", "ja", "\245\270\245\345", "ju", "\245\270\245\347", "jo",
 
50
    "\245\271", "su", "\245\272", "zu", "\245\273", "se", "\245\274", "ze", "\245\275", "so", "\245\276", "zo",
 
51
 
 
52
    "\245\277", "ta", "\245\300", "da", "\245\301", "chi", "\245\301\245\343", "cha", "\245\301\245\345", "chu",
 
53
    "\245\301\245\347", "cho", "\245\302", "di", "\245\302\245\343", "dya", "\245\302\245\345", "dyu", "\245\302\245\347", "dyo",
 
54
 
 
55
    "\245\303", "tsu", "\245\303\245\253", "kka", "\245\303\245\254", "gga", "\245\303\245\255", "kki", "\245\303\245\255\245\343", "kkya",
 
56
    "\245\303\245\255\245\345", "kkyu", "\245\303\245\255\245\347", "kkyo", "\245\303\245\256", "ggi", "\245\303\245\256\245\343", "ggya",
 
57
    "\245\303\245\256\245\345", "ggyu", "\245\303\245\256\245\347", "ggyo", "\245\303\245\257", "kku", "\245\303\245\260", "ggu",
 
58
    "\245\303\245\261", "kke", "\245\303\245\262", "gge", "\245\303\245\263", "kko", "\245\303\245\264", "ggo", "\245\303\245\265", "ssa",
 
59
    "\245\303\245\266", "zza", "\245\303\245\267", "sshi", "\245\303\245\267\245\343", "ssha",
 
60
    "\245\303\245\267\245\345", "sshu", "\245\303\245\267\245\347", "ssho",
 
61
    "\245\303\245\270", "jji", "\245\303\245\270\245\343", "jja", "\245\303\245\270\245\345", "jju", "\245\303\245\270\245\347", "jjo",
 
62
    "\245\303\245\271", "ssu", "\245\303\245\272", "zzu", "\245\303\245\273", "sse", "\245\303\245\274", "zze", "\245\303\245\275", "sso",
 
63
    "\245\303\245\276", "zzo", "\245\303\245\277", "tta", "\245\303\245\300", "dda", "\245\303\245\301", "cchi",
 
64
    "\245\303\245\301\245\343", "ccha", "\245\303\245\301\245\345", "cchu", "\245\303\245\301\245\347", "ccho", "\245\303\245\302", "ddi",
 
65
    "\245\303\245\302\245\343", "ddya", "\245\303\245\302\245\345", "ddyu", "\245\303\245\302\245\347", "ddyo", "\245\303\245\304", "ttsu",
 
66
    "\245\303\245\305", "ddu", "\245\303\245\306", "tte", "\245\303\245\307", "dde", "\245\303\245\310", "tto", "\245\303\245\311", "ddo",
 
67
    "\245\303\245\317", "hha", "\245\303\245\320", "bba", "\245\303\245\321", "ppa", "\245\303\245\322", "hhi",
 
68
    "\245\303\245\322\245\343", "hhya", "\245\303\245\322\245\345", "hhyu", "\245\303\245\322\245\347", "hhyo", "\245\303\245\323", "bbi",
 
69
    "\245\303\245\323\245\343", "bbya", "\245\303\245\323\245\345", "bbyu", "\245\303\245\323\245\347", "bbyo", "\245\303\245\324", "ppi",
 
70
    "\245\303\245\324\245\343", "ppya", "\245\303\245\324\245\345", "ppyu", "\245\303\245\324\245\347", "ppyo", "\245\303\245\325", "ffu",
 
71
    "\245\303\245\325\245\241", "ffa", "\245\303\245\325\245\243", "ffi", "\245\303\245\325\245\247", "ffe", "\245\303\245\325\245\251", "ffo",
 
72
    "\245\303\245\326", "bbu", "\245\303\245\327", "ppu", "\245\303\245\330", "hhe", "\245\303\245\331", "bbe", "\245\303\245\332", "ppe",
 
73
    "\245\303\245\333", "hho", "\245\303\245\334", "bbo", "\245\303\245\335", "ppo", "\245\303\245\344", "yya", "\245\303\245\346", "yyu",
 
74
    "\245\303\245\350", "yyo", "\245\303\245\351", "rra", "\245\303\245\352", "rri", "\245\303\245\352\245\343", "rrya",
 
75
    "\245\303\245\352\245\345", "rryu", "\245\303\245\352\245\347", "rryo", "\245\303\245\353", "rru", "\245\303\245\354", "rre",
 
76
    "\245\303\245\355", "rro", "\245\303\245\364", "vvu", "\245\303\245\364\245\241", "vva", "\245\303\245\364\245\243", "vvi",
 
77
    "\245\303\245\364\245\247", "vve", "\245\303\245\364\245\251", "vvo",
 
78
 
 
79
    "\245\304", "tsu", "\245\305", "du", "\245\306", "te", "\245\307", "de", "\245\310", "to", "\245\311", "do",
 
80
 
 
81
    "\245\312", "na", "\245\313", "ni", "\245\313\245\343", "nya", "\245\313\245\345", "nyu", "\245\313\245\347", "nyo",
 
82
    "\245\314", "nu", "\245\315", "ne", "\245\316", "no",
 
83
 
 
84
    "\245\317", "ha", "\245\320", "ba", "\245\321", "pa", "\245\322", "hi", "\245\322\245\343", "hya",
 
85
    "\245\322\245\345", "hyu", "\245\322\245\347", "hyo", "\245\323", "bi", "\245\323\245\343", "bya", "\245\323\245\345", "byu",
 
86
    "\245\323\245\347", "byo", "\245\324", "pi", "\245\324\245\343", "pya", "\245\324\245\345", "pyu", "\245\324\245\347", "pyo",
 
87
    "\245\325", "fu", "\245\325\245\241", "fa", "\245\325\245\243", "fi", "\245\325\245\247", "fe", "\245\325\245\251", "fo",
 
88
    "\245\326", "bu", "\245\327", "pu", "\245\330", "he", "\245\331", "be", "\245\332", "pe", "\245\333", "ho",
 
89
    "\245\334", "bo", "\245\335", "po",
 
90
 
 
91
    "\245\336", "ma", "\245\337", "mi", "\245\337\245\343", "mya", "\245\337\245\345", "myu", "\245\337\245\347", "myo",
 
92
    "\245\340", "mu", "\245\341", "me", "\245\342", "mo",
 
93
 
 
94
    "\245\343", "ya", "\245\344", "ya", "\245\345", "yu", "\245\346", "yu", "\245\347", "yo", "\245\350", "yo",
 
95
 
 
96
    "\245\351", "ra", "\245\352", "ri", "\245\352\245\343", "rya", "\245\352\245\345", "ryu", "\245\352\245\347", "ryo",
 
97
    "\245\353", "ru", "\245\354", "re", "\245\355", "ro",
 
98
 
 
99
    "\245\356", "wa", "\245\357", "wa", "\245\360", "i", "\245\361", "e", 
 
100
    "\245\362", "wo", "\245\363", "n",
 
101
    "\245\363\245\242", "n'a", "\245\363\245\244", "n'i", "\245\363\245\246", "n'u", "\245\363\245\250", "n'e", "\245\363\245\252", "n'o",
 
102
    "\245\364", "vu", "\245\364\245\241", "va", "\245\364\245\243", "vi", "\245\364\245\247", "ve", "\245\364\245\251", "vo",
 
103
    "\245\365", "ka", "\245\366", "ke",
 
104
    "", ""
 
105
 
 
106
}, K2rom_k_table[] = { 
 
107
 
 
108
    "\245\241", "a", "\245\242", "a", "\245\243", "i", "\245\244", "i", "\245\245", "u", "\245\246", "u",
 
109
    "\245\247", "e", "\245\250", "e", "\245\251", "o", "\245\252", "o",
 
110
 
 
111
    "\245\253", "ka", "\245\254", "ga", "\245\255", "ki", "\245\255\245\343", "kya", "\245\255\245\345", "kyu",
 
112
    "\245\255\245\347", "kyo", "\245\256", "gi", "\245\256\245\343", "gya", "\245\256\245\345", "gyu", "\245\256\245\347", "gyo",
 
113
    "\245\257", "ku", "\245\260", "gu", "\245\261", "ke", "\245\262", "ge", "\245\263", "ko", "\245\264", "go",
 
114
 
 
115
    "\245\265", "sa", "\245\266", "za", "\245\267", "si", "\245\267\245\343", "sya", "\245\267\245\345", "syu",
 
116
    "\245\267\245\347", "syo", "\245\270", "zi", "\245\270\245\343", "zya", "\245\270\245\345", "zyu", "\245\270\245\347", "zyo",
 
117
    "\245\271", "su", "\245\272", "zu", "\245\273", "se", "\245\274", "ze", "\245\275", "so", "\245\276", "zo",
 
118
 
 
119
    "\245\277", "ta", "\245\300", "da", "\245\301", "ti", "\245\301\245\343", "tya", "\245\301\245\345", "tyu",
 
120
    "\245\301\245\347", "tyo", "\245\302", "di", "\245\302\245\343", "dya", "\245\302\245\345", "dyu", "\245\302\245\347", "dyo",
 
121
 
 
122
    "\245\303", "tu", "\245\303\245\253", "kka", "\245\303\245\254", "gga", "\245\303\245\255", "kki", "\245\303\245\255\245\343", "kkya",
 
123
    "\245\303\245\255\245\345", "kkyu", "\245\303\245\255\245\347", "kkyo", "\245\303\245\256", "ggi", "\245\303\245\256\245\343", "ggya",
 
124
    "\245\303\245\256\245\345", "ggyu", "\245\303\245\256\245\347", "ggyo", "\245\303\245\257", "kku", "\245\303\245\260", "ggu",
 
125
    "\245\303\245\261", "kke", "\245\303\245\262", "gge", "\245\303\245\263", "kko", "\245\303\245\264", "ggo", "\245\303\245\265", "ssa",
 
126
    "\245\303\245\266", "zza", "\245\303\245\267", "ssi", "\245\303\245\267\245\343", "ssya",
 
127
    "\245\303\245\267\245\345", "ssyu", "\245\303\245\267\245\347", "ssho",
 
128
    "\245\303\245\270", "zzi", "\245\303\245\270\245\343", "zzya", "\245\303\245\270\245\345", "zzyu", "\245\303\245\270\245\347", "zzyo",
 
129
    "\245\303\245\271", "ssu", "\245\303\245\272", "zzu", "\245\303\245\273", "sse", "\245\303\245\274", "zze", "\245\303\245\275", "sso",
 
130
    "\245\303\245\276", "zzo", "\245\303\245\277", "tta", "\245\303\245\300", "dda", "\245\303\245\301", "tti",
 
131
    "\245\303\245\301\245\343", "ttya", "\245\303\245\301\245\345", "ttyu", "\245\303\245\301\245\347", "ttyo", "\245\303\245\302", "ddi",
 
132
    "\245\303\245\302\245\343", "ddya", "\245\303\245\302\245\345", "ddyu", "\245\303\245\302\245\347", "ddyo", "\245\303\245\304", "ttu",
 
133
    "\245\303\245\305", "ddu", "\245\303\245\306", "tte", "\245\303\245\307", "dde", "\245\303\245\310", "tto", "\245\303\245\311", "ddo",
 
134
    "\245\303\245\317", "hha", "\245\303\245\320", "bba", "\245\303\245\321", "ppa", "\245\303\245\322", "hhi",
 
135
    "\245\303\245\322\245\343", "hhya", "\245\303\245\322\245\345", "hhyu", "\245\303\245\322\245\347", "hhyo", "\245\303\245\323", "bbi",
 
136
    "\245\303\245\323\245\343", "bbya", "\245\303\245\323\245\345", "bbyu", "\245\303\245\323\245\347", "bbyo", "\245\303\245\324", "ppi",
 
137
    "\245\303\245\324\245\343", "ppya", "\245\303\245\324\245\345", "ppyu", "\245\303\245\324\245\347", "ppyo", "\245\303\245\325", "hhu",
 
138
    "\245\303\245\325\245\241", "ffa", "\245\303\245\325\245\243", "ffi", "\245\303\245\325\245\247", "ffe", "\245\303\245\325\245\251", "ffo",
 
139
    "\245\303\245\326", "bbu", "\245\303\245\327", "ppu", "\245\303\245\330", "hhe", "\245\303\245\331", "bbe", "\245\303\245\332", "ppe",
 
140
    "\245\303\245\333", "hho", "\245\303\245\334", "bbo", "\245\303\245\335", "ppo", "\245\303\245\344", "yya", "\245\303\245\346", "yyu",
 
141
    "\245\303\245\350", "yyo", "\245\303\245\351", "rra", "\245\303\245\352", "rri", "\245\303\245\352\245\343", "rrya",
 
142
    "\245\303\245\352\245\345", "rryu", "\245\303\245\352\245\347", "rryo", "\245\303\245\353", "rru", "\245\303\245\354", "rre",
 
143
    "\245\303\245\355", "rro", "\245\303\245\364", "vvu", "\245\303\245\364\245\241", "vva", "\245\303\245\364\245\243", "vvi",
 
144
    "\245\303\245\364\245\247", "vve", "\245\303\245\364\245\251", "vvo",
 
145
 
 
146
    "\245\304", "tu", "\245\305", "du", "\245\306", "te", "\245\307", "de", "\245\310", "to", "\245\311", "do",
 
147
 
 
148
    "\245\312", "na", "\245\313", "ni", "\245\313\245\343", "nya", "\245\313\245\345", "nyu", "\245\313\245\347", "nyo",
 
149
    "\245\314", "nu", "\245\315", "ne", "\245\316", "no",
 
150
 
 
151
    "\245\317", "ha", "\245\320", "ba", "\245\321", "pa", "\245\322", "hi", "\245\322\245\343", "hya",
 
152
    "\245\322\245\345", "hyu", "\245\322\245\347", "hyo", "\245\323", "bi", "\245\323\245\343", "bya", "\245\323\245\345", "byu",
 
153
    "\245\323\245\347", "byo", "\245\324", "pi", "\245\324\245\343", "pya", "\245\324\245\345", "pyu", "\245\324\245\347", "pyo",
 
154
    "\245\325", "hu", "\245\325\245\241", "fa", "\245\325\245\243", "fi", "\245\325\245\247", "fe", "\245\325\245\251", "fo",
 
155
    "\245\326", "bu", "\245\327", "pu", "\245\330", "he", "\245\331", "be", "\245\332", "pe", "\245\333", "ho",
 
156
    "\245\334", "bo", "\245\335", "po",
 
157
 
 
158
    "\245\336", "ma", "\245\337", "mi", "\245\337\245\343", "mya", "\245\337\245\345", "myu", "\245\337\245\347", "myo",
 
159
    "\245\340", "mu", "\245\341", "me", "\245\342", "mo",
 
160
 
 
161
    "\245\343", "ya", "\245\344", "ya", "\245\345", "yu", "\245\346", "yu", "\245\347", "yo", "\245\350", "yo",
 
162
 
 
163
    "\245\351", "ra", "\245\352", "ri", "\245\352\245\343", "rya", "\245\352\245\345", "ryu", "\245\352\245\347", "ryo",
 
164
    "\245\353", "ru", "\245\354", "re", "\245\355", "ro",
 
165
 
 
166
    "\245\356", "wa", "\245\357", "wa", "\245\360", "i", "\245\361", "e", 
 
167
    "\245\362", "wo", "\245\363", "n",
 
168
    "\245\363\245\242", "n'a", "\245\363\245\244", "n'i", "\245\363\245\246", "n'u", "\245\363\245\250", "n'e", "\245\363\245\252", "n'o",
 
169
    "\245\364", "vu", "\245\364\245\241", "va", "\245\364\245\243", "vi", "\245\364\245\247", "ve", "\245\364\245\251", "vo",
 
170
    "\245\365", "ka", "\245\366", "ke",
 
171
    "", ""
 
172
};
 
173
 
 
174
#define K2rom_buflen 11
 
175
 
 
176
int
 
177
K2rom(c, n, type)
 
178
     Character *c;
 
179
     Character *n;
 
180
     int type;
 
181
{
 
182
    static int index_table[0x81];
 
183
    static int index_made=0;
 
184
    static struct K2rom_tbl *K2rom_ptr;
 
185
    struct K2rom_tbl *p;
 
186
    int i, clen, ylen;
 
187
    unsigned char buffer[K2rom_buflen];
 
188
    int max_match, match_more;
 
189
    char *max_romaji;
 
190
 
 
191
    if (index_made == 0) {
 
192
        int last;
 
193
 
 
194
        for (i = 0; i < 0x81; ++ i) {
 
195
            index_table[i] = -1;
 
196
        }
 
197
        index_table[0x21] = 0;
 
198
        K2rom_ptr = (romaji_type == HEPBURN) ? K2rom_h_table : K2rom_k_table;
 
199
        for (p = K2rom_ptr, i = 0; *(p->kana) != '\0'; ++ p, ++ i) {
 
200
            index_table[(((p->kana)[1])&0x7f)+1] = i+1;
 
201
        }
 
202
        last = i;
 
203
        for (i = 0x80; i >= 0; -- i) {
 
204
            if (index_table[i] == -1)
 
205
                index_table[i] = last;
 
206
            else
 
207
                last = index_table[i];
 
208
        }
 
209
        index_made = 1;
 
210
    }
 
211
 
 
212
    if ((c[0].c1 == 0xa1) && (c[0].c2 == 0xbc)) {
 
213
        n[0].type = type;
 
214
        n[0].c1 = '^';
 
215
        n[1].type = OTHER;
 
216
        n[1].c1 = 0;
 
217
        n[1].c2 = 0;
 
218
        return 1;
 
219
    }
 
220
 
 
221
    buffer[K2rom_buflen-1] = '\0'; clen = K2rom_buflen-1;
 
222
    for (i = 0; i < (K2rom_buflen-1)/2; i ++) {
 
223
        buffer[i*2  ] = c[i].c1;
 
224
        buffer[i*2+1] = c[i].c2;
 
225
 
 
226
        if (c[i].c1 == '\0') {
 
227
            clen = i*2;
 
228
            break;
 
229
        }
 
230
    }
 
231
 
 
232
    if (clen == 0) {
 
233
        n[0].type=OTHER;
 
234
        n[0].c1 = '\0';
 
235
        return 0;
 
236
    }
 
237
 
 
238
    max_match = 0;
 
239
    max_romaji = NULL;
 
240
    match_more = 0;
 
241
    for (i = index_table[buffer[1]&0x7f];
 
242
         i < index_table[(buffer[1]&0x7f)+1];
 
243
         ++ i) {
 
244
        ylen = strlen((const char *)(K2rom_ptr[i].kana));
 
245
        if (clen >= ylen) {
 
246
            if (max_match < ylen) {
 
247
                if (strncmp((const char *)buffer, (const char *)K2rom_ptr[i].kana, ylen) == 0) {
 
248
                    max_match = ylen/2;
 
249
                    max_romaji = K2rom_ptr[i].romaji;
 
250
                }
 
251
            }
 
252
        } else {
 
253
            if (match_more == 0)
 
254
                if (strncmp((const char *)buffer, (const char *)K2rom_ptr[i].kana, clen) == 0)
 
255
                    match_more = 1;
 
256
        }
 
257
    }
 
258
 
 
259
    if (max_romaji == NULL) {
 
260
        i = 0;
 
261
        max_match = 1;
 
262
    } else {
 
263
        for (i = 0; max_romaji[i] != '\0'; ++ i) {
 
264
            n[i].type=type;
 
265
            n[i].c1 = max_romaji[i];
 
266
        }
 
267
    }
 
268
    n[i].type=OTHER;
 
269
    n[i].c1 = '\0';
 
270
 
 
271
    return (match_more == 0) ? max_match : -max_match;
 
272
}
 
273
 
 
274
int
 
275
K2a(c, n)
 
276
     Character *c;
 
277
     Character *n;
 
278
{
 
279
    return K2rom(c, n, ASCII);
 
280
}
 
281
 
 
282
int
 
283
K2j(c, n)
 
284
     Character *c;
 
285
     Character *n;
 
286
{
 
287
    return K2rom(c, n, JISROMAN);
 
288
}
 
289
 
 
290
int
 
291
K2H(c, n)
 
292
     Character *c;
 
293
     Character *n;
 
294
{
 
295
    if (c[0].c1 == 0xa5) {
 
296
        if (c[0].c2 < 0xf4) { /* != charcter code(\245\364),charcter code(\245\365),charcter code(\245\366) */
 
297
            n[0].type = JIS83;
 
298
            n[0].c1 = 0xa4;
 
299
            n[0].c2 = c[0].c2;
 
300
            n[1].type = OTHER;
 
301
            n[1].c1 = 0;
 
302
            n[1].c2 = 0;
 
303
            return 1;
 
304
        } else if (c[0].c2 == 0xf4) { /* == charcter code(\245\364) */
 
305
            n[0].type = JIS83;
 
306
            n[0].c1 = 0xa4;
 
307
            n[0].c2 = 0xa6;
 
308
            n[1].type = JIS83;
 
309
            n[1].c1 = 0xa1;
 
310
            n[1].c2 = 0xab;
 
311
            n[2].type = OTHER;
 
312
            n[2].c1 = 0;
 
313
            n[2].c2 = 0;
 
314
            return 1;
 
315
        } else if (c[0].c2 == 0xf5) { /* == charcter code(\245\365) */
 
316
            n[0].type = JIS83;
 
317
            n[0].c1 = 0xa4;
 
318
            n[0].c2 = 0xab;
 
319
            n[1].type = OTHER;
 
320
            n[1].c1 = 0;
 
321
            n[1].c2 = 0;
 
322
            return 1;
 
323
        } else if (c[0].c2 == 0xf6) { /* == charcter code(\245\366) */
 
324
            n[0].type = JIS83;
 
325
            n[0].c1 = 0xa4;
 
326
            n[0].c2 = 0xb1;
 
327
            n[1].type = OTHER;
 
328
            n[1].c1 = 0;
 
329
            n[1].c2 = 0;
 
330
            return 1;
 
331
        }
 
332
    } else if ((c[0].c1 == 0xa1) &&
 
333
               ((c[0].c2 == 0xbc) || (c[0].c2 == 0xab) || (c[0].c2 == 0xac))) {
 
334
        n[0].type = JIS83;
 
335
        n[0].c1 = c[0].c1;
 
336
        n[0].c2 = c[0].c2;
 
337
        n[1].type = OTHER;
 
338
        n[1].c1 = 0;
 
339
        n[1].c2 = 0;
 
340
        return 1;
 
341
    }
 
342
    n[0].type = OTHER;
 
343
    n[0].c1 = 0;
 
344
    n[0].c2 = 0;
 
345
    return 1;
 
346
}
 
347
 
 
348
int
 
349
K2k(c, n)
 
350
     Character *c;
 
351
     Character *n;
 
352
{
 
353
    unsigned char *b;
 
354
    int i;
 
355
 
 
356
    static unsigned char K2k_table[0x60][3] = {
 
357
        "",   "'",  "1",  "(",  "2",  ")",  "3",  "*",
 
358
        "4",  "+",  "5",  "6",  "6^", "7",  "7^", "8",
 
359
        "8^", "9",  "9^", ":",  ":^", ";",  ";^", "<",
 
360
        "<^", "=",  "=^", ">",  ">^", "?",  "?^", "@",
 
361
        "@^", "A",  "A^", "/",  "B",  "B^", "C",  "C^",
 
362
        "D",  "D^", "E",  "F",  "G",  "H",  "I",  "J",
 
363
        "J^", "J_", "K",  "K^", "K_", "L",  "L^", "L_",
 
364
        "M",  "M^", "M_", "N",  "N^", "N_", "O",  "P",
 
365
        "Q",  "R",  "S",  ",",  "T",  "-",  "U",  ".",
 
366
        "V",  "W",  "X",  "Y",  "Z",  "[",  "\\",  "\\",
 
367
        "2",  "4",  "&",  "]",  "3^", "6",  "9",   "",
 
368
        "",   "",   "",   "",   "",   "",   "",   ""};
 
369
 
 
370
    if (c[0].c1 == 0xa5) {
 
371
        for (b = K2k_table[(c[0].c2 & 0x7f) - 0x20], i = 0;
 
372
             *b != '\0'; ++ b, ++ i) {
 
373
            n[i].type = KATAKANA;
 
374
            n[i].c1 = *b;
 
375
        }
 
376
        n[i].type = OTHER;
 
377
        n[i].c1 = 0;
 
378
    } else if ((c[0].c1 == 0xa1) &&
 
379
               ((c[0].c2 == 0xbc) || (c[0].c2 == 0xab) || (c[0].c2 == 0xac))) {
 
380
        n[0].type = KATAKANA;
 
381
        switch(c[0].c2) {
 
382
          case 0xbc:
 
383
            n[0].c1 = '0'; break;
 
384
          case 0xab:
 
385
            n[0].c1 = '^'; break;
 
386
          case 0xac:
 
387
            n[0].c1 = '_'; break;
 
388
        }
 
389
        n[1].type = OTHER;
 
390
        n[1].c1 = 0;
 
391
    } else {
 
392
        n[0].type = OTHER;
 
393
        n[0].c1 = 0;
 
394
    }
 
395
    return 1;
 
396
}
 
397
 
 
398
#ifdef WAKATIGAKI
 
399
int
 
400
K2K(c, n)
 
401
     Character *c;
 
402
     Character *n;
 
403
{
 
404
    if (c[0].c1 == 0xa5 || (c[0].c1 == 0xa1 && c[0].c2 == 0xbc)) {
 
405
        n[0].type = JIS83;
 
406
        n[0].c1 = c[0].c1;
 
407
        n[0].c2 = c[0].c2;
 
408
        n[1].type = OTHER;
 
409
        n[1].c1 = 0;
 
410
        n[1].c2 = 0;
 
411
    }
 
412
    return 1;
 
413
}
 
414
#endif /* WAKATIGAKI */