blob: 2ba0bc5886f8912ec10ecd69f47e5ea643e9e5bf [file] [log] [blame]
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +00001/*
2 * _big5.c: the Big5 codec
3 *
4 * Written by Hye-Shik Chang <perky@FreeBSD.org>
5 * $CJKCodecs: _big5.c,v 1.2 2003/12/31 05:46:55 perky Exp $
6 */
7
8#include "codeccommon.h"
9
10ENCMAP(big5)
11DECMAP(big5)
12
13ENCODER(big5)
14{
15 while (inleft > 0) {
16 Py_UNICODE c = **inbuf;
17 DBCHAR code;
18
19 if (c < 0x80) {
20 RESERVE_OUTBUF(1)
Hye-Shik Changd210a5b2004-01-23 14:36:17 +000021 **outbuf = (unsigned char)c;
Hye-Shik Chang3e2a3062004-01-17 14:29:29 +000022 NEXT(1, 1)
23 continue;
24 }
25 UCS4INVALID(c)
26
27 RESERVE_OUTBUF(2)
28
29 TRYMAP_ENC(big5, code, c);
30 else return 1;
31
32 (*outbuf)[0] = code >> 8;
33 (*outbuf)[1] = code & 0xFF;
34 NEXT(1, 2)
35 }
36
37 return 0;
38}
39
40DECODER(big5)
41{
42 while (inleft > 0) {
43 unsigned char c = IN1;
44
45 RESERVE_OUTBUF(1)
46
47 if (c < 0x80) {
48 OUT1(c)
49 NEXT(1, 1)
50 continue;
51 }
52
53 RESERVE_INBUF(2)
54 TRYMAP_DEC(big5, **outbuf, c, IN2) {
55 NEXT(2, 1)
56 } else return 2;
57 }
58
59 return 0;
60}
61
62#include "codecentry.h"
63BEGIN_CODEC_REGISTRY(big5)
64 MAPOPEN(zh_TW)
65 IMPORTMAP_ENCDEC(big5)
66 MAPCLOSE()
67END_CODEC_REGISTRY(big5)