diff options
| author | Hye-Shik Chang <hyeshik@gmail.com> | 2004-01-17 14:29:29 +0000 | 
|---|---|---|
| committer | Hye-Shik Chang <hyeshik@gmail.com> | 2004-01-17 14:29:29 +0000 | 
| commit | 3e2a30692085d32ac63f72b35da39158a471fc68 (patch) | |
| tree | 4cbe735f61eae87ac56a13ca6bd32113b98bd03d /Modules/cjkcodecs/multibytecodec.h | |
| parent | cd1f7430cb8f48de970021071d7683054c23b10f (diff) | |
| download | cpython-git-3e2a30692085d32ac63f72b35da39158a471fc68.tar.gz | |
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 0000000000..9cc1c6ba75 --- /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  | 
