+++ /dev/null
-/*\r
- * _codecs_tw.c: Codecs collection for Taiwan's encodings\r
- *\r
- * Written by Hye-Shik Chang <perky@FreeBSD.org>\r
- */\r
-\r
-#include "cjkcodecs.h"\r
-#include "mappings_tw.h"\r
-\r
-/*\r
- * BIG5 codec\r
- */\r
-\r
-ENCODER(big5)\r
-{\r
- while (inleft > 0) {\r
- Py_UNICODE c = **inbuf;\r
- DBCHAR code;\r
-\r
- if (c < 0x80) {\r
- REQUIRE_OUTBUF(1)\r
- **outbuf = (unsigned char)c;\r
- NEXT(1, 1)\r
- continue;\r
- }\r
- UCS4INVALID(c)\r
-\r
- REQUIRE_OUTBUF(2)\r
-\r
- TRYMAP_ENC(big5, code, c);\r
- else return 1;\r
-\r
- OUT1(code >> 8)\r
- OUT2(code & 0xFF)\r
- NEXT(1, 2)\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-DECODER(big5)\r
-{\r
- while (inleft > 0) {\r
- unsigned char c = IN1;\r
-\r
- REQUIRE_OUTBUF(1)\r
-\r
- if (c < 0x80) {\r
- OUT1(c)\r
- NEXT(1, 1)\r
- continue;\r
- }\r
-\r
- REQUIRE_INBUF(2)\r
- TRYMAP_DEC(big5, **outbuf, c, IN2) {\r
- NEXT(2, 1)\r
- }\r
- else return 2;\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-\r
-/*\r
- * CP950 codec\r
- */\r
-\r
-ENCODER(cp950)\r
-{\r
- while (inleft > 0) {\r
- Py_UNICODE c = IN1;\r
- DBCHAR code;\r
-\r
- if (c < 0x80) {\r
- WRITE1((unsigned char)c)\r
- NEXT(1, 1)\r
- continue;\r
- }\r
- UCS4INVALID(c)\r
-\r
- REQUIRE_OUTBUF(2)\r
- TRYMAP_ENC(cp950ext, code, c);\r
- else TRYMAP_ENC(big5, code, c);\r
- else return 1;\r
-\r
- OUT1(code >> 8)\r
- OUT2(code & 0xFF)\r
- NEXT(1, 2)\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-DECODER(cp950)\r
-{\r
- while (inleft > 0) {\r
- unsigned char c = IN1;\r
-\r
- REQUIRE_OUTBUF(1)\r
-\r
- if (c < 0x80) {\r
- OUT1(c)\r
- NEXT(1, 1)\r
- continue;\r
- }\r
-\r
- REQUIRE_INBUF(2)\r
-\r
- TRYMAP_DEC(cp950ext, **outbuf, c, IN2);\r
- else TRYMAP_DEC(big5, **outbuf, c, IN2);\r
- else return 2;\r
-\r
- NEXT(2, 1)\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-\r
-\r
-BEGIN_MAPPINGS_LIST\r
- MAPPING_ENCDEC(big5)\r
- MAPPING_ENCDEC(cp950ext)\r
-END_MAPPINGS_LIST\r
-\r
-BEGIN_CODECS_LIST\r
- CODEC_STATELESS(big5)\r
- CODEC_STATELESS(cp950)\r
-END_CODECS_LIST\r
-\r
-I_AM_A_MODULE_FOR(tw)\r