diff options
author | Hye-Shik Chang <hyeshik@gmail.com> | 2004-01-17 14:29:29 (GMT) |
---|---|---|
committer | Hye-Shik Chang <hyeshik@gmail.com> | 2004-01-17 14:29:29 (GMT) |
commit | 3e2a30692085d32ac63f72b35da39158a471fc68 (patch) | |
tree | 4cbe735f61eae87ac56a13ca6bd32113b98bd03d /Modules/cjkcodecs/multibytecodec.h | |
parent | cd1f7430cb8f48de970021071d7683054c23b10f (diff) | |
download | cpython-3e2a30692085d32ac63f72b35da39158a471fc68.zip cpython-3e2a30692085d32ac63f72b35da39158a471fc68.tar.gz cpython-3e2a30692085d32ac63f72b35da39158a471fc68.tar.bz2 |
Add CJK codecs support as discussed on python-dev. (SF #873597)
Several style fixes are suggested by Martin v. Loewis and
Marc-Andre Lemburg. Thanks!
Diffstat (limited to 'Modules/cjkcodecs/multibytecodec.h')
-rw-r--r-- | Modules/cjkcodecs/multibytecodec.h | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/Modules/cjkcodecs/multibytecodec.h b/Modules/cjkcodecs/multibytecodec.h new file mode 100644 index 0000000..9cc1c6b --- /dev/null +++ b/Modules/cjkcodecs/multibytecodec.h @@ -0,0 +1,88 @@ +/* + * multibytecodec.h: Common Multibyte Codec Implementation + * + * Written by Hye-Shik Chang <perky@FreeBSD.org> + * $CJKCodecs: multibytecodec.h,v 1.2 2003/12/31 05:46:55 perky Exp $ + */ + +#ifndef _PYTHON_MULTIBYTECODEC_H_ +#define _PYTHON_MULTIBYTECODEC_H_ +#ifdef __cplusplus +extern "C" { +#endif + +#include "cjkcommon.h" + +typedef union { + void *p; + int i; + unsigned char c[8]; + ucs2_t u2[4]; + ucs4_t u4[2]; +} MultibyteCodec_State; + +typedef int (*mbencode_func)(MultibyteCodec_State *state, + const Py_UNICODE **inbuf, size_t inleft, + unsigned char **outbuf, size_t outleft, + int flags); +typedef int (*mbencodeinit_func)(MultibyteCodec_State *state); +typedef int (*mbencodereset_func)(MultibyteCodec_State *state, + unsigned char **outbuf, size_t outleft); +typedef int (*mbdecode_func)(MultibyteCodec_State *state, + const unsigned char **inbuf, size_t inleft, + Py_UNICODE **outbuf, size_t outleft); +typedef int (*mbdecodeinit_func)(MultibyteCodec_State *state); +typedef int (*mbdecodereset_func)(MultibyteCodec_State *state); + +typedef struct { + const char *encoding; + mbencode_func encode; + mbencodeinit_func encinit; + mbencodereset_func encreset; + mbdecode_func decode; + mbdecodeinit_func decinit; + mbdecodereset_func decreset; +} MultibyteCodec; + +typedef struct { + PyObject_HEAD + MultibyteCodec *codec; +} MultibyteCodecObject; + +#define MAXDECPENDING 8 +typedef struct { + PyObject_HEAD + MultibyteCodec *codec; + MultibyteCodec_State state; + unsigned char pending[MAXDECPENDING]; + int pendingsize; + PyObject *stream, *errors; +} MultibyteStreamReaderObject; + +#define MAXENCPENDING 2 +typedef struct { + PyObject_HEAD + MultibyteCodec *codec; + MultibyteCodec_State state; + Py_UNICODE pending[MAXENCPENDING]; + int pendingsize; + PyObject *stream, *errors; +} MultibyteStreamWriterObject; + +/* positive values for illegal sequences */ +#define MBERR_TOOSMALL (-1) /* insufficient output buffer space */ +#define MBERR_TOOFEW (-2) /* incomplete input buffer */ +#define MBERR_INTERNAL (-3) /* internal runtime error */ + +#define ERROR_STRICT (PyObject *)(1) +#define ERROR_IGNORE (PyObject *)(2) +#define ERROR_REPLACE (PyObject *)(3) +#define ERROR_MAX ERROR_REPLACE + +#define MBENC_FLUSH 0x0001 /* encode all characters encodable */ +#define MBENC_MAX MBENC_FLUSH + +#ifdef __cplusplus +} +#endif +#endif |