blob: 5ca505fbd5ec042229054add7311887090044094 [file] [log] [blame]
Guido van Rossum30944842000-03-10 22:32:23 +00001#ifndef Py_CODECREGISTRY_H
2#define Py_CODECREGISTRY_H
3#ifdef __cplusplus
4extern "C" {
5#endif
6
7/* ------------------------------------------------------------------------
8
9 Python Codec Registry and support functions
10
11
12Written by Marc-Andre Lemburg (mal@lemburg.com).
13
Guido van Rossum16b1ad92000-08-03 16:24:25 +000014Copyright (c) Corporation for National Research Initiatives.
Guido van Rossum30944842000-03-10 22:32:23 +000015
16 ------------------------------------------------------------------------ */
17
Fred Drake3ac3edc2000-05-09 19:51:10 +000018/* Register a new codec search function.
19
20 As side effect, this tries to load the encodings package, if not
21 yet done, to make sure that it is always first in the list of
22 search functions.
23
24 The search_function's refcount is incremented by this function. */
25
Mark Hammond91a681d2002-08-12 07:21:58 +000026PyAPI_FUNC(int) PyCodec_Register(
Guido van Rossum30944842000-03-10 22:32:23 +000027 PyObject *search_function
28 );
29
Marc-André Lemburgb2750b52008-06-06 12:18:17 +000030/* Codec registry lookup API.
Fred Drake3ac3edc2000-05-09 19:51:10 +000031
Thomas Woutersa9773292006-04-21 09:43:23 +000032 Looks up the given encoding and returns a CodecInfo object with
33 function attributes which implement the different aspects of
34 processing the encoding.
Fred Drake3ac3edc2000-05-09 19:51:10 +000035
36 The encoding string is looked up converted to all lower-case
37 characters. This makes encodings looked up through this mechanism
38 effectively case-insensitive.
39
Thomas Woutersa9773292006-04-21 09:43:23 +000040 If no codec is found, a KeyError is set and NULL returned.
Fred Drake3ac3edc2000-05-09 19:51:10 +000041
42 As side effect, this tries to load the encodings package, if not
43 yet done. This is part of the lazy load strategy for the encodings
44 package.
45
46 */
47
Martin v. Löwis4d0d4712010-12-03 20:14:31 +000048#ifndef Py_LIMITED_API
Mark Hammond91a681d2002-08-12 07:21:58 +000049PyAPI_FUNC(PyObject *) _PyCodec_Lookup(
Guido van Rossum30944842000-03-10 22:32:23 +000050 const char *encoding
51 );
Martin v. Löwis4d0d4712010-12-03 20:14:31 +000052#endif
Guido van Rossum30944842000-03-10 22:32:23 +000053
Marc-André Lemburgb2750b52008-06-06 12:18:17 +000054/* Codec registry encoding check API.
55
56 Returns 1/0 depending on whether there is a registered codec for
57 the given encoding.
58
59*/
60
61PyAPI_FUNC(int) PyCodec_KnownEncoding(
62 const char *encoding
63 );
64
Fred Drake3ac3edc2000-05-09 19:51:10 +000065/* Generic codec based encoding API.
Guido van Rossum30944842000-03-10 22:32:23 +000066
Fred Drake3ac3edc2000-05-09 19:51:10 +000067 object is passed through the encoder function found for the given
68 encoding using the error handling method defined by errors. errors
69 may be NULL to use the default method defined for the codec.
70
71 Raises a LookupError in case no encoder can be found.
Guido van Rossum30944842000-03-10 22:32:23 +000072
Fred Drake3ac3edc2000-05-09 19:51:10 +000073 */
Guido van Rossum30944842000-03-10 22:32:23 +000074
Mark Hammond91a681d2002-08-12 07:21:58 +000075PyAPI_FUNC(PyObject *) PyCodec_Encode(
Guido van Rossum30944842000-03-10 22:32:23 +000076 PyObject *object,
77 const char *encoding,
78 const char *errors
79 );
80
Fred Drake3ac3edc2000-05-09 19:51:10 +000081/* Generic codec based decoding API.
82
83 object is passed through the decoder function found for the given
84 encoding using the error handling method defined by errors. errors
85 may be NULL to use the default method defined for the codec.
86
87 Raises a LookupError in case no encoder can be found.
88
89 */
90
Mark Hammond91a681d2002-08-12 07:21:58 +000091PyAPI_FUNC(PyObject *) PyCodec_Decode(
Guido van Rossum30944842000-03-10 22:32:23 +000092 PyObject *object,
93 const char *encoding,
94 const char *errors
95 );
96
Nick Coghlanc72e4e62013-11-22 22:39:36 +100097#ifndef PY_LIMITED_API
98/* Text codec specific encoding and decoding API.
99
100 Checks the encoding against a list of codecs which do not
101 implement a str<->bytes encoding before attempting the
102 operation.
103
104 Please note that these APIs are internal and should not
105 be used in Python C extensions.
106
107 */
108
109PyAPI_FUNC(PyObject *) _PyCodec_EncodeText(
110 PyObject *object,
111 const char *encoding,
112 const char *errors
113 );
114
115PyAPI_FUNC(PyObject *) _PyCodec_DecodeText(
116 PyObject *object,
117 const char *encoding,
118 const char *errors
119 );
120#endif
121
122
123
Fred Drake3ac3edc2000-05-09 19:51:10 +0000124/* --- Codec Lookup APIs --------------------------------------------------
125
126 All APIs return a codec object with incremented refcount and are
127 based on _PyCodec_Lookup(). The same comments w/r to the encoding
128 name also apply to these APIs.
129
130*/
131
132/* Get an encoder function for the given encoding. */
133
Mark Hammond91a681d2002-08-12 07:21:58 +0000134PyAPI_FUNC(PyObject *) PyCodec_Encoder(
Fred Drake3ac3edc2000-05-09 19:51:10 +0000135 const char *encoding
136 );
137
138/* Get a decoder function for the given encoding. */
139
Mark Hammond91a681d2002-08-12 07:21:58 +0000140PyAPI_FUNC(PyObject *) PyCodec_Decoder(
Fred Drake3ac3edc2000-05-09 19:51:10 +0000141 const char *encoding
142 );
143
Thomas Woutersa9773292006-04-21 09:43:23 +0000144/* Get a IncrementalEncoder object for the given encoding. */
145
146PyAPI_FUNC(PyObject *) PyCodec_IncrementalEncoder(
147 const char *encoding,
148 const char *errors
149 );
150
151/* Get a IncrementalDecoder object function for the given encoding. */
152
153PyAPI_FUNC(PyObject *) PyCodec_IncrementalDecoder(
154 const char *encoding,
155 const char *errors
156 );
157
Fred Drake3ac3edc2000-05-09 19:51:10 +0000158/* Get a StreamReader factory function for the given encoding. */
159
Mark Hammond91a681d2002-08-12 07:21:58 +0000160PyAPI_FUNC(PyObject *) PyCodec_StreamReader(
Fred Drake3ac3edc2000-05-09 19:51:10 +0000161 const char *encoding,
162 PyObject *stream,
163 const char *errors
164 );
165
166/* Get a StreamWriter factory function for the given encoding. */
167
Mark Hammond91a681d2002-08-12 07:21:58 +0000168PyAPI_FUNC(PyObject *) PyCodec_StreamWriter(
Fred Drake3ac3edc2000-05-09 19:51:10 +0000169 const char *encoding,
170 PyObject *stream,
171 const char *errors
172 );
173
Walter Dörwald3aeb6322002-09-02 13:14:32 +0000174/* Unicode encoding error handling callback registry API */
175
Georg Brandlbab33782010-11-20 13:44:41 +0000176/* Register the error handling callback function error under the given
Walter Dörwald3aeb6322002-09-02 13:14:32 +0000177 name. This function will be called by the codec when it encounters
178 unencodable characters/undecodable bytes and doesn't know the
179 callback name, when name is specified as the error parameter
180 in the call to the encode/decode function.
181 Return 0 on success, -1 on error */
182PyAPI_FUNC(int) PyCodec_RegisterError(const char *name, PyObject *error);
183
Georg Brandlbab33782010-11-20 13:44:41 +0000184/* Lookup the error handling callback function registered under the given
185 name. As a special case NULL can be passed, in which case
Walter Dörwald3aeb6322002-09-02 13:14:32 +0000186 the error handling callback for "strict" will be returned. */
187PyAPI_FUNC(PyObject *) PyCodec_LookupError(const char *name);
188
189/* raise exc as an exception */
190PyAPI_FUNC(PyObject *) PyCodec_StrictErrors(PyObject *exc);
191
192/* ignore the unicode error, skipping the faulty input */
193PyAPI_FUNC(PyObject *) PyCodec_IgnoreErrors(PyObject *exc);
194
Georg Brandlbab33782010-11-20 13:44:41 +0000195/* replace the unicode encode error with ? or U+FFFD */
Walter Dörwald3aeb6322002-09-02 13:14:32 +0000196PyAPI_FUNC(PyObject *) PyCodec_ReplaceErrors(PyObject *exc);
197
198/* replace the unicode encode error with XML character references */
199PyAPI_FUNC(PyObject *) PyCodec_XMLCharRefReplaceErrors(PyObject *exc);
200
201/* replace the unicode encode error with backslash escapes (\x, \u and \U) */
202PyAPI_FUNC(PyObject *) PyCodec_BackslashReplaceErrors(PyObject *exc);
203
Antoine Pitroue6069832011-10-15 16:38:20 +0200204PyAPI_DATA(const char *) Py_hexdigits;
Victor Stinnerf5cff562011-10-14 02:13:11 +0200205
Guido van Rossum30944842000-03-10 22:32:23 +0000206#ifdef __cplusplus
207}
208#endif
209#endif /* !Py_CODECREGISTRY_H */