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