]> git.proxmox.com Git - mirror_edk2.git/blame - AppPkg/Applications/Python/Python-2.7.10/Modules/cjkcodecs/_codecs_jp.c
EmbeddedPkg: Extend NvVarStoreFormattedLib LIBRARY_CLASS
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.10 / Modules / cjkcodecs / _codecs_jp.c
CommitLineData
7eb75bcc
DM
1/*\r
2 * _codecs_jp.c: Codecs collection for Japanese encodings\r
3 *\r
4 * Written by Hye-Shik Chang <perky@FreeBSD.org>\r
5 */\r
6\r
7#define USING_BINARY_PAIR_SEARCH\r
8#define EMPBASE 0x20000\r
9\r
10#include "cjkcodecs.h"\r
11#include "mappings_jp.h"\r
12#include "mappings_jisx0213_pair.h"\r
13#include "alg_jisx0201.h"\r
14#include "emu_jisx0213_2000.h"\r
15\r
16/*\r
17 * CP932 codec\r
18 */\r
19\r
20ENCODER(cp932)\r
21{\r
22 while (inleft > 0) {\r
23 Py_UNICODE c = IN1;\r
24 DBCHAR code;\r
25 unsigned char c1, c2;\r
26\r
27 if (c <= 0x80) {\r
28 WRITE1((unsigned char)c)\r
29 NEXT(1, 1)\r
30 continue;\r
31 }\r
32 else if (c >= 0xff61 && c <= 0xff9f) {\r
33 WRITE1(c - 0xfec0)\r
34 NEXT(1, 1)\r
35 continue;\r
36 }\r
37 else if (c >= 0xf8f0 && c <= 0xf8f3) {\r
38 /* Windows compatibility */\r
39 REQUIRE_OUTBUF(1)\r
40 if (c == 0xf8f0)\r
41 OUT1(0xa0)\r
42 else\r
43 OUT1(c - 0xfef1 + 0xfd)\r
44 NEXT(1, 1)\r
45 continue;\r
46 }\r
47\r
48 UCS4INVALID(c)\r
49 REQUIRE_OUTBUF(2)\r
50\r
51 TRYMAP_ENC(cp932ext, code, c) {\r
52 OUT1(code >> 8)\r
53 OUT2(code & 0xff)\r
54 }\r
55 else TRYMAP_ENC(jisxcommon, code, c) {\r
56 if (code & 0x8000) /* MSB set: JIS X 0212 */\r
57 return 1;\r
58\r
59 /* JIS X 0208 */\r
60 c1 = code >> 8;\r
61 c2 = code & 0xff;\r
62 c2 = (((c1 - 0x21) & 1) ? 0x5e : 0) + (c2 - 0x21);\r
63 c1 = (c1 - 0x21) >> 1;\r
64 OUT1(c1 < 0x1f ? c1 + 0x81 : c1 + 0xc1)\r
65 OUT2(c2 < 0x3f ? c2 + 0x40 : c2 + 0x41)\r
66 }\r
67 else if (c >= 0xe000 && c < 0xe758) {\r
68 /* User-defined area */\r
69 c1 = (Py_UNICODE)(c - 0xe000) / 188;\r
70 c2 = (Py_UNICODE)(c - 0xe000) % 188;\r
71 OUT1(c1 + 0xf0)\r
72 OUT2(c2 < 0x3f ? c2 + 0x40 : c2 + 0x41)\r
73 }\r
74 else\r
75 return 1;\r
76\r
77 NEXT(1, 2)\r
78 }\r
79\r
80 return 0;\r
81}\r
82\r
83DECODER(cp932)\r
84{\r
85 while (inleft > 0) {\r
86 unsigned char c = IN1, c2;\r
87\r
88 REQUIRE_OUTBUF(1)\r
89 if (c <= 0x80) {\r
90 OUT1(c)\r
91 NEXT(1, 1)\r
92 continue;\r
93 }\r
94 else if (c >= 0xa0 && c <= 0xdf) {\r
95 if (c == 0xa0)\r
96 OUT1(0xf8f0) /* half-width katakana */\r
97 else\r
98 OUT1(0xfec0 + c)\r
99 NEXT(1, 1)\r
100 continue;\r
101 }\r
102 else if (c >= 0xfd/* && c <= 0xff*/) {\r
103 /* Windows compatibility */\r
104 OUT1(0xf8f1 - 0xfd + c)\r
105 NEXT(1, 1)\r
106 continue;\r
107 }\r
108\r
109 REQUIRE_INBUF(2)\r
110 c2 = IN2;\r
111\r
112 TRYMAP_DEC(cp932ext, **outbuf, c, c2);\r
113 else if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xea)){\r
114 if (c2 < 0x40 || (c2 > 0x7e && c2 < 0x80) || c2 > 0xfc)\r
115 return 2;\r
116\r
117 c = (c < 0xe0 ? c - 0x81 : c - 0xc1);\r
118 c2 = (c2 < 0x80 ? c2 - 0x40 : c2 - 0x41);\r
119 c = (2 * c + (c2 < 0x5e ? 0 : 1) + 0x21);\r
120 c2 = (c2 < 0x5e ? c2 : c2 - 0x5e) + 0x21;\r
121\r
122 TRYMAP_DEC(jisx0208, **outbuf, c, c2);\r
123 else return 2;\r
124 }\r
125 else if (c >= 0xf0 && c <= 0xf9) {\r
126 if ((c2 >= 0x40 && c2 <= 0x7e) ||\r
127 (c2 >= 0x80 && c2 <= 0xfc))\r
128 OUT1(0xe000 + 188 * (c - 0xf0) +\r
129 (c2 < 0x80 ? c2 - 0x40 : c2 - 0x41))\r
130 else\r
131 return 2;\r
132 }\r
133 else\r
134 return 2;\r
135\r
136 NEXT(2, 1)\r
137 }\r
138\r
139 return 0;\r
140}\r
141\r
142\r
143/*\r
144 * EUC-JIS-2004 codec\r
145 */\r
146\r
147ENCODER(euc_jis_2004)\r
148{\r
149 while (inleft > 0) {\r
150 ucs4_t c = IN1;\r
151 DBCHAR code;\r
152 Py_ssize_t insize;\r
153\r
154 if (c < 0x80) {\r
155 WRITE1(c)\r
156 NEXT(1, 1)\r
157 continue;\r
158 }\r
159\r
160 DECODE_SURROGATE(c)\r
161 insize = GET_INSIZE(c);\r
162\r
163 if (c <= 0xFFFF) {\r
164 EMULATE_JISX0213_2000_ENCODE_BMP(code, c)\r
165 else TRYMAP_ENC(jisx0213_bmp, code, c) {\r
166 if (code == MULTIC) {\r
167 if (inleft < 2) {\r
168 if (flags & MBENC_FLUSH) {\r
169 code = find_pairencmap(\r
170 (ucs2_t)c, 0,\r
171 jisx0213_pair_encmap,\r
172 JISX0213_ENCPAIRS);\r
173 if (code == DBCINV)\r
174 return 1;\r
175 }\r
176 else\r
177 return MBERR_TOOFEW;\r
178 }\r
179 else {\r
180 code = find_pairencmap(\r
181 (ucs2_t)c, (*inbuf)[1],\r
182 jisx0213_pair_encmap,\r
183 JISX0213_ENCPAIRS);\r
184 if (code == DBCINV) {\r
185 code = find_pairencmap(\r
186 (ucs2_t)c, 0,\r
187 jisx0213_pair_encmap,\r
188 JISX0213_ENCPAIRS);\r
189 if (code == DBCINV)\r
190 return 1;\r
191 } else\r
192 insize = 2;\r
193 }\r
194 }\r
195 }\r
196 else TRYMAP_ENC(jisxcommon, code, c);\r
197 else if (c >= 0xff61 && c <= 0xff9f) {\r
198 /* JIS X 0201 half-width katakana */\r
199 WRITE2(0x8e, c - 0xfec0)\r
200 NEXT(1, 2)\r
201 continue;\r
202 }\r
203 else if (c == 0xff3c)\r
204 /* F/W REVERSE SOLIDUS (see NOTES) */\r
205 code = 0x2140;\r
206 else if (c == 0xff5e)\r
207 /* F/W TILDE (see NOTES) */\r
208 code = 0x2232;\r
209 else\r
210 return 1;\r
211 }\r
212 else if (c >> 16 == EMPBASE >> 16) {\r
213 EMULATE_JISX0213_2000_ENCODE_EMP(code, c)\r
214 else TRYMAP_ENC(jisx0213_emp, code, c & 0xffff);\r
215 else return insize;\r
216 }\r
217 else\r
218 return insize;\r
219\r
220 if (code & 0x8000) {\r
221 /* Codeset 2 */\r
222 WRITE3(0x8f, code >> 8, (code & 0xFF) | 0x80)\r
223 NEXT(insize, 3)\r
224 } else {\r
225 /* Codeset 1 */\r
226 WRITE2((code >> 8) | 0x80, (code & 0xFF) | 0x80)\r
227 NEXT(insize, 2)\r
228 }\r
229 }\r
230\r
231 return 0;\r
232}\r
233\r
234DECODER(euc_jis_2004)\r
235{\r
236 while (inleft > 0) {\r
237 unsigned char c = IN1;\r
238 ucs4_t code;\r
239\r
240 REQUIRE_OUTBUF(1)\r
241\r
242 if (c < 0x80) {\r
243 OUT1(c)\r
244 NEXT(1, 1)\r
245 continue;\r
246 }\r
247\r
248 if (c == 0x8e) {\r
249 /* JIS X 0201 half-width katakana */\r
250 unsigned char c2;\r
251\r
252 REQUIRE_INBUF(2)\r
253 c2 = IN2;\r
254 if (c2 >= 0xa1 && c2 <= 0xdf) {\r
255 OUT1(0xfec0 + c2)\r
256 NEXT(2, 1)\r
257 }\r
258 else\r
259 return 2;\r
260 }\r
261 else if (c == 0x8f) {\r
262 unsigned char c2, c3;\r
263\r
264 REQUIRE_INBUF(3)\r
265 c2 = IN2 ^ 0x80;\r
266 c3 = IN3 ^ 0x80;\r
267\r
268 /* JIS X 0213 Plane 2 or JIS X 0212 (see NOTES) */\r
269 EMULATE_JISX0213_2000_DECODE_PLANE2(**outbuf, c2, c3)\r
270 else TRYMAP_DEC(jisx0213_2_bmp, **outbuf, c2, c3) ;\r
271 else TRYMAP_DEC(jisx0213_2_emp, code, c2, c3) {\r
272 WRITEUCS4(EMPBASE | code)\r
273 NEXT_IN(3)\r
274 continue;\r
275 }\r
276 else TRYMAP_DEC(jisx0212, **outbuf, c2, c3) ;\r
277 else return 3;\r
278 NEXT(3, 1)\r
279 }\r
280 else {\r
281 unsigned char c2;\r
282\r
283 REQUIRE_INBUF(2)\r
284 c ^= 0x80;\r
285 c2 = IN2 ^ 0x80;\r
286\r
287 /* JIS X 0213 Plane 1 */\r
288 EMULATE_JISX0213_2000_DECODE_PLANE1(**outbuf, c, c2)\r
289 else if (c == 0x21 && c2 == 0x40) **outbuf = 0xff3c;\r
290 else if (c == 0x22 && c2 == 0x32) **outbuf = 0xff5e;\r
291 else TRYMAP_DEC(jisx0208, **outbuf, c, c2);\r
292 else TRYMAP_DEC(jisx0213_1_bmp, **outbuf, c, c2);\r
293 else TRYMAP_DEC(jisx0213_1_emp, code, c, c2) {\r
294 WRITEUCS4(EMPBASE | code)\r
295 NEXT_IN(2)\r
296 continue;\r
297 }\r
298 else TRYMAP_DEC(jisx0213_pair, code, c, c2) {\r
299 WRITE2(code >> 16, code & 0xffff)\r
300 NEXT(2, 2)\r
301 continue;\r
302 }\r
303 else return 2;\r
304 NEXT(2, 1)\r
305 }\r
306 }\r
307\r
308 return 0;\r
309}\r
310\r
311\r
312/*\r
313 * EUC-JP codec\r
314 */\r
315\r
316ENCODER(euc_jp)\r
317{\r
318 while (inleft > 0) {\r
319 Py_UNICODE c = IN1;\r
320 DBCHAR code;\r
321\r
322 if (c < 0x80) {\r
323 WRITE1((unsigned char)c)\r
324 NEXT(1, 1)\r
325 continue;\r
326 }\r
327\r
328 UCS4INVALID(c)\r
329\r
330 TRYMAP_ENC(jisxcommon, code, c);\r
331 else if (c >= 0xff61 && c <= 0xff9f) {\r
332 /* JIS X 0201 half-width katakana */\r
333 WRITE2(0x8e, c - 0xfec0)\r
334 NEXT(1, 2)\r
335 continue;\r
336 }\r
337#ifndef STRICT_BUILD\r
338 else if (c == 0xff3c) /* FULL-WIDTH REVERSE SOLIDUS */\r
339 code = 0x2140;\r
340 else if (c == 0xa5) { /* YEN SIGN */\r
341 WRITE1(0x5c);\r
342 NEXT(1, 1)\r
343 continue;\r
344 } else if (c == 0x203e) { /* OVERLINE */\r
345 WRITE1(0x7e);\r
346 NEXT(1, 1)\r
347 continue;\r
348 }\r
349#endif\r
350 else\r
351 return 1;\r
352\r
353 if (code & 0x8000) {\r
354 /* JIS X 0212 */\r
355 WRITE3(0x8f, code >> 8, (code & 0xFF) | 0x80)\r
356 NEXT(1, 3)\r
357 } else {\r
358 /* JIS X 0208 */\r
359 WRITE2((code >> 8) | 0x80, (code & 0xFF) | 0x80)\r
360 NEXT(1, 2)\r
361 }\r
362 }\r
363\r
364 return 0;\r
365}\r
366\r
367DECODER(euc_jp)\r
368{\r
369 while (inleft > 0) {\r
370 unsigned char c = IN1;\r
371\r
372 REQUIRE_OUTBUF(1)\r
373\r
374 if (c < 0x80) {\r
375 OUT1(c)\r
376 NEXT(1, 1)\r
377 continue;\r
378 }\r
379\r
380 if (c == 0x8e) {\r
381 /* JIS X 0201 half-width katakana */\r
382 unsigned char c2;\r
383\r
384 REQUIRE_INBUF(2)\r
385 c2 = IN2;\r
386 if (c2 >= 0xa1 && c2 <= 0xdf) {\r
387 OUT1(0xfec0 + c2)\r
388 NEXT(2, 1)\r
389 }\r
390 else\r
391 return 2;\r
392 }\r
393 else if (c == 0x8f) {\r
394 unsigned char c2, c3;\r
395\r
396 REQUIRE_INBUF(3)\r
397 c2 = IN2;\r
398 c3 = IN3;\r
399 /* JIS X 0212 */\r
400 TRYMAP_DEC(jisx0212, **outbuf, c2 ^ 0x80, c3 ^ 0x80) {\r
401 NEXT(3, 1)\r
402 }\r
403 else\r
404 return 3;\r
405 }\r
406 else {\r
407 unsigned char c2;\r
408\r
409 REQUIRE_INBUF(2)\r
410 c2 = IN2;\r
411 /* JIS X 0208 */\r
412#ifndef STRICT_BUILD\r
413 if (c == 0xa1 && c2 == 0xc0)\r
414 /* FULL-WIDTH REVERSE SOLIDUS */\r
415 **outbuf = 0xff3c;\r
416 else\r
417#endif\r
418 TRYMAP_DEC(jisx0208, **outbuf,\r
419 c ^ 0x80, c2 ^ 0x80) ;\r
420 else return 2;\r
421 NEXT(2, 1)\r
422 }\r
423 }\r
424\r
425 return 0;\r
426}\r
427\r
428\r
429/*\r
430 * SHIFT_JIS codec\r
431 */\r
432\r
433ENCODER(shift_jis)\r
434{\r
435 while (inleft > 0) {\r
436 Py_UNICODE c = IN1;\r
437 DBCHAR code;\r
438 unsigned char c1, c2;\r
439\r
440#ifdef STRICT_BUILD\r
441 JISX0201_R_ENCODE(c, code)\r
442#else\r
443 if (c < 0x80) code = c;\r
444 else if (c == 0x00a5) code = 0x5c; /* YEN SIGN */\r
445 else if (c == 0x203e) code = 0x7e; /* OVERLINE */\r
446#endif\r
447 else JISX0201_K_ENCODE(c, code)\r
448 else UCS4INVALID(c)\r
449 else code = NOCHAR;\r
450\r
451 if (code < 0x80 || (code >= 0xa1 && code <= 0xdf)) {\r
452 REQUIRE_OUTBUF(1)\r
453\r
454 OUT1((unsigned char)code)\r
455 NEXT(1, 1)\r
456 continue;\r
457 }\r
458\r
459 REQUIRE_OUTBUF(2)\r
460\r
461 if (code == NOCHAR) {\r
462 TRYMAP_ENC(jisxcommon, code, c);\r
463#ifndef STRICT_BUILD\r
464 else if (c == 0xff3c)\r
465 code = 0x2140; /* FULL-WIDTH REVERSE SOLIDUS */\r
466#endif\r
467 else\r
468 return 1;\r
469\r
470 if (code & 0x8000) /* MSB set: JIS X 0212 */\r
471 return 1;\r
472 }\r
473\r
474 c1 = code >> 8;\r
475 c2 = code & 0xff;\r
476 c2 = (((c1 - 0x21) & 1) ? 0x5e : 0) + (c2 - 0x21);\r
477 c1 = (c1 - 0x21) >> 1;\r
478 OUT1(c1 < 0x1f ? c1 + 0x81 : c1 + 0xc1)\r
479 OUT2(c2 < 0x3f ? c2 + 0x40 : c2 + 0x41)\r
480 NEXT(1, 2)\r
481 }\r
482\r
483 return 0;\r
484}\r
485\r
486DECODER(shift_jis)\r
487{\r
488 while (inleft > 0) {\r
489 unsigned char c = IN1;\r
490\r
491 REQUIRE_OUTBUF(1)\r
492\r
493#ifdef STRICT_BUILD\r
494 JISX0201_R_DECODE(c, **outbuf)\r
495#else\r
496 if (c < 0x80) **outbuf = c;\r
497#endif\r
498 else JISX0201_K_DECODE(c, **outbuf)\r
499 else if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xea)){\r
500 unsigned char c1, c2;\r
501\r
502 REQUIRE_INBUF(2)\r
503 c2 = IN2;\r
504 if (c2 < 0x40 || (c2 > 0x7e && c2 < 0x80) || c2 > 0xfc)\r
505 return 2;\r
506\r
507 c1 = (c < 0xe0 ? c - 0x81 : c - 0xc1);\r
508 c2 = (c2 < 0x80 ? c2 - 0x40 : c2 - 0x41);\r
509 c1 = (2 * c1 + (c2 < 0x5e ? 0 : 1) + 0x21);\r
510 c2 = (c2 < 0x5e ? c2 : c2 - 0x5e) + 0x21;\r
511\r
512#ifndef STRICT_BUILD\r
513 if (c1 == 0x21 && c2 == 0x40) {\r
514 /* FULL-WIDTH REVERSE SOLIDUS */\r
515 OUT1(0xff3c)\r
516 NEXT(2, 1)\r
517 continue;\r
518 }\r
519#endif\r
520 TRYMAP_DEC(jisx0208, **outbuf, c1, c2) {\r
521 NEXT(2, 1)\r
522 continue;\r
523 }\r
524 else\r
525 return 2;\r
526 }\r
527 else\r
528 return 2;\r
529\r
530 NEXT(1, 1) /* JIS X 0201 */\r
531 }\r
532\r
533 return 0;\r
534}\r
535\r
536\r
537/*\r
538 * SHIFT_JIS-2004 codec\r
539 */\r
540\r
541ENCODER(shift_jis_2004)\r
542{\r
543 while (inleft > 0) {\r
544 ucs4_t c = IN1;\r
545 DBCHAR code = NOCHAR;\r
546 int c1, c2;\r
547 Py_ssize_t insize;\r
548\r
549 JISX0201_ENCODE(c, code)\r
550 else DECODE_SURROGATE(c)\r
551\r
552 if (code < 0x80 || (code >= 0xa1 && code <= 0xdf)) {\r
553 WRITE1((unsigned char)code)\r
554 NEXT(1, 1)\r
555 continue;\r
556 }\r
557\r
558 REQUIRE_OUTBUF(2)\r
559 insize = GET_INSIZE(c);\r
560\r
561 if (code == NOCHAR) {\r
562 if (c <= 0xffff) {\r
563 EMULATE_JISX0213_2000_ENCODE_BMP(code, c)\r
564 else TRYMAP_ENC(jisx0213_bmp, code, c) {\r
565 if (code == MULTIC) {\r
566 if (inleft < 2) {\r
567 if (flags & MBENC_FLUSH) {\r
568 code = find_pairencmap\r
569 ((ucs2_t)c, 0,\r
570 jisx0213_pair_encmap,\r
571 JISX0213_ENCPAIRS);\r
572 if (code == DBCINV)\r
573 return 1;\r
574 }\r
575 else\r
576 return MBERR_TOOFEW;\r
577 }\r
578 else {\r
579 code = find_pairencmap(\r
580 (ucs2_t)c, IN2,\r
581 jisx0213_pair_encmap,\r
582 JISX0213_ENCPAIRS);\r
583 if (code == DBCINV) {\r
584 code = find_pairencmap(\r
585 (ucs2_t)c, 0,\r
586 jisx0213_pair_encmap,\r
587 JISX0213_ENCPAIRS);\r
588 if (code == DBCINV)\r
589 return 1;\r
590 }\r
591 else\r
592 insize = 2;\r
593 }\r
594 }\r
595 }\r
596 else TRYMAP_ENC(jisxcommon, code, c) {\r
597 /* abandon JIS X 0212 codes */\r
598 if (code & 0x8000)\r
599 return 1;\r
600 }\r
601 else return 1;\r
602 }\r
603 else if (c >> 16 == EMPBASE >> 16) {\r
604 EMULATE_JISX0213_2000_ENCODE_EMP(code, c)\r
605 else TRYMAP_ENC(jisx0213_emp, code, c&0xffff);\r
606 else return insize;\r
607 }\r
608 else\r
609 return insize;\r
610 }\r
611\r
612 c1 = code >> 8;\r
613 c2 = (code & 0xff) - 0x21;\r
614\r
615 if (c1 & 0x80) { /* Plane 2 */\r
616 if (c1 >= 0xee) c1 -= 0x87;\r
617 else if (c1 >= 0xac || c1 == 0xa8) c1 -= 0x49;\r
618 else c1 -= 0x43;\r
619 }\r
620 else /* Plane 1 */\r
621 c1 -= 0x21;\r
622\r
623 if (c1 & 1) c2 += 0x5e;\r
624 c1 >>= 1;\r
625 OUT1(c1 + (c1 < 0x1f ? 0x81 : 0xc1))\r
626 OUT2(c2 + (c2 < 0x3f ? 0x40 : 0x41))\r
627\r
628 NEXT(insize, 2)\r
629 }\r
630\r
631 return 0;\r
632}\r
633\r
634DECODER(shift_jis_2004)\r
635{\r
636 while (inleft > 0) {\r
637 unsigned char c = IN1;\r
638\r
639 REQUIRE_OUTBUF(1)\r
640 JISX0201_DECODE(c, **outbuf)\r
641 else if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xfc)){\r
642 unsigned char c1, c2;\r
643 ucs4_t code;\r
644\r
645 REQUIRE_INBUF(2)\r
646 c2 = IN2;\r
647 if (c2 < 0x40 || (c2 > 0x7e && c2 < 0x80) || c2 > 0xfc)\r
648 return 2;\r
649\r
650 c1 = (c < 0xe0 ? c - 0x81 : c - 0xc1);\r
651 c2 = (c2 < 0x80 ? c2 - 0x40 : c2 - 0x41);\r
652 c1 = (2 * c1 + (c2 < 0x5e ? 0 : 1));\r
653 c2 = (c2 < 0x5e ? c2 : c2 - 0x5e) + 0x21;\r
654\r
655 if (c1 < 0x5e) { /* Plane 1 */\r
656 c1 += 0x21;\r
657 EMULATE_JISX0213_2000_DECODE_PLANE1(**outbuf,\r
658 c1, c2)\r
659 else TRYMAP_DEC(jisx0208, **outbuf, c1, c2) {\r
660 NEXT_OUT(1)\r
661 }\r
662 else TRYMAP_DEC(jisx0213_1_bmp, **outbuf,\r
663 c1, c2) {\r
664 NEXT_OUT(1)\r
665 }\r
666 else TRYMAP_DEC(jisx0213_1_emp, code, c1, c2) {\r
667 WRITEUCS4(EMPBASE | code)\r
668 }\r
669 else TRYMAP_DEC(jisx0213_pair, code, c1, c2) {\r
670 WRITE2(code >> 16, code & 0xffff)\r
671 NEXT_OUT(2)\r
672 }\r
673 else\r
674 return 2;\r
675 NEXT_IN(2)\r
676 }\r
677 else { /* Plane 2 */\r
678 if (c1 >= 0x67) c1 += 0x07;\r
679 else if (c1 >= 0x63 || c1 == 0x5f) c1 -= 0x37;\r
680 else c1 -= 0x3d;\r
681\r
682 EMULATE_JISX0213_2000_DECODE_PLANE2(**outbuf,\r
683 c1, c2)\r
684 else TRYMAP_DEC(jisx0213_2_bmp, **outbuf,\r
685 c1, c2) ;\r
686 else TRYMAP_DEC(jisx0213_2_emp, code, c1, c2) {\r
687 WRITEUCS4(EMPBASE | code)\r
688 NEXT_IN(2)\r
689 continue;\r
690 }\r
691 else\r
692 return 2;\r
693 NEXT(2, 1)\r
694 }\r
695 continue;\r
696 }\r
697 else\r
698 return 2;\r
699\r
700 NEXT(1, 1) /* JIS X 0201 */\r
701 }\r
702\r
703 return 0;\r
704}\r
705\r
706\r
707BEGIN_MAPPINGS_LIST\r
708 MAPPING_DECONLY(jisx0208)\r
709 MAPPING_DECONLY(jisx0212)\r
710 MAPPING_ENCONLY(jisxcommon)\r
711 MAPPING_DECONLY(jisx0213_1_bmp)\r
712 MAPPING_DECONLY(jisx0213_2_bmp)\r
713 MAPPING_ENCONLY(jisx0213_bmp)\r
714 MAPPING_DECONLY(jisx0213_1_emp)\r
715 MAPPING_DECONLY(jisx0213_2_emp)\r
716 MAPPING_ENCONLY(jisx0213_emp)\r
717 MAPPING_ENCDEC(jisx0213_pair)\r
718 MAPPING_ENCDEC(cp932ext)\r
719END_MAPPINGS_LIST\r
720\r
721BEGIN_CODECS_LIST\r
722 CODEC_STATELESS(shift_jis)\r
723 CODEC_STATELESS(cp932)\r
724 CODEC_STATELESS(euc_jp)\r
725 CODEC_STATELESS(shift_jis_2004)\r
726 CODEC_STATELESS(euc_jis_2004)\r
727 { "euc_jisx0213", (void *)2000, NULL, _STATELESS_METHODS(euc_jis_2004) },\r
728 { "shift_jisx0213", (void *)2000, NULL, _STATELESS_METHODS(shift_jis_2004) },\r
729END_CODECS_LIST\r
730\r
731I_AM_A_MODULE_FOR(jp)\r