Kaydet (Commit) 827fdaae authored tarafından Alexander Belopolsky's avatar Alexander Belopolsky

Issue #10552: Partially fixed a sort error in Tools/unicode/gencodec.py

üst f498b754
...@@ -34,6 +34,9 @@ MAX_TABLE_SIZE = 8192 ...@@ -34,6 +34,9 @@ MAX_TABLE_SIZE = 8192
# Standard undefined Unicode code point # Standard undefined Unicode code point
UNI_UNDEFINED = chr(0xFFFE) UNI_UNDEFINED = chr(0xFFFE)
# Placeholder for a missing codepoint
MISSING_CODE = -1
mapRE = re.compile('((?:0x[0-9a-fA-F]+\+?)+)' mapRE = re.compile('((?:0x[0-9a-fA-F]+\+?)+)'
'\s+' '\s+'
'((?:(?:0x[0-9a-fA-Z]+|<[A-Za-z]+>)\+?)*)' '((?:(?:0x[0-9a-fA-Z]+|<[A-Za-z]+>)\+?)*)'
...@@ -52,7 +55,7 @@ def parsecodes(codes, len=len, range=range): ...@@ -52,7 +55,7 @@ def parsecodes(codes, len=len, range=range):
""" """
if not codes: if not codes:
return None return MISSING_CODE
l = codes.split('+') l = codes.split('+')
if len(l) == 1: if len(l) == 1:
return int(l[0],16) return int(l[0],16)
...@@ -60,8 +63,8 @@ def parsecodes(codes, len=len, range=range): ...@@ -60,8 +63,8 @@ def parsecodes(codes, len=len, range=range):
try: try:
l[i] = int(l[i],16) l[i] = int(l[i],16)
except ValueError: except ValueError:
l[i] = None l[i] = MISSING_CODE
l = [x for x in l if x is not None] l = [x for x in l if x != MISSING_CODE]
if len(l) == 1: if len(l) == 1:
return l[0] return l[0]
else: else:
...@@ -113,7 +116,7 @@ def readmap(filename): ...@@ -113,7 +116,7 @@ def readmap(filename):
# mappings to None for the rest # mappings to None for the rest
if len(identity) >= len(unmapped): if len(identity) >= len(unmapped):
for enc in unmapped: for enc in unmapped:
enc2uni[enc] = (None, "") enc2uni[enc] = (MISSING_CODE, "")
enc2uni['IDENTITY'] = 256 enc2uni['IDENTITY'] = 256
return enc2uni return enc2uni
...@@ -211,7 +214,7 @@ def python_tabledef_code(varname, map, comments=1, key_precision=2): ...@@ -211,7 +214,7 @@ def python_tabledef_code(varname, map, comments=1, key_precision=2):
(mapkey, mapcomment) = mapkey (mapkey, mapcomment) = mapkey
if isinstance(mapvalue, tuple): if isinstance(mapvalue, tuple):
(mapvalue, mapcomment) = mapvalue (mapvalue, mapcomment) = mapvalue
if mapkey is None: if mapkey == MISSING_CODE:
continue continue
table[mapkey] = (mapvalue, mapcomment) table[mapkey] = (mapvalue, mapcomment)
if mapkey > maxkey: if mapkey > maxkey:
...@@ -223,11 +226,11 @@ def python_tabledef_code(varname, map, comments=1, key_precision=2): ...@@ -223,11 +226,11 @@ def python_tabledef_code(varname, map, comments=1, key_precision=2):
# Create table code # Create table code
for key in range(maxkey + 1): for key in range(maxkey + 1):
if key not in table: if key not in table:
mapvalue = None mapvalue = MISSING_CODE
mapcomment = 'UNDEFINED' mapcomment = 'UNDEFINED'
else: else:
mapvalue, mapcomment = table[key] mapvalue, mapcomment = table[key]
if mapvalue is None: if mapvalue == MISSING_CODE:
mapchar = UNI_UNDEFINED mapchar = UNI_UNDEFINED
else: else:
if isinstance(mapvalue, tuple): if isinstance(mapvalue, tuple):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment