1 static const unsigned short sjis_mac2wchar1[] = { // 0x03ac - 0x03c9
2 0x339c,	0x339f,	0x339d,	0x33a0,
3 0x33a4,	0xff4d,	0x33a1,	0x33a5,
4 0x339e,	0x33a2,	0x338e,	0xff47,
5 0x338f,	0x33c4,	0x3396,	0x3397,
6 0x2113,	0x3398,	0x33b3,	0x33b2,
7 0x33b1,	0x33b0,	0x2109,	0x33d4,
8 0x33cb,	0x3390,	0x3385,	0x3386,
9 0x3387,	0xf860,	};
10 static const unsigned short sjis_mac2wchar2[] = { // 0x0406 - 0x0420
11 0x2116,	0x33cd,
12 0x2121,	0xf861,	0x2664,	0x2667,
13 0x2661,	0x2662,	0x2660,	0x2663,
14 0x2665,	0x2666,	0x0000,	0x0000,
15 0x0000,	0x0000,	0x0000,	0x0000,
16 0x0000,	0x0000,	0x0000,	0x0000,
17 0x0000,	0x0000,	0x3020,	0x260e,
18 0x3004,	};
19 static const unsigned short sjis_mac2wchar3[] = { // 0x0432 - 0x0441
20 0x261e,	0x261c,
21 0x261d,	0x261f,	0x21c6,	0x21c4,
22 0x21c5,	0xf860,	0x21e8,	0x21e6,
23 0x21e7,	0x21e9,	0x21e8,	0x21e6,
24 0x21e7,	0x21e9,	};
25 static const unsigned short sjis_mac2wchar4[] = { // 0x0468 - 0x0480
26 0x3230,	0x322a,	0x322b,	0x322c,
27 0x322d,	0x322e,	0x322f,	0x3240,
28 0x3237,	0x3242,	0x3243,	0x3239,
29 0x323a,	0x3231,	0x323e,	0x3234,
30 0x3232,	0x323b,	0x3236,	0x3233,
31 0x3235,	0x323c,	0x323d,	0x323f,
32 0x3238,	};
33 static const unsigned short sjis_mac2wchar5[] = { // 0x04b8 - 0x04e8
34 0x5927,	0x5c0f,	0x32a4,	0x32a5,
35 0x32a6,	0x32a7,	0x32a8,	0x32a9,
36 0x3296,	0x329d,	0x3298,	0x329e,
37 0x63a7,	0x3299,	0x3349,	0x3322,
38 0x334d,	0x3314,	0x3316,	0x3305,
39 0x3333,	0x334e,	0x3303,	0x3336,
40 0x3318,	0x3315,	0x3327,	0x3351,
41 0x334a,	0x3339,	0x3357,	0x330d,
42 0x3342,	0x3323,	0x3326,	0x333b,
43 0x332b,	0x0000,	0x0000,	0x0000,
44 0x0000,	0x0000,	0x0000,	0x0000,
45 0x3300,	0x331e,	0x332a,	0x3331,
46 0x3347,	};
47 static const unsigned short sjis_mac2wchar6[] = { // 0x050c - 0x0551
48 0x337e,	0x337d,	0x337c,	0x337b,
49 0x0000,	0x0000,	0x0000,	0x0000,
50 0x0000,	0x0000,	0x0000,	0x0000,
51 0x0000,	0x0000,	0x0000,	0x0000,
52 0x0000,	0x0000,	0x0000,	0x0000,
53 0x0000,	0x337f,	0xf862,	0xf862,
54 0x222e,	0x221f,	0x22bf,	0x0000,
55 0x0000,	0x0000,	0x0000,	0x0000,
56 0x0000,	0x0000,	0x0000,	0x0000,
57 0x0000,	0x0000,	0x0000,	0x0000,
58 0x0000,	0x0000,	0x0000,	0x0000,
59 0x301d,	0x301f,	0x0000,	0x0000,
60 0x0000,	0x0000,	0x0000,	0x0000,
61 0x0000,	0x0000,	0x0000,	0x0000,
62 0x0000,	0x0000,	0x0000,	0x0000,
63 0x0000,	0x0000,	0x0000,	0x0000,
64 0x3094,	0x0000,	0x30f7,	0x30f8,
65 0x30f9,	0x30fa,	};
66 static const unsigned short sjis_mac2wchar7[] = { // 0x1ed9 - 0x1f18
67 0x3001,	0x3002,	0x0000,
68 0x0000,	0x0000,	0x0000,	0x0000,
69 0x0000,	0x0000,	0x0000,	0x0000,
70 0x0000,	0x0000,	0x0000,	0x0000,
71 0xffe3,	0xfe33,	0x0000,	0x0000,
72 0x0000,	0x0000,	0x0000,	0x0000,
73 0x0000,	0x0000,	0x0000,	0x30fc,
74 0xfe31,	0x2010,	0x0000,	0x0000,
75 0x301c,	0x2016,	0xff5c,	0x2026,
76 0xfe30,	0x0000,	0x0000,	0x0000,
77 0x0000,	0xfe35,	0xfe36,	0xfe39,
78 0xfe3a,	0xff3b,	0xff3d,	0xfe37,
79 0xfe38,	0xfe3f,	0xfe40,	0xfe3d,
80 0xfe3e,	0xfe41,	0xfe42,	0xfe43,
81 0xfe44,	0xfe3b,	0xfe3c,	0x0000,
82 0x0000,	0x0000,	0x0000,	0x0000,
83 0xff1d,	};
84 static const unsigned short sjis_mac2wchar8[] = { // 0x1ff2 - 0x20a5
85 0x3041,	0x0000,
86 0x3043,	0x0000,	0x3045,	0x0000,
87 0x3047,	0x0000,	0x3049,	0x0000,
88 0x0000,	0x0000,	0x0000,	0x0000,
89 0x0000,	0x0000,	0x0000,	0x0000,
90 0x0000,	0x0000,	0x0000,	0x0000,
91 0x0000,	0x0000,	0x0000,	0x0000,
92 0x0000,	0x0000,	0x0000,	0x0000,
93 0x0000,	0x0000,	0x0000,	0x0000,
94 0x3063,	0x0000,	0x0000,	0x0000,
95 0x0000,	0x0000,	0x0000,	0x0000,
96 0x0000,	0x0000,	0x0000,	0x0000,
97 0x0000,	0x0000,	0x0000,	0x0000,
98 0x0000,	0x0000,	0x0000,	0x0000,
99 0x0000,	0x0000,	0x0000,	0x0000,
100 0x0000,	0x0000,	0x0000,	0x0000,
101 0x0000,	0x0000,	0x0000,	0x0000,
102 0x3083,	0x0000,	0x3085,	0x0000,
103 0x3087,	0x0000,	0x0000,	0x0000,
104 0x0000,	0x0000,	0x0000,	0x308e,
105 0x0000,	0x0000,	0x0000,	0x0000,
106 0x0000,	0x0000,	0x0000,	0x0000,
107 0x0000,	0x0000,	0x0000,	0x0000,
108 0x0000,	0x0000,	0x0000,	0x0000,
109 0x30a1,	0x0000,	0x30a3,	0x0000,
110 0x30a5,	0x0000,	0x30a7,	0x0000,
111 0x30a9,	0x0000,	0x0000,	0x0000,
112 0x0000,	0x0000,	0x0000,	0x0000,
113 0x0000,	0x0000,	0x0000,	0x0000,
114 0x0000,	0x0000,	0x0000,	0x0000,
115 0x0000,	0x0000,	0x0000,	0x0000,
116 0x0000,	0x0000,	0x0000,	0x0000,
117 0x0000,	0x0000,	0x30c3,	0x0000,
118 0x0000,	0x0000,	0x0000,	0x0000,
119 0x0000,	0x0000,	0x0000,	0x0000,
120 0x0000,	0x0000,	0x0000,	0x0000,
121 0x0000,	0x0000,	0x0000,	0x0000,
122 0x0000,	0x0000,	0x0000,	0x0000,
123 0x0000,	0x0000,	0x0000,	0x0000,
124 0x0000,	0x0000,	0x0000,	0x0000,
125 0x0000,	0x0000,	0x30e3,	0x0000,
126 0x30e5,	0x0000,	0x30e7,	0x0000,
127 0x0000,	0x0000,	0x0000,	0x0000,
128 0x0000,	0x30ee,	0x0000,	0x0000,
129 0x0000,	0x0000,	0x0000,	0x0000,
130 0x30f5,	0x30f6,	};
131 
132 static const unsigned short wchar2sjis_mac4[] = { // 0x2660 - 0x2667
133 0x040e,	0x040c,	0x040d,	0x040f,
134 0x040a,	0x0410,	0x0411,	0x040b,
135 };
136 
137 static const unsigned short wchar2sjis_mac7[] = { // 0x322a - 0x3243
138 0x0469, 0x046a,
139 0x046b, 0x046c, 0x046d, 0x046e,
140 0x0468, 0x0475, 0x0478, 0x047b,
141 0x0477, 0x047c, 0x047a, 0x0470,
142 0x0480, 0x0473, 0x0474, 0x0479,
143 0x047d, 0x047e, 0x0476, 0x047f,
144 0x046f, 0x0000, 0x0471, 0x0472,
145 };
146 
147 static const unsigned short wchar2sjis_mac8[] = { // 0x3296 - 0x329e
148 0x04c0, 0x0000,
149 0x04c2, 0x04c5, 0x0000, 0x0000,
150 0x0000, 0x04c1, 0x04c3, };
151 
152 static const unsigned short wchar2sjis_mac9[] = { // 0x3300 - 0x33d4
153 0x04e4,	0x0000,	0x0000,	0x04ce,
154 0x0000,	0x04cb,	0x0000,	0x0000,
155 0x0000,	0x0000,	0x0000,	0x0000,
156 0x0000,	0x04d7,	0x0000,	0x0000,
157 0x0000,	0x0000,	0x0000,	0x0000,
158 0x04c9,	0x04d1,	0x04ca,	0x0000,
159 0x04d0,	0x0000,	0x0000,	0x0000,
160 0x0000,	0x0000,	0x04e5,	0x0000,
161 0x0000,	0x0000,	0x04c7,	0x04d9,
162 0x0000,	0x0000,	0x04da,	0x04d2,
163 0x0000,	0x0000,	0x04e6,	0x04dc,
164 0x0000,	0x0000,	0x0000,	0x0000,
165 0x0000,	0x04e7,	0x0000,	0x04cc,
166 0x0000,	0x0000,	0x04cf,	0x0000,
167 0x0000,	0x04d5,	0x0000,	0x04db,
168 0x0000,	0x0000,	0x0000,	0x0000,
169 0x0000,	0x0000,	0x04d8,	0x0000,
170 0x0000,	0x0000,	0x0000,	0x04e8,
171 0x0000,	0x04c6,	0x04d4,	0x0000,
172 0x0000,	0x04c8,	0x04cd,	0x0000,
173 0x0000,	0x04d3,	0x0000,	0x0000,
174 0x0000,	0x0000,	0x0000,	0x04d6,
175 0x0000,	0x0000,	0x0000,	0x0000,
176 0x0000,	0x0000,	0x0000,	0x0000,
177 0x0000,	0x0000,	0x0000,	0x0000,
178 0x0000,	0x0000,	0x0000,	0x0000,
179 0x0000,	0x0000,	0x0000,	0x0000,
180 0x0000,	0x0000,	0x0000,	0x0000,
181 0x0000,	0x0000,	0x0000,	0x0000,
182 0x0000,	0x0000,	0x0000,	0x0000,
183 0x0000,	0x0000,	0x0000,	0x050f,
184 0x050e,	0x050d,	0x050c,	0x0521,
185 0x0000,	0x0000,	0x0000,	0x0000,
186 0x0000,	0x03c6,	0x03c7,	0x03c8,
187 0x0000,	0x0000,	0x0000,	0x0000,
188 0x0000,	0x0000,	0x03b6,	0x03b8,
189 0x03c5,	0x0000,	0x0000,	0x0000,
190 0x0000,	0x0000,	0x03ba,	0x03bb,
191 0x03bd,	0x0000,	0x0000,	0x0000,
192 0x03ac,	0x03ae,	0x03b4,	0x03ad,
193 0x03af,	0x03b2,	0x03b5,	0x0000,
194 0x03b0,	0x03b3,	0x0000,	0x0000,
195 0x0000,	0x0000,	0x0000,	0x0000,
196 0x0000,	0x0000,	0x0000,	0x0000,
197 0x03c1,	0x03c0,	0x03bf,	0x03be,
198 0x0000,	0x0000,	0x0000,	0x0000,
199 0x0000,	0x0000,	0x0000,	0x0000,
200 0x0000,	0x0000,	0x0000,	0x0000,
201 0x0000,	0x0000,	0x0000,	0x0000,
202 0x03b9,	0x0000,	0x0000,	0x0000,
203 0x0000,	0x0000,	0x0000,	0x03c4,
204 0x0000,	0x0407,	0x0000,	0x0000,
205 0x0000,	0x0000,	0x0000,	0x0000,
206 0x03c3,	};
207 
208 static const unsigned short wchar2sjis_mac10[] = { // 0xfe30 - 0xfe44
209 0x1efc,	0x1ef4,	0x0000,	0x1ee9,
210 0x0000,	0x1f01,	0x1f02,	0x1f07,
211 0x1f08,	0x1f03,	0x1f04,	0x1f11,
212 0x1f12,	0x1f0b,	0x1f0c,	0x1f09,
213 0x1f0a,	0x1f0d,	0x1f0e,	0x1f0f,
214 0x1f10,	};
215 
216 static const unsigned short code_tbl[][3] = {
217 	{0x02f0, 0x0303, 0x2460},
218 	{0x030e, 0x0321, 0x2474},
219 	{0x032c, 0x0334, 0x2776},
220 	{0x0341, 0x0349, 0x2488},
221 	{0x034e, 0x0359, 0x2160},
222 	{0x0362, 0x036d, 0x2170},
223 	{0x038a, 0x03a3, 0x249c},
224 };
225 
226 static const unsigned short code_ofst_tbl[] [2]= {
227 	{0x03ac, 0x03c9},
228 	{0x0406, 0x0420},
229 	{0x0432, 0x0441},
230 	{0x0468, 0x0480},
231 	{0x04b8, 0x04e8},
232 	{0x050c, 0x0551},
233 	{0x1ed9, 0x1f18},
234 	{0x1ff2, 0x20a5},
235 };
236 
237 static const unsigned short *code_map[] = {
238 	sjis_mac2wchar1, sjis_mac2wchar2, sjis_mac2wchar3, sjis_mac2wchar4,
239 	sjis_mac2wchar5, sjis_mac2wchar6, sjis_mac2wchar7, sjis_mac2wchar8};
240 
241 static const unsigned short code_tbl_m[][6] = {
242 	{0x0340, 0xf860, 0x0030, 0x002e, 0x0000, 0x0000},
243 	{0x03c9, 0xf860, 0x0054, 0x0042, 0x0000, 0x0000},
244 	{0x035c, 0xf860, 0x0058, 0x0056, 0x0000, 0x0000},
245 	{0x0370, 0xf860, 0x0078, 0x0076, 0x0000, 0x0000},
246 	{0x0439, 0xf860, 0x2193, 0x2191, 0x0000, 0x0000},
247 	{0x0409, 0xf861, 0x0046, 0x0041, 0x0058, 0x0000},
248 	{0x035b, 0xf861, 0x0058, 0x0049, 0x0056, 0x0000},
249 	{0x036f, 0xf861, 0x0078, 0x0069, 0x0076, 0x0000},
250 	{0x035a, 0xf862, 0x0058, 0x0049, 0x0049, 0x0049},
251 	{0x036e, 0xf862, 0x0078, 0x0069, 0x0069, 0x0069},
252 	{0x0522, 0xf862, 0x6709, 0x9650, 0x4f1a, 0x793e},
253 	{0x0523, 0xf862, 0x8ca1, 0x56e3, 0x6cd5, 0x4eba},
254 };
255 
256 static  int code_tbl_m_len = sizeof(code_tbl_m)/(sizeof(unsigned short)*6);
257 
258 static const unsigned short s_form_tbl[] = {
259 	0x2010,0x2016,0x2026,
260 	0x3001,0x3002,0x301c,0x3041,0x3043,0x3045,0x3047,0x3049,
261 	0x3063,0x3083,0x3085,0x3087,0x308e,0x30a1,0x30a3,0x30a5,
262 	0x30a7,0x30a9,0x30c3,0x30e3,0x30e5,0x30e7,0x30ee,0x30f5,
263 	0x30f6,0x30fc,0xff1d,0xff3b,0xff3d,0xff5c,0xffe3, // vertical f87e (34)
264 	0x2026,0xff47,0xff4d, // halfwidth f87f (3)
265 	0x5927,0x5c0f,0x63a7, // enclosing circle 20dd (3)
266 	0x21e6,0x21e7,0x21e8,0x21e9, // black arrow f87a (4)
267 };
268 
269 static int s_form_tbl_len = sizeof(s_form_tbl)/sizeof(unsigned short);
270 
271 static const unsigned short s_form_sjis_tbl[] = {
272 	0xeb5d,0xeb61,0xeb63,
273 	0xeb41,0xeb42,0xeb60,0xec9f,0xeca1,0xeca3,0xeca5,0xeca7,
274 	0xecc1,0xece1,0xece3,0xece5,0xecec,0xed40,0xed42,0xed44,
275 	0xed46,0xed48,0xed62,0xed83,0xed85,0xed87,0xed8e,0xed95,
276 	0xed96,0xeb5b,0xeb81,0xeb6d,0xeb6e,0xeb62,0xeb50, // vertical
277 	0x00ff,0x864b,0x8645, // halfwidth
278 	0x8791,0x8792,0x879d, // enclosing circle
279 	0x86d4,0x86d5,0x86d3,0x86d6, // black arrow
280 };
281 
282 static const unsigned short s_form_sjis_fallback_tbl[] = {
283 	0x815d,0x8161,0x8163,
284 	0x8141,0x8142,0x8160,0x829f,0x82a1,0x82a3,0x82a5,0x82a7,
285 	0x82c1,0x82e1,0x82e3,0x82e5,0x82ec,0x8340,0x8342,0x8344,
286 	0x8346,0x8348,0x8362,0x8383,0x8385,0x8387,0x838e,0x8395,
287 	0x8396,0x815b,0x8181,0x816d,0x816e,0x8162,0x8150, // vertical
288 	0x815d,0x8287,0x828d, // halfwidth
289 	0x91e5,0x8fac,0x8d54, // enclosing circle
290 	0x86d0,0x86d1,0x86cf,0x86d2, // arrow
291 };
292 
293 static const unsigned short wchar2sjis_mac_r_tbl[][3] = {
294 	{0x2160, 0x216b, 0x034e},
295 	{0x2170, 0x217b, 0x0362},
296 	{0x2460, 0x2473, 0x02f0},
297 	{0x2474, 0x2487, 0x030e},
298 	{0x2488, 0x2490, 0x0341},
299 	{0x249c, 0x24b5, 0x038a},
300 	{0x2776, 0x277e, 0x032c},
301 	{0x30f7, 0x30fa, 0x054e},
302 	{0x32a4, 0x32a9, 0x04ba},
303 };
304 
305 static int wchar2sjis_mac_r_tbl_len = sizeof(wchar2sjis_mac_r_tbl)/(3*sizeof(unsigned short));
306 
307 static const unsigned short wchar2sjis_mac_r_map[][2] = {
308 	{0x2660, 0x2667},
309 	{0x322a, 0x3243},
310 	{0x3296, 0x329e},
311 	{0x3300, 0x33d4},
312 	{0xfe30, 0xfe44},
313 };
314 
315 static int wchar2sjis_mac_r_map_len = sizeof(wchar2sjis_mac_r_map)/(2*sizeof(unsigned short));
316 
317 static const unsigned short *wchar2sjis_mac_code_map[] = {
318 	wchar2sjis_mac4, wchar2sjis_mac7, wchar2sjis_mac8, wchar2sjis_mac9, wchar2sjis_mac10};
319 
320 static const unsigned short wchar2sjis_mac_wchar_tbl[][2] = {
321 	{0x2109, 0x03c2},
322 	{0x2113, 0x03bc},
323 	{0x2116, 0x0406},
324 	{0x2121, 0x0408},
325 	{0x21c4, 0x0437},
326 	{0x21c5, 0x0438},
327 	{0x21c6, 0x0436},
328 	{0x21e6, 0x043b},
329 	{0x21e7, 0x043c},
330 	{0x21e8, 0x043a},
331 	{0x21e9, 0x043d},
332 	{0x221f, 0x0525},
333 	{0x222e, 0x0524},
334 	{0x22bf, 0x0526},
335 	{0x260e, 0x041f},
336 	{0x261c, 0x0433},
337 	{0x261d, 0x0434},
338 	{0x261e, 0x0432},
339 	{0x261f, 0x0435},
340 	{0x3004, 0x0420},
341 	{0x301d, 0x0538},
342 	{0x301f, 0x0539},
343 	{0x3020, 0x041e},
344 	{0x3094, 0x054c},
345 };
346 
347 static int wchar2sjis_mac_wchar_tbl_len = sizeof(wchar2sjis_mac_wchar_tbl)/(2*sizeof(unsigned short));
348