Make rb'' strings work in lib2to3 (#1724) · python/cpython@0c4aca5 (original) (raw)

`@@ -74,10 +74,11 @@ def maybe(*choices): return group(*choices) + '?'

`

74

74

`Single3 = r"[^'\](?:(?:\.|'(?!''))[^'\])*'''"

`

75

75

`# Tail end of """ string.

`

76

76

`Double3 = r'[^"\](?:(?:\.|"(?!""))[^"\])*"""'

`

77

``

`-

Triple = group("[ubUB]?[rR]?'''", '[ubUB]?[rR]?"""')

`

``

77

`+

_litprefix = r"(?:[uUrRbB]|[rR][bB]|[bBuU][rR])?"

`

``

78

`+

Triple = group(_litprefix + "'''", _litprefix + '"""')

`

78

79

`# Single-line ' or " string.

`

79

``

`-

String = group(r"[uU]?[rR]?'[^\n'\](?:\.[^\n'\])*'",

`

80

``

`-

r'[uU]?[rR]?"[^\n"\](?:\.[^\n"\])*"')

`

``

80

`+

String = group(_litprefix + r"'[^\n'\](?:\.[^\n'\])*'",

`

``

81

`+

_litprefix + r'"[^\n"\](?:\.[^\n"\])*"')

`

81

82

``

82

83

`# Because of leftmost-then-longest match semantics, be sure to put the

`

83

84

`# longest operators first (e.g., if = came before ==, == would get

`

`@@ -95,9 +96,9 @@ def maybe(*choices): return group(*choices) + '?'

`

95

96

`Token = Ignore + PlainToken

`

96

97

``

97

98

`# First (or only) line of ' or " string.

`

98

``

`-

ContStr = group(r"[uUbB]?[rR]?'[^\n'\](?:\.[^\n'\])*" +

`

``

99

`+

ContStr = group(_litprefix + r"'[^\n'\](?:\.[^\n'\])*" +

`

99

100

`group("'", r'\\r?\n'),

`

100

``

`-

r'[uUbB]?[rR]?"[^\n"\](?:\.[^\n"\])*' +

`

``

101

`+

_litprefix + r'"[^\n"\](?:\.[^\n"\])*' +

`

101

102

`group('"', r'\\r?\n'))

`

102

103

`PseudoExtras = group(r'\\r?\n', Comment, Triple)

`

103

104

`PseudoToken = Whitespace + group(PseudoExtras, Number, Funny, ContStr, Name)

`

`@@ -111,6 +112,7 @@ def maybe(*choices): return group(*choices) + '?'

`

111

112

`"b'''": single3prog, 'b"""': double3prog,

`

112

113

`"ur'''": single3prog, 'ur"""': double3prog,

`

113

114

`"br'''": single3prog, 'br"""': double3prog,

`

``

115

`+

"rb'''": single3prog, 'rb"""': double3prog,

`

114

116

`"R'''": single3prog, 'R"""': double3prog,

`

115

117

`"U'''": single3prog, 'U"""': double3prog,

`

116

118

`"B'''": single3prog, 'B"""': double3prog,

`

`@@ -120,6 +122,9 @@ def maybe(*choices): return group(*choices) + '?'

`

120

122

`"bR'''": single3prog, 'bR"""': double3prog,

`

121

123

`"Br'''": single3prog, 'Br"""': double3prog,

`

122

124

`"BR'''": single3prog, 'BR"""': double3prog,

`

``

125

`+

"rB'''": single3prog, 'rB"""': double3prog,

`

``

126

`+

"Rb'''": single3prog, 'Rb"""': double3prog,

`

``

127

`+

"RB'''": single3prog, 'RB"""': double3prog,

`

123

128

`'r': None, 'R': None,

`

124

129

`'u': None, 'U': None,

`

125

130

`'b': None, 'B': None}

`

`@@ -132,7 +137,9 @@ def maybe(*choices): return group(*choices) + '?'

`

132

137

`"ur'''", 'ur"""', "Ur'''", 'Ur"""',

`

133

138

`"uR'''", 'uR"""', "UR'''", 'UR"""',

`

134

139

`"br'''", 'br"""', "Br'''", 'Br"""',

`

135

``

`-

"bR'''", 'bR"""', "BR'''", 'BR"""',):

`

``

140

`+

"bR'''", 'bR"""', "BR'''", 'BR"""',

`

``

141

`+

"rb'''", 'rb"""', "Rb'''", 'Rb"""',

`

``

142

`+

"rB'''", 'rB"""', "RB'''", 'RB"""',):

`

136

143

`triple_quoted[t] = t

`

137

144

`single_quoted = {}

`

138

145

`for t in ("'", '"',

`

`@@ -142,7 +149,9 @@ def maybe(*choices): return group(*choices) + '?'

`

142

149

`"ur'", 'ur"', "Ur'", 'Ur"',

`

143

150

`"uR'", 'uR"', "UR'", 'UR"',

`

144

151

`"br'", 'br"', "Br'", 'Br"',

`

145

``

`-

"bR'", 'bR"', "BR'", 'BR"', ):

`

``

152

`+

"bR'", 'bR"', "BR'", 'BR"',

`

``

153

`+

"rb'", 'rb"', "Rb'", 'Rb"',

`

``

154

`+

"rB'", 'rB"', "RB'", 'RB"',):

`

146

155

`single_quoted[t] = t

`

147

156

``

148

157

`tabsize = 8

`