File: rsre_constants.py

package info (click to toggle)
pypy3 7.3.19%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 212,236 kB
  • sloc: python: 2,098,316; ansic: 540,565; sh: 21,462; asm: 14,419; cpp: 4,451; makefile: 4,209; objc: 761; xml: 530; exp: 499; javascript: 314; pascal: 244; lisp: 45; csh: 12; awk: 4
file content (115 lines) | stat: -rw-r--r-- 3,797 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# Horrible import-time hack.
# Blame CPython for renumbering these OPCODE_* at some point.
from rpython.rlib.objectmodel import specialize
try:
    import pypy.module.sys.version
    V37 = pypy.module.sys.version.CPYTHON_VERSION >= (3, 7)
except ImportError:
    raise ImportError("Cannot import pypy.module.sys.version. You can safely "
                      "remove this 'raise' line if you are not interested in "
                      "PyPy but only RPython.")
    V37 = False

OPCODE_FAILURE            = 0
OPCODE_SUCCESS            = 1
OPCODE_ANY                = 2
OPCODE_ANY_ALL            = 3
OPCODE_ASSERT             = 4
OPCODE_ASSERT_NOT         = 5
OPCODE_AT                 = 6
OPCODE_BRANCH             = 7
OPCODE_CALL               = 8                    # not used
OPCODE_CATEGORY           = 9
OPCODE_CHARSET            = 10
OPCODE_BIGCHARSET         = 11
OPCODE_GROUPREF           = 12
OPCODE_GROUPREF_EXISTS    = 13
OPCODE_GROUPREF_IGNORE    = 28 if V37 else 14
OPCODE_IN                 = 14 if V37 else 15
OPCODE_IN_IGNORE          = 29 if V37 else 16
OPCODE_INFO               = 15 if V37 else 17
OPCODE_JUMP               = 16 if V37 else 18
OPCODE_LITERAL            = 17 if V37 else 19
OPCODE_LITERAL_IGNORE     = 30 if V37 else 20
OPCODE_MARK               = 18 if V37 else 21
OPCODE_MAX_UNTIL          = 19 if V37 else 22
OPCODE_MIN_UNTIL          = 20 if V37 else 23
OPCODE_NOT_LITERAL        = 21 if V37 else 24
OPCODE_NOT_LITERAL_IGNORE = 31 if V37 else 25
OPCODE_NEGATE             = 22 if V37 else 26
OPCODE_RANGE              = 23 if V37 else 27
OPCODE_REPEAT             = 24 if V37 else 28
OPCODE_REPEAT_ONE         = 25 if V37 else 29
OPCODE_SUBPATTERN         = 26 if V37 else 30    # not used
OPCODE_MIN_REPEAT_ONE     = 27 if V37 else 31
OPCODE27_RANGE_IGNORE     = None if V37 else 32

OPCODE37_GROUPREF_LOC_IGNORE      = 32 if V37 else None
OPCODE37_IN_LOC_IGNORE            = 33 if V37 else None
OPCODE37_LITERAL_LOC_IGNORE       = 34 if V37 else None
OPCODE37_NOT_LITERAL_LOC_IGNORE   = 35 if V37 else None
OPCODE37_GROUPREF_UNI_IGNORE      = 36 if V37 else None
OPCODE37_IN_UNI_IGNORE            = 37 if V37 else None
OPCODE37_LITERAL_UNI_IGNORE       = 38 if V37 else None
OPCODE37_NOT_LITERAL_UNI_IGNORE   = 39 if V37 else None
OPCODE37_RANGE_UNI_IGNORE         = 40 if V37 else None

OPCODE_ATOMIC_GROUP               = 41
OPCODE_POSSESSIVE_REPEAT          = 42
OPCODE_POSSESSIVE_REPEAT_ONE      = 43

# not used by Python itself
OPCODE_UNICODE_GENERAL_CATEGORY = 70

@specialize.argtype(1)
def eq(op, const):
    return const is not None and op == const


AT_BEGINNING = 0
AT_BEGINNING_LINE = 1
AT_BEGINNING_STRING = 2
AT_BOUNDARY = 3
AT_NON_BOUNDARY = 4
AT_END = 5
AT_END_LINE = 6
AT_END_STRING = 7
AT_LOC_BOUNDARY = 8
AT_LOC_NON_BOUNDARY = 9
AT_UNI_BOUNDARY = 10
AT_UNI_NON_BOUNDARY = 11

def _makecodes(s):
    d = {}
    for i, name in enumerate(s.strip().split()):
        d[name] = i
    globals().update(d)
    return d

ATCODES = _makecodes("""
    AT_BEGINNING AT_BEGINNING_LINE AT_BEGINNING_STRING
    AT_BOUNDARY AT_NON_BOUNDARY
    AT_END AT_END_LINE AT_END_STRING
    AT_LOC_BOUNDARY AT_LOC_NON_BOUNDARY
    AT_UNI_BOUNDARY AT_UNI_NON_BOUNDARY
""")

# categories
CHCODES = _makecodes("""
    CATEGORY_DIGIT CATEGORY_NOT_DIGIT
    CATEGORY_SPACE CATEGORY_NOT_SPACE
    CATEGORY_WORD CATEGORY_NOT_WORD
    CATEGORY_LINEBREAK CATEGORY_NOT_LINEBREAK
    CATEGORY_LOC_WORD CATEGORY_LOC_NOT_WORD
    CATEGORY_UNI_DIGIT CATEGORY_UNI_NOT_DIGIT
    CATEGORY_UNI_SPACE CATEGORY_UNI_NOT_SPACE
    CATEGORY_UNI_WORD CATEGORY_UNI_NOT_WORD
    CATEGORY_UNI_LINEBREAK CATEGORY_UNI_NOT_LINEBREAK
""")

SRE_INFO_PREFIX = 1
SRE_INFO_LITERAL = 2
SRE_INFO_CHARSET = 4
SRE_FLAG_LOCALE = 4 # honour system locale
SRE_FLAG_UNICODE = 32 # use unicode locale