1/*[clinic input]
2preserve
3[clinic start generated code]*/
4
5PyDoc_STRVAR(EncodingMap_size__doc__,
6"size($self, /)\n"
7"--\n"
8"\n"
9"Return the size (in bytes) of this object.");
10
11#define ENCODINGMAP_SIZE_METHODDEF    \
12    {"size", (PyCFunction)EncodingMap_size, METH_NOARGS, EncodingMap_size__doc__},
13
14static PyObject *
15EncodingMap_size_impl(struct encoding_map *self);
16
17static PyObject *
18EncodingMap_size(struct encoding_map *self, PyObject *Py_UNUSED(ignored))
19{
20    return EncodingMap_size_impl(self);
21}
22
23PyDoc_STRVAR(unicode_title__doc__,
24"title($self, /)\n"
25"--\n"
26"\n"
27"Return a version of the string where each word is titlecased.\n"
28"\n"
29"More specifically, words start with uppercased characters and all remaining\n"
30"cased characters have lower case.");
31
32#define UNICODE_TITLE_METHODDEF    \
33    {"title", (PyCFunction)unicode_title, METH_NOARGS, unicode_title__doc__},
34
35static PyObject *
36unicode_title_impl(PyObject *self);
37
38static PyObject *
39unicode_title(PyObject *self, PyObject *Py_UNUSED(ignored))
40{
41    return unicode_title_impl(self);
42}
43
44PyDoc_STRVAR(unicode_capitalize__doc__,
45"capitalize($self, /)\n"
46"--\n"
47"\n"
48"Return a capitalized version of the string.\n"
49"\n"
50"More specifically, make the first character have upper case and the rest lower\n"
51"case.");
52
53#define UNICODE_CAPITALIZE_METHODDEF    \
54    {"capitalize", (PyCFunction)unicode_capitalize, METH_NOARGS, unicode_capitalize__doc__},
55
56static PyObject *
57unicode_capitalize_impl(PyObject *self);
58
59static PyObject *
60unicode_capitalize(PyObject *self, PyObject *Py_UNUSED(ignored))
61{
62    return unicode_capitalize_impl(self);
63}
64
65PyDoc_STRVAR(unicode_casefold__doc__,
66"casefold($self, /)\n"
67"--\n"
68"\n"
69"Return a version of the string suitable for caseless comparisons.");
70
71#define UNICODE_CASEFOLD_METHODDEF    \
72    {"casefold", (PyCFunction)unicode_casefold, METH_NOARGS, unicode_casefold__doc__},
73
74static PyObject *
75unicode_casefold_impl(PyObject *self);
76
77static PyObject *
78unicode_casefold(PyObject *self, PyObject *Py_UNUSED(ignored))
79{
80    return unicode_casefold_impl(self);
81}
82
83PyDoc_STRVAR(unicode_center__doc__,
84"center($self, width, fillchar=\' \', /)\n"
85"--\n"
86"\n"
87"Return a centered string of length width.\n"
88"\n"
89"Padding is done using the specified fill character (default is a space).");
90
91#define UNICODE_CENTER_METHODDEF    \
92    {"center", _PyCFunction_CAST(unicode_center), METH_FASTCALL, unicode_center__doc__},
93
94static PyObject *
95unicode_center_impl(PyObject *self, Py_ssize_t width, Py_UCS4 fillchar);
96
97static PyObject *
98unicode_center(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
99{
100    PyObject *return_value = NULL;
101    Py_ssize_t width;
102    Py_UCS4 fillchar = ' ';
103
104    if (!_PyArg_CheckPositional("center", nargs, 1, 2)) {
105        goto exit;
106    }
107    {
108        Py_ssize_t ival = -1;
109        PyObject *iobj = _PyNumber_Index(args[0]);
110        if (iobj != NULL) {
111            ival = PyLong_AsSsize_t(iobj);
112            Py_DECREF(iobj);
113        }
114        if (ival == -1 && PyErr_Occurred()) {
115            goto exit;
116        }
117        width = ival;
118    }
119    if (nargs < 2) {
120        goto skip_optional;
121    }
122    if (!convert_uc(args[1], &fillchar)) {
123        goto exit;
124    }
125skip_optional:
126    return_value = unicode_center_impl(self, width, fillchar);
127
128exit:
129    return return_value;
130}
131
132PyDoc_STRVAR(unicode_encode__doc__,
133"encode($self, /, encoding=\'utf-8\', errors=\'strict\')\n"
134"--\n"
135"\n"
136"Encode the string using the codec registered for encoding.\n"
137"\n"
138"  encoding\n"
139"    The encoding in which to encode the string.\n"
140"  errors\n"
141"    The error handling scheme to use for encoding errors.\n"
142"    The default is \'strict\' meaning that encoding errors raise a\n"
143"    UnicodeEncodeError.  Other possible values are \'ignore\', \'replace\' and\n"
144"    \'xmlcharrefreplace\' as well as any other name registered with\n"
145"    codecs.register_error that can handle UnicodeEncodeErrors.");
146
147#define UNICODE_ENCODE_METHODDEF    \
148    {"encode", _PyCFunction_CAST(unicode_encode), METH_FASTCALL|METH_KEYWORDS, unicode_encode__doc__},
149
150static PyObject *
151unicode_encode_impl(PyObject *self, const char *encoding, const char *errors);
152
153static PyObject *
154unicode_encode(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
155{
156    PyObject *return_value = NULL;
157    static const char * const _keywords[] = {"encoding", "errors", NULL};
158    static _PyArg_Parser _parser = {NULL, _keywords, "encode", 0};
159    PyObject *argsbuf[2];
160    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
161    const char *encoding = NULL;
162    const char *errors = NULL;
163
164    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 2, 0, argsbuf);
165    if (!args) {
166        goto exit;
167    }
168    if (!noptargs) {
169        goto skip_optional_pos;
170    }
171    if (args[0]) {
172        if (!PyUnicode_Check(args[0])) {
173            _PyArg_BadArgument("encode", "argument 'encoding'", "str", args[0]);
174            goto exit;
175        }
176        Py_ssize_t encoding_length;
177        encoding = PyUnicode_AsUTF8AndSize(args[0], &encoding_length);
178        if (encoding == NULL) {
179            goto exit;
180        }
181        if (strlen(encoding) != (size_t)encoding_length) {
182            PyErr_SetString(PyExc_ValueError, "embedded null character");
183            goto exit;
184        }
185        if (!--noptargs) {
186            goto skip_optional_pos;
187        }
188    }
189    if (!PyUnicode_Check(args[1])) {
190        _PyArg_BadArgument("encode", "argument 'errors'", "str", args[1]);
191        goto exit;
192    }
193    Py_ssize_t errors_length;
194    errors = PyUnicode_AsUTF8AndSize(args[1], &errors_length);
195    if (errors == NULL) {
196        goto exit;
197    }
198    if (strlen(errors) != (size_t)errors_length) {
199        PyErr_SetString(PyExc_ValueError, "embedded null character");
200        goto exit;
201    }
202skip_optional_pos:
203    return_value = unicode_encode_impl(self, encoding, errors);
204
205exit:
206    return return_value;
207}
208
209PyDoc_STRVAR(unicode_expandtabs__doc__,
210"expandtabs($self, /, tabsize=8)\n"
211"--\n"
212"\n"
213"Return a copy where all tab characters are expanded using spaces.\n"
214"\n"
215"If tabsize is not given, a tab size of 8 characters is assumed.");
216
217#define UNICODE_EXPANDTABS_METHODDEF    \
218    {"expandtabs", _PyCFunction_CAST(unicode_expandtabs), METH_FASTCALL|METH_KEYWORDS, unicode_expandtabs__doc__},
219
220static PyObject *
221unicode_expandtabs_impl(PyObject *self, int tabsize);
222
223static PyObject *
224unicode_expandtabs(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
225{
226    PyObject *return_value = NULL;
227    static const char * const _keywords[] = {"tabsize", NULL};
228    static _PyArg_Parser _parser = {NULL, _keywords, "expandtabs", 0};
229    PyObject *argsbuf[1];
230    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
231    int tabsize = 8;
232
233    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
234    if (!args) {
235        goto exit;
236    }
237    if (!noptargs) {
238        goto skip_optional_pos;
239    }
240    tabsize = _PyLong_AsInt(args[0]);
241    if (tabsize == -1 && PyErr_Occurred()) {
242        goto exit;
243    }
244skip_optional_pos:
245    return_value = unicode_expandtabs_impl(self, tabsize);
246
247exit:
248    return return_value;
249}
250
251PyDoc_STRVAR(unicode_isascii__doc__,
252"isascii($self, /)\n"
253"--\n"
254"\n"
255"Return True if all characters in the string are ASCII, False otherwise.\n"
256"\n"
257"ASCII characters have code points in the range U+0000-U+007F.\n"
258"Empty string is ASCII too.");
259
260#define UNICODE_ISASCII_METHODDEF    \
261    {"isascii", (PyCFunction)unicode_isascii, METH_NOARGS, unicode_isascii__doc__},
262
263static PyObject *
264unicode_isascii_impl(PyObject *self);
265
266static PyObject *
267unicode_isascii(PyObject *self, PyObject *Py_UNUSED(ignored))
268{
269    return unicode_isascii_impl(self);
270}
271
272PyDoc_STRVAR(unicode_islower__doc__,
273"islower($self, /)\n"
274"--\n"
275"\n"
276"Return True if the string is a lowercase string, False otherwise.\n"
277"\n"
278"A string is lowercase if all cased characters in the string are lowercase and\n"
279"there is at least one cased character in the string.");
280
281#define UNICODE_ISLOWER_METHODDEF    \
282    {"islower", (PyCFunction)unicode_islower, METH_NOARGS, unicode_islower__doc__},
283
284static PyObject *
285unicode_islower_impl(PyObject *self);
286
287static PyObject *
288unicode_islower(PyObject *self, PyObject *Py_UNUSED(ignored))
289{
290    return unicode_islower_impl(self);
291}
292
293PyDoc_STRVAR(unicode_isupper__doc__,
294"isupper($self, /)\n"
295"--\n"
296"\n"
297"Return True if the string is an uppercase string, False otherwise.\n"
298"\n"
299"A string is uppercase if all cased characters in the string are uppercase and\n"
300"there is at least one cased character in the string.");
301
302#define UNICODE_ISUPPER_METHODDEF    \
303    {"isupper", (PyCFunction)unicode_isupper, METH_NOARGS, unicode_isupper__doc__},
304
305static PyObject *
306unicode_isupper_impl(PyObject *self);
307
308static PyObject *
309unicode_isupper(PyObject *self, PyObject *Py_UNUSED(ignored))
310{
311    return unicode_isupper_impl(self);
312}
313
314PyDoc_STRVAR(unicode_istitle__doc__,
315"istitle($self, /)\n"
316"--\n"
317"\n"
318"Return True if the string is a title-cased string, False otherwise.\n"
319"\n"
320"In a title-cased string, upper- and title-case characters may only\n"
321"follow uncased characters and lowercase characters only cased ones.");
322
323#define UNICODE_ISTITLE_METHODDEF    \
324    {"istitle", (PyCFunction)unicode_istitle, METH_NOARGS, unicode_istitle__doc__},
325
326static PyObject *
327unicode_istitle_impl(PyObject *self);
328
329static PyObject *
330unicode_istitle(PyObject *self, PyObject *Py_UNUSED(ignored))
331{
332    return unicode_istitle_impl(self);
333}
334
335PyDoc_STRVAR(unicode_isspace__doc__,
336"isspace($self, /)\n"
337"--\n"
338"\n"
339"Return True if the string is a whitespace string, False otherwise.\n"
340"\n"
341"A string is whitespace if all characters in the string are whitespace and there\n"
342"is at least one character in the string.");
343
344#define UNICODE_ISSPACE_METHODDEF    \
345    {"isspace", (PyCFunction)unicode_isspace, METH_NOARGS, unicode_isspace__doc__},
346
347static PyObject *
348unicode_isspace_impl(PyObject *self);
349
350static PyObject *
351unicode_isspace(PyObject *self, PyObject *Py_UNUSED(ignored))
352{
353    return unicode_isspace_impl(self);
354}
355
356PyDoc_STRVAR(unicode_isalpha__doc__,
357"isalpha($self, /)\n"
358"--\n"
359"\n"
360"Return True if the string is an alphabetic string, False otherwise.\n"
361"\n"
362"A string is alphabetic if all characters in the string are alphabetic and there\n"
363"is at least one character in the string.");
364
365#define UNICODE_ISALPHA_METHODDEF    \
366    {"isalpha", (PyCFunction)unicode_isalpha, METH_NOARGS, unicode_isalpha__doc__},
367
368static PyObject *
369unicode_isalpha_impl(PyObject *self);
370
371static PyObject *
372unicode_isalpha(PyObject *self, PyObject *Py_UNUSED(ignored))
373{
374    return unicode_isalpha_impl(self);
375}
376
377PyDoc_STRVAR(unicode_isalnum__doc__,
378"isalnum($self, /)\n"
379"--\n"
380"\n"
381"Return True if the string is an alpha-numeric string, False otherwise.\n"
382"\n"
383"A string is alpha-numeric if all characters in the string are alpha-numeric and\n"
384"there is at least one character in the string.");
385
386#define UNICODE_ISALNUM_METHODDEF    \
387    {"isalnum", (PyCFunction)unicode_isalnum, METH_NOARGS, unicode_isalnum__doc__},
388
389static PyObject *
390unicode_isalnum_impl(PyObject *self);
391
392static PyObject *
393unicode_isalnum(PyObject *self, PyObject *Py_UNUSED(ignored))
394{
395    return unicode_isalnum_impl(self);
396}
397
398PyDoc_STRVAR(unicode_isdecimal__doc__,
399"isdecimal($self, /)\n"
400"--\n"
401"\n"
402"Return True if the string is a decimal string, False otherwise.\n"
403"\n"
404"A string is a decimal string if all characters in the string are decimal and\n"
405"there is at least one character in the string.");
406
407#define UNICODE_ISDECIMAL_METHODDEF    \
408    {"isdecimal", (PyCFunction)unicode_isdecimal, METH_NOARGS, unicode_isdecimal__doc__},
409
410static PyObject *
411unicode_isdecimal_impl(PyObject *self);
412
413static PyObject *
414unicode_isdecimal(PyObject *self, PyObject *Py_UNUSED(ignored))
415{
416    return unicode_isdecimal_impl(self);
417}
418
419PyDoc_STRVAR(unicode_isdigit__doc__,
420"isdigit($self, /)\n"
421"--\n"
422"\n"
423"Return True if the string is a digit string, False otherwise.\n"
424"\n"
425"A string is a digit string if all characters in the string are digits and there\n"
426"is at least one character in the string.");
427
428#define UNICODE_ISDIGIT_METHODDEF    \
429    {"isdigit", (PyCFunction)unicode_isdigit, METH_NOARGS, unicode_isdigit__doc__},
430
431static PyObject *
432unicode_isdigit_impl(PyObject *self);
433
434static PyObject *
435unicode_isdigit(PyObject *self, PyObject *Py_UNUSED(ignored))
436{
437    return unicode_isdigit_impl(self);
438}
439
440PyDoc_STRVAR(unicode_isnumeric__doc__,
441"isnumeric($self, /)\n"
442"--\n"
443"\n"
444"Return True if the string is a numeric string, False otherwise.\n"
445"\n"
446"A string is numeric if all characters in the string are numeric and there is at\n"
447"least one character in the string.");
448
449#define UNICODE_ISNUMERIC_METHODDEF    \
450    {"isnumeric", (PyCFunction)unicode_isnumeric, METH_NOARGS, unicode_isnumeric__doc__},
451
452static PyObject *
453unicode_isnumeric_impl(PyObject *self);
454
455static PyObject *
456unicode_isnumeric(PyObject *self, PyObject *Py_UNUSED(ignored))
457{
458    return unicode_isnumeric_impl(self);
459}
460
461PyDoc_STRVAR(unicode_isidentifier__doc__,
462"isidentifier($self, /)\n"
463"--\n"
464"\n"
465"Return True if the string is a valid Python identifier, False otherwise.\n"
466"\n"
467"Call keyword.iskeyword(s) to test whether string s is a reserved identifier,\n"
468"such as \"def\" or \"class\".");
469
470#define UNICODE_ISIDENTIFIER_METHODDEF    \
471    {"isidentifier", (PyCFunction)unicode_isidentifier, METH_NOARGS, unicode_isidentifier__doc__},
472
473static PyObject *
474unicode_isidentifier_impl(PyObject *self);
475
476static PyObject *
477unicode_isidentifier(PyObject *self, PyObject *Py_UNUSED(ignored))
478{
479    return unicode_isidentifier_impl(self);
480}
481
482PyDoc_STRVAR(unicode_isprintable__doc__,
483"isprintable($self, /)\n"
484"--\n"
485"\n"
486"Return True if the string is printable, False otherwise.\n"
487"\n"
488"A string is printable if all of its characters are considered printable in\n"
489"repr() or if it is empty.");
490
491#define UNICODE_ISPRINTABLE_METHODDEF    \
492    {"isprintable", (PyCFunction)unicode_isprintable, METH_NOARGS, unicode_isprintable__doc__},
493
494static PyObject *
495unicode_isprintable_impl(PyObject *self);
496
497static PyObject *
498unicode_isprintable(PyObject *self, PyObject *Py_UNUSED(ignored))
499{
500    return unicode_isprintable_impl(self);
501}
502
503PyDoc_STRVAR(unicode_join__doc__,
504"join($self, iterable, /)\n"
505"--\n"
506"\n"
507"Concatenate any number of strings.\n"
508"\n"
509"The string whose method is called is inserted in between each given string.\n"
510"The result is returned as a new string.\n"
511"\n"
512"Example: \'.\'.join([\'ab\', \'pq\', \'rs\']) -> \'ab.pq.rs\'");
513
514#define UNICODE_JOIN_METHODDEF    \
515    {"join", (PyCFunction)unicode_join, METH_O, unicode_join__doc__},
516
517PyDoc_STRVAR(unicode_ljust__doc__,
518"ljust($self, width, fillchar=\' \', /)\n"
519"--\n"
520"\n"
521"Return a left-justified string of length width.\n"
522"\n"
523"Padding is done using the specified fill character (default is a space).");
524
525#define UNICODE_LJUST_METHODDEF    \
526    {"ljust", _PyCFunction_CAST(unicode_ljust), METH_FASTCALL, unicode_ljust__doc__},
527
528static PyObject *
529unicode_ljust_impl(PyObject *self, Py_ssize_t width, Py_UCS4 fillchar);
530
531static PyObject *
532unicode_ljust(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
533{
534    PyObject *return_value = NULL;
535    Py_ssize_t width;
536    Py_UCS4 fillchar = ' ';
537
538    if (!_PyArg_CheckPositional("ljust", nargs, 1, 2)) {
539        goto exit;
540    }
541    {
542        Py_ssize_t ival = -1;
543        PyObject *iobj = _PyNumber_Index(args[0]);
544        if (iobj != NULL) {
545            ival = PyLong_AsSsize_t(iobj);
546            Py_DECREF(iobj);
547        }
548        if (ival == -1 && PyErr_Occurred()) {
549            goto exit;
550        }
551        width = ival;
552    }
553    if (nargs < 2) {
554        goto skip_optional;
555    }
556    if (!convert_uc(args[1], &fillchar)) {
557        goto exit;
558    }
559skip_optional:
560    return_value = unicode_ljust_impl(self, width, fillchar);
561
562exit:
563    return return_value;
564}
565
566PyDoc_STRVAR(unicode_lower__doc__,
567"lower($self, /)\n"
568"--\n"
569"\n"
570"Return a copy of the string converted to lowercase.");
571
572#define UNICODE_LOWER_METHODDEF    \
573    {"lower", (PyCFunction)unicode_lower, METH_NOARGS, unicode_lower__doc__},
574
575static PyObject *
576unicode_lower_impl(PyObject *self);
577
578static PyObject *
579unicode_lower(PyObject *self, PyObject *Py_UNUSED(ignored))
580{
581    return unicode_lower_impl(self);
582}
583
584PyDoc_STRVAR(unicode_strip__doc__,
585"strip($self, chars=None, /)\n"
586"--\n"
587"\n"
588"Return a copy of the string with leading and trailing whitespace removed.\n"
589"\n"
590"If chars is given and not None, remove characters in chars instead.");
591
592#define UNICODE_STRIP_METHODDEF    \
593    {"strip", _PyCFunction_CAST(unicode_strip), METH_FASTCALL, unicode_strip__doc__},
594
595static PyObject *
596unicode_strip_impl(PyObject *self, PyObject *chars);
597
598static PyObject *
599unicode_strip(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
600{
601    PyObject *return_value = NULL;
602    PyObject *chars = Py_None;
603
604    if (!_PyArg_CheckPositional("strip", nargs, 0, 1)) {
605        goto exit;
606    }
607    if (nargs < 1) {
608        goto skip_optional;
609    }
610    chars = args[0];
611skip_optional:
612    return_value = unicode_strip_impl(self, chars);
613
614exit:
615    return return_value;
616}
617
618PyDoc_STRVAR(unicode_lstrip__doc__,
619"lstrip($self, chars=None, /)\n"
620"--\n"
621"\n"
622"Return a copy of the string with leading whitespace removed.\n"
623"\n"
624"If chars is given and not None, remove characters in chars instead.");
625
626#define UNICODE_LSTRIP_METHODDEF    \
627    {"lstrip", _PyCFunction_CAST(unicode_lstrip), METH_FASTCALL, unicode_lstrip__doc__},
628
629static PyObject *
630unicode_lstrip_impl(PyObject *self, PyObject *chars);
631
632static PyObject *
633unicode_lstrip(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
634{
635    PyObject *return_value = NULL;
636    PyObject *chars = Py_None;
637
638    if (!_PyArg_CheckPositional("lstrip", nargs, 0, 1)) {
639        goto exit;
640    }
641    if (nargs < 1) {
642        goto skip_optional;
643    }
644    chars = args[0];
645skip_optional:
646    return_value = unicode_lstrip_impl(self, chars);
647
648exit:
649    return return_value;
650}
651
652PyDoc_STRVAR(unicode_rstrip__doc__,
653"rstrip($self, chars=None, /)\n"
654"--\n"
655"\n"
656"Return a copy of the string with trailing whitespace removed.\n"
657"\n"
658"If chars is given and not None, remove characters in chars instead.");
659
660#define UNICODE_RSTRIP_METHODDEF    \
661    {"rstrip", _PyCFunction_CAST(unicode_rstrip), METH_FASTCALL, unicode_rstrip__doc__},
662
663static PyObject *
664unicode_rstrip_impl(PyObject *self, PyObject *chars);
665
666static PyObject *
667unicode_rstrip(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
668{
669    PyObject *return_value = NULL;
670    PyObject *chars = Py_None;
671
672    if (!_PyArg_CheckPositional("rstrip", nargs, 0, 1)) {
673        goto exit;
674    }
675    if (nargs < 1) {
676        goto skip_optional;
677    }
678    chars = args[0];
679skip_optional:
680    return_value = unicode_rstrip_impl(self, chars);
681
682exit:
683    return return_value;
684}
685
686PyDoc_STRVAR(unicode_replace__doc__,
687"replace($self, old, new, count=-1, /)\n"
688"--\n"
689"\n"
690"Return a copy with all occurrences of substring old replaced by new.\n"
691"\n"
692"  count\n"
693"    Maximum number of occurrences to replace.\n"
694"    -1 (the default value) means replace all occurrences.\n"
695"\n"
696"If the optional argument count is given, only the first count occurrences are\n"
697"replaced.");
698
699#define UNICODE_REPLACE_METHODDEF    \
700    {"replace", _PyCFunction_CAST(unicode_replace), METH_FASTCALL, unicode_replace__doc__},
701
702static PyObject *
703unicode_replace_impl(PyObject *self, PyObject *old, PyObject *new,
704                     Py_ssize_t count);
705
706static PyObject *
707unicode_replace(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
708{
709    PyObject *return_value = NULL;
710    PyObject *old;
711    PyObject *new;
712    Py_ssize_t count = -1;
713
714    if (!_PyArg_CheckPositional("replace", nargs, 2, 3)) {
715        goto exit;
716    }
717    if (!PyUnicode_Check(args[0])) {
718        _PyArg_BadArgument("replace", "argument 1", "str", args[0]);
719        goto exit;
720    }
721    if (PyUnicode_READY(args[0]) == -1) {
722        goto exit;
723    }
724    old = args[0];
725    if (!PyUnicode_Check(args[1])) {
726        _PyArg_BadArgument("replace", "argument 2", "str", args[1]);
727        goto exit;
728    }
729    if (PyUnicode_READY(args[1]) == -1) {
730        goto exit;
731    }
732    new = args[1];
733    if (nargs < 3) {
734        goto skip_optional;
735    }
736    {
737        Py_ssize_t ival = -1;
738        PyObject *iobj = _PyNumber_Index(args[2]);
739        if (iobj != NULL) {
740            ival = PyLong_AsSsize_t(iobj);
741            Py_DECREF(iobj);
742        }
743        if (ival == -1 && PyErr_Occurred()) {
744            goto exit;
745        }
746        count = ival;
747    }
748skip_optional:
749    return_value = unicode_replace_impl(self, old, new, count);
750
751exit:
752    return return_value;
753}
754
755PyDoc_STRVAR(unicode_removeprefix__doc__,
756"removeprefix($self, prefix, /)\n"
757"--\n"
758"\n"
759"Return a str with the given prefix string removed if present.\n"
760"\n"
761"If the string starts with the prefix string, return string[len(prefix):].\n"
762"Otherwise, return a copy of the original string.");
763
764#define UNICODE_REMOVEPREFIX_METHODDEF    \
765    {"removeprefix", (PyCFunction)unicode_removeprefix, METH_O, unicode_removeprefix__doc__},
766
767static PyObject *
768unicode_removeprefix_impl(PyObject *self, PyObject *prefix);
769
770static PyObject *
771unicode_removeprefix(PyObject *self, PyObject *arg)
772{
773    PyObject *return_value = NULL;
774    PyObject *prefix;
775
776    if (!PyUnicode_Check(arg)) {
777        _PyArg_BadArgument("removeprefix", "argument", "str", arg);
778        goto exit;
779    }
780    if (PyUnicode_READY(arg) == -1) {
781        goto exit;
782    }
783    prefix = arg;
784    return_value = unicode_removeprefix_impl(self, prefix);
785
786exit:
787    return return_value;
788}
789
790PyDoc_STRVAR(unicode_removesuffix__doc__,
791"removesuffix($self, suffix, /)\n"
792"--\n"
793"\n"
794"Return a str with the given suffix string removed if present.\n"
795"\n"
796"If the string ends with the suffix string and that suffix is not empty,\n"
797"return string[:-len(suffix)]. Otherwise, return a copy of the original\n"
798"string.");
799
800#define UNICODE_REMOVESUFFIX_METHODDEF    \
801    {"removesuffix", (PyCFunction)unicode_removesuffix, METH_O, unicode_removesuffix__doc__},
802
803static PyObject *
804unicode_removesuffix_impl(PyObject *self, PyObject *suffix);
805
806static PyObject *
807unicode_removesuffix(PyObject *self, PyObject *arg)
808{
809    PyObject *return_value = NULL;
810    PyObject *suffix;
811
812    if (!PyUnicode_Check(arg)) {
813        _PyArg_BadArgument("removesuffix", "argument", "str", arg);
814        goto exit;
815    }
816    if (PyUnicode_READY(arg) == -1) {
817        goto exit;
818    }
819    suffix = arg;
820    return_value = unicode_removesuffix_impl(self, suffix);
821
822exit:
823    return return_value;
824}
825
826PyDoc_STRVAR(unicode_rjust__doc__,
827"rjust($self, width, fillchar=\' \', /)\n"
828"--\n"
829"\n"
830"Return a right-justified string of length width.\n"
831"\n"
832"Padding is done using the specified fill character (default is a space).");
833
834#define UNICODE_RJUST_METHODDEF    \
835    {"rjust", _PyCFunction_CAST(unicode_rjust), METH_FASTCALL, unicode_rjust__doc__},
836
837static PyObject *
838unicode_rjust_impl(PyObject *self, Py_ssize_t width, Py_UCS4 fillchar);
839
840static PyObject *
841unicode_rjust(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
842{
843    PyObject *return_value = NULL;
844    Py_ssize_t width;
845    Py_UCS4 fillchar = ' ';
846
847    if (!_PyArg_CheckPositional("rjust", nargs, 1, 2)) {
848        goto exit;
849    }
850    {
851        Py_ssize_t ival = -1;
852        PyObject *iobj = _PyNumber_Index(args[0]);
853        if (iobj != NULL) {
854            ival = PyLong_AsSsize_t(iobj);
855            Py_DECREF(iobj);
856        }
857        if (ival == -1 && PyErr_Occurred()) {
858            goto exit;
859        }
860        width = ival;
861    }
862    if (nargs < 2) {
863        goto skip_optional;
864    }
865    if (!convert_uc(args[1], &fillchar)) {
866        goto exit;
867    }
868skip_optional:
869    return_value = unicode_rjust_impl(self, width, fillchar);
870
871exit:
872    return return_value;
873}
874
875PyDoc_STRVAR(unicode_split__doc__,
876"split($self, /, sep=None, maxsplit=-1)\n"
877"--\n"
878"\n"
879"Return a list of the substrings in the string, using sep as the separator string.\n"
880"\n"
881"  sep\n"
882"    The separator used to split the string.\n"
883"\n"
884"    When set to None (the default value), will split on any whitespace\n"
885"    character (including \\\\n \\\\r \\\\t \\\\f and spaces) and will discard\n"
886"    empty strings from the result.\n"
887"  maxsplit\n"
888"    Maximum number of splits (starting from the left).\n"
889"    -1 (the default value) means no limit.\n"
890"\n"
891"Note, str.split() is mainly useful for data that has been intentionally\n"
892"delimited.  With natural text that includes punctuation, consider using\n"
893"the regular expression module.");
894
895#define UNICODE_SPLIT_METHODDEF    \
896    {"split", _PyCFunction_CAST(unicode_split), METH_FASTCALL|METH_KEYWORDS, unicode_split__doc__},
897
898static PyObject *
899unicode_split_impl(PyObject *self, PyObject *sep, Py_ssize_t maxsplit);
900
901static PyObject *
902unicode_split(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
903{
904    PyObject *return_value = NULL;
905    static const char * const _keywords[] = {"sep", "maxsplit", NULL};
906    static _PyArg_Parser _parser = {NULL, _keywords, "split", 0};
907    PyObject *argsbuf[2];
908    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
909    PyObject *sep = Py_None;
910    Py_ssize_t maxsplit = -1;
911
912    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 2, 0, argsbuf);
913    if (!args) {
914        goto exit;
915    }
916    if (!noptargs) {
917        goto skip_optional_pos;
918    }
919    if (args[0]) {
920        sep = args[0];
921        if (!--noptargs) {
922            goto skip_optional_pos;
923        }
924    }
925    {
926        Py_ssize_t ival = -1;
927        PyObject *iobj = _PyNumber_Index(args[1]);
928        if (iobj != NULL) {
929            ival = PyLong_AsSsize_t(iobj);
930            Py_DECREF(iobj);
931        }
932        if (ival == -1 && PyErr_Occurred()) {
933            goto exit;
934        }
935        maxsplit = ival;
936    }
937skip_optional_pos:
938    return_value = unicode_split_impl(self, sep, maxsplit);
939
940exit:
941    return return_value;
942}
943
944PyDoc_STRVAR(unicode_partition__doc__,
945"partition($self, sep, /)\n"
946"--\n"
947"\n"
948"Partition the string into three parts using the given separator.\n"
949"\n"
950"This will search for the separator in the string.  If the separator is found,\n"
951"returns a 3-tuple containing the part before the separator, the separator\n"
952"itself, and the part after it.\n"
953"\n"
954"If the separator is not found, returns a 3-tuple containing the original string\n"
955"and two empty strings.");
956
957#define UNICODE_PARTITION_METHODDEF    \
958    {"partition", (PyCFunction)unicode_partition, METH_O, unicode_partition__doc__},
959
960PyDoc_STRVAR(unicode_rpartition__doc__,
961"rpartition($self, sep, /)\n"
962"--\n"
963"\n"
964"Partition the string into three parts using the given separator.\n"
965"\n"
966"This will search for the separator in the string, starting at the end. If\n"
967"the separator is found, returns a 3-tuple containing the part before the\n"
968"separator, the separator itself, and the part after it.\n"
969"\n"
970"If the separator is not found, returns a 3-tuple containing two empty strings\n"
971"and the original string.");
972
973#define UNICODE_RPARTITION_METHODDEF    \
974    {"rpartition", (PyCFunction)unicode_rpartition, METH_O, unicode_rpartition__doc__},
975
976PyDoc_STRVAR(unicode_rsplit__doc__,
977"rsplit($self, /, sep=None, maxsplit=-1)\n"
978"--\n"
979"\n"
980"Return a list of the substrings in the string, using sep as the separator string.\n"
981"\n"
982"  sep\n"
983"    The separator used to split the string.\n"
984"\n"
985"    When set to None (the default value), will split on any whitespace\n"
986"    character (including \\\\n \\\\r \\\\t \\\\f and spaces) and will discard\n"
987"    empty strings from the result.\n"
988"  maxsplit\n"
989"    Maximum number of splits (starting from the left).\n"
990"    -1 (the default value) means no limit.\n"
991"\n"
992"Splitting starts at the end of the string and works to the front.");
993
994#define UNICODE_RSPLIT_METHODDEF    \
995    {"rsplit", _PyCFunction_CAST(unicode_rsplit), METH_FASTCALL|METH_KEYWORDS, unicode_rsplit__doc__},
996
997static PyObject *
998unicode_rsplit_impl(PyObject *self, PyObject *sep, Py_ssize_t maxsplit);
999
1000static PyObject *
1001unicode_rsplit(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
1002{
1003    PyObject *return_value = NULL;
1004    static const char * const _keywords[] = {"sep", "maxsplit", NULL};
1005    static _PyArg_Parser _parser = {NULL, _keywords, "rsplit", 0};
1006    PyObject *argsbuf[2];
1007    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
1008    PyObject *sep = Py_None;
1009    Py_ssize_t maxsplit = -1;
1010
1011    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 2, 0, argsbuf);
1012    if (!args) {
1013        goto exit;
1014    }
1015    if (!noptargs) {
1016        goto skip_optional_pos;
1017    }
1018    if (args[0]) {
1019        sep = args[0];
1020        if (!--noptargs) {
1021            goto skip_optional_pos;
1022        }
1023    }
1024    {
1025        Py_ssize_t ival = -1;
1026        PyObject *iobj = _PyNumber_Index(args[1]);
1027        if (iobj != NULL) {
1028            ival = PyLong_AsSsize_t(iobj);
1029            Py_DECREF(iobj);
1030        }
1031        if (ival == -1 && PyErr_Occurred()) {
1032            goto exit;
1033        }
1034        maxsplit = ival;
1035    }
1036skip_optional_pos:
1037    return_value = unicode_rsplit_impl(self, sep, maxsplit);
1038
1039exit:
1040    return return_value;
1041}
1042
1043PyDoc_STRVAR(unicode_splitlines__doc__,
1044"splitlines($self, /, keepends=False)\n"
1045"--\n"
1046"\n"
1047"Return a list of the lines in the string, breaking at line boundaries.\n"
1048"\n"
1049"Line breaks are not included in the resulting list unless keepends is given and\n"
1050"true.");
1051
1052#define UNICODE_SPLITLINES_METHODDEF    \
1053    {"splitlines", _PyCFunction_CAST(unicode_splitlines), METH_FASTCALL|METH_KEYWORDS, unicode_splitlines__doc__},
1054
1055static PyObject *
1056unicode_splitlines_impl(PyObject *self, int keepends);
1057
1058static PyObject *
1059unicode_splitlines(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
1060{
1061    PyObject *return_value = NULL;
1062    static const char * const _keywords[] = {"keepends", NULL};
1063    static _PyArg_Parser _parser = {NULL, _keywords, "splitlines", 0};
1064    PyObject *argsbuf[1];
1065    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
1066    int keepends = 0;
1067
1068    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
1069    if (!args) {
1070        goto exit;
1071    }
1072    if (!noptargs) {
1073        goto skip_optional_pos;
1074    }
1075    keepends = _PyLong_AsInt(args[0]);
1076    if (keepends == -1 && PyErr_Occurred()) {
1077        goto exit;
1078    }
1079skip_optional_pos:
1080    return_value = unicode_splitlines_impl(self, keepends);
1081
1082exit:
1083    return return_value;
1084}
1085
1086PyDoc_STRVAR(unicode_swapcase__doc__,
1087"swapcase($self, /)\n"
1088"--\n"
1089"\n"
1090"Convert uppercase characters to lowercase and lowercase characters to uppercase.");
1091
1092#define UNICODE_SWAPCASE_METHODDEF    \
1093    {"swapcase", (PyCFunction)unicode_swapcase, METH_NOARGS, unicode_swapcase__doc__},
1094
1095static PyObject *
1096unicode_swapcase_impl(PyObject *self);
1097
1098static PyObject *
1099unicode_swapcase(PyObject *self, PyObject *Py_UNUSED(ignored))
1100{
1101    return unicode_swapcase_impl(self);
1102}
1103
1104PyDoc_STRVAR(unicode_maketrans__doc__,
1105"maketrans(x, y=<unrepresentable>, z=<unrepresentable>, /)\n"
1106"--\n"
1107"\n"
1108"Return a translation table usable for str.translate().\n"
1109"\n"
1110"If there is only one argument, it must be a dictionary mapping Unicode\n"
1111"ordinals (integers) or characters to Unicode ordinals, strings or None.\n"
1112"Character keys will be then converted to ordinals.\n"
1113"If there are two arguments, they must be strings of equal length, and\n"
1114"in the resulting dictionary, each character in x will be mapped to the\n"
1115"character at the same position in y. If there is a third argument, it\n"
1116"must be a string, whose characters will be mapped to None in the result.");
1117
1118#define UNICODE_MAKETRANS_METHODDEF    \
1119    {"maketrans", _PyCFunction_CAST(unicode_maketrans), METH_FASTCALL|METH_STATIC, unicode_maketrans__doc__},
1120
1121static PyObject *
1122unicode_maketrans_impl(PyObject *x, PyObject *y, PyObject *z);
1123
1124static PyObject *
1125unicode_maketrans(void *null, PyObject *const *args, Py_ssize_t nargs)
1126{
1127    PyObject *return_value = NULL;
1128    PyObject *x;
1129    PyObject *y = NULL;
1130    PyObject *z = NULL;
1131
1132    if (!_PyArg_CheckPositional("maketrans", nargs, 1, 3)) {
1133        goto exit;
1134    }
1135    x = args[0];
1136    if (nargs < 2) {
1137        goto skip_optional;
1138    }
1139    if (!PyUnicode_Check(args[1])) {
1140        _PyArg_BadArgument("maketrans", "argument 2", "str", args[1]);
1141        goto exit;
1142    }
1143    if (PyUnicode_READY(args[1]) == -1) {
1144        goto exit;
1145    }
1146    y = args[1];
1147    if (nargs < 3) {
1148        goto skip_optional;
1149    }
1150    if (!PyUnicode_Check(args[2])) {
1151        _PyArg_BadArgument("maketrans", "argument 3", "str", args[2]);
1152        goto exit;
1153    }
1154    if (PyUnicode_READY(args[2]) == -1) {
1155        goto exit;
1156    }
1157    z = args[2];
1158skip_optional:
1159    return_value = unicode_maketrans_impl(x, y, z);
1160
1161exit:
1162    return return_value;
1163}
1164
1165PyDoc_STRVAR(unicode_translate__doc__,
1166"translate($self, table, /)\n"
1167"--\n"
1168"\n"
1169"Replace each character in the string using the given translation table.\n"
1170"\n"
1171"  table\n"
1172"    Translation table, which must be a mapping of Unicode ordinals to\n"
1173"    Unicode ordinals, strings, or None.\n"
1174"\n"
1175"The table must implement lookup/indexing via __getitem__, for instance a\n"
1176"dictionary or list.  If this operation raises LookupError, the character is\n"
1177"left untouched.  Characters mapped to None are deleted.");
1178
1179#define UNICODE_TRANSLATE_METHODDEF    \
1180    {"translate", (PyCFunction)unicode_translate, METH_O, unicode_translate__doc__},
1181
1182PyDoc_STRVAR(unicode_upper__doc__,
1183"upper($self, /)\n"
1184"--\n"
1185"\n"
1186"Return a copy of the string converted to uppercase.");
1187
1188#define UNICODE_UPPER_METHODDEF    \
1189    {"upper", (PyCFunction)unicode_upper, METH_NOARGS, unicode_upper__doc__},
1190
1191static PyObject *
1192unicode_upper_impl(PyObject *self);
1193
1194static PyObject *
1195unicode_upper(PyObject *self, PyObject *Py_UNUSED(ignored))
1196{
1197    return unicode_upper_impl(self);
1198}
1199
1200PyDoc_STRVAR(unicode_zfill__doc__,
1201"zfill($self, width, /)\n"
1202"--\n"
1203"\n"
1204"Pad a numeric string with zeros on the left, to fill a field of the given width.\n"
1205"\n"
1206"The string is never truncated.");
1207
1208#define UNICODE_ZFILL_METHODDEF    \
1209    {"zfill", (PyCFunction)unicode_zfill, METH_O, unicode_zfill__doc__},
1210
1211static PyObject *
1212unicode_zfill_impl(PyObject *self, Py_ssize_t width);
1213
1214static PyObject *
1215unicode_zfill(PyObject *self, PyObject *arg)
1216{
1217    PyObject *return_value = NULL;
1218    Py_ssize_t width;
1219
1220    {
1221        Py_ssize_t ival = -1;
1222        PyObject *iobj = _PyNumber_Index(arg);
1223        if (iobj != NULL) {
1224            ival = PyLong_AsSsize_t(iobj);
1225            Py_DECREF(iobj);
1226        }
1227        if (ival == -1 && PyErr_Occurred()) {
1228            goto exit;
1229        }
1230        width = ival;
1231    }
1232    return_value = unicode_zfill_impl(self, width);
1233
1234exit:
1235    return return_value;
1236}
1237
1238PyDoc_STRVAR(unicode___format____doc__,
1239"__format__($self, format_spec, /)\n"
1240"--\n"
1241"\n"
1242"Return a formatted version of the string as described by format_spec.");
1243
1244#define UNICODE___FORMAT___METHODDEF    \
1245    {"__format__", (PyCFunction)unicode___format__, METH_O, unicode___format____doc__},
1246
1247static PyObject *
1248unicode___format___impl(PyObject *self, PyObject *format_spec);
1249
1250static PyObject *
1251unicode___format__(PyObject *self, PyObject *arg)
1252{
1253    PyObject *return_value = NULL;
1254    PyObject *format_spec;
1255
1256    if (!PyUnicode_Check(arg)) {
1257        _PyArg_BadArgument("__format__", "argument", "str", arg);
1258        goto exit;
1259    }
1260    if (PyUnicode_READY(arg) == -1) {
1261        goto exit;
1262    }
1263    format_spec = arg;
1264    return_value = unicode___format___impl(self, format_spec);
1265
1266exit:
1267    return return_value;
1268}
1269
1270PyDoc_STRVAR(unicode_sizeof__doc__,
1271"__sizeof__($self, /)\n"
1272"--\n"
1273"\n"
1274"Return the size of the string in memory, in bytes.");
1275
1276#define UNICODE_SIZEOF_METHODDEF    \
1277    {"__sizeof__", (PyCFunction)unicode_sizeof, METH_NOARGS, unicode_sizeof__doc__},
1278
1279static PyObject *
1280unicode_sizeof_impl(PyObject *self);
1281
1282static PyObject *
1283unicode_sizeof(PyObject *self, PyObject *Py_UNUSED(ignored))
1284{
1285    return unicode_sizeof_impl(self);
1286}
1287
1288static PyObject *
1289unicode_new_impl(PyTypeObject *type, PyObject *x, const char *encoding,
1290                 const char *errors);
1291
1292static PyObject *
1293unicode_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
1294{
1295    PyObject *return_value = NULL;
1296    static const char * const _keywords[] = {"object", "encoding", "errors", NULL};
1297    static _PyArg_Parser _parser = {NULL, _keywords, "str", 0};
1298    PyObject *argsbuf[3];
1299    PyObject * const *fastargs;
1300    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
1301    Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 0;
1302    PyObject *x = NULL;
1303    const char *encoding = NULL;
1304    const char *errors = NULL;
1305
1306    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 0, 3, 0, argsbuf);
1307    if (!fastargs) {
1308        goto exit;
1309    }
1310    if (!noptargs) {
1311        goto skip_optional_pos;
1312    }
1313    if (fastargs[0]) {
1314        x = fastargs[0];
1315        if (!--noptargs) {
1316            goto skip_optional_pos;
1317        }
1318    }
1319    if (fastargs[1]) {
1320        if (!PyUnicode_Check(fastargs[1])) {
1321            _PyArg_BadArgument("str", "argument 'encoding'", "str", fastargs[1]);
1322            goto exit;
1323        }
1324        Py_ssize_t encoding_length;
1325        encoding = PyUnicode_AsUTF8AndSize(fastargs[1], &encoding_length);
1326        if (encoding == NULL) {
1327            goto exit;
1328        }
1329        if (strlen(encoding) != (size_t)encoding_length) {
1330            PyErr_SetString(PyExc_ValueError, "embedded null character");
1331            goto exit;
1332        }
1333        if (!--noptargs) {
1334            goto skip_optional_pos;
1335        }
1336    }
1337    if (!PyUnicode_Check(fastargs[2])) {
1338        _PyArg_BadArgument("str", "argument 'errors'", "str", fastargs[2]);
1339        goto exit;
1340    }
1341    Py_ssize_t errors_length;
1342    errors = PyUnicode_AsUTF8AndSize(fastargs[2], &errors_length);
1343    if (errors == NULL) {
1344        goto exit;
1345    }
1346    if (strlen(errors) != (size_t)errors_length) {
1347        PyErr_SetString(PyExc_ValueError, "embedded null character");
1348        goto exit;
1349    }
1350skip_optional_pos:
1351    return_value = unicode_new_impl(type, x, encoding, errors);
1352
1353exit:
1354    return return_value;
1355}
1356/*[clinic end generated code: output=b5dd7cefead9a8e7 input=a9049054013a1b77]*/
1357