5 header = sys.stdin.readline (), sys.stdin.readline ()
6 while sys.stdin.readline ().find ('##################') < 0:
10 print "/* == Start of generated table == */"
12 print " * The following table is generated by running:"
14 print " * ./gen-arabic-joining-table.py < ArabicShaping.txt"
16 print " * on the ArabicShaping.txt file with the header:"
19 print " * %s" % (line.strip())
22 print "static const uint8_t joining_table[] ="
31 for line in sys.stdin:
34 if line.find (" characters"):
35 block = line[2:].strip ()
38 fields = [x.strip () for x in line.split (';')]
42 u = int (fields[0], 16)
43 if u == 0x200C or u == 0x200D:
46 raise Exception ("Input data character not sorted", u)
47 min_u = min (min_u, u)
48 max_u = max (max_u, u)
52 print "\n /* %s */\n" % block
58 print " JOINING_TYPE_X, /* %04X */" % last
63 if fields[3] in ["ALAPH", "DALATH RISH"]:
64 value = "JOINING_GROUP_" + fields[3].replace(' ', '_')
66 value = "JOINING_TYPE_" + fields[2]
67 print " %s, /* %s */" % (value, '; '.join(fields))
70 print " JOINING_TYPE_X /* dummy */"
74 print "#define JOINING_TABLE_FIRST 0x%04x" % min_u
75 print "#define JOINING_TABLE_LAST 0x%04x" % max_u
78 print "/* == End of generated table == */"
80 occupancy = num * 100 / (max_u - min_u + 1)
81 # Maintain at least 40% occupancy in the table */
83 raise Exception ("Table too sparse, please investigate: ", occupancy)