1use libc::{c_char, c_double, c_int, c_long, wchar_t};
2
3use crate::object::*;
4use crate::pyport::Py_ssize_t;
5
6#[cfg(py_sys_config = "Py_UNICODE_SIZE_4")]
7pub const Py_UNICODE_SIZE: Py_ssize_t = 4;
8#[cfg(not(py_sys_config = "Py_UNICODE_SIZE_4"))]
9pub const Py_UNICODE_SIZE: Py_ssize_t = 2;
10
11pub type Py_UCS4 = u32;
12
13#[cfg(py_sys_config = "Py_UNICODE_SIZE_4")]
14pub type Py_UNICODE = u32;
15#[cfg(not(py_sys_config = "Py_UNICODE_SIZE_4"))]
16pub type Py_UNICODE = u16;
17
18#[repr(C)]
19#[derive(Copy, Clone)]
20pub struct PyUnicodeObject {
21 #[cfg(py_sys_config = "Py_TRACE_REFS")]
22 pub _ob_next: *mut PyObject,
23 #[cfg(py_sys_config = "Py_TRACE_REFS")]
24 pub _ob_prev: *mut PyObject,
25 pub ob_refcnt: Py_ssize_t,
26 pub ob_type: *mut PyTypeObject,
27 pub length: Py_ssize_t,
28 pub data: *mut Py_UNICODE,
29 pub hash: c_long,
30 pub defenc: *mut PyObject,
31}
32
33#[cfg_attr(windows, link(name = "pythonXY"))]
34extern "C" {
35 pub static mut PyUnicode_Type: PyTypeObject;
36}
37
38#[inline(always)]
39pub unsafe fn PyUnicode_Check(op: *mut PyObject) -> c_int {
40 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
41}
42
43#[inline(always)]
44pub unsafe fn PyUnicode_CheckExact(op: *mut PyObject) -> c_int {
45 let u: *mut PyTypeObject = &mut PyUnicode_Type;
46 (Py_TYPE(op) == u) as c_int
47}
48
49#[inline(always)]
50pub unsafe fn PyUnicode_GET_SIZE(o: *mut PyObject) -> Py_ssize_t {
51 (*(o as *mut PyUnicodeObject)).length
52}
53
54#[inline(always)]
55pub unsafe fn PyUnicode_GET_DATA_SIZE(o: *mut PyObject) -> Py_ssize_t {
56 (*(o as *mut PyUnicodeObject)).length * Py_UNICODE_SIZE
57}
58
59#[inline(always)]
60pub unsafe fn PyUnicode_AS_UNICODE(o: *mut PyObject) -> *mut Py_UNICODE {
61 (*(o as *mut PyUnicodeObject)).data
62}
63
64#[inline(always)]
65pub unsafe fn PyUnicode_AS_DATA(o: *mut PyObject) -> *const c_char {
66 (*(o as *mut PyUnicodeObject)).data as *const c_char
67}
68
69pub const Py_UNICODE_REPLACEMENT_CHARACTER: Py_UNICODE = 0xFFFD;
70
71#[allow(dead_code)]
72#[cfg(py_sys_config = "Py_UNICODE_SIZE_4")]
73#[cfg_attr(windows, link(name = "pythonXY"))]
74extern "C" {
75 fn PyUnicodeUCS4_FromUnicode(u: *const Py_UNICODE, size: Py_ssize_t) -> *mut PyObject;
76 fn PyUnicodeUCS4_FromStringAndSize(u: *const c_char, size: Py_ssize_t) -> *mut PyObject;
77 fn PyUnicodeUCS4_FromString(u: *const c_char) -> *mut PyObject;
78 fn PyUnicodeUCS4_AsUnicode(unicode: *mut PyObject) -> *mut Py_UNICODE;
79 fn PyUnicodeUCS4_GetSize(unicode: *mut PyObject) -> Py_ssize_t;
80 fn PyUnicodeUCS4_GetMax() -> Py_UNICODE;
81 fn PyUnicodeUCS4_Resize(unicode: *mut *mut PyObject, length: Py_ssize_t) -> c_int;
82 fn PyUnicodeUCS4_FromEncodedObject(
83 obj: *mut PyObject,
84 encoding: *const c_char,
85 errors: *const c_char,
86 ) -> *mut PyObject;
87 fn PyUnicodeUCS4_FromObject(obj: *mut PyObject) -> *mut PyObject;
88 fn PyUnicodeUCS4_FromFormatV(arg1: *const c_char, ...) -> *mut PyObject;
89 fn PyUnicodeUCS4_FromFormat(arg1: *const c_char, ...) -> *mut PyObject;
90 fn _PyUnicode_FormatAdvanced(
91 obj: *mut PyObject,
92 format_spec: *mut Py_UNICODE,
93 format_spec_len: Py_ssize_t,
94 ) -> *mut PyObject;
95 fn PyUnicodeUCS4_FromWideChar(w: *const wchar_t, size: Py_ssize_t) -> *mut PyObject;
96 fn PyUnicodeUCS4_AsWideChar(
97 unicode: *mut PyUnicodeObject,
98 w: *mut wchar_t,
99 size: Py_ssize_t,
100 ) -> Py_ssize_t;
101 fn PyUnicodeUCS4_FromOrdinal(ordinal: c_int) -> *mut PyObject;
102 fn PyUnicodeUCS4_ClearFreelist() -> c_int;
103 fn _PyUnicodeUCS4_AsDefaultEncodedString(
104 arg1: *mut PyObject,
105 arg2: *const c_char,
106 ) -> *mut PyObject;
107 fn PyUnicodeUCS4_GetDefaultEncoding() -> *const c_char;
108 fn PyUnicodeUCS4_SetDefaultEncoding(encoding: *const c_char) -> c_int;
109 fn PyUnicodeUCS4_Decode(
110 s: *const c_char,
111 size: Py_ssize_t,
112 encoding: *const c_char,
113 errors: *const c_char,
114 ) -> *mut PyObject;
115 fn PyUnicodeUCS4_Encode(
116 s: *const Py_UNICODE,
117 size: Py_ssize_t,
118 encoding: *const c_char,
119 errors: *const c_char,
120 ) -> *mut PyObject;
121 fn PyUnicodeUCS4_AsEncodedObject(
122 unicode: *mut PyObject,
123 encoding: *const c_char,
124 errors: *const c_char,
125 ) -> *mut PyObject;
126 fn PyUnicodeUCS4_AsEncodedString(
127 unicode: *mut PyObject,
128 encoding: *const c_char,
129 errors: *const c_char,
130 ) -> *mut PyObject;
131 fn PyUnicode_BuildEncodingMap(string: *mut PyObject) -> *mut PyObject;
132 fn PyUnicode_DecodeUTF7(
133 string: *const c_char,
134 length: Py_ssize_t,
135 errors: *const c_char,
136 ) -> *mut PyObject;
137 fn PyUnicode_DecodeUTF7Stateful(
138 string: *const c_char,
139 length: Py_ssize_t,
140 errors: *const c_char,
141 consumed: *mut Py_ssize_t,
142 ) -> *mut PyObject;
143 fn PyUnicode_EncodeUTF7(
144 data: *const Py_UNICODE,
145 length: Py_ssize_t,
146 base64SetO: c_int,
147 base64WhiteSpace: c_int,
148 errors: *const c_char,
149 ) -> *mut PyObject;
150 fn PyUnicodeUCS4_DecodeUTF8(
151 string: *const c_char,
152 length: Py_ssize_t,
153 errors: *const c_char,
154 ) -> *mut PyObject;
155 fn PyUnicodeUCS4_DecodeUTF8Stateful(
156 string: *const c_char,
157 length: Py_ssize_t,
158 errors: *const c_char,
159 consumed: *mut Py_ssize_t,
160 ) -> *mut PyObject;
161 fn PyUnicodeUCS4_AsUTF8String(unicode: *mut PyObject) -> *mut PyObject;
162 fn PyUnicodeUCS4_EncodeUTF8(
163 data: *const Py_UNICODE,
164 length: Py_ssize_t,
165 errors: *const c_char,
166 ) -> *mut PyObject;
167 fn PyUnicodeUCS4_DecodeUTF32(
168 string: *const c_char,
169 length: Py_ssize_t,
170 errors: *const c_char,
171 byteorder: *mut c_int,
172 ) -> *mut PyObject;
173 fn PyUnicodeUCS4_DecodeUTF32Stateful(
174 string: *const c_char,
175 length: Py_ssize_t,
176 errors: *const c_char,
177 byteorder: *mut c_int,
178 consumed: *mut Py_ssize_t,
179 ) -> *mut PyObject;
180 fn PyUnicodeUCS4_AsUTF32String(unicode: *mut PyObject) -> *mut PyObject;
181 fn PyUnicodeUCS4_EncodeUTF32(
182 data: *const Py_UNICODE,
183 length: Py_ssize_t,
184 errors: *const c_char,
185 byteorder: c_int,
186 ) -> *mut PyObject;
187 fn PyUnicodeUCS4_DecodeUTF16(
188 string: *const c_char,
189 length: Py_ssize_t,
190 errors: *const c_char,
191 byteorder: *mut c_int,
192 ) -> *mut PyObject;
193 fn PyUnicodeUCS4_DecodeUTF16Stateful(
194 string: *const c_char,
195 length: Py_ssize_t,
196 errors: *const c_char,
197 byteorder: *mut c_int,
198 consumed: *mut Py_ssize_t,
199 ) -> *mut PyObject;
200 fn PyUnicodeUCS4_AsUTF16String(unicode: *mut PyObject) -> *mut PyObject;
201 fn PyUnicodeUCS4_EncodeUTF16(
202 data: *const Py_UNICODE,
203 length: Py_ssize_t,
204 errors: *const c_char,
205 byteorder: c_int,
206 ) -> *mut PyObject;
207 fn PyUnicodeUCS4_DecodeUnicodeEscape(
208 string: *const c_char,
209 length: Py_ssize_t,
210 errors: *const c_char,
211 ) -> *mut PyObject;
212 fn PyUnicodeUCS4_AsUnicodeEscapeString(unicode: *mut PyObject) -> *mut PyObject;
213 fn PyUnicodeUCS4_EncodeUnicodeEscape(
214 data: *const Py_UNICODE,
215 length: Py_ssize_t,
216 ) -> *mut PyObject;
217 fn PyUnicodeUCS4_DecodeRawUnicodeEscape(
218 string: *const c_char,
219 length: Py_ssize_t,
220 errors: *const c_char,
221 ) -> *mut PyObject;
222 fn PyUnicodeUCS4_AsRawUnicodeEscapeString(unicode: *mut PyObject) -> *mut PyObject;
223 fn PyUnicodeUCS4_EncodeRawUnicodeEscape(
224 data: *const Py_UNICODE,
225 length: Py_ssize_t,
226 ) -> *mut PyObject;
227 fn _PyUnicode_DecodeUnicodeInternal(
228 string: *const c_char,
229 length: Py_ssize_t,
230 errors: *const c_char,
231 ) -> *mut PyObject;
232 fn PyUnicodeUCS4_DecodeLatin1(
233 string: *const c_char,
234 length: Py_ssize_t,
235 errors: *const c_char,
236 ) -> *mut PyObject;
237 fn PyUnicodeUCS4_AsLatin1String(unicode: *mut PyObject) -> *mut PyObject;
238 fn PyUnicodeUCS4_EncodeLatin1(
239 data: *const Py_UNICODE,
240 length: Py_ssize_t,
241 errors: *const c_char,
242 ) -> *mut PyObject;
243 fn PyUnicodeUCS4_DecodeASCII(
244 string: *const c_char,
245 length: Py_ssize_t,
246 errors: *const c_char,
247 ) -> *mut PyObject;
248 fn PyUnicodeUCS4_AsASCIIString(unicode: *mut PyObject) -> *mut PyObject;
249 fn PyUnicodeUCS4_EncodeASCII(
250 data: *const Py_UNICODE,
251 length: Py_ssize_t,
252 errors: *const c_char,
253 ) -> *mut PyObject;
254 fn PyUnicodeUCS4_DecodeCharmap(
255 string: *const c_char,
256 length: Py_ssize_t,
257 mapping: *mut PyObject,
258 errors: *const c_char,
259 ) -> *mut PyObject;
260 fn PyUnicodeUCS4_AsCharmapString(
261 unicode: *mut PyObject,
262 mapping: *mut PyObject,
263 ) -> *mut PyObject;
264 fn PyUnicodeUCS4_EncodeCharmap(
265 data: *const Py_UNICODE,
266 length: Py_ssize_t,
267 mapping: *mut PyObject,
268 errors: *const c_char,
269 ) -> *mut PyObject;
270 fn PyUnicodeUCS4_TranslateCharmap(
271 data: *const Py_UNICODE,
272 length: Py_ssize_t,
273 table: *mut PyObject,
274 errors: *const c_char,
275 ) -> *mut PyObject;
276 fn PyUnicodeUCS4_EncodeDecimal(
277 s: *mut Py_UNICODE,
278 length: Py_ssize_t,
279 output: *mut c_char,
280 errors: *const c_char,
281 ) -> c_int;
282 fn PyUnicodeUCS4_Concat(left: *mut PyObject, right: *mut PyObject) -> *mut PyObject;
283 fn PyUnicodeUCS4_Split(
284 s: *mut PyObject,
285 sep: *mut PyObject,
286 maxsplit: Py_ssize_t,
287 ) -> *mut PyObject;
288 fn PyUnicodeUCS4_Splitlines(s: *mut PyObject, keepends: c_int) -> *mut PyObject;
289 fn PyUnicodeUCS4_Partition(s: *mut PyObject, sep: *mut PyObject) -> *mut PyObject;
290 fn PyUnicodeUCS4_RPartition(s: *mut PyObject, sep: *mut PyObject) -> *mut PyObject;
291 fn PyUnicodeUCS4_RSplit(
292 s: *mut PyObject,
293 sep: *mut PyObject,
294 maxsplit: Py_ssize_t,
295 ) -> *mut PyObject;
296 fn PyUnicodeUCS4_Translate(
297 str: *mut PyObject,
298 table: *mut PyObject,
299 errors: *const c_char,
300 ) -> *mut PyObject;
301 fn PyUnicodeUCS4_Join(separator: *mut PyObject, seq: *mut PyObject) -> *mut PyObject;
302 fn PyUnicodeUCS4_Tailmatch(
303 str: *mut PyObject,
304 substr: *mut PyObject,
305 start: Py_ssize_t,
306 end: Py_ssize_t,
307 direction: c_int,
308 ) -> Py_ssize_t;
309 fn PyUnicodeUCS4_Find(
310 str: *mut PyObject,
311 substr: *mut PyObject,
312 start: Py_ssize_t,
313 end: Py_ssize_t,
314 direction: c_int,
315 ) -> Py_ssize_t;
316 fn PyUnicodeUCS4_Count(
317 str: *mut PyObject,
318 substr: *mut PyObject,
319 start: Py_ssize_t,
320 end: Py_ssize_t,
321 ) -> Py_ssize_t;
322 fn PyUnicodeUCS4_Replace(
323 str: *mut PyObject,
324 substr: *mut PyObject,
325 replstr: *mut PyObject,
326 maxcount: Py_ssize_t,
327 ) -> *mut PyObject;
328 fn PyUnicodeUCS4_Compare(left: *mut PyObject, right: *mut PyObject) -> c_int;
329 fn PyUnicodeUCS4_RichCompare(
330 left: *mut PyObject,
331 right: *mut PyObject,
332 op: c_int,
333 ) -> *mut PyObject;
334 fn PyUnicodeUCS4_Format(format: *mut PyObject, args: *mut PyObject) -> *mut PyObject;
335 fn PyUnicodeUCS4_Contains(container: *mut PyObject, element: *mut PyObject) -> c_int;
336 fn _PyUnicode_XStrip(
337 _self: *mut PyUnicodeObject,
338 striptype: c_int,
339 sepobj: *mut PyObject,
340 ) -> *mut PyObject;
341 fn _PyUnicodeUCS4_IsLowercase(ch: Py_UNICODE) -> c_int;
342 fn _PyUnicodeUCS4_IsUppercase(ch: Py_UNICODE) -> c_int;
343 fn _PyUnicodeUCS4_IsTitlecase(ch: Py_UNICODE) -> c_int;
344 fn _PyUnicodeUCS4_IsWhitespace(ch: Py_UNICODE) -> c_int;
345 fn _PyUnicodeUCS4_IsLinebreak(ch: Py_UNICODE) -> c_int;
346 fn _PyUnicodeUCS4_ToLowercase(ch: Py_UNICODE) -> Py_UNICODE;
347 fn _PyUnicodeUCS4_ToUppercase(ch: Py_UNICODE) -> Py_UNICODE;
348 fn _PyUnicodeUCS4_ToTitlecase(ch: Py_UNICODE) -> Py_UNICODE;
349 fn _PyUnicodeUCS4_ToDecimalDigit(ch: Py_UNICODE) -> c_int;
350 fn _PyUnicodeUCS4_ToDigit(ch: Py_UNICODE) -> c_int;
351 fn _PyUnicodeUCS4_ToNumeric(ch: Py_UNICODE) -> c_double;
352 fn _PyUnicodeUCS4_IsDecimalDigit(ch: Py_UNICODE) -> c_int;
353 fn _PyUnicodeUCS4_IsDigit(ch: Py_UNICODE) -> c_int;
354 fn _PyUnicodeUCS4_IsNumeric(ch: Py_UNICODE) -> c_int;
355 fn _PyUnicodeUCS4_IsAlpha(ch: Py_UNICODE) -> c_int;
356}
357
358#[allow(dead_code)]
359#[cfg(not(py_sys_config = "Py_UNICODE_SIZE_4"))]
360#[cfg_attr(windows, link(name = "pythonXY"))]
361extern "C" {
362 fn PyUnicodeUCS2_FromUnicode(u: *const Py_UNICODE, size: Py_ssize_t) -> *mut PyObject;
363 fn PyUnicodeUCS2_FromStringAndSize(u: *const c_char, size: Py_ssize_t) -> *mut PyObject;
364 fn PyUnicodeUCS2_FromString(u: *const c_char) -> *mut PyObject;
365 fn PyUnicodeUCS2_AsUnicode(unicode: *mut PyObject) -> *mut Py_UNICODE;
366 fn PyUnicodeUCS2_GetSize(unicode: *mut PyObject) -> Py_ssize_t;
367 fn PyUnicodeUCS2_GetMax() -> Py_UNICODE;
368 fn PyUnicodeUCS2_Resize(unicode: *mut *mut PyObject, length: Py_ssize_t) -> c_int;
369 fn PyUnicodeUCS2_FromEncodedObject(
370 obj: *mut PyObject,
371 encoding: *const c_char,
372 errors: *const c_char,
373 ) -> *mut PyObject;
374 fn PyUnicodeUCS2_FromObject(obj: *mut PyObject) -> *mut PyObject;
375 fn PyUnicodeUCS2_FromFormatV(arg1: *const c_char, ...) -> *mut PyObject;
376 fn PyUnicodeUCS2_FromFormat(arg1: *const c_char, ...) -> *mut PyObject;
377 fn _PyUnicode_FormatAdvanced(
378 obj: *mut PyObject,
379 format_spec: *mut Py_UNICODE,
380 format_spec_len: Py_ssize_t,
381 ) -> *mut PyObject;
382 fn PyUnicodeUCS2_FromWideChar(w: *const wchar_t, size: Py_ssize_t) -> *mut PyObject;
383 fn PyUnicodeUCS2_AsWideChar(
384 unicode: *mut PyUnicodeObject,
385 w: *mut wchar_t,
386 size: Py_ssize_t,
387 ) -> Py_ssize_t;
388 fn PyUnicodeUCS2_FromOrdinal(ordinal: c_int) -> *mut PyObject;
389 fn PyUnicodeUCS2_ClearFreelist() -> c_int;
390 fn _PyUnicodeUCS2_AsDefaultEncodedString(
391 arg1: *mut PyObject,
392 arg2: *const c_char,
393 ) -> *mut PyObject;
394 fn PyUnicodeUCS2_GetDefaultEncoding() -> *const c_char;
395 fn PyUnicodeUCS2_SetDefaultEncoding(encoding: *const c_char) -> c_int;
396 fn PyUnicodeUCS2_Decode(
397 s: *const c_char,
398 size: Py_ssize_t,
399 encoding: *const c_char,
400 errors: *const c_char,
401 ) -> *mut PyObject;
402 fn PyUnicodeUCS2_Encode(
403 s: *const Py_UNICODE,
404 size: Py_ssize_t,
405 encoding: *const c_char,
406 errors: *const c_char,
407 ) -> *mut PyObject;
408 fn PyUnicodeUCS2_AsEncodedObject(
409 unicode: *mut PyObject,
410 encoding: *const c_char,
411 errors: *const c_char,
412 ) -> *mut PyObject;
413 fn PyUnicodeUCS2_AsEncodedString(
414 unicode: *mut PyObject,
415 encoding: *const c_char,
416 errors: *const c_char,
417 ) -> *mut PyObject;
418 fn PyUnicode_BuildEncodingMap(string: *mut PyObject) -> *mut PyObject;
419 fn PyUnicode_DecodeUTF7(
420 string: *const c_char,
421 length: Py_ssize_t,
422 errors: *const c_char,
423 ) -> *mut PyObject;
424 fn PyUnicode_DecodeUTF7Stateful(
425 string: *const c_char,
426 length: Py_ssize_t,
427 errors: *const c_char,
428 consumed: *mut Py_ssize_t,
429 ) -> *mut PyObject;
430 fn PyUnicode_EncodeUTF7(
431 data: *const Py_UNICODE,
432 length: Py_ssize_t,
433 base64SetO: c_int,
434 base64WhiteSpace: c_int,
435 errors: *const c_char,
436 ) -> *mut PyObject;
437 fn PyUnicodeUCS2_DecodeUTF8(
438 string: *const c_char,
439 length: Py_ssize_t,
440 errors: *const c_char,
441 ) -> *mut PyObject;
442 fn PyUnicodeUCS2_DecodeUTF8Stateful(
443 string: *const c_char,
444 length: Py_ssize_t,
445 errors: *const c_char,
446 consumed: *mut Py_ssize_t,
447 ) -> *mut PyObject;
448 fn PyUnicodeUCS2_AsUTF8String(unicode: *mut PyObject) -> *mut PyObject;
449 fn PyUnicodeUCS2_EncodeUTF8(
450 data: *const Py_UNICODE,
451 length: Py_ssize_t,
452 errors: *const c_char,
453 ) -> *mut PyObject;
454 fn PyUnicodeUCS2_DecodeUTF32(
455 string: *const c_char,
456 length: Py_ssize_t,
457 errors: *const c_char,
458 byteorder: *mut c_int,
459 ) -> *mut PyObject;
460 fn PyUnicodeUCS2_DecodeUTF32Stateful(
461 string: *const c_char,
462 length: Py_ssize_t,
463 errors: *const c_char,
464 byteorder: *mut c_int,
465 consumed: *mut Py_ssize_t,
466 ) -> *mut PyObject;
467 fn PyUnicodeUCS2_AsUTF32String(unicode: *mut PyObject) -> *mut PyObject;
468 fn PyUnicodeUCS2_EncodeUTF32(
469 data: *const Py_UNICODE,
470 length: Py_ssize_t,
471 errors: *const c_char,
472 byteorder: c_int,
473 ) -> *mut PyObject;
474 fn PyUnicodeUCS2_DecodeUTF16(
475 string: *const c_char,
476 length: Py_ssize_t,
477 errors: *const c_char,
478 byteorder: *mut c_int,
479 ) -> *mut PyObject;
480 fn PyUnicodeUCS2_DecodeUTF16Stateful(
481 string: *const c_char,
482 length: Py_ssize_t,
483 errors: *const c_char,
484 byteorder: *mut c_int,
485 consumed: *mut Py_ssize_t,
486 ) -> *mut PyObject;
487 fn PyUnicodeUCS2_AsUTF16String(unicode: *mut PyObject) -> *mut PyObject;
488 fn PyUnicodeUCS2_EncodeUTF16(
489 data: *const Py_UNICODE,
490 length: Py_ssize_t,
491 errors: *const c_char,
492 byteorder: c_int,
493 ) -> *mut PyObject;
494 fn PyUnicodeUCS2_DecodeUnicodeEscape(
495 string: *const c_char,
496 length: Py_ssize_t,
497 errors: *const c_char,
498 ) -> *mut PyObject;
499 fn PyUnicodeUCS2_AsUnicodeEscapeString(unicode: *mut PyObject) -> *mut PyObject;
500 fn PyUnicodeUCS2_EncodeUnicodeEscape(
501 data: *const Py_UNICODE,
502 length: Py_ssize_t,
503 ) -> *mut PyObject;
504 fn PyUnicodeUCS2_DecodeRawUnicodeEscape(
505 string: *const c_char,
506 length: Py_ssize_t,
507 errors: *const c_char,
508 ) -> *mut PyObject;
509 fn PyUnicodeUCS2_AsRawUnicodeEscapeString(unicode: *mut PyObject) -> *mut PyObject;
510 fn PyUnicodeUCS2_EncodeRawUnicodeEscape(
511 data: *const Py_UNICODE,
512 length: Py_ssize_t,
513 ) -> *mut PyObject;
514 fn _PyUnicode_DecodeUnicodeInternal(
515 string: *const c_char,
516 length: Py_ssize_t,
517 errors: *const c_char,
518 ) -> *mut PyObject;
519 fn PyUnicodeUCS2_DecodeLatin1(
520 string: *const c_char,
521 length: Py_ssize_t,
522 errors: *const c_char,
523 ) -> *mut PyObject;
524 fn PyUnicodeUCS2_AsLatin1String(unicode: *mut PyObject) -> *mut PyObject;
525 fn PyUnicodeUCS2_EncodeLatin1(
526 data: *const Py_UNICODE,
527 length: Py_ssize_t,
528 errors: *const c_char,
529 ) -> *mut PyObject;
530 fn PyUnicodeUCS2_DecodeASCII(
531 string: *const c_char,
532 length: Py_ssize_t,
533 errors: *const c_char,
534 ) -> *mut PyObject;
535 fn PyUnicodeUCS2_AsASCIIString(unicode: *mut PyObject) -> *mut PyObject;
536 fn PyUnicodeUCS2_EncodeASCII(
537 data: *const Py_UNICODE,
538 length: Py_ssize_t,
539 errors: *const c_char,
540 ) -> *mut PyObject;
541 fn PyUnicodeUCS2_DecodeCharmap(
542 string: *const c_char,
543 length: Py_ssize_t,
544 mapping: *mut PyObject,
545 errors: *const c_char,
546 ) -> *mut PyObject;
547 fn PyUnicodeUCS2_AsCharmapString(
548 unicode: *mut PyObject,
549 mapping: *mut PyObject,
550 ) -> *mut PyObject;
551 fn PyUnicodeUCS2_EncodeCharmap(
552 data: *const Py_UNICODE,
553 length: Py_ssize_t,
554 mapping: *mut PyObject,
555 errors: *const c_char,
556 ) -> *mut PyObject;
557 fn PyUnicodeUCS2_TranslateCharmap(
558 data: *const Py_UNICODE,
559 length: Py_ssize_t,
560 table: *mut PyObject,
561 errors: *const c_char,
562 ) -> *mut PyObject;
563 fn PyUnicodeUCS2_EncodeDecimal(
564 s: *mut Py_UNICODE,
565 length: Py_ssize_t,
566 output: *mut c_char,
567 errors: *const c_char,
568 ) -> c_int;
569 fn PyUnicodeUCS2_Concat(left: *mut PyObject, right: *mut PyObject) -> *mut PyObject;
570 fn PyUnicodeUCS2_Split(
571 s: *mut PyObject,
572 sep: *mut PyObject,
573 maxsplit: Py_ssize_t,
574 ) -> *mut PyObject;
575 fn PyUnicodeUCS2_Splitlines(s: *mut PyObject, keepends: c_int) -> *mut PyObject;
576 fn PyUnicodeUCS2_Partition(s: *mut PyObject, sep: *mut PyObject) -> *mut PyObject;
577 fn PyUnicodeUCS2_RPartition(s: *mut PyObject, sep: *mut PyObject) -> *mut PyObject;
578 fn PyUnicodeUCS2_RSplit(
579 s: *mut PyObject,
580 sep: *mut PyObject,
581 maxsplit: Py_ssize_t,
582 ) -> *mut PyObject;
583 fn PyUnicodeUCS2_Translate(
584 str: *mut PyObject,
585 table: *mut PyObject,
586 errors: *const c_char,
587 ) -> *mut PyObject;
588 fn PyUnicodeUCS2_Join(separator: *mut PyObject, seq: *mut PyObject) -> *mut PyObject;
589 fn PyUnicodeUCS2_Tailmatch(
590 str: *mut PyObject,
591 substr: *mut PyObject,
592 start: Py_ssize_t,
593 end: Py_ssize_t,
594 direction: c_int,
595 ) -> Py_ssize_t;
596 fn PyUnicodeUCS2_Find(
597 str: *mut PyObject,
598 substr: *mut PyObject,
599 start: Py_ssize_t,
600 end: Py_ssize_t,
601 direction: c_int,
602 ) -> Py_ssize_t;
603 fn PyUnicodeUCS2_Count(
604 str: *mut PyObject,
605 substr: *mut PyObject,
606 start: Py_ssize_t,
607 end: Py_ssize_t,
608 ) -> Py_ssize_t;
609 fn PyUnicodeUCS2_Replace(
610 str: *mut PyObject,
611 substr: *mut PyObject,
612 replstr: *mut PyObject,
613 maxcount: Py_ssize_t,
614 ) -> *mut PyObject;
615 fn PyUnicodeUCS2_Compare(left: *mut PyObject, right: *mut PyObject) -> c_int;
616 fn PyUnicodeUCS2_RichCompare(
617 left: *mut PyObject,
618 right: *mut PyObject,
619 op: c_int,
620 ) -> *mut PyObject;
621 fn PyUnicodeUCS2_Format(format: *mut PyObject, args: *mut PyObject) -> *mut PyObject;
622 fn PyUnicodeUCS2_Contains(container: *mut PyObject, element: *mut PyObject) -> c_int;
623 fn _PyUnicode_XStrip(
624 _self: *mut PyUnicodeObject,
625 striptype: c_int,
626 sepobj: *mut PyObject,
627 ) -> *mut PyObject;
628 fn _PyUnicodeUCS2_IsLowercase(ch: Py_UNICODE) -> c_int;
629 fn _PyUnicodeUCS2_IsUppercase(ch: Py_UNICODE) -> c_int;
630 fn _PyUnicodeUCS2_IsTitlecase(ch: Py_UNICODE) -> c_int;
631 fn _PyUnicodeUCS2_IsWhitespace(ch: Py_UNICODE) -> c_int;
632 fn _PyUnicodeUCS2_IsLinebreak(ch: Py_UNICODE) -> c_int;
633 fn _PyUnicodeUCS2_ToLowercase(ch: Py_UNICODE) -> Py_UNICODE;
634 fn _PyUnicodeUCS2_ToUppercase(ch: Py_UNICODE) -> Py_UNICODE;
635 fn _PyUnicodeUCS2_ToTitlecase(ch: Py_UNICODE) -> Py_UNICODE;
636 fn _PyUnicodeUCS2_ToDecimalDigit(ch: Py_UNICODE) -> c_int;
637 fn _PyUnicodeUCS2_ToDigit(ch: Py_UNICODE) -> c_int;
638 fn _PyUnicodeUCS2_ToNumeric(ch: Py_UNICODE) -> c_double;
639 fn _PyUnicodeUCS2_IsDecimalDigit(ch: Py_UNICODE) -> c_int;
640 fn _PyUnicodeUCS2_IsDigit(ch: Py_UNICODE) -> c_int;
641 fn _PyUnicodeUCS2_IsNumeric(ch: Py_UNICODE) -> c_int;
642 fn _PyUnicodeUCS2_IsAlpha(ch: Py_UNICODE) -> c_int;
643}
644
645#[inline(always)]
646#[cfg(py_sys_config = "Py_UNICODE_SIZE_4")]
647pub unsafe fn PyUnicode_FromStringAndSize(u: *const c_char, size: Py_ssize_t) -> *mut PyObject {
648 PyUnicodeUCS4_FromStringAndSize(u, size)
649}
650
651#[inline(always)]
652#[cfg(not(py_sys_config = "Py_UNICODE_SIZE_4"))]
653pub unsafe fn PyUnicode_FromStringAndSize(u: *const c_char, size: Py_ssize_t) -> *mut PyObject {
654 PyUnicodeUCS2_FromStringAndSize(u, size)
655}
656
657#[inline(always)]
658#[cfg(py_sys_config = "Py_UNICODE_SIZE_4")]
659pub unsafe fn PyUnicode_AsUTF8String(u: *mut PyObject) -> *mut PyObject {
660 PyUnicodeUCS4_AsUTF8String(u)
661}
662
663#[inline(always)]
664#[cfg(not(py_sys_config = "Py_UNICODE_SIZE_4"))]
665pub unsafe fn PyUnicode_AsUTF8String(u: *mut PyObject) -> *mut PyObject {
666 PyUnicodeUCS2_AsUTF8String(u)
667}