blob: 5278323f31725dbf84fef29c5ac02663b1eb7ef8 [file] [log] [blame]
Serhiy Storchakaa860aea2015-05-03 15:54:23 +03001/*[clinic input]
2preserve
3[clinic start generated code]*/
4
5PyDoc_STRVAR(_sre_getcodesize__doc__,
6"getcodesize($module, /)\n"
7"--\n"
8"\n");
9
10#define _SRE_GETCODESIZE_METHODDEF \
11 {"getcodesize", (PyCFunction)_sre_getcodesize, METH_NOARGS, _sre_getcodesize__doc__},
12
13static int
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030014_sre_getcodesize_impl(PyObject *module);
Serhiy Storchakaa860aea2015-05-03 15:54:23 +030015
16static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030017_sre_getcodesize(PyObject *module, PyObject *Py_UNUSED(ignored))
Serhiy Storchakaa860aea2015-05-03 15:54:23 +030018{
19 PyObject *return_value = NULL;
20 int _return_value;
21
22 _return_value = _sre_getcodesize_impl(module);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030023 if ((_return_value == -1) && PyErr_Occurred()) {
Serhiy Storchakaa860aea2015-05-03 15:54:23 +030024 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030025 }
Serhiy Storchakaa860aea2015-05-03 15:54:23 +030026 return_value = PyLong_FromLong((long)_return_value);
27
28exit:
29 return return_value;
30}
31
32PyDoc_STRVAR(_sre_getlower__doc__,
33"getlower($module, character, flags, /)\n"
34"--\n"
35"\n");
36
37#define _SRE_GETLOWER_METHODDEF \
Victor Stinner259f0e42017-01-17 01:35:17 +010038 {"getlower", (PyCFunction)_sre_getlower, METH_FASTCALL, _sre_getlower__doc__},
Serhiy Storchakaa860aea2015-05-03 15:54:23 +030039
40static int
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030041_sre_getlower_impl(PyObject *module, int character, int flags);
Serhiy Storchakaa860aea2015-05-03 15:54:23 +030042
43static PyObject *
Victor Stinner259f0e42017-01-17 01:35:17 +010044_sre_getlower(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchakaa860aea2015-05-03 15:54:23 +030045{
46 PyObject *return_value = NULL;
47 int character;
48 int flags;
49 int _return_value;
50
Victor Stinner259f0e42017-01-17 01:35:17 +010051 if (!_PyArg_ParseStack(args, nargs, "ii:getlower",
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030052 &character, &flags)) {
Serhiy Storchakaa860aea2015-05-03 15:54:23 +030053 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030054 }
Victor Stinner259f0e42017-01-17 01:35:17 +010055
56 if (!_PyArg_NoStackKeywords("getlower", kwnames)) {
57 goto exit;
58 }
Serhiy Storchakaa860aea2015-05-03 15:54:23 +030059 _return_value = _sre_getlower_impl(module, character, flags);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030060 if ((_return_value == -1) && PyErr_Occurred()) {
Serhiy Storchakaa860aea2015-05-03 15:54:23 +030061 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030062 }
Serhiy Storchakaa860aea2015-05-03 15:54:23 +030063 return_value = PyLong_FromLong((long)_return_value);
64
65exit:
66 return return_value;
67}
68
69PyDoc_STRVAR(_sre_SRE_Pattern_match__doc__,
Serhiy Storchakab37f3f62017-01-13 08:53:58 +020070"match($self, /, string, pos=0, endpos=sys.maxsize)\n"
Serhiy Storchakaa860aea2015-05-03 15:54:23 +030071"--\n"
72"\n"
73"Matches zero or more characters at the beginning of the string.");
74
75#define _SRE_SRE_PATTERN_MATCH_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -070076 {"match", (PyCFunction)_sre_SRE_Pattern_match, METH_FASTCALL, _sre_SRE_Pattern_match__doc__},
Serhiy Storchakaa860aea2015-05-03 15:54:23 +030077
78static PyObject *
79_sre_SRE_Pattern_match_impl(PatternObject *self, PyObject *string,
Serhiy Storchakab37f3f62017-01-13 08:53:58 +020080 Py_ssize_t pos, Py_ssize_t endpos);
Serhiy Storchakaa860aea2015-05-03 15:54:23 +030081
82static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -070083_sre_SRE_Pattern_match(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchakaa860aea2015-05-03 15:54:23 +030084{
85 PyObject *return_value = NULL;
Serhiy Storchakab37f3f62017-01-13 08:53:58 +020086 static const char * const _keywords[] = {"string", "pos", "endpos", NULL};
87 static _PyArg_Parser _parser = {"O|nn:match", _keywords, 0};
88 PyObject *string;
Serhiy Storchakaa860aea2015-05-03 15:54:23 +030089 Py_ssize_t pos = 0;
90 Py_ssize_t endpos = PY_SSIZE_T_MAX;
Serhiy Storchakaa860aea2015-05-03 15:54:23 +030091
Victor Stinner3e1fad62017-01-17 01:29:01 +010092 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchakab37f3f62017-01-13 08:53:58 +020093 &string, &pos, &endpos)) {
Serhiy Storchakaa860aea2015-05-03 15:54:23 +030094 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030095 }
Serhiy Storchakab37f3f62017-01-13 08:53:58 +020096 return_value = _sre_SRE_Pattern_match_impl(self, string, pos, endpos);
Serhiy Storchakaa860aea2015-05-03 15:54:23 +030097
98exit:
99 return return_value;
100}
101
102PyDoc_STRVAR(_sre_SRE_Pattern_fullmatch__doc__,
Serhiy Storchakab37f3f62017-01-13 08:53:58 +0200103"fullmatch($self, /, string, pos=0, endpos=sys.maxsize)\n"
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300104"--\n"
105"\n"
106"Matches against all of the string");
107
108#define _SRE_SRE_PATTERN_FULLMATCH_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700109 {"fullmatch", (PyCFunction)_sre_SRE_Pattern_fullmatch, METH_FASTCALL, _sre_SRE_Pattern_fullmatch__doc__},
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300110
111static PyObject *
112_sre_SRE_Pattern_fullmatch_impl(PatternObject *self, PyObject *string,
Serhiy Storchakab37f3f62017-01-13 08:53:58 +0200113 Py_ssize_t pos, Py_ssize_t endpos);
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300114
115static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700116_sre_SRE_Pattern_fullmatch(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300117{
118 PyObject *return_value = NULL;
Serhiy Storchakab37f3f62017-01-13 08:53:58 +0200119 static const char * const _keywords[] = {"string", "pos", "endpos", NULL};
120 static _PyArg_Parser _parser = {"O|nn:fullmatch", _keywords, 0};
121 PyObject *string;
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300122 Py_ssize_t pos = 0;
123 Py_ssize_t endpos = PY_SSIZE_T_MAX;
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300124
Victor Stinner3e1fad62017-01-17 01:29:01 +0100125 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchakab37f3f62017-01-13 08:53:58 +0200126 &string, &pos, &endpos)) {
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300127 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300128 }
Serhiy Storchakab37f3f62017-01-13 08:53:58 +0200129 return_value = _sre_SRE_Pattern_fullmatch_impl(self, string, pos, endpos);
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300130
131exit:
132 return return_value;
133}
134
135PyDoc_STRVAR(_sre_SRE_Pattern_search__doc__,
Serhiy Storchakab37f3f62017-01-13 08:53:58 +0200136"search($self, /, string, pos=0, endpos=sys.maxsize)\n"
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300137"--\n"
138"\n"
139"Scan through string looking for a match, and return a corresponding match object instance.\n"
140"\n"
141"Return None if no position in the string matches.");
142
143#define _SRE_SRE_PATTERN_SEARCH_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700144 {"search", (PyCFunction)_sre_SRE_Pattern_search, METH_FASTCALL, _sre_SRE_Pattern_search__doc__},
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300145
146static PyObject *
147_sre_SRE_Pattern_search_impl(PatternObject *self, PyObject *string,
Serhiy Storchakab37f3f62017-01-13 08:53:58 +0200148 Py_ssize_t pos, Py_ssize_t endpos);
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300149
150static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700151_sre_SRE_Pattern_search(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300152{
153 PyObject *return_value = NULL;
Serhiy Storchakab37f3f62017-01-13 08:53:58 +0200154 static const char * const _keywords[] = {"string", "pos", "endpos", NULL};
155 static _PyArg_Parser _parser = {"O|nn:search", _keywords, 0};
156 PyObject *string;
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300157 Py_ssize_t pos = 0;
158 Py_ssize_t endpos = PY_SSIZE_T_MAX;
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300159
Victor Stinner3e1fad62017-01-17 01:29:01 +0100160 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchakab37f3f62017-01-13 08:53:58 +0200161 &string, &pos, &endpos)) {
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300162 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300163 }
Serhiy Storchakab37f3f62017-01-13 08:53:58 +0200164 return_value = _sre_SRE_Pattern_search_impl(self, string, pos, endpos);
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300165
166exit:
167 return return_value;
168}
169
170PyDoc_STRVAR(_sre_SRE_Pattern_findall__doc__,
Serhiy Storchakab37f3f62017-01-13 08:53:58 +0200171"findall($self, /, string, pos=0, endpos=sys.maxsize)\n"
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300172"--\n"
173"\n"
174"Return a list of all non-overlapping matches of pattern in string.");
175
176#define _SRE_SRE_PATTERN_FINDALL_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700177 {"findall", (PyCFunction)_sre_SRE_Pattern_findall, METH_FASTCALL, _sre_SRE_Pattern_findall__doc__},
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300178
179static PyObject *
180_sre_SRE_Pattern_findall_impl(PatternObject *self, PyObject *string,
Serhiy Storchakab37f3f62017-01-13 08:53:58 +0200181 Py_ssize_t pos, Py_ssize_t endpos);
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300182
183static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700184_sre_SRE_Pattern_findall(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300185{
186 PyObject *return_value = NULL;
Serhiy Storchakab37f3f62017-01-13 08:53:58 +0200187 static const char * const _keywords[] = {"string", "pos", "endpos", NULL};
188 static _PyArg_Parser _parser = {"O|nn:findall", _keywords, 0};
189 PyObject *string;
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300190 Py_ssize_t pos = 0;
191 Py_ssize_t endpos = PY_SSIZE_T_MAX;
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300192
Victor Stinner3e1fad62017-01-17 01:29:01 +0100193 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchakab37f3f62017-01-13 08:53:58 +0200194 &string, &pos, &endpos)) {
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300195 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300196 }
Serhiy Storchakab37f3f62017-01-13 08:53:58 +0200197 return_value = _sre_SRE_Pattern_findall_impl(self, string, pos, endpos);
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300198
199exit:
200 return return_value;
201}
202
203PyDoc_STRVAR(_sre_SRE_Pattern_finditer__doc__,
204"finditer($self, /, string, pos=0, endpos=sys.maxsize)\n"
205"--\n"
206"\n"
207"Return an iterator over all non-overlapping matches for the RE pattern in string.\n"
208"\n"
209"For each match, the iterator returns a match object.");
210
211#define _SRE_SRE_PATTERN_FINDITER_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700212 {"finditer", (PyCFunction)_sre_SRE_Pattern_finditer, METH_FASTCALL, _sre_SRE_Pattern_finditer__doc__},
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300213
214static PyObject *
215_sre_SRE_Pattern_finditer_impl(PatternObject *self, PyObject *string,
216 Py_ssize_t pos, Py_ssize_t endpos);
217
218static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700219_sre_SRE_Pattern_finditer(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300220{
221 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300222 static const char * const _keywords[] = {"string", "pos", "endpos", NULL};
223 static _PyArg_Parser _parser = {"O|nn:finditer", _keywords, 0};
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300224 PyObject *string;
225 Py_ssize_t pos = 0;
226 Py_ssize_t endpos = PY_SSIZE_T_MAX;
227
Victor Stinner3e1fad62017-01-17 01:29:01 +0100228 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300229 &string, &pos, &endpos)) {
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300230 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300231 }
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300232 return_value = _sre_SRE_Pattern_finditer_impl(self, string, pos, endpos);
233
234exit:
235 return return_value;
236}
237
238PyDoc_STRVAR(_sre_SRE_Pattern_scanner__doc__,
239"scanner($self, /, string, pos=0, endpos=sys.maxsize)\n"
240"--\n"
241"\n");
242
243#define _SRE_SRE_PATTERN_SCANNER_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700244 {"scanner", (PyCFunction)_sre_SRE_Pattern_scanner, METH_FASTCALL, _sre_SRE_Pattern_scanner__doc__},
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300245
246static PyObject *
247_sre_SRE_Pattern_scanner_impl(PatternObject *self, PyObject *string,
248 Py_ssize_t pos, Py_ssize_t endpos);
249
250static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700251_sre_SRE_Pattern_scanner(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300252{
253 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300254 static const char * const _keywords[] = {"string", "pos", "endpos", NULL};
255 static _PyArg_Parser _parser = {"O|nn:scanner", _keywords, 0};
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300256 PyObject *string;
257 Py_ssize_t pos = 0;
258 Py_ssize_t endpos = PY_SSIZE_T_MAX;
259
Victor Stinner3e1fad62017-01-17 01:29:01 +0100260 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300261 &string, &pos, &endpos)) {
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300262 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300263 }
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300264 return_value = _sre_SRE_Pattern_scanner_impl(self, string, pos, endpos);
265
266exit:
267 return return_value;
268}
269
270PyDoc_STRVAR(_sre_SRE_Pattern_split__doc__,
Serhiy Storchakab37f3f62017-01-13 08:53:58 +0200271"split($self, /, string, maxsplit=0)\n"
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300272"--\n"
273"\n"
274"Split string by the occurrences of pattern.");
275
276#define _SRE_SRE_PATTERN_SPLIT_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700277 {"split", (PyCFunction)_sre_SRE_Pattern_split, METH_FASTCALL, _sre_SRE_Pattern_split__doc__},
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300278
279static PyObject *
280_sre_SRE_Pattern_split_impl(PatternObject *self, PyObject *string,
Serhiy Storchakab37f3f62017-01-13 08:53:58 +0200281 Py_ssize_t maxsplit);
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300282
283static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700284_sre_SRE_Pattern_split(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300285{
286 PyObject *return_value = NULL;
Serhiy Storchakab37f3f62017-01-13 08:53:58 +0200287 static const char * const _keywords[] = {"string", "maxsplit", NULL};
288 static _PyArg_Parser _parser = {"O|n:split", _keywords, 0};
289 PyObject *string;
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300290 Py_ssize_t maxsplit = 0;
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300291
Victor Stinner3e1fad62017-01-17 01:29:01 +0100292 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchakab37f3f62017-01-13 08:53:58 +0200293 &string, &maxsplit)) {
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300294 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300295 }
Serhiy Storchakab37f3f62017-01-13 08:53:58 +0200296 return_value = _sre_SRE_Pattern_split_impl(self, string, maxsplit);
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300297
298exit:
299 return return_value;
300}
301
302PyDoc_STRVAR(_sre_SRE_Pattern_sub__doc__,
303"sub($self, /, repl, string, count=0)\n"
304"--\n"
305"\n"
306"Return the string obtained by replacing the leftmost non-overlapping occurrences of pattern in string by the replacement repl.");
307
308#define _SRE_SRE_PATTERN_SUB_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700309 {"sub", (PyCFunction)_sre_SRE_Pattern_sub, METH_FASTCALL, _sre_SRE_Pattern_sub__doc__},
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300310
311static PyObject *
312_sre_SRE_Pattern_sub_impl(PatternObject *self, PyObject *repl,
313 PyObject *string, Py_ssize_t count);
314
315static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700316_sre_SRE_Pattern_sub(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300317{
318 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300319 static const char * const _keywords[] = {"repl", "string", "count", NULL};
320 static _PyArg_Parser _parser = {"OO|n:sub", _keywords, 0};
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300321 PyObject *repl;
322 PyObject *string;
323 Py_ssize_t count = 0;
324
Victor Stinner3e1fad62017-01-17 01:29:01 +0100325 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300326 &repl, &string, &count)) {
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300327 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300328 }
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300329 return_value = _sre_SRE_Pattern_sub_impl(self, repl, string, count);
330
331exit:
332 return return_value;
333}
334
335PyDoc_STRVAR(_sre_SRE_Pattern_subn__doc__,
336"subn($self, /, repl, string, count=0)\n"
337"--\n"
338"\n"
339"Return the tuple (new_string, number_of_subs_made) found by replacing the leftmost non-overlapping occurrences of pattern with the replacement repl.");
340
341#define _SRE_SRE_PATTERN_SUBN_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700342 {"subn", (PyCFunction)_sre_SRE_Pattern_subn, METH_FASTCALL, _sre_SRE_Pattern_subn__doc__},
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300343
344static PyObject *
345_sre_SRE_Pattern_subn_impl(PatternObject *self, PyObject *repl,
346 PyObject *string, Py_ssize_t count);
347
348static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700349_sre_SRE_Pattern_subn(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300350{
351 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300352 static const char * const _keywords[] = {"repl", "string", "count", NULL};
353 static _PyArg_Parser _parser = {"OO|n:subn", _keywords, 0};
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300354 PyObject *repl;
355 PyObject *string;
356 Py_ssize_t count = 0;
357
Victor Stinner3e1fad62017-01-17 01:29:01 +0100358 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300359 &repl, &string, &count)) {
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300360 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300361 }
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300362 return_value = _sre_SRE_Pattern_subn_impl(self, repl, string, count);
363
364exit:
365 return return_value;
366}
367
368PyDoc_STRVAR(_sre_SRE_Pattern___copy____doc__,
369"__copy__($self, /)\n"
370"--\n"
371"\n");
372
373#define _SRE_SRE_PATTERN___COPY___METHODDEF \
374 {"__copy__", (PyCFunction)_sre_SRE_Pattern___copy__, METH_NOARGS, _sre_SRE_Pattern___copy____doc__},
375
376static PyObject *
377_sre_SRE_Pattern___copy___impl(PatternObject *self);
378
379static PyObject *
380_sre_SRE_Pattern___copy__(PatternObject *self, PyObject *Py_UNUSED(ignored))
381{
382 return _sre_SRE_Pattern___copy___impl(self);
383}
384
385PyDoc_STRVAR(_sre_SRE_Pattern___deepcopy____doc__,
Serhiy Storchakafdbd0112017-04-16 10:16:03 +0300386"__deepcopy__($self, memo, /)\n"
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300387"--\n"
388"\n");
389
390#define _SRE_SRE_PATTERN___DEEPCOPY___METHODDEF \
Serhiy Storchakafdbd0112017-04-16 10:16:03 +0300391 {"__deepcopy__", (PyCFunction)_sre_SRE_Pattern___deepcopy__, METH_O, _sre_SRE_Pattern___deepcopy____doc__},
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300392
393PyDoc_STRVAR(_sre_compile__doc__,
394"compile($module, /, pattern, flags, code, groups, groupindex,\n"
395" indexgroup)\n"
396"--\n"
397"\n");
398
399#define _SRE_COMPILE_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700400 {"compile", (PyCFunction)_sre_compile, METH_FASTCALL, _sre_compile__doc__},
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300401
402static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300403_sre_compile_impl(PyObject *module, PyObject *pattern, int flags,
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300404 PyObject *code, Py_ssize_t groups, PyObject *groupindex,
405 PyObject *indexgroup);
406
407static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700408_sre_compile(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300409{
410 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300411 static const char * const _keywords[] = {"pattern", "flags", "code", "groups", "groupindex", "indexgroup", NULL};
Victor Stinner726a57d2016-11-22 23:04:39 +0100412 static _PyArg_Parser _parser = {"OiO!nO!O!:compile", _keywords, 0};
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300413 PyObject *pattern;
414 int flags;
415 PyObject *code;
416 Py_ssize_t groups;
417 PyObject *groupindex;
418 PyObject *indexgroup;
419
Victor Stinner3e1fad62017-01-17 01:29:01 +0100420 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Victor Stinner726a57d2016-11-22 23:04:39 +0100421 &pattern, &flags, &PyList_Type, &code, &groups, &PyDict_Type, &groupindex, &PyTuple_Type, &indexgroup)) {
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300422 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300423 }
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300424 return_value = _sre_compile_impl(module, pattern, flags, code, groups, groupindex, indexgroup);
425
426exit:
427 return return_value;
428}
429
430PyDoc_STRVAR(_sre_SRE_Match_expand__doc__,
431"expand($self, /, template)\n"
432"--\n"
433"\n"
434"Return the string obtained by doing backslash substitution on the string template, as done by the sub() method.");
435
436#define _SRE_SRE_MATCH_EXPAND_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700437 {"expand", (PyCFunction)_sre_SRE_Match_expand, METH_FASTCALL, _sre_SRE_Match_expand__doc__},
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300438
439static PyObject *
440_sre_SRE_Match_expand_impl(MatchObject *self, PyObject *template);
441
442static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700443_sre_SRE_Match_expand(MatchObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300444{
445 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300446 static const char * const _keywords[] = {"template", NULL};
447 static _PyArg_Parser _parser = {"O:expand", _keywords, 0};
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300448 PyObject *template;
449
Victor Stinner3e1fad62017-01-17 01:29:01 +0100450 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300451 &template)) {
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300452 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300453 }
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300454 return_value = _sre_SRE_Match_expand_impl(self, template);
455
456exit:
457 return return_value;
458}
459
460PyDoc_STRVAR(_sre_SRE_Match_groups__doc__,
461"groups($self, /, default=None)\n"
462"--\n"
463"\n"
464"Return a tuple containing all the subgroups of the match, from 1.\n"
465"\n"
466" default\n"
467" Is used for groups that did not participate in the match.");
468
469#define _SRE_SRE_MATCH_GROUPS_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700470 {"groups", (PyCFunction)_sre_SRE_Match_groups, METH_FASTCALL, _sre_SRE_Match_groups__doc__},
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300471
472static PyObject *
473_sre_SRE_Match_groups_impl(MatchObject *self, PyObject *default_value);
474
475static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700476_sre_SRE_Match_groups(MatchObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300477{
478 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300479 static const char * const _keywords[] = {"default", NULL};
480 static _PyArg_Parser _parser = {"|O:groups", _keywords, 0};
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300481 PyObject *default_value = Py_None;
482
Victor Stinner3e1fad62017-01-17 01:29:01 +0100483 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300484 &default_value)) {
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300485 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300486 }
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300487 return_value = _sre_SRE_Match_groups_impl(self, default_value);
488
489exit:
490 return return_value;
491}
492
493PyDoc_STRVAR(_sre_SRE_Match_groupdict__doc__,
494"groupdict($self, /, default=None)\n"
495"--\n"
496"\n"
497"Return a dictionary containing all the named subgroups of the match, keyed by the subgroup name.\n"
498"\n"
499" default\n"
500" Is used for groups that did not participate in the match.");
501
502#define _SRE_SRE_MATCH_GROUPDICT_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700503 {"groupdict", (PyCFunction)_sre_SRE_Match_groupdict, METH_FASTCALL, _sre_SRE_Match_groupdict__doc__},
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300504
505static PyObject *
506_sre_SRE_Match_groupdict_impl(MatchObject *self, PyObject *default_value);
507
508static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700509_sre_SRE_Match_groupdict(MatchObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300510{
511 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300512 static const char * const _keywords[] = {"default", NULL};
513 static _PyArg_Parser _parser = {"|O:groupdict", _keywords, 0};
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300514 PyObject *default_value = Py_None;
515
Victor Stinner3e1fad62017-01-17 01:29:01 +0100516 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300517 &default_value)) {
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300518 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300519 }
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300520 return_value = _sre_SRE_Match_groupdict_impl(self, default_value);
521
522exit:
523 return return_value;
524}
525
526PyDoc_STRVAR(_sre_SRE_Match_start__doc__,
527"start($self, group=0, /)\n"
528"--\n"
529"\n"
530"Return index of the start of the substring matched by group.");
531
532#define _SRE_SRE_MATCH_START_METHODDEF \
Victor Stinner0c4a8282017-01-17 02:21:47 +0100533 {"start", (PyCFunction)_sre_SRE_Match_start, METH_FASTCALL, _sre_SRE_Match_start__doc__},
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300534
535static Py_ssize_t
536_sre_SRE_Match_start_impl(MatchObject *self, PyObject *group);
537
538static PyObject *
Victor Stinner0c4a8282017-01-17 02:21:47 +0100539_sre_SRE_Match_start(MatchObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300540{
541 PyObject *return_value = NULL;
542 PyObject *group = NULL;
543 Py_ssize_t _return_value;
544
Victor Stinner0c4a8282017-01-17 02:21:47 +0100545 if (!_PyArg_UnpackStack(args, nargs, "start",
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300546 0, 1,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300547 &group)) {
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300548 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300549 }
Victor Stinner0c4a8282017-01-17 02:21:47 +0100550
551 if (!_PyArg_NoStackKeywords("start", kwnames)) {
552 goto exit;
553 }
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300554 _return_value = _sre_SRE_Match_start_impl(self, group);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300555 if ((_return_value == -1) && PyErr_Occurred()) {
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300556 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300557 }
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300558 return_value = PyLong_FromSsize_t(_return_value);
559
560exit:
561 return return_value;
562}
563
564PyDoc_STRVAR(_sre_SRE_Match_end__doc__,
565"end($self, group=0, /)\n"
566"--\n"
567"\n"
568"Return index of the end of the substring matched by group.");
569
570#define _SRE_SRE_MATCH_END_METHODDEF \
Victor Stinner0c4a8282017-01-17 02:21:47 +0100571 {"end", (PyCFunction)_sre_SRE_Match_end, METH_FASTCALL, _sre_SRE_Match_end__doc__},
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300572
573static Py_ssize_t
574_sre_SRE_Match_end_impl(MatchObject *self, PyObject *group);
575
576static PyObject *
Victor Stinner0c4a8282017-01-17 02:21:47 +0100577_sre_SRE_Match_end(MatchObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300578{
579 PyObject *return_value = NULL;
580 PyObject *group = NULL;
581 Py_ssize_t _return_value;
582
Victor Stinner0c4a8282017-01-17 02:21:47 +0100583 if (!_PyArg_UnpackStack(args, nargs, "end",
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300584 0, 1,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300585 &group)) {
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300586 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300587 }
Victor Stinner0c4a8282017-01-17 02:21:47 +0100588
589 if (!_PyArg_NoStackKeywords("end", kwnames)) {
590 goto exit;
591 }
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300592 _return_value = _sre_SRE_Match_end_impl(self, group);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300593 if ((_return_value == -1) && PyErr_Occurred()) {
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300594 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300595 }
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300596 return_value = PyLong_FromSsize_t(_return_value);
597
598exit:
599 return return_value;
600}
601
602PyDoc_STRVAR(_sre_SRE_Match_span__doc__,
603"span($self, group=0, /)\n"
604"--\n"
605"\n"
606"For MatchObject m, return the 2-tuple (m.start(group), m.end(group)).");
607
608#define _SRE_SRE_MATCH_SPAN_METHODDEF \
Victor Stinner0c4a8282017-01-17 02:21:47 +0100609 {"span", (PyCFunction)_sre_SRE_Match_span, METH_FASTCALL, _sre_SRE_Match_span__doc__},
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300610
611static PyObject *
612_sre_SRE_Match_span_impl(MatchObject *self, PyObject *group);
613
614static PyObject *
Victor Stinner0c4a8282017-01-17 02:21:47 +0100615_sre_SRE_Match_span(MatchObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300616{
617 PyObject *return_value = NULL;
618 PyObject *group = NULL;
619
Victor Stinner0c4a8282017-01-17 02:21:47 +0100620 if (!_PyArg_UnpackStack(args, nargs, "span",
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300621 0, 1,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300622 &group)) {
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300623 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300624 }
Victor Stinner0c4a8282017-01-17 02:21:47 +0100625
626 if (!_PyArg_NoStackKeywords("span", kwnames)) {
627 goto exit;
628 }
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300629 return_value = _sre_SRE_Match_span_impl(self, group);
630
631exit:
632 return return_value;
633}
634
635PyDoc_STRVAR(_sre_SRE_Match___copy____doc__,
636"__copy__($self, /)\n"
637"--\n"
638"\n");
639
640#define _SRE_SRE_MATCH___COPY___METHODDEF \
641 {"__copy__", (PyCFunction)_sre_SRE_Match___copy__, METH_NOARGS, _sre_SRE_Match___copy____doc__},
642
643static PyObject *
644_sre_SRE_Match___copy___impl(MatchObject *self);
645
646static PyObject *
647_sre_SRE_Match___copy__(MatchObject *self, PyObject *Py_UNUSED(ignored))
648{
649 return _sre_SRE_Match___copy___impl(self);
650}
651
652PyDoc_STRVAR(_sre_SRE_Match___deepcopy____doc__,
Serhiy Storchakafdbd0112017-04-16 10:16:03 +0300653"__deepcopy__($self, memo, /)\n"
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300654"--\n"
655"\n");
656
657#define _SRE_SRE_MATCH___DEEPCOPY___METHODDEF \
Serhiy Storchakafdbd0112017-04-16 10:16:03 +0300658 {"__deepcopy__", (PyCFunction)_sre_SRE_Match___deepcopy__, METH_O, _sre_SRE_Match___deepcopy____doc__},
Serhiy Storchakaa860aea2015-05-03 15:54:23 +0300659
660PyDoc_STRVAR(_sre_SRE_Scanner_match__doc__,
661"match($self, /)\n"
662"--\n"
663"\n");
664
665#define _SRE_SRE_SCANNER_MATCH_METHODDEF \
666 {"match", (PyCFunction)_sre_SRE_Scanner_match, METH_NOARGS, _sre_SRE_Scanner_match__doc__},
667
668static PyObject *
669_sre_SRE_Scanner_match_impl(ScannerObject *self);
670
671static PyObject *
672_sre_SRE_Scanner_match(ScannerObject *self, PyObject *Py_UNUSED(ignored))
673{
674 return _sre_SRE_Scanner_match_impl(self);
675}
676
677PyDoc_STRVAR(_sre_SRE_Scanner_search__doc__,
678"search($self, /)\n"
679"--\n"
680"\n");
681
682#define _SRE_SRE_SCANNER_SEARCH_METHODDEF \
683 {"search", (PyCFunction)_sre_SRE_Scanner_search, METH_NOARGS, _sre_SRE_Scanner_search__doc__},
684
685static PyObject *
686_sre_SRE_Scanner_search_impl(ScannerObject *self);
687
688static PyObject *
689_sre_SRE_Scanner_search(ScannerObject *self, PyObject *Py_UNUSED(ignored))
690{
691 return _sre_SRE_Scanner_search_impl(self);
692}
Serhiy Storchakafdbd0112017-04-16 10:16:03 +0300693/*[clinic end generated code: output=e6dab3ba8864da9e input=a9049054013a1b77]*/