[Python-checkins] cpython (3.3): Issue #15239: Make mkstringprep.py work again on Python 3.

serhiy.storchaka python-checkins at python.org
Sun Jun 9 16:13:11 CEST 2013


http://hg.python.org/cpython/rev/8f95d77443da
changeset:   84066:8f95d77443da
branch:      3.3
parent:      84063:15aa786b723b
user:        Serhiy Storchaka <storchaka at gmail.com>
date:        Sun Jun 09 17:08:00 2013 +0300
summary:
  Issue #15239: Make mkstringprep.py work again on Python 3.

files:
  Misc/NEWS                     |   5 ++
  Tools/unicode/mkstringprep.py |  40 +++++++++++++---------
  2 files changed, 28 insertions(+), 17 deletions(-)


diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -107,6 +107,11 @@
 - Issue #17977: The documentation for the cadefault argument's default value
   in urllib.request.urlopen() is fixed to match the code.
 
+Tools/Demos
+-----------
+
+- Issue #15239: Make mkstringprep.py work again on Python 3.
+
 
 What's New in Python 3.3.2?
 ===========================
diff --git a/Tools/unicode/mkstringprep.py b/Tools/unicode/mkstringprep.py
--- a/Tools/unicode/mkstringprep.py
+++ b/Tools/unicode/mkstringprep.py
@@ -1,4 +1,5 @@
-import re, unicodedata, sys
+import re, sys
+from unicodedata import ucd_3_2_0 as unicodedata
 
 if sys.maxunicode == 65535:
     raise RuntimeError("need UCS-4 Python")
@@ -37,16 +38,20 @@
         tuple.append((prev,prev+span+1))
     else:
         single.append(prev)
-    tuple = " + ".join(["list(range(%d,%d))" % t for t in tuple])
+    if not single and len(tuple) == 1:
+        tuple = "range(%d,%d)" % tuple[0]
+    else:
+        tuple = " + ".join("list(range(%d,%d))" % t for t in tuple)
     if not single:
         return "set(%s)" % tuple
     if not tuple:
-        return "set(%s)" % repr(single)
-    return "set(%s + %s)" % (repr(single),tuple)
+        return "set(%r)" % (single,)
+    return "set(%r + %s)" % (single, tuple)
 
 ############## Read the tables in the RFC #######################
 
-data = open("rfc3454.txt").readlines()
+with open("rfc3454.txt") as f:
+    data = f.readlines()
 
 tables = []
 curname = None
@@ -55,8 +60,7 @@
     if not l:
         continue
     # Skip RFC page breaks
-    if l.startswith("Hoffman & Blanchet") or\
-       l.startswith("RFC 3454"):
+    if l.startswith(("Hoffman & Blanchet", "RFC 3454")):
         continue
     # Find start/end lines
     m = re.match("----- (Start|End) Table ([A-Z](.[0-9])+) -----", l)
@@ -71,6 +75,8 @@
         else:
             if not curname:
                 raise RuntimeError("End without start", l)
+            if curname != m.group(2):
+                raise RuntimeError("Unexpected end", l)
             curname = None
             continue
     if not curname:
@@ -113,10 +119,10 @@
 and mappings, for which a mapping function is provided.
 \"\"\"
 
-import unicodedata
+from unicodedata import ucd_3_2_0 as unicodedata
 """)
 
-print("assert unicodedata.unidata_version == %s" % repr(unicodedata.unidata_version))
+print("assert unicodedata.unidata_version == %r" % (unicodedata.unidata_version,))
 
 # A.1 is the table of unassigned characters
 # XXX Plane 15 PUA is listed as unassigned in Python.
@@ -173,15 +179,15 @@
 b3_exceptions = {}
 
 for k,v in table_b2.items():
-    if map(ord, unichr(k).lower()) != v:
-        b3_exceptions[k] = u"".join(map(unichr,v))
+    if list(map(ord, chr(k).lower())) != v:
+        b3_exceptions[k] = "".join(map(chr,v))
 
 b3 = sorted(b3_exceptions.items())
 
 print("""
 b3_exceptions = {""")
-for i,(k,v) in enumerate(b3):
-    print("0x%x:%s," % (k, repr(v)), end=' ')
+for i, kv in enumerate(b3):
+    print("0x%x:%a," % kv, end=' ')
     if i % 4 == 3:
         print()
 print("}")
@@ -224,7 +230,7 @@
 def map_table_b2(a):
     al = map_table_b3(a)
     b = unicodedata.normalize("NFKC", al)
-    bl = u"".join([map_table_b3(ch) for ch in b])
+    bl = "".join([map_table_b3(ch) for ch in b])
     c = unicodedata.normalize("NFKC", bl)
     if b != c:
         return c
@@ -240,7 +246,7 @@
 
 print("""
 def in_table_c11(code):
-    return code == u" "
+    return code == " "
 """)
 
 # C.1.2 is the rest of all space characters
@@ -249,12 +255,12 @@
 assert name == "C.1.2"
 
 # table = set(table.keys())
-# Zs = set(gen_category(["Zs"])) - set([0x20])
+# Zs = set(gen_category(["Zs"])) - {0x20}
 # assert Zs == table
 
 print("""
 def in_table_c12(code):
-    return unicodedata.category(code) == "Zs" and code != u" "
+    return unicodedata.category(code) == "Zs" and code != " "
 
 def in_table_c11_c12(code):
     return unicodedata.category(code) == "Zs"

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list