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

« back to all changes in this revision

Viewing changes to src/hh2.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: hh2.c,v 1.5 2001/05/30 05:46:55 takesako 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 H2rom_tbl {
 
36
    unsigned char kana[10];
 
37
    char romaji[7];
 
38
}
 
39
H2rom_h_table[] = { 
 
40
 
 
41
    "\244\241", "a", "\244\242", "a", "\244\243", "i", "\244\244", "i", "\244\245", "u", "\244\246", "u",
 
42
    "\244\246\241\253", "vu", "\244\246\241\253\244\241", "va", "\244\246\241\253\244\243", "vi", "\244\246\241\253\244\247", "ve",
 
43
    "\244\246\241\253\244\251", "vo",
 
44
    "\244\247", "e", "\244\250", "e", "\244\251", "o", "\244\252", "o",
 
45
 
 
46
    "\244\253", "ka", "\244\254", "ga", "\244\255", "ki", "\244\255\244\343", "kya", "\244\255\244\345", "kyu",
 
47
    "\244\255\244\347", "kyo", "\244\256", "gi", "\244\256\244\343", "gya", "\244\256\244\345", "gyu", "\244\256\244\347", "gyo",
 
48
    "\244\257", "ku", "\244\260", "gu", "\244\261", "ke", "\244\262", "ge", "\244\263", "ko", "\244\264", "go",
 
49
 
 
50
    "\244\265", "sa", "\244\266", "za", "\244\267", "shi", "\244\267\244\343", "sha", "\244\267\244\345", "shu",
 
51
    "\244\267\244\347", "sho", "\244\270", "ji", "\244\270\244\343", "ja", "\244\270\244\345", "ju", "\244\270\244\347", "jo",
 
52
    "\244\271", "su", "\244\272", "zu", "\244\273", "se", "\244\274", "ze", "\244\275", "so", "\244\276", "zo",
 
53
 
 
54
    "\244\277", "ta", "\244\300", "da", "\244\301", "chi", "\244\301\244\343", "cha", "\244\301\244\345", "chu",
 
55
    "\244\301\244\347", "cho", "\244\302", "di", "\244\302\244\343", "dya", "\244\302\244\345", "dyu", "\244\302\244\347", "dyo",
 
56
 
 
57
    "\244\303", "tsu", 
 
58
    "\244\303\244\246\241\253", "vvu", "\244\303\244\246\241\253\244\241", "vva", "\244\303\244\246\241\253\244\243", "vvi",
 
59
    "\244\303\244\246\241\253\244\247", "vve", "\244\303\244\246\241\253\244\251", "vvo",
 
60
    "\244\303\244\253", "kka", "\244\303\244\254", "gga", "\244\303\244\255", "kki", "\244\303\244\255\244\343", "kkya",
 
61
    "\244\303\244\255\244\345", "kkyu", "\244\303\244\255\244\347", "kkyo", "\244\303\244\256", "ggi", "\244\303\244\256\244\343", "ggya",
 
62
    "\244\303\244\256\244\345", "ggyu", "\244\303\244\256\244\347", "ggyo", "\244\303\244\257", "kku", "\244\303\244\260", "ggu",
 
63
    "\244\303\244\261", "kke", "\244\303\244\262", "gge", "\244\303\244\263", "kko", "\244\303\244\264", "ggo", "\244\303\244\265", "ssa",
 
64
    "\244\303\244\266", "zza", "\244\303\244\267", "sshi", "\244\303\244\267\244\343", "ssha",
 
65
    "\244\303\244\267\244\345", "sshu", "\244\303\244\267\244\347", "ssho",
 
66
    "\244\303\244\270", "jji", "\244\303\244\270\244\343", "jja", "\244\303\244\270\244\345", "jju", "\244\303\244\270\244\347", "jjo",
 
67
    "\244\303\244\271", "ssu", "\244\303\244\272", "zzu", "\244\303\244\273", "sse", "\244\303\244\274", "zze", "\244\303\244\275", "sso",
 
68
    "\244\303\244\276", "zzo", "\244\303\244\277", "tta", "\244\303\244\300", "dda", "\244\303\244\301", "cchi",
 
69
    "\244\303\244\301\244\343", "ccha", "\244\303\244\301\244\345", "cchu", "\244\303\244\301\244\347", "ccho", "\244\303\244\302", "ddi",
 
70
    "\244\303\244\302\244\343", "ddya", "\244\303\244\302\244\345", "ddyu", "\244\303\244\302\244\347", "ddyo", "\244\303\244\304", "ttsu",
 
71
    "\244\303\244\305", "ddu", "\244\303\244\306", "tte", "\244\303\244\307", "dde", "\244\303\244\310", "tto", "\244\303\244\311", "ddo",
 
72
    "\244\303\244\317", "hha", "\244\303\244\320", "bba", "\244\303\244\321", "ppa", "\244\303\244\322", "hhi",
 
73
    "\244\303\244\322\244\343", "hhya", "\244\303\244\322\244\345", "hhyu", "\244\303\244\322\244\347", "hhyo", "\244\303\244\323", "bbi",
 
74
    "\244\303\244\323\244\343", "bbya", "\244\303\244\323\244\345", "bbyu", "\244\303\244\323\244\347", "bbyo", "\244\303\244\324", "ppi",
 
75
    "\244\303\244\324\244\343", "ppya", "\244\303\244\324\244\345", "ppyu", "\244\303\244\324\244\347", "ppyo", "\244\303\244\325", "ffu",
 
76
    "\244\303\244\325\244\241", "ffa", "\244\303\244\325\244\243", "ffi", "\244\303\244\325\244\247", "ffe", "\244\303\244\325\244\251", "ffo",
 
77
    "\244\303\244\326", "bbu", "\244\303\244\327", "ppu", "\244\303\244\330", "hhe", "\244\303\244\331", "bbe", "\244\303\244\332", "ppe",
 
78
    "\244\303\244\333", "hho", "\244\303\244\334", "bbo", "\244\303\244\335", "ppo", "\244\303\244\344", "yya", "\244\303\244\346", "yyu",
 
79
    "\244\303\244\350", "yyo", "\244\303\244\351", "rra", "\244\303\244\352", "rri", "\244\303\244\352\244\343", "rrya",
 
80
    "\244\303\244\352\244\345", "rryu", "\244\303\244\352\244\347", "rryo", "\244\303\244\353", "rru", "\244\303\244\354", "rre",
 
81
    "\244\303\244\355", "rro",
 
82
 
 
83
    "\244\304", "tsu", "\244\305", "du", "\244\306", "te", "\244\307", "de", "\244\310", "to", "\244\311", "do",
 
84
 
 
85
    "\244\312", "na", "\244\313", "ni", "\244\313\244\343", "nya", "\244\313\244\345", "nyu", "\244\313\244\347", "nyo",
 
86
    "\244\314", "nu", "\244\315", "ne", "\244\316", "no",
 
87
 
 
88
    "\244\317", "ha", "\244\320", "ba", "\244\321", "pa", "\244\322", "hi", "\244\322\244\343", "hya",
 
89
    "\244\322\244\345", "hyu", "\244\322\244\347", "hyo", "\244\323", "bi", "\244\323\244\343", "bya", "\244\323\244\345", "byu",
 
90
    "\244\323\244\347", "byo", "\244\324", "pi", "\244\324\244\343", "pya", "\244\324\244\345", "pyu", "\244\324\244\347", "pyo",
 
91
    "\244\325", "fu", "\244\325\244\241", "fa", "\244\325\244\243", "fi", "\244\325\244\247", "fe", "\244\325\244\251", "fo",
 
92
    "\244\326", "bu", "\244\327", "pu", "\244\330", "he", "\244\331", "be", "\244\332", "pe", "\244\333", "ho",
 
93
    "\244\334", "bo", "\244\335", "po",
 
94
 
 
95
    "\244\336", "ma", "\244\337", "mi", "\244\337\244\343", "mya", "\244\337\244\345", "myu", "\244\337\244\347", "myo",
 
96
    "\244\340", "mu", "\244\341", "me", "\244\342", "mo",
 
97
 
 
98
    "\244\343", "ya", "\244\344", "ya", "\244\345", "yu", "\244\346", "yu", "\244\347", "yo", "\244\350", "yo",
 
99
 
 
100
    "\244\351", "ra", "\244\352", "ri", "\244\352\244\343", "rya", "\244\352\244\345", "ryu", "\244\352\244\347", "ryo",
 
101
    "\244\353", "ru", "\244\354", "re", "\244\355", "ro",
 
102
 
 
103
    "\244\356", "wa", "\244\357", "wa", "\244\360", "i", "\244\361", "e", 
 
104
    "\244\362", "wo", "\244\363", "n",
 
105
    "\244\363\244\242", "n'a", "\244\363\244\244", "n'i", "\244\363\244\246", "n'u", "\244\363\244\250", "n'e", "\244\363\244\252", "n'o",
 
106
    "", ""
 
107
 
 
108
}, H2rom_k_table[] = { 
 
109
 
 
110
    "\244\241", "a", "\244\242", "a", "\244\243", "i", "\244\244", "i", "\244\245", "u", "\244\246", "u",
 
111
    "\244\246\241\253", "vu", "\244\246\241\253\244\241", "va", "\244\246\241\253\244\243", "vi",
 
112
    "\244\246\241\253\244\247", "ve", "\244\246\241\253\244\251", "vo",
 
113
    "\244\247", "e", "\244\250", "e", "\244\251", "o", "\244\252", "o",
 
114
 
 
115
    "\244\253", "ka", "\244\254", "ga", "\244\255", "ki", "\244\255\244\343", "kya", "\244\255\244\345", "kyu",
 
116
    "\244\255\244\347", "kyo", "\244\256", "gi", "\244\256\244\343", "gya", "\244\256\244\345", "gyu", "\244\256\244\347", "gyo",
 
117
    "\244\257", "ku", "\244\260", "gu", "\244\261", "ke", "\244\262", "ge", "\244\263", "ko", "\244\264", "go",
 
118
 
 
119
    "\244\265", "sa", "\244\266", "za", "\244\267", "si", "\244\267\244\343", "sya", "\244\267\244\345", "syu",
 
120
    "\244\267\244\347", "syo", "\244\270", "zi", "\244\270\244\343", "zya", "\244\270\244\345", "zyu", "\244\270\244\347", "zyo",
 
121
    "\244\271", "su", "\244\272", "zu", "\244\273", "se", "\244\274", "ze", "\244\275", "so", "\244\276", "zo",
 
122
 
 
123
    "\244\277", "ta", "\244\300", "da", "\244\301", "ti", "\244\301\244\343", "tya", "\244\301\244\345", "tyu",
 
124
    "\244\301\244\347", "tyo", "\244\302", "di", "\244\302\244\343", "dya", "\244\302\244\345", "dyu", "\244\302\244\347", "dyo",
 
125
 
 
126
    "\244\303", "tu",
 
127
    "\244\303\244\246\241\253", "vvu", "\244\303\244\246\241\253\244\241", "vva", "\244\303\244\246\241\253\244\243", "vvi",
 
128
    "\244\303\244\246\241\253\244\247", "vve", "\244\303\244\246\241\253\244\251", "vvo",
 
129
    "\244\303\244\253", "kka", "\244\303\244\254", "gga", "\244\303\244\255", "kki", "\244\303\244\255\244\343", "kkya",
 
130
    "\244\303\244\255\244\345", "kkyu", "\244\303\244\255\244\347", "kkyo", "\244\303\244\256", "ggi", "\244\303\244\256\244\343", "ggya",
 
131
    "\244\303\244\256\244\345", "ggyu", "\244\303\244\256\244\347", "ggyo", "\244\303\244\257", "kku", "\244\303\244\260", "ggu",
 
132
    "\244\303\244\261", "kke", "\244\303\244\262", "gge", "\244\303\244\263", "kko", "\244\303\244\264", "ggo", "\244\303\244\265", "ssa",
 
133
    "\244\303\244\266", "zza", "\244\303\244\267", "ssi", "\244\303\244\267\244\343", "ssya",
 
134
    "\244\303\244\267\244\345", "ssyu", "\244\303\244\267\244\347", "ssho",
 
135
    "\244\303\244\270", "zzi", "\244\303\244\270\244\343", "zzya", "\244\303\244\270\244\345", "zzyu", "\244\303\244\270\244\347", "zzyo",
 
136
    "\244\303\244\271", "ssu", "\244\303\244\272", "zzu", "\244\303\244\273", "sse", "\244\303\244\274", "zze", "\244\303\244\275", "sso",
 
137
    "\244\303\244\276", "zzo", "\244\303\244\277", "tta", "\244\303\244\300", "dda", "\244\303\244\301", "tti",
 
138
    "\244\303\244\301\244\343", "ttya", "\244\303\244\301\244\345", "ttyu", "\244\303\244\301\244\347", "ttyo", "\244\303\244\302", "ddi",
 
139
    "\244\303\244\302\244\343", "ddya", "\244\303\244\302\244\345", "ddyu", "\244\303\244\302\244\347", "ddyo", "\244\303\244\304", "ttu",
 
140
    "\244\303\244\305", "ddu", "\244\303\244\306", "tte", "\244\303\244\307", "dde", "\244\303\244\310", "tto", "\244\303\244\311", "ddo",
 
141
    "\244\303\244\317", "hha", "\244\303\244\320", "bba", "\244\303\244\321", "ppa", "\244\303\244\322", "hhi",
 
142
    "\244\303\244\322\244\343", "hhya", "\244\303\244\322\244\345", "hhyu", "\244\303\244\322\244\347", "hhyo", "\244\303\244\323", "bbi",
 
143
    "\244\303\244\323\244\343", "bbya", "\244\303\244\323\244\345", "bbyu", "\244\303\244\323\244\347", "bbyo", "\244\303\244\324", "ppi",
 
144
    "\244\303\244\324\244\343", "ppya", "\244\303\244\324\244\345", "ppyu", "\244\303\244\324\244\347", "ppyo", "\244\303\244\325", "hhu",
 
145
    "\244\303\244\325\244\241", "ffa", "\244\303\244\325\244\243", "ffi", "\244\303\244\325\244\247", "ffe", "\244\303\244\325\244\251", "ffo",
 
146
    "\244\303\244\326", "bbu", "\244\303\244\327", "ppu", "\244\303\244\330", "hhe", "\244\303\244\331", "bbe", "\244\303\244\332", "ppe",
 
147
    "\244\303\244\333", "hho", "\244\303\244\334", "bbo", "\244\303\244\335", "ppo", "\244\303\244\344", "yya", "\244\303\244\346", "yyu",
 
148
    "\244\303\244\350", "yyo", "\244\303\244\351", "rra", "\244\303\244\352", "rri", "\244\303\244\352\244\343", "rrya",
 
149
    "\244\303\244\352\244\345", "rryu", "\244\303\244\352\244\347", "rryo", "\244\303\244\353", "rru", "\244\303\244\354", "rre",
 
150
    "\244\303\244\355", "rro",
 
151
 
 
152
    "\244\304", "tu", "\244\305", "du", "\244\306", "te", "\244\307", "de", "\244\310", "to", "\244\311", "do",
 
153
 
 
154
    "\244\312", "na", "\244\313", "ni", "\244\313\244\343", "nya", "\244\313\244\345", "nyu", "\244\313\244\347", "nyo",
 
155
    "\244\314", "nu", "\244\315", "ne", "\244\316", "no",
 
156
 
 
157
    "\244\317", "ha", "\244\320", "ba", "\244\321", "pa", "\244\322", "hi", "\244\322\244\343", "hya",
 
158
    "\244\322\244\345", "hyu", "\244\322\244\347", "hyo", "\244\323", "bi", "\244\323\244\343", "bya", "\244\323\244\345", "byu",
 
159
    "\244\323\244\347", "byo", "\244\324", "pi", "\244\324\244\343", "pya", "\244\324\244\345", "pyu", "\244\324\244\347", "pyo",
 
160
    "\244\325", "hu", "\244\325\244\241", "fa", "\244\325\244\243", "fi", "\244\325\244\247", "fe", "\244\325\244\251", "fo",
 
161
    "\244\326", "bu", "\244\327", "pu", "\244\330", "he", "\244\331", "be", "\244\332", "pe", "\244\333", "ho",
 
162
    "\244\334", "bo", "\244\335", "po",
 
163
 
 
164
    "\244\336", "ma", "\244\337", "mi", "\244\337\244\343", "mya", "\244\337\244\345", "myu", "\244\337\244\347", "myo",
 
165
    "\244\340", "mu", "\244\341", "me", "\244\342", "mo",
 
166
 
 
167
    "\244\343", "ya", "\244\344", "ya", "\244\345", "yu", "\244\346", "yu", "\244\347", "yo", "\244\350", "yo",
 
168
 
 
169
    "\244\351", "ra", "\244\352", "ri", "\244\352\244\343", "rya", "\244\352\244\345", "ryu", "\244\352\244\347", "ryo",
 
170
    "\244\353", "ru", "\244\354", "re", "\244\355", "ro",
 
171
 
 
172
    "\244\356", "wa", "\244\357", "wa", "\244\360", "i", "\244\361", "e", 
 
173
    "\244\362", "wo", "\244\363", "n",
 
174
    "\244\363\244\242", "n'a", "\244\363\244\244", "n'i", "\244\363\244\246", "n'u", "\244\363\244\250", "n'e", "\244\363\244\252", "n'o",
 
175
    "", ""
 
176
};
 
177
 
 
178
#define H2rom_buflen 11
 
179
 
 
180
int
 
181
H2rom(c, n, type)
 
182
     Character *c;
 
183
     Character *n;
 
184
     int type;
 
185
{
 
186
    static int index_table[0x81];
 
187
    static int index_made=0;
 
188
    static struct H2rom_tbl *H2rom_ptr;
 
189
    struct H2rom_tbl *p;
 
190
    int i, clen, ylen;
 
191
    unsigned char buffer[H2rom_buflen];
 
192
    int max_match, match_more;
 
193
    char *max_romaji;
 
194
 
 
195
    if (index_made == 0) {
 
196
        int last;
 
197
 
 
198
        for (i = 0; i < 0x81; ++ i) {
 
199
            index_table[i] = -1;
 
200
        }
 
201
        index_table[0x21] = 0;
 
202
        H2rom_ptr = (romaji_type == HEPBURN) ? H2rom_h_table : H2rom_k_table;
 
203
        for (p = H2rom_ptr, i = 0; *(p->kana) != '\0'; ++ p, ++ i) {
 
204
            index_table[(((p->kana)[1])&0x7f)+1] = i+1;
 
205
        }
 
206
        last = i;
 
207
        for (i = 0x80; i >= 0; -- i) {
 
208
            if (index_table[i] == -1)
 
209
                index_table[i] = last;
 
210
            else
 
211
                last = index_table[i];
 
212
        }
 
213
        index_made = 1;
 
214
    }
 
215
 
 
216
    buffer[H2rom_buflen-1] = '\0'; clen = H2rom_buflen-1;
 
217
    for (i = 0; i < (H2rom_buflen-1)/2; i ++) {
 
218
        buffer[i*2  ] = c[i].c1;
 
219
        buffer[i*2+1] = c[i].c2;
 
220
 
 
221
        if (c[i].c1 == '\0') {
 
222
            clen = i*2;
 
223
            break;
 
224
        }
 
225
    }
 
226
 
 
227
    if (clen == 0) {
 
228
        n[0].type=OTHER;
 
229
        n[0].c1 = '\0';
 
230
        return 0;
 
231
    }
 
232
 
 
233
    max_match = 0;
 
234
    max_romaji = NULL;
 
235
    match_more = 0;
 
236
    for (i = index_table[buffer[1]&0x7f];
 
237
         i < index_table[(buffer[1]&0x7f)+1];
 
238
         ++ i) {
 
239
        ylen = strlen((const char *)(H2rom_ptr[i].kana));
 
240
        if (clen >= ylen) {
 
241
            if (max_match < ylen) {
 
242
                if (strncmp((const char *)buffer, (char *)(H2rom_ptr[i].kana), ylen) == 0) {
 
243
                    max_match = ylen/2;
 
244
                    max_romaji = H2rom_ptr[i].romaji;
 
245
                }
 
246
            }
 
247
        } else {
 
248
            if (match_more == 0)
 
249
                if (strncmp((const char *)buffer, (char *)(H2rom_ptr[i].kana), clen) == 0)
 
250
                    match_more = 1;
 
251
        }
 
252
    }
 
253
 
 
254
    if (max_romaji == NULL) {
 
255
        i = 0;
 
256
        max_match = 1;
 
257
    } else {
 
258
        for (i = 0; max_romaji[i] != '\0'; ++ i) {
 
259
            n[i].type=type;
 
260
            n[i].c1 = max_romaji[i];
 
261
        }
 
262
    }
 
263
    n[i].type=OTHER;
 
264
    n[i].c1 = '\0';
 
265
 
 
266
    return (match_more == 0) ? max_match : -max_match;
 
267
}
 
268
 
 
269
int
 
270
H2a(c, n)
 
271
     Character *c;
 
272
     Character *n;
 
273
{
 
274
    return H2rom(c, n, ASCII);
 
275
}
 
276
 
 
277
int
 
278
H2j(c, n)
 
279
     Character *c;
 
280
     Character *n;
 
281
{
 
282
    return H2rom(c, n, JISROMAN);
 
283
}
 
284
 
 
285
int
 
286
H2K(c, n)
 
287
     Character *c;
 
288
     Character *n;
 
289
{
 
290
    if (c[0].c1 == 0xa4) {
 
291
        n[0].type = JIS83;
 
292
        n[0].c1 = 0xa5;
 
293
        n[0].c2 = c[0].c2;
 
294
        n[1].type = OTHER;
 
295
        n[1].c1 = 0;
 
296
        n[1].c2 = 0;
 
297
        if (c[0].c2 == 0xa6) { /* == charcter code(\244\246) */
 
298
            if (c[1].c1 == 0)
 
299
                return -1;
 
300
            if ((c[1].c1 == 0xa1) && (c[1].c2 == 0xab)) { /* == charcter code(\244\246),charcter code(\241\253) */
 
301
                n[0].type = JIS83;
 
302
                n[0].c1 = 0xa5;
 
303
                n[0].c2 = 0xf4;
 
304
                return 2;
 
305
            }
 
306
        }
 
307
        return 1;
 
308
    } else if ((c[0].c1 == 0xa1) &&
 
309
               ((c[0].c2 == 0xbc) || (c[0].c2 == 0xab) || (c[0].c2 == 0xac))) {
 
310
        n[0].type = JIS83;
 
311
        n[0].c1 = c[0].c1;
 
312
        n[0].c2 = c[0].c2;
 
313
        n[1].type = OTHER;
 
314
        n[1].c1 = 0;
 
315
        n[1].c2 = 0;
 
316
        return 1;
 
317
    } else {
 
318
        n[0].type = OTHER;
 
319
        n[0].c1 = 0;
 
320
        n[0].c2 = 0;
 
321
        return 1;
 
322
    }
 
323
}
 
324
 
 
325
int
 
326
H2k(c, n)
 
327
     Character *c;
 
328
     Character *n;
 
329
{
 
330
    unsigned char *b;
 
331
    int i;
 
332
 
 
333
    static unsigned char H2k_table[0x60][3] = {
 
334
        "",   "'",  "1",  "(",  "2",  ")",  "3",  "*",
 
335
        "4",  "+",  "5",  "6",  "6^", "7",  "7^", "8",
 
336
        "8^", "9",  "9^", ":",  ":^", ";",  ";^", "<",
 
337
        "<^", "=",  "=^", ">",  ">^", "?",  "?^", "@",
 
338
        "@^", "A",  "A^", "/",  "B",  "B^", "C",  "C^",
 
339
        "D",  "D^", "E",  "F",  "G",  "H",  "I",  "J",
 
340
        "J^", "J_", "K",  "K^", "K_", "L",  "L^", "L_",
 
341
        "M",  "M^", "M_", "N",  "N^", "N_", "O",  "P",
 
342
        "Q",  "R",  "S",  ",",  "T",  "-",  "U",  ".",
 
343
        "V",  "W",  "X",  "Y",  "Z",  "[",  "\\",  "\\",
 
344
        "2",  "4",  "&",  "]",  "",   "",   "",   "",
 
345
        "",   "",   "",   "",   "",   "",   "",   ""};
 
346
 
 
347
    if (c[0].c1 == 0xa4) {
 
348
        for (b = H2k_table[(c[0].c2 & 0x7f) - 0x20], i = 0;
 
349
             *b != '\0'; ++ b, ++ i) {
 
350
            n[i].type = KATAKANA;
 
351
            n[i].c1 = *b;
 
352
        }
 
353
        n[i].type = OTHER;
 
354
        n[i].c1 = 0;
 
355
    } else if ((c[0].c1 == 0xa1) &&
 
356
               ((c[0].c2 == 0xbc) || (c[0].c2 == 0xab) || (c[0].c2 == 0xac))) {
 
357
        n[0].type = KATAKANA;
 
358
        switch(c[0].c2) {
 
359
          case 0xbc:
 
360
            n[0].c1 = '0'; break;
 
361
          case 0xab:
 
362
            n[0].c1 = '^'; break;
 
363
          case 0xac:
 
364
            n[0].c1 = '_'; break;
 
365
        }
 
366
        n[1].type = OTHER;
 
367
        n[1].c1 = 0;
 
368
    } else {
 
369
        n[0].type = OTHER;
 
370
        n[0].c1 = 0;
 
371
    }
 
372
    return 1;
 
373
}
 
374
 
 
375
#ifdef WAKATIGAKI
 
376
/* As for the hiragana as well, the function which isn't necessarily needed if reading raising becomes possible. */
 
377
int
 
378
H2H(c, n)
 
379
     Character *c;
 
380
     Character *n;
 
381
{
 
382
    unsigned char wo_separator = ' ';
 
383
 
 
384
    if (c[0].c1 == 0xa4 && c[0].c2 != 0xF2) { /* != charcter code(\244\362) */
 
385
        if ( bunkatu_mode ) {
 
386
            if ( wo_mode == 2 ) {
 
387
                n[0].type = ASCII;
 
388
                n[0].c1 = wo_separator;
 
389
                n[0].c2 = 0;
 
390
                n[1].type = JIS83;
 
391
                n[1].c1 = c[0].c1;
 
392
                n[1].c2 = c[0].c2;
 
393
                n[2].type = OTHER;
 
394
                n[2].c1 = 0;
 
395
                n[2].c2 = 0;
 
396
                wo_mode = 0;
 
397
                return 2;
 
398
            } else {
 
399
                n[0].type = JIS83;
 
400
                n[0].c1 = c[0].c1;
 
401
                n[0].c2 = c[0].c2;
 
402
                n[1].type = OTHER;
 
403
                n[1].c1 = 0;
 
404
                n[1].c2 = 0;
 
405
                wo_mode = 0;
 
406
                return 1;
 
407
            }
 
408
        } else {
 
409
            n[0].type = JIS83;
 
410
            n[0].c1 = c[0].c1;
 
411
            n[0].c2 = c[0].c2;
 
412
            n[1].type = OTHER;
 
413
            n[1].c1 = 0;
 
414
            n[1].c2 = 0;
 
415
            return 1;
 
416
        }
 
417
    } else if (c[0].c1 == 0xa4 && c[0].c2 == 0xF2) { /* '\244\362' */
 
418
        if (bunkatu_mode) {
 
419
            if ( wo_mode == 1 || wo_mode == 2 ) {
 
420
                n[0].type = ASCII;
 
421
                n[0].c1 = wo_separator;
 
422
                n[0].c2 = 0;
 
423
                n[1].type = JIS83;
 
424
                n[1].c1 = c[0].c1;
 
425
                n[1].c2 = c[0].c2;
 
426
                n[2].type = OTHER;
 
427
                n[2].c1 = 0;
 
428
                n[2].c2 = 0;
 
429
                wo_mode = 2;
 
430
                return 2;
 
431
            } else {
 
432
                n[0].type = JIS83; /* aaa */
 
433
                n[0].c1 = c[0].c1;
 
434
                n[0].c2 = c[0].c2;
 
435
                n[1].type = ASCII;
 
436
                n[1].c1 = wo_separator;
 
437
                n[1].c2 = 0;
 
438
                n[2].type = OTHER;
 
439
                n[2].c1 = 0;
 
440
                n[2].c2 = 0;
 
441
                wo_mode = 2;
 
442
                return 1;
 
443
            }
 
444
        } else {
 
445
            n[0].type = JIS83; /* bbb */
 
446
            n[0].c1 = c[0].c1;
 
447
            n[0].c2 = c[0].c2;
 
448
            n[1].type = OTHER;
 
449
            n[1].c1 = 0;
 
450
            n[1].c2 = 0;
 
451
            return 1;
 
452
        }
 
453
    } else if ((c[0].c1 == 0xa1) &&
 
454
               ((c[0].c2 == 0xbc) || (c[0].c2 == 0xab) || (c[0].c2 == 0xac))) {
 
455
        n[0].type = JIS83;
 
456
        n[0].c1 = c[0].c1;
 
457
        n[0].c2 = c[0].c2;
 
458
        n[1].type = OTHER;
 
459
        n[1].c1 = 0;
 
460
        n[1].c2 = 0;
 
461
        return 1;
 
462
    } else {
 
463
        n[0].type = OTHER;
 
464
        n[0].c1 = 0;
 
465
        n[0].c2 = 0;
 
466
        return 1;
 
467
    }
 
468
}
 
469
#endif /* WAKATIGAKI */