[libxml2] Port genUnicode.py to Python 3



commit 0c0f2a57c74e4b3f4de465ef729f87f9dc566709
Author: Nick Wellnhofer <wellnhofer aevum de>
Date:   Thu Apr 21 07:51:23 2022 +0200

    Port genUnicode.py to Python 3

 genUnicode.py | 80 +++++++++++++++++++++++++++++------------------------------
 1 file changed, 40 insertions(+), 40 deletions(-)
---
diff --git a/genUnicode.py b/genUnicode.py
index 794ea087..ebf48e6e 100755
--- a/genUnicode.py
+++ b/genUnicode.py
@@ -31,7 +31,7 @@ blockAliases.append("PrivateUse:PrivateUseArea,SupplementaryPrivateUseArea-A," +
 # number, inline comparisons are generated
 minTableSize = 8
 
-(blockfile, catfile) = string.split(sources)
+(blockfile, catfile) = sources.split()
 
 
 #
@@ -43,23 +43,23 @@ BlockNames = {}
 try:
     blocks = open(blockfile, "r")
 except:
-    print "Missing %s, aborting ..." % blockfile
+    print("Missing %s, aborting ..." % blockfile)
     sys.exit(1)
 
 for line in blocks.readlines():
     if line[0] == '#':
         continue
-    line = string.strip(line)
+    line = line.strip()
     if line == '':
         continue
     try:
-        fields = string.split(line, ';')
-        range = string.strip(fields[0])
-        (start, end) = string.split(range, "..")
-        name = string.strip(fields[1])
-        name = string.replace(name, ' ', '')
+        fields = line.split(';')
+        range = fields[0].strip()
+        (start, end) = range.split("..")
+        name = fields[1].strip()
+        name = name.replace(' ', '')
     except:
-        print "Failed to process line: %s" % (line)
+        print("Failed to process line: %s" % (line))
         continue
     start = "0x" + start
     end = "0x" + end
@@ -68,19 +68,19 @@ for line in blocks.readlines():
     except:
         BlockNames[name] = [(start, end)]
 blocks.close()
-print "Parsed %d blocks descriptions" % (len(BlockNames.keys()))
+print("Parsed %d blocks descriptions" % (len(BlockNames.keys())))
 
 for block in blockAliases:
-    alias = string.split(block,':')
-    alist = string.split(alias[1],',')
+    alias = block.split(':')
+    alist = alias[1].split(',')
     for comp in alist:
-        if BlockNames.has_key(comp):
+        if comp in BlockNames:
             if alias[0] not in BlockNames:
                 BlockNames[alias[0]] = []
             for r in BlockNames[comp]:
                 BlockNames[alias[0]].append(r)
         else:
-            print "Alias %s: %s not in Blocks" % (alias[0], comp)
+            print("Alias %s: %s not in Blocks" % (alias[0], comp))
             continue
 
 #
@@ -96,7 +96,7 @@ for block in blockAliases:
 try:
     data = open(catfile, "r")
 except:
-    print "Missing %s, aborting ..." % catfile
+    print("Missing %s, aborting ..." % catfile)
     sys.exit(1)
 
 nbchar = 0;
@@ -104,12 +104,12 @@ Categories = {}
 for line in data.readlines():
     if line[0] == '#':
         continue
-    line = string.strip(line)
+    line = line.strip()
     if line == '':
         continue
     try:
-        fields = string.split(line, ';')
-        point = string.strip(fields[0])
+        fields = line.split(';')
+        point = fields[0].strip()
         value = 0
         while point != '':
             value = value * 16
@@ -122,7 +122,7 @@ for line in data.readlines():
             point = point[1:]
         name = fields[2]
     except:
-        print "Failed to process line: %s" % (line)
+        print("Failed to process line: %s" % (line))
         continue
     
     nbchar = nbchar + 1
@@ -133,7 +133,7 @@ for line in data.readlines():
         try:
             Categories[name] = [value]
         except:
-            print "Failed to process line: %s" % (line)
+            print("Failed to process line: %s" % (line))
     # update "general category" name
     try:
         Categories[name[0]].append(value)
@@ -141,10 +141,10 @@ for line in data.readlines():
         try:
             Categories[name[0]] = [value]
         except:
-            print "Failed to process line: %s" % (line)
+            print("Failed to process line: %s" % (line))
 
 blocks.close()
-print "Parsed %d char generating %d categories" % (nbchar, len(Categories.keys()))
+print("Parsed %d char generating %d categories" % (nbchar, len(Categories.keys())))
 
 #
 # The data is now all read.  Time to process it into a more useful form.
@@ -184,11 +184,9 @@ for cat in Categories.keys():
 # Assure all data is in alphabetic order, since we will be doing binary
 # searches on the tables.
 #
-bkeys = BlockNames.keys()
-bkeys.sort()
+bkeys = sorted(BlockNames.keys())
 
-ckeys = Categories.keys()
-ckeys.sort()
+ckeys = sorted(Categories.keys())
 
 #
 # Generate the resulting files
@@ -196,13 +194,13 @@ ckeys.sort()
 try:
     header = open("include/libxml/xmlunicode.h", "w")
 except:
-    print "Failed to open include/libxml/xmlunicode.h"
+    print("Failed to open include/libxml/xmlunicode.h")
     sys.exit(1)
 
 try:
     output = open("xmlunicode.c", "w")
 except:
-    print "Failed to open xmlunicode.c"
+    print("Failed to open xmlunicode.c")
     sys.exit(1)
 
 date = time.asctime(time.localtime(time.time()))
@@ -272,14 +270,14 @@ typedef struct {
 } xmlUnicodeNameTable;
 
 
-static xmlIntFunc *xmlUnicodeLookup(xmlUnicodeNameTable *tptr, const char *tname);
+static xmlIntFunc *xmlUnicodeLookup(const xmlUnicodeNameTable *tptr, const char *tname);
 
 static const xmlUnicodeRange xmlUnicodeBlocks[] = {
 """ % (webpage, date, sources));
 
 flag = 0
 for block in bkeys:
-    name = string.replace(block, '-', '')
+    name = block.replace('-', '')
     if flag:
         output.write(',\n')
     else:
@@ -287,7 +285,7 @@ for block in bkeys:
     output.write('  {"%s", xmlUCSIs%s}' % (block, name))
 output.write('};\n\n')
 
-output.write('static xmlUnicodeRange xmlUnicodeCats[] = {\n')
+output.write('static const xmlUnicodeRange xmlUnicodeCats[] = {\n')
 flag = 0;
 for name in ckeys:
     if flag:
@@ -315,7 +313,7 @@ for name in ckeys:
           pline = "static const xmlChSRange xml%sS[] = {" % name
           sptr = "xml%sS" % name
         else:
-          pline += ", "
+          pline += ","
         numshort += 1
       else:
         if numlong == 0:
@@ -324,19 +322,21 @@ for name in ckeys:
           pline = "static const xmlChLRange xml%sL[] = {" % name
           lptr = "xml%sL" % name
         else:
-          pline += ", "
+          pline += ","
         numlong += 1
       if len(pline) > 60:
         output.write(pline + "\n")
         pline = "    "
+      elif pline[-1:] == ",":
+        pline += " "
       pline += "{%s, %s}" % (hex(low), hex(high))
-    output.write(pline + " };\nstatic xmlChRangeGroup xml%sG = {%s,%s,%s,%s};\n\n"
+    output.write(pline + " };\nstatic const xmlChRangeGroup xml%sG = {%s,%s,%s,%s};\n\n"
          % (name, numshort, numlong, sptr, lptr))
 
 
 output.write(
-"""static xmlUnicodeNameTable xmlUnicodeBlockTbl = {xmlUnicodeBlocks, %s};
-static xmlUnicodeNameTable xmlUnicodeCatTbl = {xmlUnicodeCats, %s};
+"""static const xmlUnicodeNameTable xmlUnicodeBlockTbl = {xmlUnicodeBlocks, %s};
+static const xmlUnicodeNameTable xmlUnicodeCatTbl = {xmlUnicodeCats, %s};
 
 /**
  * xmlUnicodeLookup:
@@ -348,9 +348,9 @@ static xmlUnicodeNameTable xmlUnicodeCatTbl = {xmlUnicodeCats, %s};
  * Returns pointer to range function if found, otherwise NULL
  */
 static xmlIntFunc
-*xmlUnicodeLookup(xmlUnicodeNameTable *tptr, const char *tname) {
+*xmlUnicodeLookup(const xmlUnicodeNameTable *tptr, const char *tname) {
     int low, high, mid, cmp;
-    xmlUnicodeRange *sptr;
+    const xmlUnicodeRange *sptr;
 
     if ((tptr == NULL) || (tname == NULL)) return(NULL);
 
@@ -366,13 +366,13 @@ static xmlIntFunc
        else
            low = mid + 1;
     }
-    return (NULL);    
+    return (NULL);
 }
 
 """ % (len(BlockNames), len(Categories)) )
 
 for block in bkeys:
-    name = string.replace(block, '-', '')
+    name = block.replace('-', '')
     header.write("XMLPUBFUN int XMLCALL xmlUCSIs%s\t(int code);\n" % name)
     output.write("/**\n * xmlUCSIs%s:\n * @code: UCS code point\n" % (name))
     output.write(" *\n * Check whether the character is part of %s UCS Block\n"%


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]