1 /*[clinic input]
2 preserve
3 [clinic start generated code]*/
4 
5 PyDoc_STRVAR(stringlib_expandtabs__doc__,
6 "expandtabs($self, /, tabsize=8)\n"
7 "--\n"
8 "\n"
9 "Return a copy where all tab characters are expanded using spaces.\n"
10 "\n"
11 "If tabsize is not given, a tab size of 8 characters is assumed.");
12 
13 #define STRINGLIB_EXPANDTABS_METHODDEF    \
14     {"expandtabs", (PyCFunction)(void(*)(void))stringlib_expandtabs, METH_FASTCALL|METH_KEYWORDS, stringlib_expandtabs__doc__},
15 
16 static PyObject *
17 stringlib_expandtabs_impl(PyObject *self, int tabsize);
18 
19 static PyObject *
stringlib_expandtabs(PyObject * self,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)20 stringlib_expandtabs(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
21 {
22     PyObject *return_value = NULL;
23     static const char * const _keywords[] = {"tabsize", NULL};
24     static _PyArg_Parser _parser = {NULL, _keywords, "expandtabs", 0};
25     PyObject *argsbuf[1];
26     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
27     int tabsize = 8;
28 
29     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
30     if (!args) {
31         goto exit;
32     }
33     if (!noptargs) {
34         goto skip_optional_pos;
35     }
36     if (PyFloat_Check(args[0])) {
37         PyErr_SetString(PyExc_TypeError,
38                         "integer argument expected, got float" );
39         goto exit;
40     }
41     tabsize = _PyLong_AsInt(args[0]);
42     if (tabsize == -1 && PyErr_Occurred()) {
43         goto exit;
44     }
45 skip_optional_pos:
46     return_value = stringlib_expandtabs_impl(self, tabsize);
47 
48 exit:
49     return return_value;
50 }
51 
52 PyDoc_STRVAR(stringlib_ljust__doc__,
53 "ljust($self, width, fillchar=b\' \', /)\n"
54 "--\n"
55 "\n"
56 "Return a left-justified string of length width.\n"
57 "\n"
58 "Padding is done using the specified fill character.");
59 
60 #define STRINGLIB_LJUST_METHODDEF    \
61     {"ljust", (PyCFunction)(void(*)(void))stringlib_ljust, METH_FASTCALL, stringlib_ljust__doc__},
62 
63 static PyObject *
64 stringlib_ljust_impl(PyObject *self, Py_ssize_t width, char fillchar);
65 
66 static PyObject *
stringlib_ljust(PyObject * self,PyObject * const * args,Py_ssize_t nargs)67 stringlib_ljust(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
68 {
69     PyObject *return_value = NULL;
70     Py_ssize_t width;
71     char fillchar = ' ';
72 
73     if (!_PyArg_CheckPositional("ljust", nargs, 1, 2)) {
74         goto exit;
75     }
76     if (PyFloat_Check(args[0])) {
77         PyErr_SetString(PyExc_TypeError,
78                         "integer argument expected, got float" );
79         goto exit;
80     }
81     {
82         Py_ssize_t ival = -1;
83         PyObject *iobj = PyNumber_Index(args[0]);
84         if (iobj != NULL) {
85             ival = PyLong_AsSsize_t(iobj);
86             Py_DECREF(iobj);
87         }
88         if (ival == -1 && PyErr_Occurred()) {
89             goto exit;
90         }
91         width = ival;
92     }
93     if (nargs < 2) {
94         goto skip_optional;
95     }
96     if (PyBytes_Check(args[1]) && PyBytes_GET_SIZE(args[1]) == 1) {
97         fillchar = PyBytes_AS_STRING(args[1])[0];
98     }
99     else if (PyByteArray_Check(args[1]) && PyByteArray_GET_SIZE(args[1]) == 1) {
100         fillchar = PyByteArray_AS_STRING(args[1])[0];
101     }
102     else {
103         _PyArg_BadArgument("ljust", "argument 2", "a byte string of length 1", args[1]);
104         goto exit;
105     }
106 skip_optional:
107     return_value = stringlib_ljust_impl(self, width, fillchar);
108 
109 exit:
110     return return_value;
111 }
112 
113 PyDoc_STRVAR(stringlib_rjust__doc__,
114 "rjust($self, width, fillchar=b\' \', /)\n"
115 "--\n"
116 "\n"
117 "Return a right-justified string of length width.\n"
118 "\n"
119 "Padding is done using the specified fill character.");
120 
121 #define STRINGLIB_RJUST_METHODDEF    \
122     {"rjust", (PyCFunction)(void(*)(void))stringlib_rjust, METH_FASTCALL, stringlib_rjust__doc__},
123 
124 static PyObject *
125 stringlib_rjust_impl(PyObject *self, Py_ssize_t width, char fillchar);
126 
127 static PyObject *
stringlib_rjust(PyObject * self,PyObject * const * args,Py_ssize_t nargs)128 stringlib_rjust(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
129 {
130     PyObject *return_value = NULL;
131     Py_ssize_t width;
132     char fillchar = ' ';
133 
134     if (!_PyArg_CheckPositional("rjust", nargs, 1, 2)) {
135         goto exit;
136     }
137     if (PyFloat_Check(args[0])) {
138         PyErr_SetString(PyExc_TypeError,
139                         "integer argument expected, got float" );
140         goto exit;
141     }
142     {
143         Py_ssize_t ival = -1;
144         PyObject *iobj = PyNumber_Index(args[0]);
145         if (iobj != NULL) {
146             ival = PyLong_AsSsize_t(iobj);
147             Py_DECREF(iobj);
148         }
149         if (ival == -1 && PyErr_Occurred()) {
150             goto exit;
151         }
152         width = ival;
153     }
154     if (nargs < 2) {
155         goto skip_optional;
156     }
157     if (PyBytes_Check(args[1]) && PyBytes_GET_SIZE(args[1]) == 1) {
158         fillchar = PyBytes_AS_STRING(args[1])[0];
159     }
160     else if (PyByteArray_Check(args[1]) && PyByteArray_GET_SIZE(args[1]) == 1) {
161         fillchar = PyByteArray_AS_STRING(args[1])[0];
162     }
163     else {
164         _PyArg_BadArgument("rjust", "argument 2", "a byte string of length 1", args[1]);
165         goto exit;
166     }
167 skip_optional:
168     return_value = stringlib_rjust_impl(self, width, fillchar);
169 
170 exit:
171     return return_value;
172 }
173 
174 PyDoc_STRVAR(stringlib_center__doc__,
175 "center($self, width, fillchar=b\' \', /)\n"
176 "--\n"
177 "\n"
178 "Return a centered string of length width.\n"
179 "\n"
180 "Padding is done using the specified fill character.");
181 
182 #define STRINGLIB_CENTER_METHODDEF    \
183     {"center", (PyCFunction)(void(*)(void))stringlib_center, METH_FASTCALL, stringlib_center__doc__},
184 
185 static PyObject *
186 stringlib_center_impl(PyObject *self, Py_ssize_t width, char fillchar);
187 
188 static PyObject *
stringlib_center(PyObject * self,PyObject * const * args,Py_ssize_t nargs)189 stringlib_center(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
190 {
191     PyObject *return_value = NULL;
192     Py_ssize_t width;
193     char fillchar = ' ';
194 
195     if (!_PyArg_CheckPositional("center", nargs, 1, 2)) {
196         goto exit;
197     }
198     if (PyFloat_Check(args[0])) {
199         PyErr_SetString(PyExc_TypeError,
200                         "integer argument expected, got float" );
201         goto exit;
202     }
203     {
204         Py_ssize_t ival = -1;
205         PyObject *iobj = PyNumber_Index(args[0]);
206         if (iobj != NULL) {
207             ival = PyLong_AsSsize_t(iobj);
208             Py_DECREF(iobj);
209         }
210         if (ival == -1 && PyErr_Occurred()) {
211             goto exit;
212         }
213         width = ival;
214     }
215     if (nargs < 2) {
216         goto skip_optional;
217     }
218     if (PyBytes_Check(args[1]) && PyBytes_GET_SIZE(args[1]) == 1) {
219         fillchar = PyBytes_AS_STRING(args[1])[0];
220     }
221     else if (PyByteArray_Check(args[1]) && PyByteArray_GET_SIZE(args[1]) == 1) {
222         fillchar = PyByteArray_AS_STRING(args[1])[0];
223     }
224     else {
225         _PyArg_BadArgument("center", "argument 2", "a byte string of length 1", args[1]);
226         goto exit;
227     }
228 skip_optional:
229     return_value = stringlib_center_impl(self, width, fillchar);
230 
231 exit:
232     return return_value;
233 }
234 
235 PyDoc_STRVAR(stringlib_zfill__doc__,
236 "zfill($self, width, /)\n"
237 "--\n"
238 "\n"
239 "Pad a numeric string with zeros on the left, to fill a field of the given width.\n"
240 "\n"
241 "The original string is never truncated.");
242 
243 #define STRINGLIB_ZFILL_METHODDEF    \
244     {"zfill", (PyCFunction)stringlib_zfill, METH_O, stringlib_zfill__doc__},
245 
246 static PyObject *
247 stringlib_zfill_impl(PyObject *self, Py_ssize_t width);
248 
249 static PyObject *
stringlib_zfill(PyObject * self,PyObject * arg)250 stringlib_zfill(PyObject *self, PyObject *arg)
251 {
252     PyObject *return_value = NULL;
253     Py_ssize_t width;
254 
255     if (PyFloat_Check(arg)) {
256         PyErr_SetString(PyExc_TypeError,
257                         "integer argument expected, got float" );
258         goto exit;
259     }
260     {
261         Py_ssize_t ival = -1;
262         PyObject *iobj = PyNumber_Index(arg);
263         if (iobj != NULL) {
264             ival = PyLong_AsSsize_t(iobj);
265             Py_DECREF(iobj);
266         }
267         if (ival == -1 && PyErr_Occurred()) {
268             goto exit;
269         }
270         width = ival;
271     }
272     return_value = stringlib_zfill_impl(self, width);
273 
274 exit:
275     return return_value;
276 }
277 /*[clinic end generated code: output=15be047aef999b4e input=a9049054013a1b77]*/
278