symbian-qemu-0.9.1-12/python-2.6.1/Modules/cjkcodecs/multibytecodec.h
changeset 1 2fb8b9db1c86
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symbian-qemu-0.9.1-12/python-2.6.1/Modules/cjkcodecs/multibytecodec.h	Fri Jul 31 15:01:17 2009 +0100
@@ -0,0 +1,138 @@
+/*
+ * multibytecodec.h: Common Multibyte Codec Implementation
+ *
+ * Written by Hye-Shik Chang <perky@FreeBSD.org>
+ */
+
+#ifndef _PYTHON_MULTIBYTECODEC_H_
+#define _PYTHON_MULTIBYTECODEC_H_
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef uint32_t
+typedef uint32_t ucs4_t;
+#else
+typedef unsigned int ucs4_t;
+#endif
+
+#ifdef uint16_t
+typedef uint16_t ucs2_t, DBCHAR;
+#else
+typedef unsigned short ucs2_t, DBCHAR;
+#endif
+
+typedef union {
+	void *p;
+	int i;
+	unsigned char c[8];
+	ucs2_t u2[4];
+	ucs4_t u4[2];
+} MultibyteCodec_State;
+
+typedef int (*mbcodec_init)(const void *config);
+typedef Py_ssize_t (*mbencode_func)(MultibyteCodec_State *state,
+			const void *config,
+			const Py_UNICODE **inbuf, Py_ssize_t inleft,
+			unsigned char **outbuf, Py_ssize_t outleft,
+			int flags);
+typedef int (*mbencodeinit_func)(MultibyteCodec_State *state,
+				 const void *config);
+typedef Py_ssize_t (*mbencodereset_func)(MultibyteCodec_State *state,
+			const void *config,
+			unsigned char **outbuf, Py_ssize_t outleft);
+typedef Py_ssize_t (*mbdecode_func)(MultibyteCodec_State *state,
+			const void *config,
+			const unsigned char **inbuf, Py_ssize_t inleft,
+			Py_UNICODE **outbuf, Py_ssize_t outleft);
+typedef int (*mbdecodeinit_func)(MultibyteCodec_State *state,
+				 const void *config);
+typedef Py_ssize_t (*mbdecodereset_func)(MultibyteCodec_State *state,
+					 const void *config);
+
+typedef struct {
+	const char *encoding;
+	const void *config;
+	mbcodec_init codecinit;
+	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 MultibyteCodec_Check(op) ((op)->ob_type == &MultibyteCodec_Type)
+
+#define _MultibyteStatefulCodec_HEAD		\
+	PyObject_HEAD				\
+	MultibyteCodec *codec;			\
+	MultibyteCodec_State state;		\
+	PyObject *errors;
+typedef struct {
+	_MultibyteStatefulCodec_HEAD
+} MultibyteStatefulCodecContext;
+
+#define MAXENCPENDING	2
+#define _MultibyteStatefulEncoder_HEAD		\
+	_MultibyteStatefulCodec_HEAD		\
+	Py_UNICODE pending[MAXENCPENDING];	\
+	Py_ssize_t pendingsize;
+typedef struct {
+	_MultibyteStatefulEncoder_HEAD
+} MultibyteStatefulEncoderContext;
+
+#define MAXDECPENDING	8
+#define _MultibyteStatefulDecoder_HEAD		\
+	_MultibyteStatefulCodec_HEAD		\
+	unsigned char pending[MAXDECPENDING];	\
+	Py_ssize_t pendingsize;
+typedef struct {
+	_MultibyteStatefulDecoder_HEAD
+} MultibyteStatefulDecoderContext;
+
+typedef struct {
+	_MultibyteStatefulEncoder_HEAD
+} MultibyteIncrementalEncoderObject;
+
+typedef struct {
+	_MultibyteStatefulDecoder_HEAD
+} MultibyteIncrementalDecoderObject;
+
+typedef struct {
+	_MultibyteStatefulDecoder_HEAD
+	PyObject *stream;
+} MultibyteStreamReaderObject;
+
+typedef struct {
+	_MultibyteStatefulEncoder_HEAD
+	PyObject *stream;
+} 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_ISCUSTOM(p)	((p) < ERROR_STRICT || ERROR_REPLACE < (p))
+#define ERROR_DECREF(p) do {			\
+	if (p != NULL && ERROR_ISCUSTOM(p)) {	\
+		Py_DECREF(p);			\
+	}					\
+} while (0);
+
+#define MBENC_FLUSH		0x0001 /* encode all characters encodable */
+#define MBENC_MAX		MBENC_FLUSH
+
+#ifdef __cplusplus
+}
+#endif
+#endif