[arabic-table] Read Blocks.txt and shuffle code around No functional change.
diff --git a/src/Makefile.am b/src/Makefile.am index f670e27..5832f75 100644 --- a/src/Makefile.am +++ b/src/Makefile.am
@@ -281,7 +281,7 @@ mv hb-ot-shape-complex-indic-table.cc.tmp $(srcdir)/hb-ot-shape-complex-indic-table.cc || \ ($(RM) hb-ot-shape-complex-indic-table.cc.tmp; false) -arabic-table: gen-arabic-table.py ArabicShaping.txt UnicodeData.txt +arabic-table: gen-arabic-table.py ArabicShaping.txt UnicodeData.txt Blocks.txt $(AM_V_GEN) $(builddir)/$^ > hb-ot-shape-complex-arabic-table.hh.tmp && \ mv hb-ot-shape-complex-arabic-table.hh.tmp $(srcdir)/hb-ot-shape-complex-arabic-table.hh || \ ($(RM) hb-ot-shape-complex-arabic-table.hh.tmp; false)
diff --git a/src/gen-arabic-table.py b/src/gen-arabic-table.py index da5a4fc..534f560 100755 --- a/src/gen-arabic-table.py +++ b/src/gen-arabic-table.py
@@ -3,34 +3,48 @@ import sys import os.path -if len (sys.argv) != 3: - print >>sys.stderr, "usage: ./gen-arabic-table.py ArabicShaping.txt UnicodeData.txt" +if len (sys.argv) != 4: + print >>sys.stderr, "usage: ./gen-arabic-table.py ArabicShaping.txt UnicodeData.txt Blocks.txt" sys.exit (1) files = [file (x) for x in sys.argv[1:]] -headers = [[files[0].readline (), files[0].readline ()]] +headers = [[files[0].readline (), files[0].readline ()], [files[2].readline (), files[2].readline ()]] headers.append (["UnicodeData.txt does not have a header."]) while files[0].readline ().find ('##################') < 0: pass +blocks = {} +def read_blocks(f): + global blocks + for line in f: + + j = line.find ('#') + if j >= 0: + line = line[:j] + + fields = [x.strip () for x in line.split (';')] + if len (fields) == 1: + continue + + uu = fields[0].split ('..') + start = int (uu[0], 16) + if len (uu) == 1: + end = start + else: + end = int (uu[1], 16) + + t = fields[1] + + for u in range (start, end + 1): + blocks[u] = t def print_joining_table(f): - print - print "static const uint8_t joining_table[] =" - print "{" - - min_u = 0x110000 - max_u = 0 - num = 0 - last = -1 - block = '' + values = {} for line in f: if line[0] == '#': - if line.find (" characters"): - block = line[2:].strip () continue fields = [x.strip () for x in line.split (';')] @@ -40,30 +54,29 @@ u = int (fields[0], 16) if u == 0x200C or u == 0x200D: continue - if u < last: - raise Exception ("Input data character not sorted", u) - min_u = min (min_u, u) - max_u = max (max_u, u) - num += 1 - - if block: - print "\n /* %s */\n" % block - block = '' - - if last != -1: - last += 1 - while last < u: - print " JOINING_TYPE_X, /* %04X */" % last - last += 1 - else: - last = u if fields[3] in ["ALAPH", "DALATH RISH"]: value = "JOINING_GROUP_" + fields[3].replace(' ', '_') else: value = "JOINING_TYPE_" + fields[2] - print " %s, /* %s */" % (value, '; '.join(fields)) + values[u] = (value, fields) + keys = values.keys() + min_u = min(keys) + max_u = max(keys) + num = len(values) + print + print "static const uint8_t joining_table[] =" + print "{" + last_block = None + for u in range(min_u, max_u+1): + value,fields = values.get(u, ("JOINING_TYPE_X", ["%04X"%u])) + block = blocks.get(u, last_block) + if block != last_block: + print "\n /* %s */\n" % block + last_block = block + + print " %s, /* %s */" % (value, '; '.join(fields)) print print "};" print @@ -174,7 +187,7 @@ print "/*" print " * The following table is generated by running:" print " *" -print " * ./gen-arabic-table.py ArabicShaping.txt UnicodeData.txt" +print " * ./gen-arabic-table.py ArabicShaping.txt UnicodeData.txt Blocks.txt" print " *" print " * on files with these headers:" print " *" @@ -187,6 +200,7 @@ print "#define HB_OT_SHAPE_COMPLEX_ARABIC_TABLE_HH" print +read_blocks (files[2]) print_joining_table (files[0]) print_shaping_table (files[1])
diff --git a/src/hb-ot-shape-complex-arabic-table.hh b/src/hb-ot-shape-complex-arabic-table.hh index 730a275..3375266 100644 --- a/src/hb-ot-shape-complex-arabic-table.hh +++ b/src/hb-ot-shape-complex-arabic-table.hh
@@ -2,12 +2,14 @@ /* * The following table is generated by running: * - * ./gen-arabic-table.py ArabicShaping.txt UnicodeData.txt + * ./gen-arabic-table.py ArabicShaping.txt UnicodeData.txt Blocks.txt * * on files with these headers: * * # ArabicShaping-6.2.0.txt * # Date: 2012-05-15, 21:05:00 GMT [KW] + * # Blocks-6.2.0.txt + * # Date: 2012-05-14, 22:42:00 GMT [KW, LI] * UnicodeData.txt does not have a header. */ @@ -18,7 +20,7 @@ static const uint8_t joining_table[] = { - /* Arabic Characters */ + /* Arabic */ JOINING_TYPE_U, /* 0600; ARABIC NUMBER SIGN; U; No_Joining_Group */ JOINING_TYPE_U, /* 0601; ARABIC SIGN SANAH; U; No_Joining_Group */ @@ -277,7 +279,7 @@ JOINING_TYPE_X, /* 06FE */ JOINING_TYPE_D, /* 06FF; KNOTTED HEH WITH INVERTED V ABOVE; D; KNOTTED HEH */ - /* Syriac Characters */ + /* Syriac */ JOINING_TYPE_X, /* 0700 */ JOINING_TYPE_X, /* 0701 */ @@ -360,7 +362,7 @@ JOINING_TYPE_D, /* 074E; SOGDIAN KHAPH; D; KHAPH */ JOINING_TYPE_D, /* 074F; SOGDIAN FE; D; FE */ - /* Arabic Supplement Characters */ + /* Arabic Supplement */ JOINING_TYPE_D, /* 0750; DOTLESS BEH WITH HORIZONTAL 3 DOTS BELOW; D; BEH */ JOINING_TYPE_D, /* 0751; BEH WITH 3 DOTS ABOVE; D; BEH */ @@ -411,7 +413,7 @@ JOINING_TYPE_D, /* 077E; SEEN WITH INVERTED V ABOVE; D; SEEN */ JOINING_TYPE_D, /* 077F; KAF WITH 2 DOTS ABOVE; D; KAF */ - /* N'Ko Characters */ + /* Thaana */ JOINING_TYPE_X, /* 0780 */ JOINING_TYPE_X, /* 0781 */ @@ -477,6 +479,9 @@ JOINING_TYPE_X, /* 07BD */ JOINING_TYPE_X, /* 07BE */ JOINING_TYPE_X, /* 07BF */ + + /* NKo */ + JOINING_TYPE_X, /* 07C0 */ JOINING_TYPE_X, /* 07C1 */ JOINING_TYPE_X, /* 07C2 */ @@ -536,14 +541,14 @@ JOINING_TYPE_X, /* 07F8 */ JOINING_TYPE_X, /* 07F9 */ JOINING_TYPE_C, /* 07FA; NKO LAJANYALAN; C; No_Joining_Group */ - - /* Mandaic Characters */ - JOINING_TYPE_X, /* 07FB */ JOINING_TYPE_X, /* 07FC */ JOINING_TYPE_X, /* 07FD */ JOINING_TYPE_X, /* 07FE */ JOINING_TYPE_X, /* 07FF */ + + /* Samaritan */ + JOINING_TYPE_X, /* 0800 */ JOINING_TYPE_X, /* 0801 */ JOINING_TYPE_X, /* 0802 */ @@ -608,6 +613,9 @@ JOINING_TYPE_X, /* 083D */ JOINING_TYPE_X, /* 083E */ JOINING_TYPE_X, /* 083F */ + + /* Mandaic */ + JOINING_TYPE_R, /* 0840; MANDAIC HALQA; R; No_Joining_Group */ JOINING_TYPE_D, /* 0841; MANDAIC AB; D; No_Joining_Group */ JOINING_TYPE_D, /* 0842; MANDAIC AG; D; No_Joining_Group */ @@ -633,9 +641,6 @@ JOINING_TYPE_U, /* 0856; MANDAIC DUSHENNA; U; No_Joining_Group */ JOINING_TYPE_U, /* 0857; MANDAIC KAD; U; No_Joining_Group */ JOINING_TYPE_U, /* 0858; MANDAIC AIN; U; No_Joining_Group */ - - /* Arabic Extended-A Characters */ - JOINING_TYPE_X, /* 0859 */ JOINING_TYPE_X, /* 085A */ JOINING_TYPE_X, /* 085B */ @@ -707,6 +712,9 @@ JOINING_TYPE_X, /* 089D */ JOINING_TYPE_X, /* 089E */ JOINING_TYPE_X, /* 089F */ + + /* Arabic Extended-A */ + JOINING_TYPE_D, /* 08A0; DOTLESS BEH WITH V BELOW; D; BEH */ JOINING_TYPE_X, /* 08A1 */ JOINING_TYPE_D, /* 08A2; HAH WITH DOT BELOW AND 2 DOTS ABOVE; D; HAH */