Guido van Rossum | 6c6b78d | 1991-12-30 16:03:05 +0000 | [diff] [blame] | 1 | # Provide backward compatibility for module "regexp" using "regex". |
| 2 | |
| 3 | import regex |
| 4 | from regex_syntax import * |
| 5 | |
| 6 | class Prog: |
| 7 | def init(self, pat): |
| 8 | save_syntax = regex.set_syntax(RE_SYNTAX_AWK) |
| 9 | try: |
| 10 | self.prog = regex.compile(pat) |
| 11 | finally: |
| 12 | xxx = regex.set_syntax(save_syntax) |
| 13 | return self |
Guido van Rossum | fea2af1 | 1993-01-04 09:16:51 +0000 | [diff] [blame] | 14 | def match(self, *args): |
| 15 | if len(args) == 2: |
Guido van Rossum | 6c6b78d | 1991-12-30 16:03:05 +0000 | [diff] [blame] | 16 | str, offset = args |
Guido van Rossum | fea2af1 | 1993-01-04 09:16:51 +0000 | [diff] [blame] | 17 | elif len(args) == 1: |
| 18 | str, offset = args[0], 0 |
Guido van Rossum | 6c6b78d | 1991-12-30 16:03:05 +0000 | [diff] [blame] | 19 | else: |
Guido van Rossum | fea2af1 | 1993-01-04 09:16:51 +0000 | [diff] [blame] | 20 | raise TypeError, 'wrong argument count' |
Guido van Rossum | 6c6b78d | 1991-12-30 16:03:05 +0000 | [diff] [blame] | 21 | if self.prog.search(str, offset) < 0: |
| 22 | return () |
Guido van Rossum | 42d1f63 | 1992-01-01 19:33:02 +0000 | [diff] [blame] | 23 | regs = self.prog.regs |
Guido van Rossum | 6c6b78d | 1991-12-30 16:03:05 +0000 | [diff] [blame] | 24 | i = len(regs) |
Guido van Rossum | 42d1f63 | 1992-01-01 19:33:02 +0000 | [diff] [blame] | 25 | while i > 0 and regs[i-1] == (-1, -1): |
Guido van Rossum | 6c6b78d | 1991-12-30 16:03:05 +0000 | [diff] [blame] | 26 | i = i-1 |
| 27 | return regs[:i] |
| 28 | |
| 29 | def compile(pat): |
| 30 | return Prog().init(pat) |
| 31 | |
| 32 | cache_pat = None |
| 33 | cache_prog = None |
| 34 | |
| 35 | def match(pat, str): |
| 36 | global cache_pat, cache_prog |
| 37 | if pat <> cache_pat: |
| 38 | cache_pat, cache_prog = pat, compile(pat) |
| 39 | return cache_prog.match(str) |