Issue #10552: Partially fixed a sort error in Tools/unicode/gencodec.py
authorAlexander Belopolsky <alexander.belopolsky@gmail.com>
Tue, 30 Nov 2010 16:56:15 +0000 (16:56 +0000)
committerAlexander Belopolsky <alexander.belopolsky@gmail.com>
Tue, 30 Nov 2010 16:56:15 +0000 (16:56 +0000)
Tools/unicode/gencodec.py

index 65fe5e5d82dd579c39a0c3e8da20d05d2a1bf789..7e7d6d0661473cb632e2b328a1c0ee601d39e674 100644 (file)
@@ -34,6 +34,9 @@ MAX_TABLE_SIZE = 8192
 # Standard undefined Unicode code point
 UNI_UNDEFINED = chr(0xFFFE)
 
+# Placeholder for a missing codepoint
+MISSING_CODE = -1
+
 mapRE = re.compile('((?:0x[0-9a-fA-F]+\+?)+)'
                    '\s+'
                    '((?:(?:0x[0-9a-fA-Z]+|<[A-Za-z]+>)\+?)*)'
@@ -52,7 +55,7 @@ def parsecodes(codes, len=len, range=range):
 
     """
     if not codes:
-        return None
+        return MISSING_CODE
     l = codes.split('+')
     if len(l) == 1:
         return int(l[0],16)
@@ -60,8 +63,8 @@ def parsecodes(codes, len=len, range=range):
         try:
             l[i] = int(l[i],16)
         except ValueError:
-            l[i] = None
-    l = [x for x in l if x is not None]
+            l[i] = MISSING_CODE
+    l = [x for x in l if x != MISSING_CODE]
     if len(l) == 1:
         return l[0]
     else:
@@ -113,7 +116,7 @@ def readmap(filename):
     # mappings to None for the rest
     if len(identity) >= len(unmapped):
         for enc in unmapped:
-            enc2uni[enc] = (None, "")
+            enc2uni[enc] = (MISSING_CODE, "")
         enc2uni['IDENTITY'] = 256
 
     return enc2uni
@@ -211,7 +214,7 @@ def python_tabledef_code(varname, map, comments=1, key_precision=2):
             (mapkey, mapcomment) = mapkey
         if isinstance(mapvalue, tuple):
             (mapvalue, mapcomment) = mapvalue
-        if mapkey is None:
+        if mapkey == MISSING_CODE:
             continue
         table[mapkey] = (mapvalue, mapcomment)
         if mapkey > maxkey:
@@ -223,11 +226,11 @@ def python_tabledef_code(varname, map, comments=1, key_precision=2):
     # Create table code
     for key in range(maxkey + 1):
         if key not in table:
-            mapvalue = None
+            mapvalue = MISSING_CODE
             mapcomment = 'UNDEFINED'
         else:
             mapvalue, mapcomment = table[key]
-        if mapvalue is None:
+        if mapvalue == MISSING_CODE:
             mapchar = UNI_UNDEFINED
         else:
             if isinstance(mapvalue, tuple):