6 print >>sys.stderr, "usage: ./gen-arabic-table.py ArabicShaping.txt"
11 header = f.readline (), f.readline ()
12 while f.readline ().find ('##################') < 0:
16 print "/* == Start of generated table == */"
18 print " * The following table is generated by running:"
20 print " * ./gen-arabic-table.py ArabicShaping.txt"
22 print " * on files with these headers:"
25 print " * %s" % (line.strip())
28 print "static const uint8_t joining_table[] ="
40 if line.find (" characters"):
41 block = line[2:].strip ()
44 fields = [x.strip () for x in line.split (';')]
48 u = int (fields[0], 16)
49 if u == 0x200C or u == 0x200D:
52 raise Exception ("Input data character not sorted", u)
53 min_u = min (min_u, u)
54 max_u = max (max_u, u)
58 print "\n /* %s */\n" % block
64 print " JOINING_TYPE_X, /* %04X */" % last
69 if fields[3] in ["ALAPH", "DALATH RISH"]:
70 value = "JOINING_GROUP_" + fields[3].replace(' ', '_')
72 value = "JOINING_TYPE_" + fields[2]
73 print " %s, /* %s */" % (value, '; '.join(fields))
79 print "#define JOINING_TABLE_FIRST 0x%04X" % min_u
80 print "#define JOINING_TABLE_LAST 0x%04X" % max_u
83 print "/* == End of generated table == */"
85 occupancy = num * 100 / (max_u - min_u + 1)
86 # Maintain at least 40% occupancy in the table */
88 raise Exception ("Table too sparse, please investigate: ", occupancy)