48
48
def group (* choices ): return '(' + '|' .join (choices ) + ')'
49
49
def any (* choices ): return group (* choices ) + '*'
50
50
def maybe (* choices ): return group (* choices ) + '?'
51
+ def _combinations (* l ):
52
+ return set (
53
+ x + y for x in l for y in l + ("" ,) if x .casefold () != y .casefold ()
54
+ )
51
55
52
56
Whitespace = r'[ \f\t]*'
53
57
Comment = r'#[^\r\n]*'
@@ -74,7 +78,7 @@ def maybe(*choices): return group(*choices) + '?'
74
78
Single3 = r"[^'\\]*(?:(?:\\.|'(?!''))[^'\\]*)*'''"
75
79
# Tail end of """ string.
76
80
Double3 = r'[^"\\]*(?:(?:\\.|"(?!""))[^"\\]*)*"""'
77
- _litprefix = r"(?:[uUrRbBfF]|[rR][bB ]|[bBuU ][rR])?"
81
+ _litprefix = r"(?:[uUrRbBfF]|[rR][fFbB ]|[fFbBuU ][rR])?"
78
82
Triple = group (_litprefix + "'''" , _litprefix + '"""' )
79
83
# Single-line ' or " string.
80
84
String = group (_litprefix + r"'[^\n'\\]*(?:\\.[^\n'\\]*)*'" ,
@@ -105,59 +109,29 @@ def maybe(*choices): return group(*choices) + '?'
105
109
106
110
tokenprog , pseudoprog , single3prog , double3prog = list (map (
107
111
re .compile , (Token , PseudoToken , Single3 , Double3 )))
112
+
113
+ _strprefixes = (
114
+ _combinations ('r' , 'R' , 'f' , 'F' ) |
115
+ _combinations ('r' , 'R' , 'b' , 'B' ) |
116
+ {'u' , 'U' , 'ur' , 'uR' , 'Ur' , 'UR' }
117
+ )
118
+
108
119
endprogs = {"'" : re .compile (Single ), '"' : re .compile (Double ),
109
120
"'''" : single3prog , '"""' : double3prog ,
110
- "r'''" : single3prog , 'r"""' : double3prog ,
111
- "u'''" : single3prog , 'u"""' : double3prog ,
112
- "b'''" : single3prog , 'b"""' : double3prog ,
113
- "f'''" : single3prog , 'f"""' : double3prog ,
114
- "ur'''" : single3prog , 'ur"""' : double3prog ,
115
- "br'''" : single3prog , 'br"""' : double3prog ,
116
- "rb'''" : single3prog , 'rb"""' : double3prog ,
117
- "R'''" : single3prog , 'R"""' : double3prog ,
118
- "U'''" : single3prog , 'U"""' : double3prog ,
119
- "B'''" : single3prog , 'B"""' : double3prog ,
120
- "F'''" : single3prog , 'F"""' : double3prog ,
121
- "uR'''" : single3prog , 'uR"""' : double3prog ,
122
- "Ur'''" : single3prog , 'Ur"""' : double3prog ,
123
- "UR'''" : single3prog , 'UR"""' : double3prog ,
124
- "bR'''" : single3prog , 'bR"""' : double3prog ,
125
- "Br'''" : single3prog , 'Br"""' : double3prog ,
126
- "BR'''" : single3prog , 'BR"""' : double3prog ,
127
- "rB'''" : single3prog , 'rB"""' : double3prog ,
128
- "Rb'''" : single3prog , 'Rb"""' : double3prog ,
129
- "RB'''" : single3prog , 'RB"""' : double3prog ,
130
- 'r' : None , 'R' : None ,
131
- 'u' : None , 'U' : None ,
132
- 'f' : None , 'F' : None ,
133
- 'b' : None , 'B' : None }
134
-
135
- triple_quoted = {}
136
- for t in ("'''" , '"""' ,
137
- "r'''" , 'r"""' , "R'''" , 'R"""' ,
138
- "u'''" , 'u"""' , "U'''" , 'U"""' ,
139
- "b'''" , 'b"""' , "B'''" , 'B"""' ,
140
- "f'''" , 'f"""' , "F'''" , 'F"""' ,
141
- "ur'''" , 'ur"""' , "Ur'''" , 'Ur"""' ,
142
- "uR'''" , 'uR"""' , "UR'''" , 'UR"""' ,
143
- "br'''" , 'br"""' , "Br'''" , 'Br"""' ,
144
- "bR'''" , 'bR"""' , "BR'''" , 'BR"""' ,
145
- "rb'''" , 'rb"""' , "Rb'''" , 'Rb"""' ,
146
- "rB'''" , 'rB"""' , "RB'''" , 'RB"""' ,):
147
- triple_quoted [t ] = t
148
- single_quoted = {}
149
- for t in ("'" , '"' ,
150
- "r'" , 'r"' , "R'" , 'R"' ,
151
- "u'" , 'u"' , "U'" , 'U"' ,
152
- "b'" , 'b"' , "B'" , 'B"' ,
153
- "f'" , 'f"' , "F'" , 'F"' ,
154
- "ur'" , 'ur"' , "Ur'" , 'Ur"' ,
155
- "uR'" , 'uR"' , "UR'" , 'UR"' ,
156
- "br'" , 'br"' , "Br'" , 'Br"' ,
157
- "bR'" , 'bR"' , "BR'" , 'BR"' ,
158
- "rb'" , 'rb"' , "Rb'" , 'Rb"' ,
159
- "rB'" , 'rB"' , "RB'" , 'RB"' ,):
160
- single_quoted [t ] = t
121
+ ** {f"{ prefix } '''" : single3prog for prefix in _strprefixes },
122
+ ** {f'{ prefix } """' : double3prog for prefix in _strprefixes },
123
+ ** {prefix : None for prefix in _strprefixes }}
124
+
125
+ triple_quoted = (
126
+ {"'''" , '"""' } |
127
+ {f"{ prefix } '''" for prefix in _strprefixes } |
128
+ {f'{ prefix } """' for prefix in _strprefixes }
129
+ )
130
+ single_quoted = (
131
+ {"'" , '"' } |
132
+ {f"{ prefix } '" for prefix in _strprefixes } |
133
+ {f'{ prefix } "' for prefix in _strprefixes }
134
+ )
161
135
162
136
tabsize = 8
163
137
0 commit comments