Mercurial > cpython-lru_cache-weakref
annotate Modules/regexmodule.c @ 16798:258dcafe2d0b legacy-trunk
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fixed recno support (keys are integers rather than strings).
Work around DB bug that cause stdin to be closed by rnopen() when the
DB file needed to exist but did not (no longer segfaults).
This closes SF tracker patch #403445.
Also wrapped some long lines and added whitespace around operators -- FLD.
| author | Fred Drake <fdrake@acm.org> |
|---|---|
| date | Tue, 27 Feb 2001 18:56:46 +0000 |
| parents | 28c414dcb3e1 |
| children | 3e098a963561 eb04a0564a81 |
| rev | line source |
|---|---|
| 536 | 1 /* |
| 2 XXX support range parameter on search | |
| 3 XXX support mstop parameter on search | |
| 4 */ | |
| 5 | |
| 6 | |
| 7 /* Regular expression objects */ | |
|
615
40a0ec994c54
Use Tatu Ylonen's copyleft-free reimplementation of
Guido van Rossum <guido@python.org>
parents:
551
diff
changeset
|
8 /* This uses Tatu Ylonen's copyleft-free reimplementation of |
|
40a0ec994c54
Use Tatu Ylonen's copyleft-free reimplementation of
Guido van Rossum <guido@python.org>
parents:
551
diff
changeset
|
9 GNU regular expressions */ |
| 536 | 10 |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
11 #include "Python.h" |
| 536 | 12 |
| 4600 | 13 #include <ctype.h> |
| 14 | |
|
615
40a0ec994c54
Use Tatu Ylonen's copyleft-free reimplementation of
Guido van Rossum <guido@python.org>
parents:
551
diff
changeset
|
15 #include "regexpr.h" |
| 536 | 16 |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
17 static PyObject *RegexError; /* Exception */ |
| 536 | 18 |
| 19 typedef struct { | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
20 PyObject_HEAD |
| 536 | 21 struct re_pattern_buffer re_patbuf; /* The compiled expression */ |
| 22 struct re_registers re_regs; /* The registers from the last match */ | |
| 23 char re_fastmap[256]; /* Storage for fastmap */ | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
24 PyObject *re_translate; /* String object for translate table */ |
|
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
25 PyObject *re_lastok; /* String object last matched/searched */ |
|
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
26 PyObject *re_groupindex; /* Group name to index dictionary */ |
|
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
27 PyObject *re_givenpat; /* Pattern with symbolic groups */ |
|
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
28 PyObject *re_realpat; /* Pattern without symbolic groups */ |
| 536 | 29 } regexobject; |
| 30 | |
| 31 /* Regex object methods */ | |
| 32 | |
| 33 static void | |
|
13504
8256d6198ec2
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
34 reg_dealloc(regexobject *re) |
| 536 | 35 { |
|
12576
1c7c2dd1beb1
Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
36 if (re->re_patbuf.buffer) |
|
13557
c396b602617d
Fix mixed mallocs: re->re_patbuf.buffer is allocated with std malloc().
Vladimir Marangozov <vladimir.marangozov@t-online.de>
parents:
13504
diff
changeset
|
37 free(re->re_patbuf.buffer); |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
38 Py_XDECREF(re->re_translate); |
|
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
39 Py_XDECREF(re->re_lastok); |
|
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
40 Py_XDECREF(re->re_groupindex); |
|
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
41 Py_XDECREF(re->re_givenpat); |
|
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
42 Py_XDECREF(re->re_realpat); |
|
12576
1c7c2dd1beb1
Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
43 PyObject_Del(re); |
| 536 | 44 } |
| 45 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
46 static PyObject * |
|
13504
8256d6198ec2
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
47 makeresult(struct re_registers *regs) |
| 536 | 48 { |
|
4372
cbd434b46c1a
Speedup of makeresult() by keeping a filler of (-1, -1) around.
Guido van Rossum <guido@python.org>
parents:
4036
diff
changeset
|
49 PyObject *v; |
|
cbd434b46c1a
Speedup of makeresult() by keeping a filler of (-1, -1) around.
Guido van Rossum <guido@python.org>
parents:
4036
diff
changeset
|
50 int i; |
|
cbd434b46c1a
Speedup of makeresult() by keeping a filler of (-1, -1) around.
Guido van Rossum <guido@python.org>
parents:
4036
diff
changeset
|
51 static PyObject *filler = NULL; |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
52 |
|
4372
cbd434b46c1a
Speedup of makeresult() by keeping a filler of (-1, -1) around.
Guido van Rossum <guido@python.org>
parents:
4036
diff
changeset
|
53 if (filler == NULL) { |
|
cbd434b46c1a
Speedup of makeresult() by keeping a filler of (-1, -1) around.
Guido van Rossum <guido@python.org>
parents:
4036
diff
changeset
|
54 filler = Py_BuildValue("(ii)", -1, -1); |
|
cbd434b46c1a
Speedup of makeresult() by keeping a filler of (-1, -1) around.
Guido van Rossum <guido@python.org>
parents:
4036
diff
changeset
|
55 if (filler == NULL) |
|
cbd434b46c1a
Speedup of makeresult() by keeping a filler of (-1, -1) around.
Guido van Rossum <guido@python.org>
parents:
4036
diff
changeset
|
56 return NULL; |
|
cbd434b46c1a
Speedup of makeresult() by keeping a filler of (-1, -1) around.
Guido van Rossum <guido@python.org>
parents:
4036
diff
changeset
|
57 } |
|
cbd434b46c1a
Speedup of makeresult() by keeping a filler of (-1, -1) around.
Guido van Rossum <guido@python.org>
parents:
4036
diff
changeset
|
58 v = PyTuple_New(RE_NREGS); |
|
cbd434b46c1a
Speedup of makeresult() by keeping a filler of (-1, -1) around.
Guido van Rossum <guido@python.org>
parents:
4036
diff
changeset
|
59 if (v == NULL) |
|
cbd434b46c1a
Speedup of makeresult() by keeping a filler of (-1, -1) around.
Guido van Rossum <guido@python.org>
parents:
4036
diff
changeset
|
60 return NULL; |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
61 |
|
4372
cbd434b46c1a
Speedup of makeresult() by keeping a filler of (-1, -1) around.
Guido van Rossum <guido@python.org>
parents:
4036
diff
changeset
|
62 for (i = 0; i < RE_NREGS; i++) { |
|
cbd434b46c1a
Speedup of makeresult() by keeping a filler of (-1, -1) around.
Guido van Rossum <guido@python.org>
parents:
4036
diff
changeset
|
63 int lo = regs->start[i]; |
|
cbd434b46c1a
Speedup of makeresult() by keeping a filler of (-1, -1) around.
Guido van Rossum <guido@python.org>
parents:
4036
diff
changeset
|
64 int hi = regs->end[i]; |
|
cbd434b46c1a
Speedup of makeresult() by keeping a filler of (-1, -1) around.
Guido van Rossum <guido@python.org>
parents:
4036
diff
changeset
|
65 PyObject *w; |
|
cbd434b46c1a
Speedup of makeresult() by keeping a filler of (-1, -1) around.
Guido van Rossum <guido@python.org>
parents:
4036
diff
changeset
|
66 if (lo == -1 && hi == -1) { |
|
cbd434b46c1a
Speedup of makeresult() by keeping a filler of (-1, -1) around.
Guido van Rossum <guido@python.org>
parents:
4036
diff
changeset
|
67 w = filler; |
|
cbd434b46c1a
Speedup of makeresult() by keeping a filler of (-1, -1) around.
Guido van Rossum <guido@python.org>
parents:
4036
diff
changeset
|
68 Py_INCREF(w); |
| 536 | 69 } |
|
4372
cbd434b46c1a
Speedup of makeresult() by keeping a filler of (-1, -1) around.
Guido van Rossum <guido@python.org>
parents:
4036
diff
changeset
|
70 else |
|
cbd434b46c1a
Speedup of makeresult() by keeping a filler of (-1, -1) around.
Guido van Rossum <guido@python.org>
parents:
4036
diff
changeset
|
71 w = Py_BuildValue("(ii)", lo, hi); |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
72 if (w == NULL || PyTuple_SetItem(v, i, w) < 0) { |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
73 Py_DECREF(v); |
|
4372
cbd434b46c1a
Speedup of makeresult() by keeping a filler of (-1, -1) around.
Guido van Rossum <guido@python.org>
parents:
4036
diff
changeset
|
74 return NULL; |
|
cbd434b46c1a
Speedup of makeresult() by keeping a filler of (-1, -1) around.
Guido van Rossum <guido@python.org>
parents:
4036
diff
changeset
|
75 } |
| 536 | 76 } |
| 77 return v; | |
| 78 } | |
| 79 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
80 static PyObject * |
|
13504
8256d6198ec2
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
81 regobj_match(regexobject *re, PyObject *args) |
| 536 | 82 { |
|
5481
f1afc5690b2a
Fix big ineficciency in regobj.search/match (introduced by Barry in an
Guido van Rossum <guido@python.org>
parents:
5129
diff
changeset
|
83 PyObject *argstring; |
| 536 | 84 char *buffer; |
|
636
d5bb8fe43df2
Fix range error (doc and impl of re_search disagreed!)
Guido van Rossum <guido@python.org>
parents:
628
diff
changeset
|
85 int size; |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
86 int offset = 0; |
| 536 | 87 int result; |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
88 |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
89 if (!PyArg_ParseTuple(args, "O|i:match", &argstring, &offset)) |
|
5481
f1afc5690b2a
Fix big ineficciency in regobj.search/match (introduced by Barry in an
Guido van Rossum <guido@python.org>
parents:
5129
diff
changeset
|
90 return NULL; |
|
9307
928ea5a409e5
Use the t# format where appropriate. Greg Stein.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
91 if (!PyArg_Parse(argstring, "t#", &buffer, &size)) |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
92 return NULL; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
93 |
|
1237
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
94 if (offset < 0 || offset > size) { |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
95 PyErr_SetString(RegexError, "match offset out of range"); |
|
1237
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
96 return NULL; |
|
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
97 } |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
98 Py_XDECREF(re->re_lastok); |
|
1237
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
99 re->re_lastok = NULL; |
|
6094
a22fca7a5c5a
Casts by Jack to shut up the Mac compiler.
Guido van Rossum <guido@python.org>
parents:
6014
diff
changeset
|
100 result = _Py_re_match(&re->re_patbuf, (unsigned char *)buffer, size, offset, |
|
6014
2f36e0bb37c3
Use _Py_re_match/search instead of re_match/search; these may become
Guido van Rossum <guido@python.org>
parents:
6004
diff
changeset
|
101 &re->re_regs); |
| 536 | 102 if (result < -1) { |
|
6004
3f59b34eb90f
1.5a3 prerelease 1 from AMK
Guido van Rossum <guido@python.org>
parents:
5481
diff
changeset
|
103 /* Serious failure of some sort; if re_match didn't |
|
3f59b34eb90f
1.5a3 prerelease 1 from AMK
Guido van Rossum <guido@python.org>
parents:
5481
diff
changeset
|
104 set an exception, raise a generic error */ |
|
3f59b34eb90f
1.5a3 prerelease 1 from AMK
Guido van Rossum <guido@python.org>
parents:
5481
diff
changeset
|
105 if (!PyErr_Occurred()) |
|
3f59b34eb90f
1.5a3 prerelease 1 from AMK
Guido van Rossum <guido@python.org>
parents:
5481
diff
changeset
|
106 PyErr_SetString(RegexError, "match failure"); |
| 536 | 107 return NULL; |
| 108 } | |
|
1237
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
109 if (result >= 0) { |
|
5481
f1afc5690b2a
Fix big ineficciency in regobj.search/match (introduced by Barry in an
Guido van Rossum <guido@python.org>
parents:
5129
diff
changeset
|
110 Py_INCREF(argstring); |
|
f1afc5690b2a
Fix big ineficciency in regobj.search/match (introduced by Barry in an
Guido van Rossum <guido@python.org>
parents:
5129
diff
changeset
|
111 re->re_lastok = argstring; |
|
1237
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
112 } |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
113 return PyInt_FromLong((long)result); /* Length of the match or -1 */ |
| 536 | 114 } |
|
636
d5bb8fe43df2
Fix range error (doc and impl of re_search disagreed!)
Guido van Rossum <guido@python.org>
parents:
628
diff
changeset
|
115 |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
116 static PyObject * |
|
13504
8256d6198ec2
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
117 regobj_search(regexobject *re, PyObject *args) |
| 536 | 118 { |
|
5481
f1afc5690b2a
Fix big ineficciency in regobj.search/match (introduced by Barry in an
Guido van Rossum <guido@python.org>
parents:
5129
diff
changeset
|
119 PyObject *argstring; |
| 536 | 120 char *buffer; |
| 121 int size; | |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
122 int offset = 0; |
| 536 | 123 int range; |
| 124 int result; | |
|
636
d5bb8fe43df2
Fix range error (doc and impl of re_search disagreed!)
Guido van Rossum <guido@python.org>
parents:
628
diff
changeset
|
125 |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
126 if (!PyArg_ParseTuple(args, "O|i:search", &argstring, &offset)) |
|
5481
f1afc5690b2a
Fix big ineficciency in regobj.search/match (introduced by Barry in an
Guido van Rossum <guido@python.org>
parents:
5129
diff
changeset
|
127 return NULL; |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
128 if (!PyArg_Parse(argstring, "t#:search", &buffer, &size)) |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
129 return NULL; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
130 |
|
1237
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
131 if (offset < 0 || offset > size) { |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
132 PyErr_SetString(RegexError, "search offset out of range"); |
|
1237
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
133 return NULL; |
| 536 | 134 } |
|
636
d5bb8fe43df2
Fix range error (doc and impl of re_search disagreed!)
Guido van Rossum <guido@python.org>
parents:
628
diff
changeset
|
135 /* NB: In Emacs 18.57, the documentation for re_search[_2] and |
|
d5bb8fe43df2
Fix range error (doc and impl of re_search disagreed!)
Guido van Rossum <guido@python.org>
parents:
628
diff
changeset
|
136 the implementation don't match: the documentation states that |
|
d5bb8fe43df2
Fix range error (doc and impl of re_search disagreed!)
Guido van Rossum <guido@python.org>
parents:
628
diff
changeset
|
137 |range| positions are tried, while the code tries |range|+1 |
|
d5bb8fe43df2
Fix range error (doc and impl of re_search disagreed!)
Guido van Rossum <guido@python.org>
parents:
628
diff
changeset
|
138 positions. It seems more productive to believe the code! */ |
|
628
d420af9c1b75
Make "range" one smaller (discrepancy between doc and source for regex.c!).
Guido van Rossum <guido@python.org>
parents:
615
diff
changeset
|
139 range = size - offset; |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
140 Py_XDECREF(re->re_lastok); |
|
1237
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
141 re->re_lastok = NULL; |
|
6094
a22fca7a5c5a
Casts by Jack to shut up the Mac compiler.
Guido van Rossum <guido@python.org>
parents:
6014
diff
changeset
|
142 result = _Py_re_search(&re->re_patbuf, (unsigned char *)buffer, size, offset, range, |
| 536 | 143 &re->re_regs); |
| 144 if (result < -1) { | |
|
6004
3f59b34eb90f
1.5a3 prerelease 1 from AMK
Guido van Rossum <guido@python.org>
parents:
5481
diff
changeset
|
145 /* Serious failure of some sort; if re_match didn't |
|
3f59b34eb90f
1.5a3 prerelease 1 from AMK
Guido van Rossum <guido@python.org>
parents:
5481
diff
changeset
|
146 set an exception, raise a generic error */ |
|
3f59b34eb90f
1.5a3 prerelease 1 from AMK
Guido van Rossum <guido@python.org>
parents:
5481
diff
changeset
|
147 if (!PyErr_Occurred()) |
|
3f59b34eb90f
1.5a3 prerelease 1 from AMK
Guido van Rossum <guido@python.org>
parents:
5481
diff
changeset
|
148 PyErr_SetString(RegexError, "match failure"); |
| 536 | 149 return NULL; |
| 150 } | |
|
1237
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
151 if (result >= 0) { |
|
5481
f1afc5690b2a
Fix big ineficciency in regobj.search/match (introduced by Barry in an
Guido van Rossum <guido@python.org>
parents:
5129
diff
changeset
|
152 Py_INCREF(argstring); |
|
f1afc5690b2a
Fix big ineficciency in regobj.search/match (introduced by Barry in an
Guido van Rossum <guido@python.org>
parents:
5129
diff
changeset
|
153 re->re_lastok = argstring; |
|
1237
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
154 } |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
155 return PyInt_FromLong((long)result); /* Position of the match or -1 */ |
| 536 | 156 } |
| 157 | |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
158 /* get the group from the regex where index can be a string (group name) or |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
159 an integer index [0 .. 99] |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
160 */ |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
161 static PyObject* |
|
13504
8256d6198ec2
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
162 group_from_index(regexobject *re, PyObject *index) |
|
1237
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
163 { |
|
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
164 int i, a, b; |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
165 char *v; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
166 |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
167 if (PyString_Check(index)) |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
168 if (re->re_groupindex == NULL || |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
169 !(index = PyDict_GetItem(re->re_groupindex, index))) |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
170 { |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
171 PyErr_SetString(RegexError, |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
172 "group() group name doesn't exist"); |
|
1237
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
173 return NULL; |
|
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
174 } |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
175 |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
176 i = PyInt_AsLong(index); |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
177 if (i == -1 && PyErr_Occurred()) |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
178 return NULL; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
179 |
|
1237
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
180 if (i < 0 || i >= RE_NREGS) { |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
181 PyErr_SetString(RegexError, "group() index out of range"); |
|
1237
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
182 return NULL; |
|
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
183 } |
|
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
184 if (re->re_lastok == NULL) { |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
185 PyErr_SetString(RegexError, |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
186 "group() only valid after successful match/search"); |
|
1237
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
187 return NULL; |
|
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
188 } |
|
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
189 a = re->re_regs.start[i]; |
|
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
190 b = re->re_regs.end[i]; |
|
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
191 if (a < 0 || b < 0) { |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
192 Py_INCREF(Py_None); |
|
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
193 return Py_None; |
|
1237
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
194 } |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
195 |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
196 if (!(v = PyString_AsString(re->re_lastok))) |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
197 return NULL; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
198 |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
199 return PyString_FromStringAndSize(v+a, b-a); |
|
1237
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
200 } |
|
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
201 |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
202 |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
203 static PyObject * |
|
13504
8256d6198ec2
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
204 regobj_group(regexobject *re, PyObject *args) |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
205 { |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
206 int n = PyTuple_Size(args); |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
207 int i; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
208 PyObject *res = NULL; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
209 |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
210 if (n < 0) |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
211 return NULL; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
212 if (n == 0) { |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
213 PyErr_SetString(PyExc_TypeError, "not enough arguments"); |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
214 return NULL; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
215 } |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
216 if (n == 1) { |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
217 /* return value is a single string */ |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
218 PyObject *index = PyTuple_GetItem(args, 0); |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
219 if (!index) |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
220 return NULL; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
221 |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
222 return group_from_index(re, index); |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
223 } |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
224 |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
225 /* return value is a tuple */ |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
226 if (!(res = PyTuple_New(n))) |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
227 return NULL; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
228 |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
229 for (i = 0; i < n; i++) { |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
230 PyObject *index = PyTuple_GetItem(args, i); |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
231 PyObject *group = NULL; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
232 |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
233 if (!index) |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
234 goto finally; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
235 if (!(group = group_from_index(re, index))) |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
236 goto finally; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
237 if (PyTuple_SetItem(res, i, group) < 0) |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
238 goto finally; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
239 } |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
240 return res; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
241 |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
242 finally: |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
243 Py_DECREF(res); |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
244 return NULL; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
245 } |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
246 |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
247 |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
248 static struct PyMethodDef reg_methods[] = { |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
249 {"match", (PyCFunction)regobj_match, 1}, |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
250 {"search", (PyCFunction)regobj_search, 1}, |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
251 {"group", (PyCFunction)regobj_group, 1}, |
| 536 | 252 {NULL, NULL} /* sentinel */ |
| 253 }; | |
| 254 | |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
255 |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
256 |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
257 static char* members[] = { |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
258 "last", "regs", "translate", |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
259 "groupindex", "realpat", "givenpat", |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
260 NULL |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
261 }; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
262 |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
263 |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
264 static PyObject * |
|
13504
8256d6198ec2
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
265 regobj_getattr(regexobject *re, char *name) |
| 536 | 266 { |
|
551
5a61f827f47c
'regs' is a read-only data member, not a function.
Guido van Rossum <guido@python.org>
parents:
536
diff
changeset
|
267 if (strcmp(name, "regs") == 0) { |
|
1237
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
268 if (re->re_lastok == NULL) { |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
269 Py_INCREF(Py_None); |
|
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
270 return Py_None; |
|
551
5a61f827f47c
'regs' is a read-only data member, not a function.
Guido van Rossum <guido@python.org>
parents:
536
diff
changeset
|
271 } |
|
5a61f827f47c
'regs' is a read-only data member, not a function.
Guido van Rossum <guido@python.org>
parents:
536
diff
changeset
|
272 return makeresult(&re->re_regs); |
|
5a61f827f47c
'regs' is a read-only data member, not a function.
Guido van Rossum <guido@python.org>
parents:
536
diff
changeset
|
273 } |
|
1237
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
274 if (strcmp(name, "last") == 0) { |
|
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
275 if (re->re_lastok == NULL) { |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
276 Py_INCREF(Py_None); |
|
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
277 return Py_None; |
|
1237
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
278 } |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
279 Py_INCREF(re->re_lastok); |
|
1237
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
280 return re->re_lastok; |
|
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
281 } |
|
1239
0c657db27dbf
Extensive changes to regex module (group(), casefold, etc.)
Guido van Rossum <guido@python.org>
parents:
1237
diff
changeset
|
282 if (strcmp(name, "translate") == 0) { |
|
0c657db27dbf
Extensive changes to regex module (group(), casefold, etc.)
Guido van Rossum <guido@python.org>
parents:
1237
diff
changeset
|
283 if (re->re_translate == NULL) { |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
284 Py_INCREF(Py_None); |
|
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
285 return Py_None; |
|
1239
0c657db27dbf
Extensive changes to regex module (group(), casefold, etc.)
Guido van Rossum <guido@python.org>
parents:
1237
diff
changeset
|
286 } |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
287 Py_INCREF(re->re_translate); |
|
1239
0c657db27dbf
Extensive changes to regex module (group(), casefold, etc.)
Guido van Rossum <guido@python.org>
parents:
1237
diff
changeset
|
288 return re->re_translate; |
|
0c657db27dbf
Extensive changes to regex module (group(), casefold, etc.)
Guido van Rossum <guido@python.org>
parents:
1237
diff
changeset
|
289 } |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
290 if (strcmp(name, "groupindex") == 0) { |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
291 if (re->re_groupindex == NULL) { |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
292 Py_INCREF(Py_None); |
|
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
293 return Py_None; |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
294 } |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
295 Py_INCREF(re->re_groupindex); |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
296 return re->re_groupindex; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
297 } |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
298 if (strcmp(name, "realpat") == 0) { |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
299 if (re->re_realpat == NULL) { |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
300 Py_INCREF(Py_None); |
|
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
301 return Py_None; |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
302 } |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
303 Py_INCREF(re->re_realpat); |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
304 return re->re_realpat; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
305 } |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
306 if (strcmp(name, "givenpat") == 0) { |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
307 if (re->re_givenpat == NULL) { |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
308 Py_INCREF(Py_None); |
|
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
309 return Py_None; |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
310 } |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
311 Py_INCREF(re->re_givenpat); |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
312 return re->re_givenpat; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
313 } |
|
1239
0c657db27dbf
Extensive changes to regex module (group(), casefold, etc.)
Guido van Rossum <guido@python.org>
parents:
1237
diff
changeset
|
314 if (strcmp(name, "__members__") == 0) { |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
315 int i = 0; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
316 PyObject *list = NULL; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
317 |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
318 /* okay, so it's unlikely this list will change that often. |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
319 still, it's easier to change it in just one place. |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
320 */ |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
321 while (members[i]) |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
322 i++; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
323 if (!(list = PyList_New(i))) |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
324 return NULL; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
325 |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
326 i = 0; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
327 while (members[i]) { |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
328 PyObject* v = PyString_FromString(members[i]); |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
329 if (!v || PyList_SetItem(list, i, v) < 0) { |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
330 Py_DECREF(list); |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
331 return NULL; |
|
1239
0c657db27dbf
Extensive changes to regex module (group(), casefold, etc.)
Guido van Rossum <guido@python.org>
parents:
1237
diff
changeset
|
332 } |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
333 i++; |
|
1239
0c657db27dbf
Extensive changes to regex module (group(), casefold, etc.)
Guido van Rossum <guido@python.org>
parents:
1237
diff
changeset
|
334 } |
|
0c657db27dbf
Extensive changes to regex module (group(), casefold, etc.)
Guido van Rossum <guido@python.org>
parents:
1237
diff
changeset
|
335 return list; |
|
0c657db27dbf
Extensive changes to regex module (group(), casefold, etc.)
Guido van Rossum <guido@python.org>
parents:
1237
diff
changeset
|
336 } |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
337 return Py_FindMethod(reg_methods, (PyObject *)re, name); |
| 536 | 338 } |
| 339 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
340 static PyTypeObject Regextype = { |
|
16106
28c414dcb3e1
SF Patch #103185, by jlt63: Some more standard modules cleanup for Cygwin
Guido van Rossum <guido@python.org>
parents:
15624
diff
changeset
|
341 PyObject_HEAD_INIT(NULL) |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
342 0, /*ob_size*/ |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
343 "regex", /*tp_name*/ |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
344 sizeof(regexobject), /*tp_size*/ |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
345 0, /*tp_itemsize*/ |
| 536 | 346 /* methods */ |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
347 (destructor)reg_dealloc, /*tp_dealloc*/ |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
348 0, /*tp_print*/ |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
349 (getattrfunc)regobj_getattr, /*tp_getattr*/ |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
350 0, /*tp_setattr*/ |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
351 0, /*tp_compare*/ |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
352 0, /*tp_repr*/ |
| 536 | 353 }; |
| 354 | |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
355 /* reference counting invariants: |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
356 pattern: borrowed |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
357 translate: borrowed |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
358 givenpat: borrowed |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
359 groupindex: transferred |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
360 */ |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
361 static PyObject * |
|
13504
8256d6198ec2
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
362 newregexobject(PyObject *pattern, PyObject *translate, PyObject *givenpat, PyObject *groupindex) |
| 536 | 363 { |
| 364 regexobject *re; | |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
365 char *pat; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
366 int size; |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
367 |
|
9307
928ea5a409e5
Use the t# format where appropriate. Greg Stein.
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
368 if (!PyArg_Parse(pattern, "t#", &pat, &size)) |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
369 return NULL; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
370 |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
371 if (translate != NULL && PyString_Size(translate) != 256) { |
|
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
372 PyErr_SetString(RegexError, |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
373 "translation table must be 256 bytes"); |
|
1237
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
374 return NULL; |
|
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
375 } |
|
12576
1c7c2dd1beb1
Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents:
11882
diff
changeset
|
376 re = PyObject_New(regexobject, &Regextype); |
| 536 | 377 if (re != NULL) { |
| 378 char *error; | |
| 379 re->re_patbuf.buffer = NULL; | |
| 380 re->re_patbuf.allocated = 0; | |
|
6094
a22fca7a5c5a
Casts by Jack to shut up the Mac compiler.
Guido van Rossum <guido@python.org>
parents:
6014
diff
changeset
|
381 re->re_patbuf.fastmap = (unsigned char *)re->re_fastmap; |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
382 if (translate) { |
|
6094
a22fca7a5c5a
Casts by Jack to shut up the Mac compiler.
Guido van Rossum <guido@python.org>
parents:
6014
diff
changeset
|
383 re->re_patbuf.translate = (unsigned char *)PyString_AsString(translate); |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
384 if (!re->re_patbuf.translate) |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
385 goto finally; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
386 Py_INCREF(translate); |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
387 } |
|
1237
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
388 else |
|
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
389 re->re_patbuf.translate = NULL; |
|
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
390 re->re_translate = translate; |
|
05580e00f41e
* regexmodule.c: added use of translation table, substring() method.
Guido van Rossum <guido@python.org>
parents:
1019
diff
changeset
|
391 re->re_lastok = NULL; |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
392 re->re_groupindex = groupindex; |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
393 Py_INCREF(pattern); |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
394 re->re_realpat = pattern; |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
395 Py_INCREF(givenpat); |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
396 re->re_givenpat = givenpat; |
|
6220
ed4924f3b2a5
Change [_Py_]re_compile_pattern() to return a char*.
Guido van Rossum <guido@python.org>
parents:
6094
diff
changeset
|
397 error = _Py_re_compile_pattern((unsigned char *)pat, size, &re->re_patbuf); |
| 536 | 398 if (error != NULL) { |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
399 PyErr_SetString(RegexError, error); |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
400 goto finally; |
| 536 | 401 } |
| 402 } | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
403 return (PyObject *)re; |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
404 finally: |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
405 Py_DECREF(re); |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
406 return NULL; |
| 536 | 407 } |
| 408 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
409 static PyObject * |
|
13504
8256d6198ec2
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
410 regex_compile(PyObject *self, PyObject *args) |
| 536 | 411 { |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
412 PyObject *pat = NULL; |
|
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
413 PyObject *tran = NULL; |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
414 |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
415 if (!PyArg_ParseTuple(args, "S|S:compile", &pat, &tran)) |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
416 return NULL; |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
417 return newregexobject(pat, tran, pat, NULL); |
| 536 | 418 } |
| 419 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
420 static PyObject * |
|
13504
8256d6198ec2
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
421 symcomp(PyObject *pattern, PyObject *gdict) |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
422 { |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
423 char *opat, *oend, *o, *n, *g, *v; |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
424 int group_count = 0; |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
425 int sz; |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
426 int escaped = 0; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
427 char name_buf[128]; |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
428 PyObject *npattern; |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
429 int require_escape = re_syntax & RE_NO_BK_PARENS ? 0 : 1; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
430 |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
431 if (!(opat = PyString_AsString(pattern))) |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
432 return NULL; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
433 |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
434 if ((sz = PyString_Size(pattern)) < 0) |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
435 return NULL; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
436 |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
437 oend = opat + sz; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
438 o = opat; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
439 |
|
3664
ad03e21fda54
Avoid core dump on symcomp("").
Guido van Rossum <guido@python.org>
parents:
2397
diff
changeset
|
440 if (oend == opat) { |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
441 Py_INCREF(pattern); |
|
3664
ad03e21fda54
Avoid core dump on symcomp("").
Guido van Rossum <guido@python.org>
parents:
2397
diff
changeset
|
442 return pattern; |
|
ad03e21fda54
Avoid core dump on symcomp("").
Guido van Rossum <guido@python.org>
parents:
2397
diff
changeset
|
443 } |
|
ad03e21fda54
Avoid core dump on symcomp("").
Guido van Rossum <guido@python.org>
parents:
2397
diff
changeset
|
444 |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
445 if (!(npattern = PyString_FromStringAndSize((char*)NULL, sz)) || |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
446 !(n = PyString_AsString(npattern))) |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
447 return NULL; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
448 |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
449 while (o < oend) { |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
450 if (*o == '(' && escaped == require_escape) { |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
451 char *backtrack; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
452 escaped = 0; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
453 ++group_count; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
454 *n++ = *o; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
455 if (++o >= oend || *o != '<') |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
456 continue; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
457 /* *o == '<' */ |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
458 if (o+1 < oend && *(o+1) == '>') |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
459 continue; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
460 backtrack = o; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
461 g = name_buf; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
462 for (++o; o < oend;) { |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
463 if (*o == '>') { |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
464 PyObject *group_name = NULL; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
465 PyObject *group_index = NULL; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
466 *g++ = '\0'; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
467 group_name = PyString_FromString(name_buf); |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
468 group_index = PyInt_FromLong(group_count); |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
469 if (group_name == NULL || |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
470 group_index == NULL || |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
471 PyDict_SetItem(gdict, group_name, |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
472 group_index) != 0) |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
473 { |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
474 Py_XDECREF(group_name); |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
475 Py_XDECREF(group_index); |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
476 Py_XDECREF(npattern); |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
477 return NULL; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
478 } |
|
4917
1bcd4972da7e
Nailed a couple of memory leaks, caught by Purify.
Barry Warsaw <barry@python.org>
parents:
4808
diff
changeset
|
479 Py_DECREF(group_name); |
|
1bcd4972da7e
Nailed a couple of memory leaks, caught by Purify.
Barry Warsaw <barry@python.org>
parents:
4808
diff
changeset
|
480 Py_DECREF(group_index); |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
481 ++o; /* eat the '>' */ |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
482 break; |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
483 } |
| 2310 | 484 if (!isalnum(Py_CHARMASK(*o)) && *o != '_') { |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
485 o = backtrack; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
486 break; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
487 } |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
488 *g++ = *o++; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
489 } |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
490 } |
|
4478
267ae58232d9
Fix case where you start a new group immediately after a label.
Guido van Rossum <guido@python.org>
parents:
4372
diff
changeset
|
491 else if (*o == '[' && !escaped) { |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
492 *n++ = *o; |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
493 ++o; /* eat the char following '[' */ |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
494 *n++ = *o; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
495 while (o < oend && *o != ']') { |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
496 ++o; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
497 *n++ = *o; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
498 } |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
499 if (o < oend) |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
500 ++o; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
501 } |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
502 else if (*o == '\\') { |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
503 escaped = 1; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
504 *n++ = *o; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
505 ++o; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
506 } |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
507 else { |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
508 escaped = 0; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
509 *n++ = *o; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
510 ++o; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
511 } |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
512 } |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
513 |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
514 if (!(v = PyString_AsString(npattern))) { |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
515 Py_DECREF(npattern); |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
516 return NULL; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
517 } |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
518 /* _PyString_Resize() decrements npattern on failure */ |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
519 if (_PyString_Resize(&npattern, n - v) == 0) |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
520 return npattern; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
521 else { |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
522 return NULL; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
523 } |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
524 |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
525 } |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
526 |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
527 static PyObject * |
|
13504
8256d6198ec2
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
528 regex_symcomp(PyObject *self, PyObject *args) |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
529 { |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
530 PyObject *pattern; |
|
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
531 PyObject *tran = NULL; |
|
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
532 PyObject *gdict = NULL; |
|
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
533 PyObject *npattern; |
|
4917
1bcd4972da7e
Nailed a couple of memory leaks, caught by Purify.
Barry Warsaw <barry@python.org>
parents:
4808
diff
changeset
|
534 PyObject *retval = NULL; |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
535 |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
536 if (!PyArg_ParseTuple(args, "S|S:symcomp", &pattern, &tran)) |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
537 return NULL; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
538 |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
539 gdict = PyDict_New(); |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
540 if (gdict == NULL || (npattern = symcomp(pattern, gdict)) == NULL) { |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
541 Py_DECREF(gdict); |
|
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
542 Py_DECREF(pattern); |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
543 return NULL; |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
544 } |
|
4917
1bcd4972da7e
Nailed a couple of memory leaks, caught by Purify.
Barry Warsaw <barry@python.org>
parents:
4808
diff
changeset
|
545 retval = newregexobject(npattern, tran, pattern, gdict); |
|
1bcd4972da7e
Nailed a couple of memory leaks, caught by Purify.
Barry Warsaw <barry@python.org>
parents:
4808
diff
changeset
|
546 Py_DECREF(npattern); |
|
1bcd4972da7e
Nailed a couple of memory leaks, caught by Purify.
Barry Warsaw <barry@python.org>
parents:
4808
diff
changeset
|
547 return retval; |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
548 } |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
549 |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1239
diff
changeset
|
550 |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
551 static PyObject *cache_pat; |
|
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
552 static PyObject *cache_prog; |
| 536 | 553 |
| 554 static int | |
|
13504
8256d6198ec2
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
555 update_cache(PyObject *pat) |
| 536 | 556 { |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
557 PyObject *tuple = Py_BuildValue("(O)", pat); |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
558 int status = 0; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
559 |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
560 if (!tuple) |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
561 return -1; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
562 |
| 536 | 563 if (pat != cache_pat) { |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
564 Py_XDECREF(cache_pat); |
| 536 | 565 cache_pat = NULL; |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
566 Py_XDECREF(cache_prog); |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
567 cache_prog = regex_compile((PyObject *)NULL, tuple); |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
568 if (cache_prog == NULL) { |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
569 status = -1; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
570 goto finally; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
571 } |
| 536 | 572 cache_pat = pat; |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
573 Py_INCREF(cache_pat); |
| 536 | 574 } |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
575 finally: |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
576 Py_DECREF(tuple); |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
577 return status; |
| 536 | 578 } |
| 579 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
580 static PyObject * |
|
13504
8256d6198ec2
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
581 regex_match(PyObject *self, PyObject *args) |
| 536 | 582 { |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
583 PyObject *pat, *string; |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
584 PyObject *tuple, *v; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
585 |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
586 if (!PyArg_Parse(args, "(SS)", &pat, &string)) |
| 536 | 587 return NULL; |
| 588 if (update_cache(pat) < 0) | |
| 589 return NULL; | |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
590 |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
591 if (!(tuple = Py_BuildValue("(S)", string))) |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
592 return NULL; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
593 v = regobj_match((regexobject *)cache_prog, tuple); |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
594 Py_DECREF(tuple); |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
595 return v; |
| 536 | 596 } |
| 597 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
598 static PyObject * |
|
13504
8256d6198ec2
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
599 regex_search(PyObject *self, PyObject *args) |
| 536 | 600 { |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
601 PyObject *pat, *string; |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
602 PyObject *tuple, *v; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
603 |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
604 if (!PyArg_Parse(args, "(SS)", &pat, &string)) |
| 536 | 605 return NULL; |
| 606 if (update_cache(pat) < 0) | |
| 607 return NULL; | |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
608 |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
609 if (!(tuple = Py_BuildValue("(S)", string))) |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
610 return NULL; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
611 v = regobj_search((regexobject *)cache_prog, tuple); |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
612 Py_DECREF(tuple); |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
613 return v; |
| 536 | 614 } |
| 615 | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
616 static PyObject * |
|
13504
8256d6198ec2
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
617 regex_set_syntax(PyObject *self, PyObject *args) |
| 536 | 618 { |
| 619 int syntax; | |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
620 if (!PyArg_Parse(args, "i", &syntax)) |
| 536 | 621 return NULL; |
| 622 syntax = re_set_syntax(syntax); | |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
623 /* wipe the global pattern cache */ |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
624 Py_XDECREF(cache_pat); |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
625 cache_pat = NULL; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
626 Py_XDECREF(cache_prog); |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
627 cache_prog = NULL; |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
628 return PyInt_FromLong((long)syntax); |
| 536 | 629 } |
| 630 | |
|
5129
102e2912d0d1
regex_get_syntax(): New module function exported to Python.
Barry Warsaw <barry@python.org>
parents:
4917
diff
changeset
|
631 static PyObject * |
|
13504
8256d6198ec2
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
632 regex_get_syntax(PyObject *self, PyObject *args) |
|
5129
102e2912d0d1
regex_get_syntax(): New module function exported to Python.
Barry Warsaw <barry@python.org>
parents:
4917
diff
changeset
|
633 { |
|
102e2912d0d1
regex_get_syntax(): New module function exported to Python.
Barry Warsaw <barry@python.org>
parents:
4917
diff
changeset
|
634 if (!PyArg_Parse(args, "")) |
|
102e2912d0d1
regex_get_syntax(): New module function exported to Python.
Barry Warsaw <barry@python.org>
parents:
4917
diff
changeset
|
635 return NULL; |
|
102e2912d0d1
regex_get_syntax(): New module function exported to Python.
Barry Warsaw <barry@python.org>
parents:
4917
diff
changeset
|
636 return PyInt_FromLong((long)re_syntax); |
|
102e2912d0d1
regex_get_syntax(): New module function exported to Python.
Barry Warsaw <barry@python.org>
parents:
4917
diff
changeset
|
637 } |
|
102e2912d0d1
regex_get_syntax(): New module function exported to Python.
Barry Warsaw <barry@python.org>
parents:
4917
diff
changeset
|
638 |
|
102e2912d0d1
regex_get_syntax(): New module function exported to Python.
Barry Warsaw <barry@python.org>
parents:
4917
diff
changeset
|
639 |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
640 static struct PyMethodDef regex_global_methods[] = { |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
641 {"compile", regex_compile, 1}, |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
642 {"symcomp", regex_symcomp, 1}, |
|
2397
0736a7ec2f28
explicitly init flags in methodlists
Guido van Rossum <guido@python.org>
parents:
2310
diff
changeset
|
643 {"match", regex_match, 0}, |
|
0736a7ec2f28
explicitly init flags in methodlists
Guido van Rossum <guido@python.org>
parents:
2310
diff
changeset
|
644 {"search", regex_search, 0}, |
|
0736a7ec2f28
explicitly init flags in methodlists
Guido van Rossum <guido@python.org>
parents:
2310
diff
changeset
|
645 {"set_syntax", regex_set_syntax, 0}, |
|
5129
102e2912d0d1
regex_get_syntax(): New module function exported to Python.
Barry Warsaw <barry@python.org>
parents:
4917
diff
changeset
|
646 {"get_syntax", regex_get_syntax, 0}, |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
647 {NULL, NULL} /* sentinel */ |
| 536 | 648 }; |
| 649 | |
|
9588
38023a425e48
Add DL_EXPORT() to all modules that could possibly be used
Guido van Rossum <guido@python.org>
parents:
9307
diff
changeset
|
650 DL_EXPORT(void) |
|
13651
8a063423e0b7
Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents:
13557
diff
changeset
|
651 initregex(void) |
| 536 | 652 { |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
653 PyObject *m, *d, *v; |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
654 int i; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
655 char *s; |
| 536 | 656 |
|
16106
28c414dcb3e1
SF Patch #103185, by jlt63: Some more standard modules cleanup for Cygwin
Guido van Rossum <guido@python.org>
parents:
15624
diff
changeset
|
657 /* Initialize object type */ |
|
28c414dcb3e1
SF Patch #103185, by jlt63: Some more standard modules cleanup for Cygwin
Guido van Rossum <guido@python.org>
parents:
15624
diff
changeset
|
658 Regextype.ob_type = &PyType_Type; |
|
28c414dcb3e1
SF Patch #103185, by jlt63: Some more standard modules cleanup for Cygwin
Guido van Rossum <guido@python.org>
parents:
15624
diff
changeset
|
659 |
|
3803
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
660 m = Py_InitModule("regex", regex_global_methods); |
|
2eaa00860edc
Converted to new style names by Skip Montanaro
Guido van Rossum <guido@python.org>
parents:
3664
diff
changeset
|
661 d = PyModule_GetDict(m); |
|
15624
50de3b198a62
Adding a warning about the regex module. This is the first official
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
662 |
|
50de3b198a62
Adding a warning about the regex module. This is the first official
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
663 PyErr_Warn(PyExc_DeprecationWarning, |
|
50de3b198a62
Adding a warning about the regex module. This is the first official
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
664 "the regex module is deprecated; please use the re module"); |
| 536 | 665 |
| 666 /* Initialize regex.error exception */ | |
|
6367
2c29b8982643
Apply two changes, systematically:
Guido van Rossum <guido@python.org>
parents:
6220
diff
changeset
|
667 v = RegexError = PyErr_NewException("regex.error", NULL, NULL); |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
668 if (v == NULL || PyDict_SetItemString(d, "error", v) != 0) |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
669 goto finally; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
670 |
|
1239
0c657db27dbf
Extensive changes to regex module (group(), casefold, etc.)
Guido van Rossum <guido@python.org>
parents:
1237
diff
changeset
|
671 /* Initialize regex.casefold constant */ |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
672 if (!(v = PyString_FromStringAndSize((char *)NULL, 256))) |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
673 goto finally; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
674 |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
675 if (!(s = PyString_AsString(v))) |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
676 goto finally; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
677 |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
678 for (i = 0; i < 256; i++) { |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
679 if (isupper(i)) |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
680 s[i] = tolower(i); |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
681 else |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
682 s[i] = i; |
|
1239
0c657db27dbf
Extensive changes to regex module (group(), casefold, etc.)
Guido van Rossum <guido@python.org>
parents:
1237
diff
changeset
|
683 } |
|
4808
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
684 if (PyDict_SetItemString(d, "casefold", v) < 0) |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
685 goto finally; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
686 Py_DECREF(v); |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
687 |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
688 if (!PyErr_Occurred()) |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
689 return; |
|
09d6c5708999
Several changes. Test program to follow.
Barry Warsaw <barry@python.org>
parents:
4600
diff
changeset
|
690 finally: |
|
6367
2c29b8982643
Apply two changes, systematically:
Guido van Rossum <guido@python.org>
parents:
6220
diff
changeset
|
691 /* Nothing */ ; |
| 536 | 692 } |
