17db96d56Sopenharmony_cir"""Fixer for unicode. 27db96d56Sopenharmony_ci 37db96d56Sopenharmony_ci* Changes unicode to str and unichr to chr. 47db96d56Sopenharmony_ci 57db96d56Sopenharmony_ci* If "...\u..." is not unicode literal change it into "...\\u...". 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ci* Change u"..." into "...". 87db96d56Sopenharmony_ci 97db96d56Sopenharmony_ci""" 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_cifrom ..pgen2 import token 127db96d56Sopenharmony_cifrom .. import fixer_base 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ci_mapping = {"unichr" : "chr", "unicode" : "str"} 157db96d56Sopenharmony_ci 167db96d56Sopenharmony_ciclass FixUnicode(fixer_base.BaseFix): 177db96d56Sopenharmony_ci BM_compatible = True 187db96d56Sopenharmony_ci PATTERN = "STRING | 'unicode' | 'unichr'" 197db96d56Sopenharmony_ci 207db96d56Sopenharmony_ci def start_tree(self, tree, filename): 217db96d56Sopenharmony_ci super(FixUnicode, self).start_tree(tree, filename) 227db96d56Sopenharmony_ci self.unicode_literals = 'unicode_literals' in tree.future_features 237db96d56Sopenharmony_ci 247db96d56Sopenharmony_ci def transform(self, node, results): 257db96d56Sopenharmony_ci if node.type == token.NAME: 267db96d56Sopenharmony_ci new = node.clone() 277db96d56Sopenharmony_ci new.value = _mapping[node.value] 287db96d56Sopenharmony_ci return new 297db96d56Sopenharmony_ci elif node.type == token.STRING: 307db96d56Sopenharmony_ci val = node.value 317db96d56Sopenharmony_ci if not self.unicode_literals and val[0] in '\'"' and '\\' in val: 327db96d56Sopenharmony_ci val = r'\\'.join([ 337db96d56Sopenharmony_ci v.replace('\\u', r'\\u').replace('\\U', r'\\U') 347db96d56Sopenharmony_ci for v in val.split(r'\\') 357db96d56Sopenharmony_ci ]) 367db96d56Sopenharmony_ci if val[0] in 'uU': 377db96d56Sopenharmony_ci val = val[1:] 387db96d56Sopenharmony_ci if val == node.value: 397db96d56Sopenharmony_ci return node 407db96d56Sopenharmony_ci new = node.clone() 417db96d56Sopenharmony_ci new.value = val 427db96d56Sopenharmony_ci return new 43