]> git.proxmox.com Git - mirror_edk2.git/blob - AppPkg/Applications/Python/Python-2.7.10/Modules/cjkcodecs/multibytecodec.h
AppPkg/Applications/Python/Python-2.7.10: Initial Checkin part 2/5.
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.10 / Modules / cjkcodecs / multibytecodec.h
1 /*
2 * multibytecodec.h: Common Multibyte Codec Implementation
3 *
4 * Written by Hye-Shik Chang <perky@FreeBSD.org>
5 */
6
7 #ifndef _PYTHON_MULTIBYTECODEC_H_
8 #define _PYTHON_MULTIBYTECODEC_H_
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12
13 #ifdef uint32_t
14 typedef uint32_t ucs4_t;
15 #else
16 typedef unsigned int ucs4_t;
17 #endif
18
19 #ifdef uint16_t
20 typedef uint16_t ucs2_t, DBCHAR;
21 #else
22 typedef unsigned short ucs2_t, DBCHAR;
23 #endif
24
25 typedef union {
26 void *p;
27 int i;
28 unsigned char c[8];
29 ucs2_t u2[4];
30 ucs4_t u4[2];
31 } MultibyteCodec_State;
32
33 typedef int (*mbcodec_init)(const void *config);
34 typedef Py_ssize_t (*mbencode_func)(MultibyteCodec_State *state,
35 const void *config,
36 const Py_UNICODE **inbuf, Py_ssize_t inleft,
37 unsigned char **outbuf, Py_ssize_t outleft,
38 int flags);
39 typedef int (*mbencodeinit_func)(MultibyteCodec_State *state,
40 const void *config);
41 typedef Py_ssize_t (*mbencodereset_func)(MultibyteCodec_State *state,
42 const void *config,
43 unsigned char **outbuf, Py_ssize_t outleft);
44 typedef Py_ssize_t (*mbdecode_func)(MultibyteCodec_State *state,
45 const void *config,
46 const unsigned char **inbuf, Py_ssize_t inleft,
47 Py_UNICODE **outbuf, Py_ssize_t outleft);
48 typedef int (*mbdecodeinit_func)(MultibyteCodec_State *state,
49 const void *config);
50 typedef Py_ssize_t (*mbdecodereset_func)(MultibyteCodec_State *state,
51 const void *config);
52
53 typedef struct {
54 const char *encoding;
55 const void *config;
56 mbcodec_init codecinit;
57 mbencode_func encode;
58 mbencodeinit_func encinit;
59 mbencodereset_func encreset;
60 mbdecode_func decode;
61 mbdecodeinit_func decinit;
62 mbdecodereset_func decreset;
63 } MultibyteCodec;
64
65 typedef struct {
66 PyObject_HEAD
67 MultibyteCodec *codec;
68 } MultibyteCodecObject;
69
70 #define MultibyteCodec_Check(op) ((op)->ob_type == &MultibyteCodec_Type)
71
72 #define _MultibyteStatefulCodec_HEAD \
73 PyObject_HEAD \
74 MultibyteCodec *codec; \
75 MultibyteCodec_State state; \
76 PyObject *errors;
77 typedef struct {
78 _MultibyteStatefulCodec_HEAD
79 } MultibyteStatefulCodecContext;
80
81 #define MAXENCPENDING 2
82 #define _MultibyteStatefulEncoder_HEAD \
83 _MultibyteStatefulCodec_HEAD \
84 Py_UNICODE pending[MAXENCPENDING]; \
85 Py_ssize_t pendingsize;
86 typedef struct {
87 _MultibyteStatefulEncoder_HEAD
88 } MultibyteStatefulEncoderContext;
89
90 #define MAXDECPENDING 8
91 #define _MultibyteStatefulDecoder_HEAD \
92 _MultibyteStatefulCodec_HEAD \
93 unsigned char pending[MAXDECPENDING]; \
94 Py_ssize_t pendingsize;
95 typedef struct {
96 _MultibyteStatefulDecoder_HEAD
97 } MultibyteStatefulDecoderContext;
98
99 typedef struct {
100 _MultibyteStatefulEncoder_HEAD
101 } MultibyteIncrementalEncoderObject;
102
103 typedef struct {
104 _MultibyteStatefulDecoder_HEAD
105 } MultibyteIncrementalDecoderObject;
106
107 typedef struct {
108 _MultibyteStatefulDecoder_HEAD
109 PyObject *stream;
110 } MultibyteStreamReaderObject;
111
112 typedef struct {
113 _MultibyteStatefulEncoder_HEAD
114 PyObject *stream;
115 } MultibyteStreamWriterObject;
116
117 /* positive values for illegal sequences */
118 #define MBERR_TOOSMALL (-1) /* insufficient output buffer space */
119 #define MBERR_TOOFEW (-2) /* incomplete input buffer */
120 #define MBERR_INTERNAL (-3) /* internal runtime error */
121
122 #define ERROR_STRICT (PyObject *)(1)
123 #define ERROR_IGNORE (PyObject *)(2)
124 #define ERROR_REPLACE (PyObject *)(3)
125 #define ERROR_ISCUSTOM(p) ((p) < ERROR_STRICT || ERROR_REPLACE < (p))
126 #define ERROR_DECREF(p) do { \
127 if (p != NULL && ERROR_ISCUSTOM(p)) { \
128 Py_DECREF(p); \
129 } \
130 } while (0);
131
132 #define MBENC_FLUSH 0x0001 /* encode all characters encodable */
133 #define MBENC_MAX MBENC_FLUSH
134
135 #define PyMultibyteCodec_CAPSULE_NAME "multibytecodec.__map_*"
136
137
138 #ifdef __cplusplus
139 }
140 #endif
141 #endif