+++ /dev/null
-/*\r
- * multibytecodec.h: Common Multibyte Codec Implementation\r
- *\r
- * Written by Hye-Shik Chang <perky@FreeBSD.org>\r
- */\r
-\r
-#ifndef _PYTHON_MULTIBYTECODEC_H_\r
-#define _PYTHON_MULTIBYTECODEC_H_\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-#ifdef uint32_t\r
-typedef uint32_t ucs4_t;\r
-#else\r
-typedef unsigned int ucs4_t;\r
-#endif\r
-\r
-#ifdef uint16_t\r
-typedef uint16_t ucs2_t, DBCHAR;\r
-#else\r
-typedef unsigned short ucs2_t, DBCHAR;\r
-#endif\r
-\r
-typedef union {\r
- void *p;\r
- int i;\r
- unsigned char c[8];\r
- ucs2_t u2[4];\r
- ucs4_t u4[2];\r
-} MultibyteCodec_State;\r
-\r
-typedef int (*mbcodec_init)(const void *config);\r
-typedef Py_ssize_t (*mbencode_func)(MultibyteCodec_State *state,\r
- const void *config,\r
- const Py_UNICODE **inbuf, Py_ssize_t inleft,\r
- unsigned char **outbuf, Py_ssize_t outleft,\r
- int flags);\r
-typedef int (*mbencodeinit_func)(MultibyteCodec_State *state,\r
- const void *config);\r
-typedef Py_ssize_t (*mbencodereset_func)(MultibyteCodec_State *state,\r
- const void *config,\r
- unsigned char **outbuf, Py_ssize_t outleft);\r
-typedef Py_ssize_t (*mbdecode_func)(MultibyteCodec_State *state,\r
- const void *config,\r
- const unsigned char **inbuf, Py_ssize_t inleft,\r
- Py_UNICODE **outbuf, Py_ssize_t outleft);\r
-typedef int (*mbdecodeinit_func)(MultibyteCodec_State *state,\r
- const void *config);\r
-typedef Py_ssize_t (*mbdecodereset_func)(MultibyteCodec_State *state,\r
- const void *config);\r
-\r
-typedef struct {\r
- const char *encoding;\r
- const void *config;\r
- mbcodec_init codecinit;\r
- mbencode_func encode;\r
- mbencodeinit_func encinit;\r
- mbencodereset_func encreset;\r
- mbdecode_func decode;\r
- mbdecodeinit_func decinit;\r
- mbdecodereset_func decreset;\r
-} MultibyteCodec;\r
-\r
-typedef struct {\r
- PyObject_HEAD\r
- MultibyteCodec *codec;\r
-} MultibyteCodecObject;\r
-\r
-#define MultibyteCodec_Check(op) ((op)->ob_type == &MultibyteCodec_Type)\r
-\r
-#define _MultibyteStatefulCodec_HEAD \\r
- PyObject_HEAD \\r
- MultibyteCodec *codec; \\r
- MultibyteCodec_State state; \\r
- PyObject *errors;\r
-typedef struct {\r
- _MultibyteStatefulCodec_HEAD\r
-} MultibyteStatefulCodecContext;\r
-\r
-#define MAXENCPENDING 2\r
-#define _MultibyteStatefulEncoder_HEAD \\r
- _MultibyteStatefulCodec_HEAD \\r
- Py_UNICODE pending[MAXENCPENDING]; \\r
- Py_ssize_t pendingsize;\r
-typedef struct {\r
- _MultibyteStatefulEncoder_HEAD\r
-} MultibyteStatefulEncoderContext;\r
-\r
-#define MAXDECPENDING 8\r
-#define _MultibyteStatefulDecoder_HEAD \\r
- _MultibyteStatefulCodec_HEAD \\r
- unsigned char pending[MAXDECPENDING]; \\r
- Py_ssize_t pendingsize;\r
-typedef struct {\r
- _MultibyteStatefulDecoder_HEAD\r
-} MultibyteStatefulDecoderContext;\r
-\r
-typedef struct {\r
- _MultibyteStatefulEncoder_HEAD\r
-} MultibyteIncrementalEncoderObject;\r
-\r
-typedef struct {\r
- _MultibyteStatefulDecoder_HEAD\r
-} MultibyteIncrementalDecoderObject;\r
-\r
-typedef struct {\r
- _MultibyteStatefulDecoder_HEAD\r
- PyObject *stream;\r
-} MultibyteStreamReaderObject;\r
-\r
-typedef struct {\r
- _MultibyteStatefulEncoder_HEAD\r
- PyObject *stream;\r
-} MultibyteStreamWriterObject;\r
-\r
-/* positive values for illegal sequences */\r
-#define MBERR_TOOSMALL (-1) /* insufficient output buffer space */\r
-#define MBERR_TOOFEW (-2) /* incomplete input buffer */\r
-#define MBERR_INTERNAL (-3) /* internal runtime error */\r
-\r
-#define ERROR_STRICT (PyObject *)(1)\r
-#define ERROR_IGNORE (PyObject *)(2)\r
-#define ERROR_REPLACE (PyObject *)(3)\r
-#define ERROR_ISCUSTOM(p) ((p) < ERROR_STRICT || ERROR_REPLACE < (p))\r
-#define ERROR_DECREF(p) do { \\r
- if (p != NULL && ERROR_ISCUSTOM(p)) { \\r
- Py_DECREF(p); \\r
- } \\r
-} while (0);\r
-\r
-#define MBENC_FLUSH 0x0001 /* encode all characters encodable */\r
-#define MBENC_MAX MBENC_FLUSH\r
-\r
-#define PyMultibyteCodec_CAPSULE_NAME "multibytecodec.__map_*"\r
-\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-#endif\r