]> git.proxmox.com Git - mirror_edk2.git/blame - AppPkg/Applications/Python/Python-2.7.10/Modules/cjkcodecs/_codecs_tw.c
AppPkg/Applications/Python/Python-2.7.10: Initial Checkin part 2/5.
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.10 / Modules / cjkcodecs / _codecs_tw.c
CommitLineData
7eb75bcc
DM
1/*\r
2 * _codecs_tw.c: Codecs collection for Taiwan's encodings\r
3 *\r
4 * Written by Hye-Shik Chang <perky@FreeBSD.org>\r
5 */\r
6\r
7#include "cjkcodecs.h"\r
8#include "mappings_tw.h"\r
9\r
10/*\r
11 * BIG5 codec\r
12 */\r
13\r
14ENCODER(big5)\r
15{\r
16 while (inleft > 0) {\r
17 Py_UNICODE c = **inbuf;\r
18 DBCHAR code;\r
19\r
20 if (c < 0x80) {\r
21 REQUIRE_OUTBUF(1)\r
22 **outbuf = (unsigned char)c;\r
23 NEXT(1, 1)\r
24 continue;\r
25 }\r
26 UCS4INVALID(c)\r
27\r
28 REQUIRE_OUTBUF(2)\r
29\r
30 TRYMAP_ENC(big5, code, c);\r
31 else return 1;\r
32\r
33 OUT1(code >> 8)\r
34 OUT2(code & 0xFF)\r
35 NEXT(1, 2)\r
36 }\r
37\r
38 return 0;\r
39}\r
40\r
41DECODER(big5)\r
42{\r
43 while (inleft > 0) {\r
44 unsigned char c = IN1;\r
45\r
46 REQUIRE_OUTBUF(1)\r
47\r
48 if (c < 0x80) {\r
49 OUT1(c)\r
50 NEXT(1, 1)\r
51 continue;\r
52 }\r
53\r
54 REQUIRE_INBUF(2)\r
55 TRYMAP_DEC(big5, **outbuf, c, IN2) {\r
56 NEXT(2, 1)\r
57 }\r
58 else return 2;\r
59 }\r
60\r
61 return 0;\r
62}\r
63\r
64\r
65/*\r
66 * CP950 codec\r
67 */\r
68\r
69ENCODER(cp950)\r
70{\r
71 while (inleft > 0) {\r
72 Py_UNICODE c = IN1;\r
73 DBCHAR code;\r
74\r
75 if (c < 0x80) {\r
76 WRITE1((unsigned char)c)\r
77 NEXT(1, 1)\r
78 continue;\r
79 }\r
80 UCS4INVALID(c)\r
81\r
82 REQUIRE_OUTBUF(2)\r
83 TRYMAP_ENC(cp950ext, code, c);\r
84 else TRYMAP_ENC(big5, code, c);\r
85 else return 1;\r
86\r
87 OUT1(code >> 8)\r
88 OUT2(code & 0xFF)\r
89 NEXT(1, 2)\r
90 }\r
91\r
92 return 0;\r
93}\r
94\r
95DECODER(cp950)\r
96{\r
97 while (inleft > 0) {\r
98 unsigned char c = IN1;\r
99\r
100 REQUIRE_OUTBUF(1)\r
101\r
102 if (c < 0x80) {\r
103 OUT1(c)\r
104 NEXT(1, 1)\r
105 continue;\r
106 }\r
107\r
108 REQUIRE_INBUF(2)\r
109\r
110 TRYMAP_DEC(cp950ext, **outbuf, c, IN2);\r
111 else TRYMAP_DEC(big5, **outbuf, c, IN2);\r
112 else return 2;\r
113\r
114 NEXT(2, 1)\r
115 }\r
116\r
117 return 0;\r
118}\r
119\r
120\r
121\r
122BEGIN_MAPPINGS_LIST\r
123 MAPPING_ENCDEC(big5)\r
124 MAPPING_ENCDEC(cp950ext)\r
125END_MAPPINGS_LIST\r
126\r
127BEGIN_CODECS_LIST\r
128 CODEC_STATELESS(big5)\r
129 CODEC_STATELESS(cp950)\r
130END_CODECS_LIST\r
131\r
132I_AM_A_MODULE_FOR(tw)\r