xref: /aosp_15_r20/prebuilts/build-tools/common/py3-stdlib/re/_constants.py (revision cda5da8d549138a6648c5ee6d7a49cf8f4a657be)
1*cda5da8dSAndroid Build Coastguard Worker#
2*cda5da8dSAndroid Build Coastguard Worker# Secret Labs' Regular Expression Engine
3*cda5da8dSAndroid Build Coastguard Worker#
4*cda5da8dSAndroid Build Coastguard Worker# various symbols used by the regular expression engine.
5*cda5da8dSAndroid Build Coastguard Worker# run this script to update the _sre include files!
6*cda5da8dSAndroid Build Coastguard Worker#
7*cda5da8dSAndroid Build Coastguard Worker# Copyright (c) 1998-2001 by Secret Labs AB.  All rights reserved.
8*cda5da8dSAndroid Build Coastguard Worker#
9*cda5da8dSAndroid Build Coastguard Worker# See the __init__.py file for information on usage and redistribution.
10*cda5da8dSAndroid Build Coastguard Worker#
11*cda5da8dSAndroid Build Coastguard Worker
12*cda5da8dSAndroid Build Coastguard Worker"""Internal support module for sre"""
13*cda5da8dSAndroid Build Coastguard Worker
14*cda5da8dSAndroid Build Coastguard Worker# update when constants are added or removed
15*cda5da8dSAndroid Build Coastguard Worker
16*cda5da8dSAndroid Build Coastguard WorkerMAGIC = 20220615
17*cda5da8dSAndroid Build Coastguard Worker
18*cda5da8dSAndroid Build Coastguard Workerfrom _sre import MAXREPEAT, MAXGROUPS
19*cda5da8dSAndroid Build Coastguard Worker
20*cda5da8dSAndroid Build Coastguard Worker# SRE standard exception (access as sre.error)
21*cda5da8dSAndroid Build Coastguard Worker# should this really be here?
22*cda5da8dSAndroid Build Coastguard Worker
23*cda5da8dSAndroid Build Coastguard Workerclass error(Exception):
24*cda5da8dSAndroid Build Coastguard Worker    """Exception raised for invalid regular expressions.
25*cda5da8dSAndroid Build Coastguard Worker
26*cda5da8dSAndroid Build Coastguard Worker    Attributes:
27*cda5da8dSAndroid Build Coastguard Worker
28*cda5da8dSAndroid Build Coastguard Worker        msg: The unformatted error message
29*cda5da8dSAndroid Build Coastguard Worker        pattern: The regular expression pattern
30*cda5da8dSAndroid Build Coastguard Worker        pos: The index in the pattern where compilation failed (may be None)
31*cda5da8dSAndroid Build Coastguard Worker        lineno: The line corresponding to pos (may be None)
32*cda5da8dSAndroid Build Coastguard Worker        colno: The column corresponding to pos (may be None)
33*cda5da8dSAndroid Build Coastguard Worker    """
34*cda5da8dSAndroid Build Coastguard Worker
35*cda5da8dSAndroid Build Coastguard Worker    __module__ = 're'
36*cda5da8dSAndroid Build Coastguard Worker
37*cda5da8dSAndroid Build Coastguard Worker    def __init__(self, msg, pattern=None, pos=None):
38*cda5da8dSAndroid Build Coastguard Worker        self.msg = msg
39*cda5da8dSAndroid Build Coastguard Worker        self.pattern = pattern
40*cda5da8dSAndroid Build Coastguard Worker        self.pos = pos
41*cda5da8dSAndroid Build Coastguard Worker        if pattern is not None and pos is not None:
42*cda5da8dSAndroid Build Coastguard Worker            msg = '%s at position %d' % (msg, pos)
43*cda5da8dSAndroid Build Coastguard Worker            if isinstance(pattern, str):
44*cda5da8dSAndroid Build Coastguard Worker                newline = '\n'
45*cda5da8dSAndroid Build Coastguard Worker            else:
46*cda5da8dSAndroid Build Coastguard Worker                newline = b'\n'
47*cda5da8dSAndroid Build Coastguard Worker            self.lineno = pattern.count(newline, 0, pos) + 1
48*cda5da8dSAndroid Build Coastguard Worker            self.colno = pos - pattern.rfind(newline, 0, pos)
49*cda5da8dSAndroid Build Coastguard Worker            if newline in pattern:
50*cda5da8dSAndroid Build Coastguard Worker                msg = '%s (line %d, column %d)' % (msg, self.lineno, self.colno)
51*cda5da8dSAndroid Build Coastguard Worker        else:
52*cda5da8dSAndroid Build Coastguard Worker            self.lineno = self.colno = None
53*cda5da8dSAndroid Build Coastguard Worker        super().__init__(msg)
54*cda5da8dSAndroid Build Coastguard Worker
55*cda5da8dSAndroid Build Coastguard Worker
56*cda5da8dSAndroid Build Coastguard Workerclass _NamedIntConstant(int):
57*cda5da8dSAndroid Build Coastguard Worker    def __new__(cls, value, name):
58*cda5da8dSAndroid Build Coastguard Worker        self = super(_NamedIntConstant, cls).__new__(cls, value)
59*cda5da8dSAndroid Build Coastguard Worker        self.name = name
60*cda5da8dSAndroid Build Coastguard Worker        return self
61*cda5da8dSAndroid Build Coastguard Worker
62*cda5da8dSAndroid Build Coastguard Worker    def __repr__(self):
63*cda5da8dSAndroid Build Coastguard Worker        return self.name
64*cda5da8dSAndroid Build Coastguard Worker
65*cda5da8dSAndroid Build Coastguard Worker    __reduce__ = None
66*cda5da8dSAndroid Build Coastguard Worker
67*cda5da8dSAndroid Build Coastguard WorkerMAXREPEAT = _NamedIntConstant(MAXREPEAT, 'MAXREPEAT')
68*cda5da8dSAndroid Build Coastguard Worker
69*cda5da8dSAndroid Build Coastguard Workerdef _makecodes(*names):
70*cda5da8dSAndroid Build Coastguard Worker    items = [_NamedIntConstant(i, name) for i, name in enumerate(names)]
71*cda5da8dSAndroid Build Coastguard Worker    globals().update({item.name: item for item in items})
72*cda5da8dSAndroid Build Coastguard Worker    return items
73*cda5da8dSAndroid Build Coastguard Worker
74*cda5da8dSAndroid Build Coastguard Worker# operators
75*cda5da8dSAndroid Build Coastguard WorkerOPCODES = _makecodes(
76*cda5da8dSAndroid Build Coastguard Worker    # failure=0 success=1 (just because it looks better that way :-)
77*cda5da8dSAndroid Build Coastguard Worker    'FAILURE', 'SUCCESS',
78*cda5da8dSAndroid Build Coastguard Worker
79*cda5da8dSAndroid Build Coastguard Worker    'ANY', 'ANY_ALL',
80*cda5da8dSAndroid Build Coastguard Worker    'ASSERT', 'ASSERT_NOT',
81*cda5da8dSAndroid Build Coastguard Worker    'AT',
82*cda5da8dSAndroid Build Coastguard Worker    'BRANCH',
83*cda5da8dSAndroid Build Coastguard Worker    'CATEGORY',
84*cda5da8dSAndroid Build Coastguard Worker    'CHARSET', 'BIGCHARSET',
85*cda5da8dSAndroid Build Coastguard Worker    'GROUPREF', 'GROUPREF_EXISTS',
86*cda5da8dSAndroid Build Coastguard Worker    'IN',
87*cda5da8dSAndroid Build Coastguard Worker    'INFO',
88*cda5da8dSAndroid Build Coastguard Worker    'JUMP',
89*cda5da8dSAndroid Build Coastguard Worker    'LITERAL',
90*cda5da8dSAndroid Build Coastguard Worker    'MARK',
91*cda5da8dSAndroid Build Coastguard Worker    'MAX_UNTIL',
92*cda5da8dSAndroid Build Coastguard Worker    'MIN_UNTIL',
93*cda5da8dSAndroid Build Coastguard Worker    'NOT_LITERAL',
94*cda5da8dSAndroid Build Coastguard Worker    'NEGATE',
95*cda5da8dSAndroid Build Coastguard Worker    'RANGE',
96*cda5da8dSAndroid Build Coastguard Worker    'REPEAT',
97*cda5da8dSAndroid Build Coastguard Worker    'REPEAT_ONE',
98*cda5da8dSAndroid Build Coastguard Worker    'SUBPATTERN',
99*cda5da8dSAndroid Build Coastguard Worker    'MIN_REPEAT_ONE',
100*cda5da8dSAndroid Build Coastguard Worker    'ATOMIC_GROUP',
101*cda5da8dSAndroid Build Coastguard Worker    'POSSESSIVE_REPEAT',
102*cda5da8dSAndroid Build Coastguard Worker    'POSSESSIVE_REPEAT_ONE',
103*cda5da8dSAndroid Build Coastguard Worker
104*cda5da8dSAndroid Build Coastguard Worker    'GROUPREF_IGNORE',
105*cda5da8dSAndroid Build Coastguard Worker    'IN_IGNORE',
106*cda5da8dSAndroid Build Coastguard Worker    'LITERAL_IGNORE',
107*cda5da8dSAndroid Build Coastguard Worker    'NOT_LITERAL_IGNORE',
108*cda5da8dSAndroid Build Coastguard Worker
109*cda5da8dSAndroid Build Coastguard Worker    'GROUPREF_LOC_IGNORE',
110*cda5da8dSAndroid Build Coastguard Worker    'IN_LOC_IGNORE',
111*cda5da8dSAndroid Build Coastguard Worker    'LITERAL_LOC_IGNORE',
112*cda5da8dSAndroid Build Coastguard Worker    'NOT_LITERAL_LOC_IGNORE',
113*cda5da8dSAndroid Build Coastguard Worker
114*cda5da8dSAndroid Build Coastguard Worker    'GROUPREF_UNI_IGNORE',
115*cda5da8dSAndroid Build Coastguard Worker    'IN_UNI_IGNORE',
116*cda5da8dSAndroid Build Coastguard Worker    'LITERAL_UNI_IGNORE',
117*cda5da8dSAndroid Build Coastguard Worker    'NOT_LITERAL_UNI_IGNORE',
118*cda5da8dSAndroid Build Coastguard Worker    'RANGE_UNI_IGNORE',
119*cda5da8dSAndroid Build Coastguard Worker
120*cda5da8dSAndroid Build Coastguard Worker    # The following opcodes are only occurred in the parser output,
121*cda5da8dSAndroid Build Coastguard Worker    # but not in the compiled code.
122*cda5da8dSAndroid Build Coastguard Worker    'MIN_REPEAT', 'MAX_REPEAT',
123*cda5da8dSAndroid Build Coastguard Worker)
124*cda5da8dSAndroid Build Coastguard Workerdel OPCODES[-2:] # remove MIN_REPEAT and MAX_REPEAT
125*cda5da8dSAndroid Build Coastguard Worker
126*cda5da8dSAndroid Build Coastguard Worker# positions
127*cda5da8dSAndroid Build Coastguard WorkerATCODES = _makecodes(
128*cda5da8dSAndroid Build Coastguard Worker    'AT_BEGINNING', 'AT_BEGINNING_LINE', 'AT_BEGINNING_STRING',
129*cda5da8dSAndroid Build Coastguard Worker    'AT_BOUNDARY', 'AT_NON_BOUNDARY',
130*cda5da8dSAndroid Build Coastguard Worker    'AT_END', 'AT_END_LINE', 'AT_END_STRING',
131*cda5da8dSAndroid Build Coastguard Worker
132*cda5da8dSAndroid Build Coastguard Worker    'AT_LOC_BOUNDARY', 'AT_LOC_NON_BOUNDARY',
133*cda5da8dSAndroid Build Coastguard Worker
134*cda5da8dSAndroid Build Coastguard Worker    'AT_UNI_BOUNDARY', 'AT_UNI_NON_BOUNDARY',
135*cda5da8dSAndroid Build Coastguard Worker)
136*cda5da8dSAndroid Build Coastguard Worker
137*cda5da8dSAndroid Build Coastguard Worker# categories
138*cda5da8dSAndroid Build Coastguard WorkerCHCODES = _makecodes(
139*cda5da8dSAndroid Build Coastguard Worker    'CATEGORY_DIGIT', 'CATEGORY_NOT_DIGIT',
140*cda5da8dSAndroid Build Coastguard Worker    'CATEGORY_SPACE', 'CATEGORY_NOT_SPACE',
141*cda5da8dSAndroid Build Coastguard Worker    'CATEGORY_WORD', 'CATEGORY_NOT_WORD',
142*cda5da8dSAndroid Build Coastguard Worker    'CATEGORY_LINEBREAK', 'CATEGORY_NOT_LINEBREAK',
143*cda5da8dSAndroid Build Coastguard Worker
144*cda5da8dSAndroid Build Coastguard Worker    'CATEGORY_LOC_WORD', 'CATEGORY_LOC_NOT_WORD',
145*cda5da8dSAndroid Build Coastguard Worker
146*cda5da8dSAndroid Build Coastguard Worker    'CATEGORY_UNI_DIGIT', 'CATEGORY_UNI_NOT_DIGIT',
147*cda5da8dSAndroid Build Coastguard Worker    'CATEGORY_UNI_SPACE', 'CATEGORY_UNI_NOT_SPACE',
148*cda5da8dSAndroid Build Coastguard Worker    'CATEGORY_UNI_WORD', 'CATEGORY_UNI_NOT_WORD',
149*cda5da8dSAndroid Build Coastguard Worker    'CATEGORY_UNI_LINEBREAK', 'CATEGORY_UNI_NOT_LINEBREAK',
150*cda5da8dSAndroid Build Coastguard Worker)
151*cda5da8dSAndroid Build Coastguard Worker
152*cda5da8dSAndroid Build Coastguard Worker
153*cda5da8dSAndroid Build Coastguard Worker# replacement operations for "ignore case" mode
154*cda5da8dSAndroid Build Coastguard WorkerOP_IGNORE = {
155*cda5da8dSAndroid Build Coastguard Worker    LITERAL: LITERAL_IGNORE,
156*cda5da8dSAndroid Build Coastguard Worker    NOT_LITERAL: NOT_LITERAL_IGNORE,
157*cda5da8dSAndroid Build Coastguard Worker}
158*cda5da8dSAndroid Build Coastguard Worker
159*cda5da8dSAndroid Build Coastguard WorkerOP_LOCALE_IGNORE = {
160*cda5da8dSAndroid Build Coastguard Worker    LITERAL: LITERAL_LOC_IGNORE,
161*cda5da8dSAndroid Build Coastguard Worker    NOT_LITERAL: NOT_LITERAL_LOC_IGNORE,
162*cda5da8dSAndroid Build Coastguard Worker}
163*cda5da8dSAndroid Build Coastguard Worker
164*cda5da8dSAndroid Build Coastguard WorkerOP_UNICODE_IGNORE = {
165*cda5da8dSAndroid Build Coastguard Worker    LITERAL: LITERAL_UNI_IGNORE,
166*cda5da8dSAndroid Build Coastguard Worker    NOT_LITERAL: NOT_LITERAL_UNI_IGNORE,
167*cda5da8dSAndroid Build Coastguard Worker}
168*cda5da8dSAndroid Build Coastguard Worker
169*cda5da8dSAndroid Build Coastguard WorkerAT_MULTILINE = {
170*cda5da8dSAndroid Build Coastguard Worker    AT_BEGINNING: AT_BEGINNING_LINE,
171*cda5da8dSAndroid Build Coastguard Worker    AT_END: AT_END_LINE
172*cda5da8dSAndroid Build Coastguard Worker}
173*cda5da8dSAndroid Build Coastguard Worker
174*cda5da8dSAndroid Build Coastguard WorkerAT_LOCALE = {
175*cda5da8dSAndroid Build Coastguard Worker    AT_BOUNDARY: AT_LOC_BOUNDARY,
176*cda5da8dSAndroid Build Coastguard Worker    AT_NON_BOUNDARY: AT_LOC_NON_BOUNDARY
177*cda5da8dSAndroid Build Coastguard Worker}
178*cda5da8dSAndroid Build Coastguard Worker
179*cda5da8dSAndroid Build Coastguard WorkerAT_UNICODE = {
180*cda5da8dSAndroid Build Coastguard Worker    AT_BOUNDARY: AT_UNI_BOUNDARY,
181*cda5da8dSAndroid Build Coastguard Worker    AT_NON_BOUNDARY: AT_UNI_NON_BOUNDARY
182*cda5da8dSAndroid Build Coastguard Worker}
183*cda5da8dSAndroid Build Coastguard Worker
184*cda5da8dSAndroid Build Coastguard WorkerCH_LOCALE = {
185*cda5da8dSAndroid Build Coastguard Worker    CATEGORY_DIGIT: CATEGORY_DIGIT,
186*cda5da8dSAndroid Build Coastguard Worker    CATEGORY_NOT_DIGIT: CATEGORY_NOT_DIGIT,
187*cda5da8dSAndroid Build Coastguard Worker    CATEGORY_SPACE: CATEGORY_SPACE,
188*cda5da8dSAndroid Build Coastguard Worker    CATEGORY_NOT_SPACE: CATEGORY_NOT_SPACE,
189*cda5da8dSAndroid Build Coastguard Worker    CATEGORY_WORD: CATEGORY_LOC_WORD,
190*cda5da8dSAndroid Build Coastguard Worker    CATEGORY_NOT_WORD: CATEGORY_LOC_NOT_WORD,
191*cda5da8dSAndroid Build Coastguard Worker    CATEGORY_LINEBREAK: CATEGORY_LINEBREAK,
192*cda5da8dSAndroid Build Coastguard Worker    CATEGORY_NOT_LINEBREAK: CATEGORY_NOT_LINEBREAK
193*cda5da8dSAndroid Build Coastguard Worker}
194*cda5da8dSAndroid Build Coastguard Worker
195*cda5da8dSAndroid Build Coastguard WorkerCH_UNICODE = {
196*cda5da8dSAndroid Build Coastguard Worker    CATEGORY_DIGIT: CATEGORY_UNI_DIGIT,
197*cda5da8dSAndroid Build Coastguard Worker    CATEGORY_NOT_DIGIT: CATEGORY_UNI_NOT_DIGIT,
198*cda5da8dSAndroid Build Coastguard Worker    CATEGORY_SPACE: CATEGORY_UNI_SPACE,
199*cda5da8dSAndroid Build Coastguard Worker    CATEGORY_NOT_SPACE: CATEGORY_UNI_NOT_SPACE,
200*cda5da8dSAndroid Build Coastguard Worker    CATEGORY_WORD: CATEGORY_UNI_WORD,
201*cda5da8dSAndroid Build Coastguard Worker    CATEGORY_NOT_WORD: CATEGORY_UNI_NOT_WORD,
202*cda5da8dSAndroid Build Coastguard Worker    CATEGORY_LINEBREAK: CATEGORY_UNI_LINEBREAK,
203*cda5da8dSAndroid Build Coastguard Worker    CATEGORY_NOT_LINEBREAK: CATEGORY_UNI_NOT_LINEBREAK
204*cda5da8dSAndroid Build Coastguard Worker}
205*cda5da8dSAndroid Build Coastguard Worker
206*cda5da8dSAndroid Build Coastguard Worker# flags
207*cda5da8dSAndroid Build Coastguard WorkerSRE_FLAG_TEMPLATE = 1 # template mode (unknown purpose, deprecated)
208*cda5da8dSAndroid Build Coastguard WorkerSRE_FLAG_IGNORECASE = 2 # case insensitive
209*cda5da8dSAndroid Build Coastguard WorkerSRE_FLAG_LOCALE = 4 # honour system locale
210*cda5da8dSAndroid Build Coastguard WorkerSRE_FLAG_MULTILINE = 8 # treat target as multiline string
211*cda5da8dSAndroid Build Coastguard WorkerSRE_FLAG_DOTALL = 16 # treat target as a single string
212*cda5da8dSAndroid Build Coastguard WorkerSRE_FLAG_UNICODE = 32 # use unicode "locale"
213*cda5da8dSAndroid Build Coastguard WorkerSRE_FLAG_VERBOSE = 64 # ignore whitespace and comments
214*cda5da8dSAndroid Build Coastguard WorkerSRE_FLAG_DEBUG = 128 # debugging
215*cda5da8dSAndroid Build Coastguard WorkerSRE_FLAG_ASCII = 256 # use ascii "locale"
216*cda5da8dSAndroid Build Coastguard Worker
217*cda5da8dSAndroid Build Coastguard Worker# flags for INFO primitive
218*cda5da8dSAndroid Build Coastguard WorkerSRE_INFO_PREFIX = 1 # has prefix
219*cda5da8dSAndroid Build Coastguard WorkerSRE_INFO_LITERAL = 2 # entire pattern is literal (given by prefix)
220*cda5da8dSAndroid Build Coastguard WorkerSRE_INFO_CHARSET = 4 # pattern starts with character from given set
221