[HarfBuzz] harfbuzz: Branch 'master' - 11 commits
Behdad Esfahbod
behdad at kemper.freedesktop.org
Fri Jun 20 15:00:11 PDT 2014
src/Makefile.am | 2
src/gen-arabic-table.py | 150 ++++--
src/gen-indic-table.py | 58 +-
src/hb-ot-shape-complex-arabic-table.hh | 793 +++-----------------------------
src/hb-ot-shape-complex-arabic.cc | 8
src/hb-ot-shape-complex-indic-table.cc | 317 ++++--------
6 files changed, 345 insertions(+), 983 deletions(-)
New commits:
commit b900fa2c8cc088dbcbdbf90bfdf8764f9ee1c96a
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Fri Jun 20 17:59:43 2014 -0400
[arabic-table] Use segmented table
No functional change.
diff --git a/src/gen-arabic-table.py b/src/gen-arabic-table.py
index 6f2c9d5..1596126 100755
--- a/src/gen-arabic-table.py
+++ b/src/gen-arabic-table.py
@@ -71,42 +71,76 @@ def print_joining_table(f):
for value,short in short_value.items():
print "#define %s %s" % (short, value)
- keys = values.keys()
- min_u = min(keys)
- max_u = max(keys)
+ uu = sorted(values.keys())
num = len(values)
+
+ last = -1
+ ranges = []
+ for u in uu:
+ if u - last <= 1+16*3:
+ ranges[-1][-1] = u
+ else:
+ ranges.append([u,u])
+ last = u
+
print
print "static const uint8_t joining_table[] ="
print "{"
last_block = None
- for u in range(min_u, max_u+1):
+ offset = 0
+ for start,end in ranges:
+
+ print
+ print "#define joining_offset_0x%04x %d" % (start, offset)
+
+ for u in range(start, end+1):
+
+ block = blocks.get(u, last_block)
+ value = values.get(u, "JOINING_TYPE_X")
- value = values.get(u, "JOINING_TYPE_X")
+ if block != last_block or u == start:
+ if u != start:
+ print
+ print "\n /* %s */" % block
+ last_block = block
+ if u % 32 != 0:
+ print
+ print " /* %04X */" % (u//32*32), " " * (u % 32),
- block = blocks.get(u, last_block)
- if block != last_block:
- print "\n\n /* %s */" % block
- last_block = block
- if u % 32 != 0:
+ if u % 32 == 0:
print
- print " /* %04X */" % u, " " * (u % 32),
+ print " /* %04X */ " % u,
+ sys.stdout.write("%s," % short_value[value])
+ print
- if u % 32 == 0:
- print
- print " /* %04X */ " % u,
- sys.stdout.write("%s," % short_value[value])
+ offset += end - start + 1
print
- print "};"
- print
- print "#define JOINING_TABLE_FIRST 0x%04X" % min_u
- print "#define JOINING_TABLE_LAST 0x%04X" % max_u
+ occupancy = num * 100. / offset
+ print "}; /* Table items: %d; occupancy: %d%% */" % (offset, occupancy)
print
- occupancy = num * 100 / (max_u - min_u + 1)
- # Maintain at least 40% occupancy in the table */
- if occupancy < 40:
- raise Exception ("Table too sparse, please investigate: ", occupancy)
-
+ page_bits = 8
+ print
+ print "static unsigned int"
+ print "joining_type (hb_codepoint_t u)"
+ print "{"
+ print " switch (u >> %d)" % page_bits
+ print " {"
+ pages = set([u>>page_bits for u in [s for s,e in ranges]+[e for s,e in ranges]])
+ for p in sorted(pages):
+ print " case 0x%0X:" % p
+ for (start,end) in ranges:
+ if p not in [start>>page_bits, end>>page_bits]: continue
+ offset = "joining_offset_0x%04x" % start
+ print " if (0x%04X <= u && u <= 0x%04X) return joining_table[u - 0x%04X + %s];" % (start, end, start, offset)
+ print " break;"
+ print ""
+ print " default:"
+ print " break;"
+ print " }"
+ print " return X;"
+ print "}"
+ print
for value,short in short_value.items():
print "#undef %s" % (short)
print
diff --git a/src/hb-ot-shape-complex-arabic-table.hh b/src/hb-ot-shape-complex-arabic-table.hh
index ad119da..877625a 100644
--- a/src/hb-ot-shape-complex-arabic-table.hh
+++ b/src/hb-ot-shape-complex-arabic-table.hh
@@ -28,6 +28,7 @@
static const uint8_t joining_table[] =
{
+#define joining_offset_0x0600 0
/* Arabic */
@@ -48,37 +49,55 @@ static const uint8_t joining_table[] =
/* Arabic Supplement */
- /* 0750 */ D,D,D,D,D,D,D,D,D,R,R,R,D,D,D,D,
+ /* 0740 */ D,D,D,D,D,D,D,D,D,R,R,R,D,D,D,D,
/* 0760 */ D,D,D,D,D,D,D,D,D,D,D,R,R,D,D,D,D,R,D,R,R,D,D,D,R,R,D,D,D,D,D,D,
- /* Thaana */
-
- /* 0780 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
- /* 07A0 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+#define joining_offset_0x07ca 384
/* NKo */
- /* 07C0 */ X,X,X,X,X,X,X,X,X,X,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
- /* 07E0 */ D,D,D,D,D,D,D,D,D,D,D,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,C,X,X,X,X,X,
-
- /* Samaritan */
+ /* 07C0 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
+ /* 07E0 */ D,D,D,D,D,D,D,D,D,D,D,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,C,
- /* 0800 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
- /* 0820 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+#define joining_offset_0x0840 433
/* Mandaic */
- /* 0840 */ R,D,D,D,D,D,R,D,D,R,D,D,D,D,D,R,D,D,D,D,R,D,U,U,U,X,X,X,X,X,X,X,
- /* 0860 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
- /* 0880 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+ /* 0840 */ R,D,D,D,D,D,R,D,D,R,D,D,D,D,D,R,D,D,D,D,R,D,U,U,U,
+
+#define joining_offset_0x08a0 458
/* Arabic Extended-A */
/* 08A0 */ D,X,D,D,D,D,D,D,D,D,R,R,R,
-};
-#define JOINING_TABLE_FIRST 0x0600
-#define JOINING_TABLE_LAST 0x08AC
+}; /* Table items: 471; occupancy: 66% */
+
+
+static unsigned int
+joining_type (hb_codepoint_t u)
+{
+ switch (u >> 8)
+ {
+ case 0x6:
+ if (0x0600 <= u && u <= 0x077F) return joining_table[u - 0x0600 + joining_offset_0x0600];
+ break;
+
+ case 0x7:
+ if (0x0600 <= u && u <= 0x077F) return joining_table[u - 0x0600 + joining_offset_0x0600];
+ if (0x07CA <= u && u <= 0x07FA) return joining_table[u - 0x07CA + joining_offset_0x07ca];
+ break;
+
+ case 0x8:
+ if (0x0840 <= u && u <= 0x0858) return joining_table[u - 0x0840 + joining_offset_0x0840];
+ if (0x08A0 <= u && u <= 0x08AC) return joining_table[u - 0x08A0 + joining_offset_0x08a0];
+ break;
+
+ default:
+ break;
+ }
+ return X;
+}
#undef X
#undef R
diff --git a/src/hb-ot-shape-complex-arabic.cc b/src/hb-ot-shape-complex-arabic.cc
index ea6d85c..61a55ef 100644
--- a/src/hb-ot-shape-complex-arabic.cc
+++ b/src/hb-ot-shape-complex-arabic.cc
@@ -57,11 +57,9 @@ enum {
static unsigned int get_joining_type (hb_codepoint_t u, hb_unicode_general_category_t gen_cat)
{
- if (likely (hb_in_range<hb_codepoint_t> (u, JOINING_TABLE_FIRST, JOINING_TABLE_LAST))) {
- unsigned int j_type = joining_table[u - JOINING_TABLE_FIRST];
- if (likely (j_type != JOINING_TYPE_X))
- return j_type;
- }
+ unsigned int j_type = joining_type(u);
+ if (likely (j_type != JOINING_TYPE_X))
+ return j_type;
/* Mongolian joining data is not in ArabicJoining.txt yet. */
if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x1800, 0x18AF)))
commit c2e113404640bf9b8bac469d0803ac946e77964f
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Fri Jun 20 17:57:03 2014 -0400
[indic-table] Make output stable
diff --git a/src/gen-indic-table.py b/src/gen-indic-table.py
index c1b0d6e..4630a10 100755
--- a/src/gen-indic-table.py
+++ b/src/gen-indic-table.py
@@ -195,7 +195,7 @@ print "{"
print " switch (u >> 12)"
print " {"
pages = set([u>>12 for u in starts+ends+singles.keys()])
-for p in pages:
+for p in sorted(pages):
print " case 0x%0X:" % p
for (start,end) in zip (starts, ends):
if p not in [start>>12, end>>12]: continue
commit 55abfbd2ac1626af16151298a0837b837d0796df
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Fri Jun 20 16:47:43 2014 -0400
[indic-table] Minor
No output change.
diff --git a/src/gen-indic-table.py b/src/gen-indic-table.py
index 10e4579..c1b0d6e 100755
--- a/src/gen-indic-table.py
+++ b/src/gen-indic-table.py
@@ -12,7 +12,6 @@ files = [file (x) for x in sys.argv[1:]]
headers = [[f.readline () for i in range (2)] for f in files]
-blocks = {}
data = [{} for f in files]
values = [{} for f in files]
for i, f in enumerate (files):
@@ -39,9 +38,6 @@ for i, f in enumerate (files):
data[i][u] = t
values[i][t] = values[i].get (t, 0) + 1
- if i == 2:
- blocks[t] = (start, end)
-
# Merge data into one dict:
defaults = ('Other', 'Not_Applicable', 'No_Block')
for i,v in enumerate (defaults):
@@ -164,11 +160,10 @@ for u in uu:
if u <= last:
continue
block = data[u][2]
- (bstart, bend) = blocks[block]
start = u//8*8
end = start+1
- while end < bend and end in uu:
+ while end in uu and block == data[end][2]:
end += 1
end = (end-1)//8*8 + 7
commit f88670749006991282bcc4e8b6218487295ca670
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Fri Jun 20 16:30:10 2014 -0400
[arabic-table] Don't write comments
No functional change.
diff --git a/src/gen-arabic-table.py b/src/gen-arabic-table.py
index 28f10f7..6f2c9d5 100755
--- a/src/gen-arabic-table.py
+++ b/src/gen-arabic-table.py
@@ -59,10 +59,10 @@ def print_joining_table(f):
value = "JOINING_GROUP_" + fields[3].replace(' ', '_')
else:
value = "JOINING_TYPE_" + fields[2]
- values[u] = (value, fields)
+ values[u] = value
short_value = {}
- for value in set([v[0] for v in values.values()] + ['JOINING_TYPE_X']):
+ for value in set([v for v in values.values()] + ['JOINING_TYPE_X']):
short = ''.join(x[0] for x in value.split('_')[2:])
assert short not in short_value.values()
short_value[value] = short
@@ -80,13 +80,21 @@ def print_joining_table(f):
print "{"
last_block = None
for u in range(min_u, max_u+1):
- value,fields = values.get(u, ("JOINING_TYPE_X", ["%04X"%u]))
+
+ value = values.get(u, "JOINING_TYPE_X")
+
block = blocks.get(u, last_block)
if block != last_block:
- print "\n /* %s */\n" % block
+ print "\n\n /* %s */" % block
last_block = block
-
- print " %s, /* %s */" % (short_value[value], '; '.join(fields))
+ if u % 32 != 0:
+ print
+ print " /* %04X */" % u, " " * (u % 32),
+
+ if u % 32 == 0:
+ print
+ print " /* %04X */ " % u,
+ sys.stdout.write("%s," % short_value[value])
print
print "};"
print
diff --git a/src/hb-ot-shape-complex-arabic-table.hh b/src/hb-ot-shape-complex-arabic-table.hh
index 579de89..ad119da 100644
--- a/src/hb-ot-shape-complex-arabic-table.hh
+++ b/src/hb-ot-shape-complex-arabic-table.hh
@@ -28,715 +28,53 @@
static const uint8_t joining_table[] =
{
+
/* Arabic */
- U, /* 0600; ARABIC NUMBER SIGN; U; No_Joining_Group */
- U, /* 0601; ARABIC SIGN SANAH; U; No_Joining_Group */
- U, /* 0602; ARABIC FOOTNOTE MARKER; U; No_Joining_Group */
- U, /* 0603; ARABIC SIGN SAFHA; U; No_Joining_Group */
- U, /* 0604; ARABIC SIGN SAMVAT; U; No_Joining_Group */
- X, /* 0605 */
- X, /* 0606 */
- X, /* 0607 */
- U, /* 0608; ARABIC RAY; U; No_Joining_Group */
- X, /* 0609 */
- X, /* 060A */
- U, /* 060B; AFGHANI SIGN; U; No_Joining_Group */
- X, /* 060C */
- X, /* 060D */
- X, /* 060E */
- X, /* 060F */
- X, /* 0610 */
- X, /* 0611 */
- X, /* 0612 */
- X, /* 0613 */
- X, /* 0614 */
- X, /* 0615 */
- X, /* 0616 */
- X, /* 0617 */
- X, /* 0618 */
- X, /* 0619 */
- X, /* 061A */
- X, /* 061B */
- X, /* 061C */
- X, /* 061D */
- X, /* 061E */
- X, /* 061F */
- D, /* 0620; DOTLESS YEH WITH SEPARATE RING BELOW; D; YEH */
- U, /* 0621; HAMZA; U; No_Joining_Group */
- R, /* 0622; ALEF WITH MADDA ABOVE; R; ALEF */
- R, /* 0623; ALEF WITH HAMZA ABOVE; R; ALEF */
- R, /* 0624; WAW WITH HAMZA ABOVE; R; WAW */
- R, /* 0625; ALEF WITH HAMZA BELOW; R; ALEF */
- D, /* 0626; DOTLESS YEH WITH HAMZA ABOVE; D; YEH */
- R, /* 0627; ALEF; R; ALEF */
- D, /* 0628; BEH; D; BEH */
- R, /* 0629; TEH MARBUTA; R; TEH MARBUTA */
- D, /* 062A; DOTLESS BEH WITH 2 DOTS ABOVE; D; BEH */
- D, /* 062B; DOTLESS BEH WITH 3 DOTS ABOVE; D; BEH */
- D, /* 062C; HAH WITH DOT BELOW; D; HAH */
- D, /* 062D; HAH; D; HAH */
- D, /* 062E; HAH WITH DOT ABOVE; D; HAH */
- R, /* 062F; DAL; R; DAL */
- R, /* 0630; DAL WITH DOT ABOVE; R; DAL */
- R, /* 0631; REH; R; REH */
- R, /* 0632; REH WITH DOT ABOVE; R; REH */
- D, /* 0633; SEEN; D; SEEN */
- D, /* 0634; SEEN WITH 3 DOTS ABOVE; D; SEEN */
- D, /* 0635; SAD; D; SAD */
- D, /* 0636; SAD WITH DOT ABOVE; D; SAD */
- D, /* 0637; TAH; D; TAH */
- D, /* 0638; TAH WITH DOT ABOVE; D; TAH */
- D, /* 0639; AIN; D; AIN */
- D, /* 063A; AIN WITH DOT ABOVE; D; AIN */
- D, /* 063B; KEHEH WITH 2 DOTS ABOVE; D; GAF */
- D, /* 063C; KEHEH WITH 3 DOTS BELOW; D; GAF */
- D, /* 063D; FARSI YEH WITH INVERTED V ABOVE; D; FARSI YEH */
- D, /* 063E; FARSI YEH WITH 2 DOTS ABOVE; D; FARSI YEH */
- D, /* 063F; FARSI YEH WITH 3 DOTS ABOVE; D; FARSI YEH */
- C, /* 0640; TATWEEL; C; No_Joining_Group */
- D, /* 0641; FEH; D; FEH */
- D, /* 0642; QAF; D; QAF */
- D, /* 0643; KAF; D; KAF */
- D, /* 0644; LAM; D; LAM */
- D, /* 0645; MEEM; D; MEEM */
- D, /* 0646; NOON; D; NOON */
- D, /* 0647; HEH; D; HEH */
- R, /* 0648; WAW; R; WAW */
- D, /* 0649; DOTLESS YEH; D; YEH */
- D, /* 064A; YEH; D; YEH */
- X, /* 064B */
- X, /* 064C */
- X, /* 064D */
- X, /* 064E */
- X, /* 064F */
- X, /* 0650 */
- X, /* 0651 */
- X, /* 0652 */
- X, /* 0653 */
- X, /* 0654 */
- X, /* 0655 */
- X, /* 0656 */
- X, /* 0657 */
- X, /* 0658 */
- X, /* 0659 */
- X, /* 065A */
- X, /* 065B */
- X, /* 065C */
- X, /* 065D */
- X, /* 065E */
- X, /* 065F */
- X, /* 0660 */
- X, /* 0661 */
- X, /* 0662 */
- X, /* 0663 */
- X, /* 0664 */
- X, /* 0665 */
- X, /* 0666 */
- X, /* 0667 */
- X, /* 0668 */
- X, /* 0669 */
- X, /* 066A */
- X, /* 066B */
- X, /* 066C */
- X, /* 066D */
- D, /* 066E; DOTLESS BEH; D; BEH */
- D, /* 066F; DOTLESS QAF; D; QAF */
- X, /* 0670 */
- R, /* 0671; ALEF WITH WASLA ABOVE; R; ALEF */
- R, /* 0672; ALEF WITH WAVY HAMZA ABOVE; R; ALEF */
- R, /* 0673; ALEF WITH WAVY HAMZA BELOW; R; ALEF */
- U, /* 0674; HIGH HAMZA; U; No_Joining_Group */
- R, /* 0675; HIGH HAMZA ALEF; R; ALEF */
- R, /* 0676; HIGH HAMZA WAW; R; WAW */
- R, /* 0677; HIGH HAMZA WAW WITH DAMMA ABOVE; R; WAW */
- D, /* 0678; HIGH HAMZA DOTLESS YEH; D; YEH */
- D, /* 0679; DOTLESS BEH WITH TAH ABOVE; D; BEH */
- D, /* 067A; DOTLESS BEH WITH VERTICAL 2 DOTS ABOVE; D; BEH */
- D, /* 067B; DOTLESS BEH WITH VERTICAL 2 DOTS BELOW; D; BEH */
- D, /* 067C; DOTLESS BEH WITH ATTACHED RING BELOW AND 2 DOTS ABOVE; D; BEH */
- D, /* 067D; DOTLESS BEH WITH INVERTED 3 DOTS ABOVE; D; BEH */
- D, /* 067E; DOTLESS BEH WITH 3 DOTS BELOW; D; BEH */
- D, /* 067F; DOTLESS BEH WITH 4 DOTS ABOVE; D; BEH */
- D, /* 0680; DOTLESS BEH WITH 4 DOTS BELOW; D; BEH */
- D, /* 0681; HAH WITH HAMZA ABOVE; D; HAH */
- D, /* 0682; HAH WITH VERTICAL 2 DOTS ABOVE; D; HAH */
- D, /* 0683; HAH WITH 2 DOTS BELOW; D; HAH */
- D, /* 0684; HAH WITH VERTICAL 2 DOTS BELOW; D; HAH */
- D, /* 0685; HAH WITH 3 DOTS ABOVE; D; HAH */
- D, /* 0686; HAH WITH 3 DOTS BELOW; D; HAH */
- D, /* 0687; HAH WITH 4 DOTS BELOW; D; HAH */
- R, /* 0688; DAL WITH TAH ABOVE; R; DAL */
- R, /* 0689; DAL WITH ATTACHED RING BELOW; R; DAL */
- R, /* 068A; DAL WITH DOT BELOW; R; DAL */
- R, /* 068B; DAL WITH DOT BELOW AND TAH ABOVE; R; DAL */
- R, /* 068C; DAL WITH 2 DOTS ABOVE; R; DAL */
- R, /* 068D; DAL WITH 2 DOTS BELOW; R; DAL */
- R, /* 068E; DAL WITH 3 DOTS ABOVE; R; DAL */
- R, /* 068F; DAL WITH INVERTED 3 DOTS ABOVE; R; DAL */
- R, /* 0690; DAL WITH 4 DOTS ABOVE; R; DAL */
- R, /* 0691; REH WITH TAH ABOVE; R; REH */
- R, /* 0692; REH WITH V ABOVE; R; REH */
- R, /* 0693; REH WITH ATTACHED RING BELOW; R; REH */
- R, /* 0694; REH WITH DOT BELOW; R; REH */
- R, /* 0695; REH WITH V BELOW; R; REH */
- R, /* 0696; REH WITH DOT BELOW AND DOT WITHIN; R; REH */
- R, /* 0697; REH WITH 2 DOTS ABOVE; R; REH */
- R, /* 0698; REH WITH 3 DOTS ABOVE; R; REH */
- R, /* 0699; REH WITH 4 DOTS ABOVE; R; REH */
- D, /* 069A; SEEN WITH DOT BELOW AND DOT ABOVE; D; SEEN */
- D, /* 069B; SEEN WITH 3 DOTS BELOW; D; SEEN */
- D, /* 069C; SEEN WITH 3 DOTS BELOW AND 3 DOTS ABOVE; D; SEEN */
- D, /* 069D; SAD WITH 2 DOTS BELOW; D; SAD */
- D, /* 069E; SAD WITH 3 DOTS ABOVE; D; SAD */
- D, /* 069F; TAH WITH 3 DOTS ABOVE; D; TAH */
- D, /* 06A0; AIN WITH 3 DOTS ABOVE; D; AIN */
- D, /* 06A1; DOTLESS FEH; D; FEH */
- D, /* 06A2; DOTLESS FEH WITH DOT BELOW; D; FEH */
- D, /* 06A3; FEH WITH DOT BELOW; D; FEH */
- D, /* 06A4; DOTLESS FEH WITH 3 DOTS ABOVE; D; FEH */
- D, /* 06A5; DOTLESS FEH WITH 3 DOTS BELOW; D; FEH */
- D, /* 06A6; DOTLESS FEH WITH 4 DOTS ABOVE; D; FEH */
- D, /* 06A7; DOTLESS QAF WITH DOT ABOVE; D; QAF */
- D, /* 06A8; DOTLESS QAF WITH 3 DOTS ABOVE; D; QAF */
- D, /* 06A9; KEHEH; D; GAF */
- D, /* 06AA; SWASH KAF; D; SWASH KAF */
- D, /* 06AB; KEHEH WITH ATTACHED RING BELOW; D; GAF */
- D, /* 06AC; KAF WITH DOT ABOVE; D; KAF */
- D, /* 06AD; KAF WITH 3 DOTS ABOVE; D; KAF */
- D, /* 06AE; KAF WITH 3 DOTS BELOW; D; KAF */
- D, /* 06AF; GAF; D; GAF */
- D, /* 06B0; GAF WITH ATTACHED RING BELOW; D; GAF */
- D, /* 06B1; GAF WITH 2 DOTS ABOVE; D; GAF */
- D, /* 06B2; GAF WITH 2 DOTS BELOW; D; GAF */
- D, /* 06B3; GAF WITH VERTICAL 2 DOTS BELOW; D; GAF */
- D, /* 06B4; GAF WITH 3 DOTS ABOVE; D; GAF */
- D, /* 06B5; LAM WITH V ABOVE; D; LAM */
- D, /* 06B6; LAM WITH DOT ABOVE; D; LAM */
- D, /* 06B7; LAM WITH 3 DOTS ABOVE; D; LAM */
- D, /* 06B8; LAM WITH 3 DOTS BELOW; D; LAM */
- D, /* 06B9; NOON WITH DOT BELOW; D; NOON */
- D, /* 06BA; DOTLESS NOON; D; NOON */
- D, /* 06BB; DOTLESS NOON WITH TAH ABOVE; D; NOON */
- D, /* 06BC; NOON WITH ATTACHED RING BELOW; D; NOON */
- D, /* 06BD; NYA; D; NYA */
- D, /* 06BE; KNOTTED HEH; D; KNOTTED HEH */
- D, /* 06BF; HAH WITH 3 DOTS BELOW AND DOT ABOVE; D; HAH */
- R, /* 06C0; DOTLESS TEH MARBUTA WITH HAMZA ABOVE; R; TEH MARBUTA */
- D, /* 06C1; HEH GOAL; D; HEH GOAL */
- D, /* 06C2; HEH GOAL WITH HAMZA ABOVE; D; HEH GOAL */
- R, /* 06C3; TEH MARBUTA GOAL; R; TEH MARBUTA GOAL */
- R, /* 06C4; WAW WITH ATTACHED RING WITHIN; R; WAW */
- R, /* 06C5; WAW WITH BAR; R; WAW */
- R, /* 06C6; WAW WITH V ABOVE; R; WAW */
- R, /* 06C7; WAW WITH DAMMA ABOVE; R; WAW */
- R, /* 06C8; WAW WITH ALEF ABOVE; R; WAW */
- R, /* 06C9; WAW WITH INVERTED V ABOVE; R; WAW */
- R, /* 06CA; WAW WITH 2 DOTS ABOVE; R; WAW */
- R, /* 06CB; WAW WITH 3 DOTS ABOVE; R; WAW */
- D, /* 06CC; FARSI YEH; D; FARSI YEH */
- R, /* 06CD; YEH WITH TAIL; R; YEH WITH TAIL */
- D, /* 06CE; FARSI YEH WITH V ABOVE; D; FARSI YEH */
- R, /* 06CF; WAW WITH DOT ABOVE; R; WAW */
- D, /* 06D0; DOTLESS YEH WITH VERTICAL 2 DOTS BELOW; D; YEH */
- D, /* 06D1; DOTLESS YEH WITH 3 DOTS BELOW; D; YEH */
- R, /* 06D2; YEH BARREE; R; YEH BARREE */
- R, /* 06D3; YEH BARREE WITH HAMZA ABOVE; R; YEH BARREE */
- X, /* 06D4 */
- R, /* 06D5; DOTLESS TEH MARBUTA; R; TEH MARBUTA */
- X, /* 06D6 */
- X, /* 06D7 */
- X, /* 06D8 */
- X, /* 06D9 */
- X, /* 06DA */
- X, /* 06DB */
- X, /* 06DC */
- U, /* 06DD; ARABIC END OF AYAH; U; No_Joining_Group */
- X, /* 06DE */
- X, /* 06DF */
- X, /* 06E0 */
- X, /* 06E1 */
- X, /* 06E2 */
- X, /* 06E3 */
- X, /* 06E4 */
- X, /* 06E5 */
- X, /* 06E6 */
- X, /* 06E7 */
- X, /* 06E8 */
- X, /* 06E9 */
- X, /* 06EA */
- X, /* 06EB */
- X, /* 06EC */
- X, /* 06ED */
- R, /* 06EE; DAL WITH INVERTED V ABOVE; R; DAL */
- R, /* 06EF; REH WITH INVERTED V ABOVE; R; REH */
- X, /* 06F0 */
- X, /* 06F1 */
- X, /* 06F2 */
- X, /* 06F3 */
- X, /* 06F4 */
- X, /* 06F5 */
- X, /* 06F6 */
- X, /* 06F7 */
- X, /* 06F8 */
- X, /* 06F9 */
- D, /* 06FA; SEEN WITH DOT BELOW AND 3 DOTS ABOVE; D; SEEN */
- D, /* 06FB; SAD WITH DOT BELOW AND DOT ABOVE; D; SAD */
- D, /* 06FC; AIN WITH DOT BELOW AND DOT ABOVE; D; AIN */
- X, /* 06FD */
- X, /* 06FE */
- D, /* 06FF; KNOTTED HEH WITH INVERTED V ABOVE; D; KNOTTED HEH */
+ /* 0600 */ U,U,U,U,U,X,X,X,U,X,X,U,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+ /* 0620 */ D,U,R,R,R,R,D,R,D,R,D,D,D,D,D,R,R,R,R,D,D,D,D,D,D,D,D,D,D,D,D,D,
+ /* 0640 */ C,D,D,D,D,D,D,D,R,D,D,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+ /* 0660 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,D,D,X,R,R,R,U,R,R,R,D,D,D,D,D,D,D,D,
+ /* 0680 */ D,D,D,D,D,D,D,D,R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,D,D,D,D,D,D,
+ /* 06A0 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
+ /* 06C0 */ R,D,D,R,R,R,R,R,R,R,R,R,D,R,D,R,D,D,R,R,X,R,X,X,X,X,X,X,X,U,X,X,
+ /* 06E0 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,R,R,X,X,X,X,X,X,X,X,X,X,D,D,D,X,X,D,
/* Syriac */
- X, /* 0700 */
- X, /* 0701 */
- X, /* 0702 */
- X, /* 0703 */
- X, /* 0704 */
- X, /* 0705 */
- X, /* 0706 */
- X, /* 0707 */
- X, /* 0708 */
- X, /* 0709 */
- X, /* 070A */
- X, /* 070B */
- X, /* 070C */
- X, /* 070D */
- X, /* 070E */
- X, /* 070F */
- A, /* 0710; ALAPH; R; ALAPH */
- X, /* 0711 */
- D, /* 0712; BETH; D; BETH */
- D, /* 0713; GAMAL; D; GAMAL */
- D, /* 0714; GAMAL GARSHUNI; D; GAMAL */
- DR, /* 0715; DALATH; R; DALATH RISH */
- DR, /* 0716; DOTLESS DALATH RISH; R; DALATH RISH */
- R, /* 0717; HE; R; HE */
- R, /* 0718; WAW; R; SYRIAC WAW */
- R, /* 0719; ZAIN; R; ZAIN */
- D, /* 071A; HETH; D; HETH */
- D, /* 071B; TETH; D; TETH */
- D, /* 071C; TETH GARSHUNI; D; TETH */
- D, /* 071D; YUDH; D; YUDH */
- R, /* 071E; YUDH HE; R; YUDH HE */
- D, /* 071F; KAPH; D; KAPH */
- D, /* 0720; LAMADH; D; LAMADH */
- D, /* 0721; MIM; D; MIM */
- D, /* 0722; NUN; D; NUN */
- D, /* 0723; SEMKATH; D; SEMKATH */
- D, /* 0724; FINAL SEMKATH; D; FINAL SEMKATH */
- D, /* 0725; E; D; E */
- D, /* 0726; PE; D; PE */
- D, /* 0727; REVERSED PE; D; REVERSED PE */
- R, /* 0728; SADHE; R; SADHE */
- D, /* 0729; QAPH; D; QAPH */
- DR, /* 072A; RISH; R; DALATH RISH */
- D, /* 072B; SHIN; D; SHIN */
- R, /* 072C; TAW; R; TAW */
- D, /* 072D; PERSIAN BHETH; D; BETH */
- D, /* 072E; PERSIAN GHAMAL; D; GAMAL */
- DR, /* 072F; PERSIAN DHALATH; R; DALATH RISH */
- X, /* 0730 */
- X, /* 0731 */
- X, /* 0732 */
- X, /* 0733 */
- X, /* 0734 */
- X, /* 0735 */
- X, /* 0736 */
- X, /* 0737 */
- X, /* 0738 */
- X, /* 0739 */
- X, /* 073A */
- X, /* 073B */
- X, /* 073C */
- X, /* 073D */
- X, /* 073E */
- X, /* 073F */
- X, /* 0740 */
- X, /* 0741 */
- X, /* 0742 */
- X, /* 0743 */
- X, /* 0744 */
- X, /* 0745 */
- X, /* 0746 */
- X, /* 0747 */
- X, /* 0748 */
- X, /* 0749 */
- X, /* 074A */
- X, /* 074B */
- X, /* 074C */
- R, /* 074D; SOGDIAN ZHAIN; R; ZHAIN */
- D, /* 074E; SOGDIAN KHAPH; D; KHAPH */
- D, /* 074F; SOGDIAN FE; D; FE */
+ /* 0700 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,A,X,D,D,D,DR,DR,R,R,R,D,D,D,D,R,D,
+ /* 0720 */ D,D,D,D,D,D,D,D,R,D,DR,D,R,D,D,DR,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+ /* 0740 */ X,X,X,X,X,X,X,X,X,X,X,X,X,R,D,D,
/* Arabic Supplement */
- D, /* 0750; DOTLESS BEH WITH HORIZONTAL 3 DOTS BELOW; D; BEH */
- D, /* 0751; BEH WITH 3 DOTS ABOVE; D; BEH */
- D, /* 0752; DOTLESS BEH WITH INVERTED 3 DOTS BELOW; D; BEH */
- D, /* 0753; DOTLESS BEH WITH INVERTED 3 DOTS BELOW AND 2 DOTS ABOVE; D; BEH */
- D, /* 0754; DOTLESS BEH WITH 2 DOTS BELOW AND DOT ABOVE; D; BEH */
- D, /* 0755; DOTLESS BEH WITH INVERTED V BELOW; D; BEH */
- D, /* 0756; DOTLESS BEH WITH V ABOVE; D; BEH */
- D, /* 0757; HAH WITH 2 DOTS ABOVE; D; HAH */
- D, /* 0758; HAH WITH INVERTED 3 DOTS BELOW; D; HAH */
- R, /* 0759; DAL WITH VERTICAL 2 DOTS BELOW AND TAH ABOVE; R; DAL */
- R, /* 075A; DAL WITH INVERTED V BELOW; R; DAL */
- R, /* 075B; REH WITH BAR; R; REH */
- D, /* 075C; SEEN WITH 4 DOTS ABOVE; D; SEEN */
- D, /* 075D; AIN WITH 2 DOTS ABOVE; D; AIN */
- D, /* 075E; AIN WITH INVERTED 3 DOTS ABOVE; D; AIN */
- D, /* 075F; AIN WITH VERTICAL 2 DOTS ABOVE; D; AIN */
- D, /* 0760; DOTLESS FEH WITH 2 DOTS BELOW; D; FEH */
- D, /* 0761; DOTLESS FEH WITH INVERTED 3 DOTS BELOW; D; FEH */
- D, /* 0762; KEHEH WITH DOT ABOVE; D; GAF */
- D, /* 0763; KEHEH WITH 3 DOTS ABOVE; D; GAF */
- D, /* 0764; KEHEH WITH INVERTED 3 DOTS BELOW; D; GAF */
- D, /* 0765; MEEM WITH DOT ABOVE; D; MEEM */
- D, /* 0766; MEEM WITH DOT BELOW; D; MEEM */
- D, /* 0767; NOON WITH 2 DOTS BELOW; D; NOON */
- D, /* 0768; NOON WITH TAH ABOVE; D; NOON */
- D, /* 0769; NOON WITH V ABOVE; D; NOON */
- D, /* 076A; LAM WITH BAR; D; LAM */
- R, /* 076B; REH WITH VERTICAL 2 DOTS ABOVE; R; REH */
- R, /* 076C; REH WITH HAMZA ABOVE; R; REH */
- D, /* 076D; SEEN WITH VERTICAL 2 DOTS ABOVE; D; SEEN */
- D, /* 076E; HAH WITH TAH BELOW; D; HAH */
- D, /* 076F; HAH WITH TAH AND 2 DOTS BELOW; D; HAH */
- D, /* 0770; SEEN WITH 2 DOTS AND TAH ABOVE; D; SEEN */
- R, /* 0771; REH WITH 2 DOTS AND TAH ABOVE; R; REH */
- D, /* 0772; HAH WITH TAH ABOVE; D; HAH */
- R, /* 0773; ALEF WITH DIGIT TWO ABOVE; R; ALEF */
- R, /* 0774; ALEF WITH DIGIT THREE ABOVE; R; ALEF */
- D, /* 0775; FARSI YEH WITH DIGIT TWO ABOVE; D; FARSI YEH */
- D, /* 0776; FARSI YEH WITH DIGIT THREE ABOVE; D; FARSI YEH */
- D, /* 0777; DOTLESS YEH WITH DIGIT FOUR BELOW; D; YEH */
- R, /* 0778; WAW WITH DIGIT TWO ABOVE; R; WAW */
- R, /* 0779; WAW WITH DIGIT THREE ABOVE; R; WAW */
- D, /* 077A; BURUSHASKI YEH BARREE WITH DIGIT TWO ABOVE; D; BURUSHASKI YEH BARREE */
- D, /* 077B; BURUSHASKI YEH BARREE WITH DIGIT THREE ABOVE; D; BURUSHASKI YEH BARREE */
- D, /* 077C; HAH WITH DIGIT FOUR BELOW; D; HAH */
- D, /* 077D; SEEN WITH DIGIT FOUR ABOVE; D; SEEN */
- D, /* 077E; SEEN WITH INVERTED V ABOVE; D; SEEN */
- D, /* 077F; KAF WITH 2 DOTS ABOVE; D; KAF */
+ /* 0750 */ D,D,D,D,D,D,D,D,D,R,R,R,D,D,D,D,
+ /* 0760 */ D,D,D,D,D,D,D,D,D,D,D,R,R,D,D,D,D,R,D,R,R,D,D,D,R,R,D,D,D,D,D,D,
/* Thaana */
- X, /* 0780 */
- X, /* 0781 */
- X, /* 0782 */
- X, /* 0783 */
- X, /* 0784 */
- X, /* 0785 */
- X, /* 0786 */
- X, /* 0787 */
- X, /* 0788 */
- X, /* 0789 */
- X, /* 078A */
- X, /* 078B */
- X, /* 078C */
- X, /* 078D */
- X, /* 078E */
- X, /* 078F */
- X, /* 0790 */
- X, /* 0791 */
- X, /* 0792 */
- X, /* 0793 */
- X, /* 0794 */
- X, /* 0795 */
- X, /* 0796 */
- X, /* 0797 */
- X, /* 0798 */
- X, /* 0799 */
- X, /* 079A */
- X, /* 079B */
- X, /* 079C */
- X, /* 079D */
- X, /* 079E */
- X, /* 079F */
- X, /* 07A0 */
- X, /* 07A1 */
- X, /* 07A2 */
- X, /* 07A3 */
- X, /* 07A4 */
- X, /* 07A5 */
- X, /* 07A6 */
- X, /* 07A7 */
- X, /* 07A8 */
- X, /* 07A9 */
- X, /* 07AA */
- X, /* 07AB */
- X, /* 07AC */
- X, /* 07AD */
- X, /* 07AE */
- X, /* 07AF */
- X, /* 07B0 */
- X, /* 07B1 */
- X, /* 07B2 */
- X, /* 07B3 */
- X, /* 07B4 */
- X, /* 07B5 */
- X, /* 07B6 */
- X, /* 07B7 */
- X, /* 07B8 */
- X, /* 07B9 */
- X, /* 07BA */
- X, /* 07BB */
- X, /* 07BC */
- X, /* 07BD */
- X, /* 07BE */
- X, /* 07BF */
+ /* 0780 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+ /* 07A0 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
/* NKo */
- X, /* 07C0 */
- X, /* 07C1 */
- X, /* 07C2 */
- X, /* 07C3 */
- X, /* 07C4 */
- X, /* 07C5 */
- X, /* 07C6 */
- X, /* 07C7 */
- X, /* 07C8 */
- X, /* 07C9 */
- D, /* 07CA; NKO A; D; No_Joining_Group */
- D, /* 07CB; NKO EE; D; No_Joining_Group */
- D, /* 07CC; NKO I; D; No_Joining_Group */
- D, /* 07CD; NKO E; D; No_Joining_Group */
- D, /* 07CE; NKO U; D; No_Joining_Group */
- D, /* 07CF; NKO OO; D; No_Joining_Group */
- D, /* 07D0; NKO O; D; No_Joining_Group */
- D, /* 07D1; NKO DAGBASINNA; D; No_Joining_Group */
- D, /* 07D2; NKO N; D; No_Joining_Group */
- D, /* 07D3; NKO BA; D; No_Joining_Group */
- D, /* 07D4; NKO PA; D; No_Joining_Group */
- D, /* 07D5; NKO TA; D; No_Joining_Group */
- D, /* 07D6; NKO JA; D; No_Joining_Group */
- D, /* 07D7; NKO CHA; D; No_Joining_Group */
- D, /* 07D8; NKO DA; D; No_Joining_Group */
- D, /* 07D9; NKO RA; D; No_Joining_Group */
- D, /* 07DA; NKO RRA; D; No_Joining_Group */
- D, /* 07DB; NKO SA; D; No_Joining_Group */
- D, /* 07DC; NKO GBA; D; No_Joining_Group */
- D, /* 07DD; NKO FA; D; No_Joining_Group */
- D, /* 07DE; NKO KA; D; No_Joining_Group */
- D, /* 07DF; NKO LA; D; No_Joining_Group */
- D, /* 07E0; NKO NA WOLOSO; D; No_Joining_Group */
- D, /* 07E1; NKO MA; D; No_Joining_Group */
- D, /* 07E2; NKO NYA; D; No_Joining_Group */
- D, /* 07E3; NKO NA; D; No_Joining_Group */
- D, /* 07E4; NKO HA; D; No_Joining_Group */
- D, /* 07E5; NKO WA; D; No_Joining_Group */
- D, /* 07E6; NKO YA; D; No_Joining_Group */
- D, /* 07E7; NKO NYA WOLOSO; D; No_Joining_Group */
- D, /* 07E8; NKO JONA JA; D; No_Joining_Group */
- D, /* 07E9; NKO JONA CHA; D; No_Joining_Group */
- D, /* 07EA; NKO JONA RA; D; No_Joining_Group */
- X, /* 07EB */
- X, /* 07EC */
- X, /* 07ED */
- X, /* 07EE */
- X, /* 07EF */
- X, /* 07F0 */
- X, /* 07F1 */
- X, /* 07F2 */
- X, /* 07F3 */
- X, /* 07F4 */
- X, /* 07F5 */
- X, /* 07F6 */
- X, /* 07F7 */
- X, /* 07F8 */
- X, /* 07F9 */
- C, /* 07FA; NKO LAJANYALAN; C; No_Joining_Group */
- X, /* 07FB */
- X, /* 07FC */
- X, /* 07FD */
- X, /* 07FE */
- X, /* 07FF */
+ /* 07C0 */ X,X,X,X,X,X,X,X,X,X,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
+ /* 07E0 */ D,D,D,D,D,D,D,D,D,D,D,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,C,X,X,X,X,X,
/* Samaritan */
- X, /* 0800 */
- X, /* 0801 */
- X, /* 0802 */
- X, /* 0803 */
- X, /* 0804 */
- X, /* 0805 */
- X, /* 0806 */
- X, /* 0807 */
- X, /* 0808 */
- X, /* 0809 */
- X, /* 080A */
- X, /* 080B */
- X, /* 080C */
- X, /* 080D */
- X, /* 080E */
- X, /* 080F */
- X, /* 0810 */
- X, /* 0811 */
- X, /* 0812 */
- X, /* 0813 */
- X, /* 0814 */
- X, /* 0815 */
- X, /* 0816 */
- X, /* 0817 */
- X, /* 0818 */
- X, /* 0819 */
- X, /* 081A */
- X, /* 081B */
- X, /* 081C */
- X, /* 081D */
- X, /* 081E */
- X, /* 081F */
- X, /* 0820 */
- X, /* 0821 */
- X, /* 0822 */
- X, /* 0823 */
- X, /* 0824 */
- X, /* 0825 */
- X, /* 0826 */
- X, /* 0827 */
- X, /* 0828 */
- X, /* 0829 */
- X, /* 082A */
- X, /* 082B */
- X, /* 082C */
- X, /* 082D */
- X, /* 082E */
- X, /* 082F */
- X, /* 0830 */
- X, /* 0831 */
- X, /* 0832 */
- X, /* 0833 */
- X, /* 0834 */
- X, /* 0835 */
- X, /* 0836 */
- X, /* 0837 */
- X, /* 0838 */
- X, /* 0839 */
- X, /* 083A */
- X, /* 083B */
- X, /* 083C */
- X, /* 083D */
- X, /* 083E */
- X, /* 083F */
+ /* 0800 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+ /* 0820 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
/* Mandaic */
- R, /* 0840; MANDAIC HALQA; R; No_Joining_Group */
- D, /* 0841; MANDAIC AB; D; No_Joining_Group */
- D, /* 0842; MANDAIC AG; D; No_Joining_Group */
- D, /* 0843; MANDAIC AD; D; No_Joining_Group */
- D, /* 0844; MANDAIC AH; D; No_Joining_Group */
- D, /* 0845; MANDAIC USHENNA; D; No_Joining_Group */
- R, /* 0846; MANDAIC AZ; R; No_Joining_Group */
- D, /* 0847; MANDAIC IT; D; No_Joining_Group */
- D, /* 0848; MANDAIC ATT; D; No_Joining_Group */
- R, /* 0849; MANDAIC AKSA; R; No_Joining_Group */
- D, /* 084A; MANDAIC AK; D; No_Joining_Group */
- D, /* 084B; MANDAIC AL; D; No_Joining_Group */
- D, /* 084C; MANDAIC AM; D; No_Joining_Group */
- D, /* 084D; MANDAIC AN; D; No_Joining_Group */
- D, /* 084E; MANDAIC AS; D; No_Joining_Group */
- R, /* 084F; MANDAIC IN; R; No_Joining_Group */
- D, /* 0850; MANDAIC AP; D; No_Joining_Group */
- D, /* 0851; MANDAIC ASZ; D; No_Joining_Group */
- D, /* 0852; MANDAIC AQ; D; No_Joining_Group */
- D, /* 0853; MANDAIC AR; D; No_Joining_Group */
- R, /* 0854; MANDAIC ASH; R; No_Joining_Group */
- D, /* 0855; MANDAIC AT; D; No_Joining_Group */
- U, /* 0856; MANDAIC DUSHENNA; U; No_Joining_Group */
- U, /* 0857; MANDAIC KAD; U; No_Joining_Group */
- U, /* 0858; MANDAIC AIN; U; No_Joining_Group */
- X, /* 0859 */
- X, /* 085A */
- X, /* 085B */
- X, /* 085C */
- X, /* 085D */
- X, /* 085E */
- X, /* 085F */
- X, /* 0860 */
- X, /* 0861 */
- X, /* 0862 */
- X, /* 0863 */
- X, /* 0864 */
- X, /* 0865 */
- X, /* 0866 */
- X, /* 0867 */
- X, /* 0868 */
- X, /* 0869 */
- X, /* 086A */
- X, /* 086B */
- X, /* 086C */
- X, /* 086D */
- X, /* 086E */
- X, /* 086F */
- X, /* 0870 */
- X, /* 0871 */
- X, /* 0872 */
- X, /* 0873 */
- X, /* 0874 */
- X, /* 0875 */
- X, /* 0876 */
- X, /* 0877 */
- X, /* 0878 */
- X, /* 0879 */
- X, /* 087A */
- X, /* 087B */
- X, /* 087C */
- X, /* 087D */
- X, /* 087E */
- X, /* 087F */
- X, /* 0880 */
- X, /* 0881 */
- X, /* 0882 */
- X, /* 0883 */
- X, /* 0884 */
- X, /* 0885 */
- X, /* 0886 */
- X, /* 0887 */
- X, /* 0888 */
- X, /* 0889 */
- X, /* 088A */
- X, /* 088B */
- X, /* 088C */
- X, /* 088D */
- X, /* 088E */
- X, /* 088F */
- X, /* 0890 */
- X, /* 0891 */
- X, /* 0892 */
- X, /* 0893 */
- X, /* 0894 */
- X, /* 0895 */
- X, /* 0896 */
- X, /* 0897 */
- X, /* 0898 */
- X, /* 0899 */
- X, /* 089A */
- X, /* 089B */
- X, /* 089C */
- X, /* 089D */
- X, /* 089E */
- X, /* 089F */
+ /* 0840 */ R,D,D,D,D,D,R,D,D,R,D,D,D,D,D,R,D,D,D,D,R,D,U,U,U,X,X,X,X,X,X,X,
+ /* 0860 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+ /* 0880 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
/* Arabic Extended-A */
- D, /* 08A0; DOTLESS BEH WITH V BELOW; D; BEH */
- X, /* 08A1 */
- D, /* 08A2; HAH WITH DOT BELOW AND 2 DOTS ABOVE; D; HAH */
- D, /* 08A3; TAH WITH 2 DOTS ABOVE; D; TAH */
- D, /* 08A4; DOTLESS FEH WITH DOT BELOW AND 3 DOTS ABOVE; D; FEH */
- D, /* 08A5; QAF WITH DOT BELOW; D; QAF */
- D, /* 08A6; LAM WITH DOUBLE BAR; D; LAM */
- D, /* 08A7; MEEM WITH 3 DOTS ABOVE; D; MEEM */
- D, /* 08A8; YEH WITH HAMZA ABOVE; D; YEH */
- D, /* 08A9; YEH WITH DOT ABOVE; D; YEH */
- R, /* 08AA; REH WITH LOOP; R; REH */
- R, /* 08AB; WAW WITH DOT WITHIN; R; WAW */
- R, /* 08AC; ROHINGYA YEH; R; ROHINGYA YEH */
-
+ /* 08A0 */ D,X,D,D,D,D,D,D,D,D,R,R,R,
};
#define JOINING_TABLE_FIRST 0x0600
commit 200dfe3eb10feda2ad25940338b08011f4757ca4
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Fri Jun 20 16:20:59 2014 -0400
[arabic-table] Use short names for values
No functional change.
diff --git a/src/gen-arabic-table.py b/src/gen-arabic-table.py
index 534f560..28f10f7 100755
--- a/src/gen-arabic-table.py
+++ b/src/gen-arabic-table.py
@@ -61,6 +61,16 @@ def print_joining_table(f):
value = "JOINING_TYPE_" + fields[2]
values[u] = (value, fields)
+ short_value = {}
+ for value in set([v[0] for v in values.values()] + ['JOINING_TYPE_X']):
+ short = ''.join(x[0] for x in value.split('_')[2:])
+ assert short not in short_value.values()
+ short_value[value] = short
+
+ print
+ for value,short in short_value.items():
+ print "#define %s %s" % (short, value)
+
keys = values.keys()
min_u = min(keys)
max_u = max(keys)
@@ -76,7 +86,7 @@ def print_joining_table(f):
print "\n /* %s */\n" % block
last_block = block
- print " %s, /* %s */" % (value, '; '.join(fields))
+ print " %s, /* %s */" % (short_value[value], '; '.join(fields))
print
print "};"
print
@@ -89,6 +99,10 @@ def print_joining_table(f):
if occupancy < 40:
raise Exception ("Table too sparse, please investigate: ", occupancy)
+ for value,short in short_value.items():
+ print "#undef %s" % (short)
+ print
+
def print_shaping_table(f):
shapes = {}
diff --git a/src/hb-ot-shape-complex-arabic-table.hh b/src/hb-ot-shape-complex-arabic-table.hh
index 3375266..579de89 100644
--- a/src/hb-ot-shape-complex-arabic-table.hh
+++ b/src/hb-ot-shape-complex-arabic-table.hh
@@ -17,723 +17,739 @@
#define HB_OT_SHAPE_COMPLEX_ARABIC_TABLE_HH
+#define X JOINING_TYPE_X
+#define R JOINING_TYPE_R
+#define U JOINING_TYPE_U
+#define A JOINING_GROUP_ALAPH
+#define DR JOINING_GROUP_DALATH_RISH
+#define C JOINING_TYPE_C
+#define D JOINING_TYPE_D
+
static const uint8_t joining_table[] =
{
/* Arabic */
- JOINING_TYPE_U, /* 0600; ARABIC NUMBER SIGN; U; No_Joining_Group */
- JOINING_TYPE_U, /* 0601; ARABIC SIGN SANAH; U; No_Joining_Group */
- JOINING_TYPE_U, /* 0602; ARABIC FOOTNOTE MARKER; U; No_Joining_Group */
- JOINING_TYPE_U, /* 0603; ARABIC SIGN SAFHA; U; No_Joining_Group */
- JOINING_TYPE_U, /* 0604; ARABIC SIGN SAMVAT; U; No_Joining_Group */
- JOINING_TYPE_X, /* 0605 */
- JOINING_TYPE_X, /* 0606 */
- JOINING_TYPE_X, /* 0607 */
- JOINING_TYPE_U, /* 0608; ARABIC RAY; U; No_Joining_Group */
- JOINING_TYPE_X, /* 0609 */
- JOINING_TYPE_X, /* 060A */
- JOINING_TYPE_U, /* 060B; AFGHANI SIGN; U; No_Joining_Group */
- JOINING_TYPE_X, /* 060C */
- JOINING_TYPE_X, /* 060D */
- JOINING_TYPE_X, /* 060E */
- JOINING_TYPE_X, /* 060F */
- JOINING_TYPE_X, /* 0610 */
- JOINING_TYPE_X, /* 0611 */
- JOINING_TYPE_X, /* 0612 */
- JOINING_TYPE_X, /* 0613 */
- JOINING_TYPE_X, /* 0614 */
- JOINING_TYPE_X, /* 0615 */
- JOINING_TYPE_X, /* 0616 */
- JOINING_TYPE_X, /* 0617 */
- JOINING_TYPE_X, /* 0618 */
- JOINING_TYPE_X, /* 0619 */
- JOINING_TYPE_X, /* 061A */
- JOINING_TYPE_X, /* 061B */
- JOINING_TYPE_X, /* 061C */
- JOINING_TYPE_X, /* 061D */
- JOINING_TYPE_X, /* 061E */
- JOINING_TYPE_X, /* 061F */
- JOINING_TYPE_D, /* 0620; DOTLESS YEH WITH SEPARATE RING BELOW; D; YEH */
- JOINING_TYPE_U, /* 0621; HAMZA; U; No_Joining_Group */
- JOINING_TYPE_R, /* 0622; ALEF WITH MADDA ABOVE; R; ALEF */
- JOINING_TYPE_R, /* 0623; ALEF WITH HAMZA ABOVE; R; ALEF */
- JOINING_TYPE_R, /* 0624; WAW WITH HAMZA ABOVE; R; WAW */
- JOINING_TYPE_R, /* 0625; ALEF WITH HAMZA BELOW; R; ALEF */
- JOINING_TYPE_D, /* 0626; DOTLESS YEH WITH HAMZA ABOVE; D; YEH */
- JOINING_TYPE_R, /* 0627; ALEF; R; ALEF */
- JOINING_TYPE_D, /* 0628; BEH; D; BEH */
- JOINING_TYPE_R, /* 0629; TEH MARBUTA; R; TEH MARBUTA */
- JOINING_TYPE_D, /* 062A; DOTLESS BEH WITH 2 DOTS ABOVE; D; BEH */
- JOINING_TYPE_D, /* 062B; DOTLESS BEH WITH 3 DOTS ABOVE; D; BEH */
- JOINING_TYPE_D, /* 062C; HAH WITH DOT BELOW; D; HAH */
- JOINING_TYPE_D, /* 062D; HAH; D; HAH */
- JOINING_TYPE_D, /* 062E; HAH WITH DOT ABOVE; D; HAH */
- JOINING_TYPE_R, /* 062F; DAL; R; DAL */
- JOINING_TYPE_R, /* 0630; DAL WITH DOT ABOVE; R; DAL */
- JOINING_TYPE_R, /* 0631; REH; R; REH */
- JOINING_TYPE_R, /* 0632; REH WITH DOT ABOVE; R; REH */
- JOINING_TYPE_D, /* 0633; SEEN; D; SEEN */
- JOINING_TYPE_D, /* 0634; SEEN WITH 3 DOTS ABOVE; D; SEEN */
- JOINING_TYPE_D, /* 0635; SAD; D; SAD */
- JOINING_TYPE_D, /* 0636; SAD WITH DOT ABOVE; D; SAD */
- JOINING_TYPE_D, /* 0637; TAH; D; TAH */
- JOINING_TYPE_D, /* 0638; TAH WITH DOT ABOVE; D; TAH */
- JOINING_TYPE_D, /* 0639; AIN; D; AIN */
- JOINING_TYPE_D, /* 063A; AIN WITH DOT ABOVE; D; AIN */
- JOINING_TYPE_D, /* 063B; KEHEH WITH 2 DOTS ABOVE; D; GAF */
- JOINING_TYPE_D, /* 063C; KEHEH WITH 3 DOTS BELOW; D; GAF */
- JOINING_TYPE_D, /* 063D; FARSI YEH WITH INVERTED V ABOVE; D; FARSI YEH */
- JOINING_TYPE_D, /* 063E; FARSI YEH WITH 2 DOTS ABOVE; D; FARSI YEH */
- JOINING_TYPE_D, /* 063F; FARSI YEH WITH 3 DOTS ABOVE; D; FARSI YEH */
- JOINING_TYPE_C, /* 0640; TATWEEL; C; No_Joining_Group */
- JOINING_TYPE_D, /* 0641; FEH; D; FEH */
- JOINING_TYPE_D, /* 0642; QAF; D; QAF */
- JOINING_TYPE_D, /* 0643; KAF; D; KAF */
- JOINING_TYPE_D, /* 0644; LAM; D; LAM */
- JOINING_TYPE_D, /* 0645; MEEM; D; MEEM */
- JOINING_TYPE_D, /* 0646; NOON; D; NOON */
- JOINING_TYPE_D, /* 0647; HEH; D; HEH */
- JOINING_TYPE_R, /* 0648; WAW; R; WAW */
- JOINING_TYPE_D, /* 0649; DOTLESS YEH; D; YEH */
- JOINING_TYPE_D, /* 064A; YEH; D; YEH */
- JOINING_TYPE_X, /* 064B */
- JOINING_TYPE_X, /* 064C */
- JOINING_TYPE_X, /* 064D */
- JOINING_TYPE_X, /* 064E */
- JOINING_TYPE_X, /* 064F */
- JOINING_TYPE_X, /* 0650 */
- JOINING_TYPE_X, /* 0651 */
- JOINING_TYPE_X, /* 0652 */
- JOINING_TYPE_X, /* 0653 */
- JOINING_TYPE_X, /* 0654 */
- JOINING_TYPE_X, /* 0655 */
- JOINING_TYPE_X, /* 0656 */
- JOINING_TYPE_X, /* 0657 */
- JOINING_TYPE_X, /* 0658 */
- JOINING_TYPE_X, /* 0659 */
- JOINING_TYPE_X, /* 065A */
- JOINING_TYPE_X, /* 065B */
- JOINING_TYPE_X, /* 065C */
- JOINING_TYPE_X, /* 065D */
- JOINING_TYPE_X, /* 065E */
- JOINING_TYPE_X, /* 065F */
- JOINING_TYPE_X, /* 0660 */
- JOINING_TYPE_X, /* 0661 */
- JOINING_TYPE_X, /* 0662 */
- JOINING_TYPE_X, /* 0663 */
- JOINING_TYPE_X, /* 0664 */
- JOINING_TYPE_X, /* 0665 */
- JOINING_TYPE_X, /* 0666 */
- JOINING_TYPE_X, /* 0667 */
- JOINING_TYPE_X, /* 0668 */
- JOINING_TYPE_X, /* 0669 */
- JOINING_TYPE_X, /* 066A */
- JOINING_TYPE_X, /* 066B */
- JOINING_TYPE_X, /* 066C */
- JOINING_TYPE_X, /* 066D */
- JOINING_TYPE_D, /* 066E; DOTLESS BEH; D; BEH */
- JOINING_TYPE_D, /* 066F; DOTLESS QAF; D; QAF */
- JOINING_TYPE_X, /* 0670 */
- JOINING_TYPE_R, /* 0671; ALEF WITH WASLA ABOVE; R; ALEF */
- JOINING_TYPE_R, /* 0672; ALEF WITH WAVY HAMZA ABOVE; R; ALEF */
- JOINING_TYPE_R, /* 0673; ALEF WITH WAVY HAMZA BELOW; R; ALEF */
- JOINING_TYPE_U, /* 0674; HIGH HAMZA; U; No_Joining_Group */
- JOINING_TYPE_R, /* 0675; HIGH HAMZA ALEF; R; ALEF */
- JOINING_TYPE_R, /* 0676; HIGH HAMZA WAW; R; WAW */
- JOINING_TYPE_R, /* 0677; HIGH HAMZA WAW WITH DAMMA ABOVE; R; WAW */
- JOINING_TYPE_D, /* 0678; HIGH HAMZA DOTLESS YEH; D; YEH */
- JOINING_TYPE_D, /* 0679; DOTLESS BEH WITH TAH ABOVE; D; BEH */
- JOINING_TYPE_D, /* 067A; DOTLESS BEH WITH VERTICAL 2 DOTS ABOVE; D; BEH */
- JOINING_TYPE_D, /* 067B; DOTLESS BEH WITH VERTICAL 2 DOTS BELOW; D; BEH */
- JOINING_TYPE_D, /* 067C; DOTLESS BEH WITH ATTACHED RING BELOW AND 2 DOTS ABOVE; D; BEH */
- JOINING_TYPE_D, /* 067D; DOTLESS BEH WITH INVERTED 3 DOTS ABOVE; D; BEH */
- JOINING_TYPE_D, /* 067E; DOTLESS BEH WITH 3 DOTS BELOW; D; BEH */
- JOINING_TYPE_D, /* 067F; DOTLESS BEH WITH 4 DOTS ABOVE; D; BEH */
- JOINING_TYPE_D, /* 0680; DOTLESS BEH WITH 4 DOTS BELOW; D; BEH */
- JOINING_TYPE_D, /* 0681; HAH WITH HAMZA ABOVE; D; HAH */
- JOINING_TYPE_D, /* 0682; HAH WITH VERTICAL 2 DOTS ABOVE; D; HAH */
- JOINING_TYPE_D, /* 0683; HAH WITH 2 DOTS BELOW; D; HAH */
- JOINING_TYPE_D, /* 0684; HAH WITH VERTICAL 2 DOTS BELOW; D; HAH */
- JOINING_TYPE_D, /* 0685; HAH WITH 3 DOTS ABOVE; D; HAH */
- JOINING_TYPE_D, /* 0686; HAH WITH 3 DOTS BELOW; D; HAH */
- JOINING_TYPE_D, /* 0687; HAH WITH 4 DOTS BELOW; D; HAH */
- JOINING_TYPE_R, /* 0688; DAL WITH TAH ABOVE; R; DAL */
- JOINING_TYPE_R, /* 0689; DAL WITH ATTACHED RING BELOW; R; DAL */
- JOINING_TYPE_R, /* 068A; DAL WITH DOT BELOW; R; DAL */
- JOINING_TYPE_R, /* 068B; DAL WITH DOT BELOW AND TAH ABOVE; R; DAL */
- JOINING_TYPE_R, /* 068C; DAL WITH 2 DOTS ABOVE; R; DAL */
- JOINING_TYPE_R, /* 068D; DAL WITH 2 DOTS BELOW; R; DAL */
- JOINING_TYPE_R, /* 068E; DAL WITH 3 DOTS ABOVE; R; DAL */
- JOINING_TYPE_R, /* 068F; DAL WITH INVERTED 3 DOTS ABOVE; R; DAL */
- JOINING_TYPE_R, /* 0690; DAL WITH 4 DOTS ABOVE; R; DAL */
- JOINING_TYPE_R, /* 0691; REH WITH TAH ABOVE; R; REH */
- JOINING_TYPE_R, /* 0692; REH WITH V ABOVE; R; REH */
- JOINING_TYPE_R, /* 0693; REH WITH ATTACHED RING BELOW; R; REH */
- JOINING_TYPE_R, /* 0694; REH WITH DOT BELOW; R; REH */
- JOINING_TYPE_R, /* 0695; REH WITH V BELOW; R; REH */
- JOINING_TYPE_R, /* 0696; REH WITH DOT BELOW AND DOT WITHIN; R; REH */
- JOINING_TYPE_R, /* 0697; REH WITH 2 DOTS ABOVE; R; REH */
- JOINING_TYPE_R, /* 0698; REH WITH 3 DOTS ABOVE; R; REH */
- JOINING_TYPE_R, /* 0699; REH WITH 4 DOTS ABOVE; R; REH */
- JOINING_TYPE_D, /* 069A; SEEN WITH DOT BELOW AND DOT ABOVE; D; SEEN */
- JOINING_TYPE_D, /* 069B; SEEN WITH 3 DOTS BELOW; D; SEEN */
- JOINING_TYPE_D, /* 069C; SEEN WITH 3 DOTS BELOW AND 3 DOTS ABOVE; D; SEEN */
- JOINING_TYPE_D, /* 069D; SAD WITH 2 DOTS BELOW; D; SAD */
- JOINING_TYPE_D, /* 069E; SAD WITH 3 DOTS ABOVE; D; SAD */
- JOINING_TYPE_D, /* 069F; TAH WITH 3 DOTS ABOVE; D; TAH */
- JOINING_TYPE_D, /* 06A0; AIN WITH 3 DOTS ABOVE; D; AIN */
- JOINING_TYPE_D, /* 06A1; DOTLESS FEH; D; FEH */
- JOINING_TYPE_D, /* 06A2; DOTLESS FEH WITH DOT BELOW; D; FEH */
- JOINING_TYPE_D, /* 06A3; FEH WITH DOT BELOW; D; FEH */
- JOINING_TYPE_D, /* 06A4; DOTLESS FEH WITH 3 DOTS ABOVE; D; FEH */
- JOINING_TYPE_D, /* 06A5; DOTLESS FEH WITH 3 DOTS BELOW; D; FEH */
- JOINING_TYPE_D, /* 06A6; DOTLESS FEH WITH 4 DOTS ABOVE; D; FEH */
- JOINING_TYPE_D, /* 06A7; DOTLESS QAF WITH DOT ABOVE; D; QAF */
- JOINING_TYPE_D, /* 06A8; DOTLESS QAF WITH 3 DOTS ABOVE; D; QAF */
- JOINING_TYPE_D, /* 06A9; KEHEH; D; GAF */
- JOINING_TYPE_D, /* 06AA; SWASH KAF; D; SWASH KAF */
- JOINING_TYPE_D, /* 06AB; KEHEH WITH ATTACHED RING BELOW; D; GAF */
- JOINING_TYPE_D, /* 06AC; KAF WITH DOT ABOVE; D; KAF */
- JOINING_TYPE_D, /* 06AD; KAF WITH 3 DOTS ABOVE; D; KAF */
- JOINING_TYPE_D, /* 06AE; KAF WITH 3 DOTS BELOW; D; KAF */
- JOINING_TYPE_D, /* 06AF; GAF; D; GAF */
- JOINING_TYPE_D, /* 06B0; GAF WITH ATTACHED RING BELOW; D; GAF */
- JOINING_TYPE_D, /* 06B1; GAF WITH 2 DOTS ABOVE; D; GAF */
- JOINING_TYPE_D, /* 06B2; GAF WITH 2 DOTS BELOW; D; GAF */
- JOINING_TYPE_D, /* 06B3; GAF WITH VERTICAL 2 DOTS BELOW; D; GAF */
- JOINING_TYPE_D, /* 06B4; GAF WITH 3 DOTS ABOVE; D; GAF */
- JOINING_TYPE_D, /* 06B5; LAM WITH V ABOVE; D; LAM */
- JOINING_TYPE_D, /* 06B6; LAM WITH DOT ABOVE; D; LAM */
- JOINING_TYPE_D, /* 06B7; LAM WITH 3 DOTS ABOVE; D; LAM */
- JOINING_TYPE_D, /* 06B8; LAM WITH 3 DOTS BELOW; D; LAM */
- JOINING_TYPE_D, /* 06B9; NOON WITH DOT BELOW; D; NOON */
- JOINING_TYPE_D, /* 06BA; DOTLESS NOON; D; NOON */
- JOINING_TYPE_D, /* 06BB; DOTLESS NOON WITH TAH ABOVE; D; NOON */
- JOINING_TYPE_D, /* 06BC; NOON WITH ATTACHED RING BELOW; D; NOON */
- JOINING_TYPE_D, /* 06BD; NYA; D; NYA */
- JOINING_TYPE_D, /* 06BE; KNOTTED HEH; D; KNOTTED HEH */
- JOINING_TYPE_D, /* 06BF; HAH WITH 3 DOTS BELOW AND DOT ABOVE; D; HAH */
- JOINING_TYPE_R, /* 06C0; DOTLESS TEH MARBUTA WITH HAMZA ABOVE; R; TEH MARBUTA */
- JOINING_TYPE_D, /* 06C1; HEH GOAL; D; HEH GOAL */
- JOINING_TYPE_D, /* 06C2; HEH GOAL WITH HAMZA ABOVE; D; HEH GOAL */
- JOINING_TYPE_R, /* 06C3; TEH MARBUTA GOAL; R; TEH MARBUTA GOAL */
- JOINING_TYPE_R, /* 06C4; WAW WITH ATTACHED RING WITHIN; R; WAW */
- JOINING_TYPE_R, /* 06C5; WAW WITH BAR; R; WAW */
- JOINING_TYPE_R, /* 06C6; WAW WITH V ABOVE; R; WAW */
- JOINING_TYPE_R, /* 06C7; WAW WITH DAMMA ABOVE; R; WAW */
- JOINING_TYPE_R, /* 06C8; WAW WITH ALEF ABOVE; R; WAW */
- JOINING_TYPE_R, /* 06C9; WAW WITH INVERTED V ABOVE; R; WAW */
- JOINING_TYPE_R, /* 06CA; WAW WITH 2 DOTS ABOVE; R; WAW */
- JOINING_TYPE_R, /* 06CB; WAW WITH 3 DOTS ABOVE; R; WAW */
- JOINING_TYPE_D, /* 06CC; FARSI YEH; D; FARSI YEH */
- JOINING_TYPE_R, /* 06CD; YEH WITH TAIL; R; YEH WITH TAIL */
- JOINING_TYPE_D, /* 06CE; FARSI YEH WITH V ABOVE; D; FARSI YEH */
- JOINING_TYPE_R, /* 06CF; WAW WITH DOT ABOVE; R; WAW */
- JOINING_TYPE_D, /* 06D0; DOTLESS YEH WITH VERTICAL 2 DOTS BELOW; D; YEH */
- JOINING_TYPE_D, /* 06D1; DOTLESS YEH WITH 3 DOTS BELOW; D; YEH */
- JOINING_TYPE_R, /* 06D2; YEH BARREE; R; YEH BARREE */
- JOINING_TYPE_R, /* 06D3; YEH BARREE WITH HAMZA ABOVE; R; YEH BARREE */
- JOINING_TYPE_X, /* 06D4 */
- JOINING_TYPE_R, /* 06D5; DOTLESS TEH MARBUTA; R; TEH MARBUTA */
- JOINING_TYPE_X, /* 06D6 */
- JOINING_TYPE_X, /* 06D7 */
- JOINING_TYPE_X, /* 06D8 */
- JOINING_TYPE_X, /* 06D9 */
- JOINING_TYPE_X, /* 06DA */
- JOINING_TYPE_X, /* 06DB */
- JOINING_TYPE_X, /* 06DC */
- JOINING_TYPE_U, /* 06DD; ARABIC END OF AYAH; U; No_Joining_Group */
- JOINING_TYPE_X, /* 06DE */
- JOINING_TYPE_X, /* 06DF */
- JOINING_TYPE_X, /* 06E0 */
- JOINING_TYPE_X, /* 06E1 */
- JOINING_TYPE_X, /* 06E2 */
- JOINING_TYPE_X, /* 06E3 */
- JOINING_TYPE_X, /* 06E4 */
- JOINING_TYPE_X, /* 06E5 */
- JOINING_TYPE_X, /* 06E6 */
- JOINING_TYPE_X, /* 06E7 */
- JOINING_TYPE_X, /* 06E8 */
- JOINING_TYPE_X, /* 06E9 */
- JOINING_TYPE_X, /* 06EA */
- JOINING_TYPE_X, /* 06EB */
- JOINING_TYPE_X, /* 06EC */
- JOINING_TYPE_X, /* 06ED */
- JOINING_TYPE_R, /* 06EE; DAL WITH INVERTED V ABOVE; R; DAL */
- JOINING_TYPE_R, /* 06EF; REH WITH INVERTED V ABOVE; R; REH */
- JOINING_TYPE_X, /* 06F0 */
- JOINING_TYPE_X, /* 06F1 */
- JOINING_TYPE_X, /* 06F2 */
- JOINING_TYPE_X, /* 06F3 */
- JOINING_TYPE_X, /* 06F4 */
- JOINING_TYPE_X, /* 06F5 */
- JOINING_TYPE_X, /* 06F6 */
- JOINING_TYPE_X, /* 06F7 */
- JOINING_TYPE_X, /* 06F8 */
- JOINING_TYPE_X, /* 06F9 */
- JOINING_TYPE_D, /* 06FA; SEEN WITH DOT BELOW AND 3 DOTS ABOVE; D; SEEN */
- JOINING_TYPE_D, /* 06FB; SAD WITH DOT BELOW AND DOT ABOVE; D; SAD */
- JOINING_TYPE_D, /* 06FC; AIN WITH DOT BELOW AND DOT ABOVE; D; AIN */
- JOINING_TYPE_X, /* 06FD */
- JOINING_TYPE_X, /* 06FE */
- JOINING_TYPE_D, /* 06FF; KNOTTED HEH WITH INVERTED V ABOVE; D; KNOTTED HEH */
+ U, /* 0600; ARABIC NUMBER SIGN; U; No_Joining_Group */
+ U, /* 0601; ARABIC SIGN SANAH; U; No_Joining_Group */
+ U, /* 0602; ARABIC FOOTNOTE MARKER; U; No_Joining_Group */
+ U, /* 0603; ARABIC SIGN SAFHA; U; No_Joining_Group */
+ U, /* 0604; ARABIC SIGN SAMVAT; U; No_Joining_Group */
+ X, /* 0605 */
+ X, /* 0606 */
+ X, /* 0607 */
+ U, /* 0608; ARABIC RAY; U; No_Joining_Group */
+ X, /* 0609 */
+ X, /* 060A */
+ U, /* 060B; AFGHANI SIGN; U; No_Joining_Group */
+ X, /* 060C */
+ X, /* 060D */
+ X, /* 060E */
+ X, /* 060F */
+ X, /* 0610 */
+ X, /* 0611 */
+ X, /* 0612 */
+ X, /* 0613 */
+ X, /* 0614 */
+ X, /* 0615 */
+ X, /* 0616 */
+ X, /* 0617 */
+ X, /* 0618 */
+ X, /* 0619 */
+ X, /* 061A */
+ X, /* 061B */
+ X, /* 061C */
+ X, /* 061D */
+ X, /* 061E */
+ X, /* 061F */
+ D, /* 0620; DOTLESS YEH WITH SEPARATE RING BELOW; D; YEH */
+ U, /* 0621; HAMZA; U; No_Joining_Group */
+ R, /* 0622; ALEF WITH MADDA ABOVE; R; ALEF */
+ R, /* 0623; ALEF WITH HAMZA ABOVE; R; ALEF */
+ R, /* 0624; WAW WITH HAMZA ABOVE; R; WAW */
+ R, /* 0625; ALEF WITH HAMZA BELOW; R; ALEF */
+ D, /* 0626; DOTLESS YEH WITH HAMZA ABOVE; D; YEH */
+ R, /* 0627; ALEF; R; ALEF */
+ D, /* 0628; BEH; D; BEH */
+ R, /* 0629; TEH MARBUTA; R; TEH MARBUTA */
+ D, /* 062A; DOTLESS BEH WITH 2 DOTS ABOVE; D; BEH */
+ D, /* 062B; DOTLESS BEH WITH 3 DOTS ABOVE; D; BEH */
+ D, /* 062C; HAH WITH DOT BELOW; D; HAH */
+ D, /* 062D; HAH; D; HAH */
+ D, /* 062E; HAH WITH DOT ABOVE; D; HAH */
+ R, /* 062F; DAL; R; DAL */
+ R, /* 0630; DAL WITH DOT ABOVE; R; DAL */
+ R, /* 0631; REH; R; REH */
+ R, /* 0632; REH WITH DOT ABOVE; R; REH */
+ D, /* 0633; SEEN; D; SEEN */
+ D, /* 0634; SEEN WITH 3 DOTS ABOVE; D; SEEN */
+ D, /* 0635; SAD; D; SAD */
+ D, /* 0636; SAD WITH DOT ABOVE; D; SAD */
+ D, /* 0637; TAH; D; TAH */
+ D, /* 0638; TAH WITH DOT ABOVE; D; TAH */
+ D, /* 0639; AIN; D; AIN */
+ D, /* 063A; AIN WITH DOT ABOVE; D; AIN */
+ D, /* 063B; KEHEH WITH 2 DOTS ABOVE; D; GAF */
+ D, /* 063C; KEHEH WITH 3 DOTS BELOW; D; GAF */
+ D, /* 063D; FARSI YEH WITH INVERTED V ABOVE; D; FARSI YEH */
+ D, /* 063E; FARSI YEH WITH 2 DOTS ABOVE; D; FARSI YEH */
+ D, /* 063F; FARSI YEH WITH 3 DOTS ABOVE; D; FARSI YEH */
+ C, /* 0640; TATWEEL; C; No_Joining_Group */
+ D, /* 0641; FEH; D; FEH */
+ D, /* 0642; QAF; D; QAF */
+ D, /* 0643; KAF; D; KAF */
+ D, /* 0644; LAM; D; LAM */
+ D, /* 0645; MEEM; D; MEEM */
+ D, /* 0646; NOON; D; NOON */
+ D, /* 0647; HEH; D; HEH */
+ R, /* 0648; WAW; R; WAW */
+ D, /* 0649; DOTLESS YEH; D; YEH */
+ D, /* 064A; YEH; D; YEH */
+ X, /* 064B */
+ X, /* 064C */
+ X, /* 064D */
+ X, /* 064E */
+ X, /* 064F */
+ X, /* 0650 */
+ X, /* 0651 */
+ X, /* 0652 */
+ X, /* 0653 */
+ X, /* 0654 */
+ X, /* 0655 */
+ X, /* 0656 */
+ X, /* 0657 */
+ X, /* 0658 */
+ X, /* 0659 */
+ X, /* 065A */
+ X, /* 065B */
+ X, /* 065C */
+ X, /* 065D */
+ X, /* 065E */
+ X, /* 065F */
+ X, /* 0660 */
+ X, /* 0661 */
+ X, /* 0662 */
+ X, /* 0663 */
+ X, /* 0664 */
+ X, /* 0665 */
+ X, /* 0666 */
+ X, /* 0667 */
+ X, /* 0668 */
+ X, /* 0669 */
+ X, /* 066A */
+ X, /* 066B */
+ X, /* 066C */
+ X, /* 066D */
+ D, /* 066E; DOTLESS BEH; D; BEH */
+ D, /* 066F; DOTLESS QAF; D; QAF */
+ X, /* 0670 */
+ R, /* 0671; ALEF WITH WASLA ABOVE; R; ALEF */
+ R, /* 0672; ALEF WITH WAVY HAMZA ABOVE; R; ALEF */
+ R, /* 0673; ALEF WITH WAVY HAMZA BELOW; R; ALEF */
+ U, /* 0674; HIGH HAMZA; U; No_Joining_Group */
+ R, /* 0675; HIGH HAMZA ALEF; R; ALEF */
+ R, /* 0676; HIGH HAMZA WAW; R; WAW */
+ R, /* 0677; HIGH HAMZA WAW WITH DAMMA ABOVE; R; WAW */
+ D, /* 0678; HIGH HAMZA DOTLESS YEH; D; YEH */
+ D, /* 0679; DOTLESS BEH WITH TAH ABOVE; D; BEH */
+ D, /* 067A; DOTLESS BEH WITH VERTICAL 2 DOTS ABOVE; D; BEH */
+ D, /* 067B; DOTLESS BEH WITH VERTICAL 2 DOTS BELOW; D; BEH */
+ D, /* 067C; DOTLESS BEH WITH ATTACHED RING BELOW AND 2 DOTS ABOVE; D; BEH */
+ D, /* 067D; DOTLESS BEH WITH INVERTED 3 DOTS ABOVE; D; BEH */
+ D, /* 067E; DOTLESS BEH WITH 3 DOTS BELOW; D; BEH */
+ D, /* 067F; DOTLESS BEH WITH 4 DOTS ABOVE; D; BEH */
+ D, /* 0680; DOTLESS BEH WITH 4 DOTS BELOW; D; BEH */
+ D, /* 0681; HAH WITH HAMZA ABOVE; D; HAH */
+ D, /* 0682; HAH WITH VERTICAL 2 DOTS ABOVE; D; HAH */
+ D, /* 0683; HAH WITH 2 DOTS BELOW; D; HAH */
+ D, /* 0684; HAH WITH VERTICAL 2 DOTS BELOW; D; HAH */
+ D, /* 0685; HAH WITH 3 DOTS ABOVE; D; HAH */
+ D, /* 0686; HAH WITH 3 DOTS BELOW; D; HAH */
+ D, /* 0687; HAH WITH 4 DOTS BELOW; D; HAH */
+ R, /* 0688; DAL WITH TAH ABOVE; R; DAL */
+ R, /* 0689; DAL WITH ATTACHED RING BELOW; R; DAL */
+ R, /* 068A; DAL WITH DOT BELOW; R; DAL */
+ R, /* 068B; DAL WITH DOT BELOW AND TAH ABOVE; R; DAL */
+ R, /* 068C; DAL WITH 2 DOTS ABOVE; R; DAL */
+ R, /* 068D; DAL WITH 2 DOTS BELOW; R; DAL */
+ R, /* 068E; DAL WITH 3 DOTS ABOVE; R; DAL */
+ R, /* 068F; DAL WITH INVERTED 3 DOTS ABOVE; R; DAL */
+ R, /* 0690; DAL WITH 4 DOTS ABOVE; R; DAL */
+ R, /* 0691; REH WITH TAH ABOVE; R; REH */
+ R, /* 0692; REH WITH V ABOVE; R; REH */
+ R, /* 0693; REH WITH ATTACHED RING BELOW; R; REH */
+ R, /* 0694; REH WITH DOT BELOW; R; REH */
+ R, /* 0695; REH WITH V BELOW; R; REH */
+ R, /* 0696; REH WITH DOT BELOW AND DOT WITHIN; R; REH */
+ R, /* 0697; REH WITH 2 DOTS ABOVE; R; REH */
+ R, /* 0698; REH WITH 3 DOTS ABOVE; R; REH */
+ R, /* 0699; REH WITH 4 DOTS ABOVE; R; REH */
+ D, /* 069A; SEEN WITH DOT BELOW AND DOT ABOVE; D; SEEN */
+ D, /* 069B; SEEN WITH 3 DOTS BELOW; D; SEEN */
+ D, /* 069C; SEEN WITH 3 DOTS BELOW AND 3 DOTS ABOVE; D; SEEN */
+ D, /* 069D; SAD WITH 2 DOTS BELOW; D; SAD */
+ D, /* 069E; SAD WITH 3 DOTS ABOVE; D; SAD */
+ D, /* 069F; TAH WITH 3 DOTS ABOVE; D; TAH */
+ D, /* 06A0; AIN WITH 3 DOTS ABOVE; D; AIN */
+ D, /* 06A1; DOTLESS FEH; D; FEH */
+ D, /* 06A2; DOTLESS FEH WITH DOT BELOW; D; FEH */
+ D, /* 06A3; FEH WITH DOT BELOW; D; FEH */
+ D, /* 06A4; DOTLESS FEH WITH 3 DOTS ABOVE; D; FEH */
+ D, /* 06A5; DOTLESS FEH WITH 3 DOTS BELOW; D; FEH */
+ D, /* 06A6; DOTLESS FEH WITH 4 DOTS ABOVE; D; FEH */
+ D, /* 06A7; DOTLESS QAF WITH DOT ABOVE; D; QAF */
+ D, /* 06A8; DOTLESS QAF WITH 3 DOTS ABOVE; D; QAF */
+ D, /* 06A9; KEHEH; D; GAF */
+ D, /* 06AA; SWASH KAF; D; SWASH KAF */
+ D, /* 06AB; KEHEH WITH ATTACHED RING BELOW; D; GAF */
+ D, /* 06AC; KAF WITH DOT ABOVE; D; KAF */
+ D, /* 06AD; KAF WITH 3 DOTS ABOVE; D; KAF */
+ D, /* 06AE; KAF WITH 3 DOTS BELOW; D; KAF */
+ D, /* 06AF; GAF; D; GAF */
+ D, /* 06B0; GAF WITH ATTACHED RING BELOW; D; GAF */
+ D, /* 06B1; GAF WITH 2 DOTS ABOVE; D; GAF */
+ D, /* 06B2; GAF WITH 2 DOTS BELOW; D; GAF */
+ D, /* 06B3; GAF WITH VERTICAL 2 DOTS BELOW; D; GAF */
+ D, /* 06B4; GAF WITH 3 DOTS ABOVE; D; GAF */
+ D, /* 06B5; LAM WITH V ABOVE; D; LAM */
+ D, /* 06B6; LAM WITH DOT ABOVE; D; LAM */
+ D, /* 06B7; LAM WITH 3 DOTS ABOVE; D; LAM */
+ D, /* 06B8; LAM WITH 3 DOTS BELOW; D; LAM */
+ D, /* 06B9; NOON WITH DOT BELOW; D; NOON */
+ D, /* 06BA; DOTLESS NOON; D; NOON */
+ D, /* 06BB; DOTLESS NOON WITH TAH ABOVE; D; NOON */
+ D, /* 06BC; NOON WITH ATTACHED RING BELOW; D; NOON */
+ D, /* 06BD; NYA; D; NYA */
+ D, /* 06BE; KNOTTED HEH; D; KNOTTED HEH */
+ D, /* 06BF; HAH WITH 3 DOTS BELOW AND DOT ABOVE; D; HAH */
+ R, /* 06C0; DOTLESS TEH MARBUTA WITH HAMZA ABOVE; R; TEH MARBUTA */
+ D, /* 06C1; HEH GOAL; D; HEH GOAL */
+ D, /* 06C2; HEH GOAL WITH HAMZA ABOVE; D; HEH GOAL */
+ R, /* 06C3; TEH MARBUTA GOAL; R; TEH MARBUTA GOAL */
+ R, /* 06C4; WAW WITH ATTACHED RING WITHIN; R; WAW */
+ R, /* 06C5; WAW WITH BAR; R; WAW */
+ R, /* 06C6; WAW WITH V ABOVE; R; WAW */
+ R, /* 06C7; WAW WITH DAMMA ABOVE; R; WAW */
+ R, /* 06C8; WAW WITH ALEF ABOVE; R; WAW */
+ R, /* 06C9; WAW WITH INVERTED V ABOVE; R; WAW */
+ R, /* 06CA; WAW WITH 2 DOTS ABOVE; R; WAW */
+ R, /* 06CB; WAW WITH 3 DOTS ABOVE; R; WAW */
+ D, /* 06CC; FARSI YEH; D; FARSI YEH */
+ R, /* 06CD; YEH WITH TAIL; R; YEH WITH TAIL */
+ D, /* 06CE; FARSI YEH WITH V ABOVE; D; FARSI YEH */
+ R, /* 06CF; WAW WITH DOT ABOVE; R; WAW */
+ D, /* 06D0; DOTLESS YEH WITH VERTICAL 2 DOTS BELOW; D; YEH */
+ D, /* 06D1; DOTLESS YEH WITH 3 DOTS BELOW; D; YEH */
+ R, /* 06D2; YEH BARREE; R; YEH BARREE */
+ R, /* 06D3; YEH BARREE WITH HAMZA ABOVE; R; YEH BARREE */
+ X, /* 06D4 */
+ R, /* 06D5; DOTLESS TEH MARBUTA; R; TEH MARBUTA */
+ X, /* 06D6 */
+ X, /* 06D7 */
+ X, /* 06D8 */
+ X, /* 06D9 */
+ X, /* 06DA */
+ X, /* 06DB */
+ X, /* 06DC */
+ U, /* 06DD; ARABIC END OF AYAH; U; No_Joining_Group */
+ X, /* 06DE */
+ X, /* 06DF */
+ X, /* 06E0 */
+ X, /* 06E1 */
+ X, /* 06E2 */
+ X, /* 06E3 */
+ X, /* 06E4 */
+ X, /* 06E5 */
+ X, /* 06E6 */
+ X, /* 06E7 */
+ X, /* 06E8 */
+ X, /* 06E9 */
+ X, /* 06EA */
+ X, /* 06EB */
+ X, /* 06EC */
+ X, /* 06ED */
+ R, /* 06EE; DAL WITH INVERTED V ABOVE; R; DAL */
+ R, /* 06EF; REH WITH INVERTED V ABOVE; R; REH */
+ X, /* 06F0 */
+ X, /* 06F1 */
+ X, /* 06F2 */
+ X, /* 06F3 */
+ X, /* 06F4 */
+ X, /* 06F5 */
+ X, /* 06F6 */
+ X, /* 06F7 */
+ X, /* 06F8 */
+ X, /* 06F9 */
+ D, /* 06FA; SEEN WITH DOT BELOW AND 3 DOTS ABOVE; D; SEEN */
+ D, /* 06FB; SAD WITH DOT BELOW AND DOT ABOVE; D; SAD */
+ D, /* 06FC; AIN WITH DOT BELOW AND DOT ABOVE; D; AIN */
+ X, /* 06FD */
+ X, /* 06FE */
+ D, /* 06FF; KNOTTED HEH WITH INVERTED V ABOVE; D; KNOTTED HEH */
/* Syriac */
- JOINING_TYPE_X, /* 0700 */
- JOINING_TYPE_X, /* 0701 */
- JOINING_TYPE_X, /* 0702 */
- JOINING_TYPE_X, /* 0703 */
- JOINING_TYPE_X, /* 0704 */
- JOINING_TYPE_X, /* 0705 */
- JOINING_TYPE_X, /* 0706 */
- JOINING_TYPE_X, /* 0707 */
- JOINING_TYPE_X, /* 0708 */
- JOINING_TYPE_X, /* 0709 */
- JOINING_TYPE_X, /* 070A */
- JOINING_TYPE_X, /* 070B */
- JOINING_TYPE_X, /* 070C */
- JOINING_TYPE_X, /* 070D */
- JOINING_TYPE_X, /* 070E */
- JOINING_TYPE_X, /* 070F */
- JOINING_GROUP_ALAPH, /* 0710; ALAPH; R; ALAPH */
- JOINING_TYPE_X, /* 0711 */
- JOINING_TYPE_D, /* 0712; BETH; D; BETH */
- JOINING_TYPE_D, /* 0713; GAMAL; D; GAMAL */
- JOINING_TYPE_D, /* 0714; GAMAL GARSHUNI; D; GAMAL */
- JOINING_GROUP_DALATH_RISH, /* 0715; DALATH; R; DALATH RISH */
- JOINING_GROUP_DALATH_RISH, /* 0716; DOTLESS DALATH RISH; R; DALATH RISH */
- JOINING_TYPE_R, /* 0717; HE; R; HE */
- JOINING_TYPE_R, /* 0718; WAW; R; SYRIAC WAW */
- JOINING_TYPE_R, /* 0719; ZAIN; R; ZAIN */
- JOINING_TYPE_D, /* 071A; HETH; D; HETH */
- JOINING_TYPE_D, /* 071B; TETH; D; TETH */
- JOINING_TYPE_D, /* 071C; TETH GARSHUNI; D; TETH */
- JOINING_TYPE_D, /* 071D; YUDH; D; YUDH */
- JOINING_TYPE_R, /* 071E; YUDH HE; R; YUDH HE */
- JOINING_TYPE_D, /* 071F; KAPH; D; KAPH */
- JOINING_TYPE_D, /* 0720; LAMADH; D; LAMADH */
- JOINING_TYPE_D, /* 0721; MIM; D; MIM */
- JOINING_TYPE_D, /* 0722; NUN; D; NUN */
- JOINING_TYPE_D, /* 0723; SEMKATH; D; SEMKATH */
- JOINING_TYPE_D, /* 0724; FINAL SEMKATH; D; FINAL SEMKATH */
- JOINING_TYPE_D, /* 0725; E; D; E */
- JOINING_TYPE_D, /* 0726; PE; D; PE */
- JOINING_TYPE_D, /* 0727; REVERSED PE; D; REVERSED PE */
- JOINING_TYPE_R, /* 0728; SADHE; R; SADHE */
- JOINING_TYPE_D, /* 0729; QAPH; D; QAPH */
- JOINING_GROUP_DALATH_RISH, /* 072A; RISH; R; DALATH RISH */
- JOINING_TYPE_D, /* 072B; SHIN; D; SHIN */
- JOINING_TYPE_R, /* 072C; TAW; R; TAW */
- JOINING_TYPE_D, /* 072D; PERSIAN BHETH; D; BETH */
- JOINING_TYPE_D, /* 072E; PERSIAN GHAMAL; D; GAMAL */
- JOINING_GROUP_DALATH_RISH, /* 072F; PERSIAN DHALATH; R; DALATH RISH */
- JOINING_TYPE_X, /* 0730 */
- JOINING_TYPE_X, /* 0731 */
- JOINING_TYPE_X, /* 0732 */
- JOINING_TYPE_X, /* 0733 */
- JOINING_TYPE_X, /* 0734 */
- JOINING_TYPE_X, /* 0735 */
- JOINING_TYPE_X, /* 0736 */
- JOINING_TYPE_X, /* 0737 */
- JOINING_TYPE_X, /* 0738 */
- JOINING_TYPE_X, /* 0739 */
- JOINING_TYPE_X, /* 073A */
- JOINING_TYPE_X, /* 073B */
- JOINING_TYPE_X, /* 073C */
- JOINING_TYPE_X, /* 073D */
- JOINING_TYPE_X, /* 073E */
- JOINING_TYPE_X, /* 073F */
- JOINING_TYPE_X, /* 0740 */
- JOINING_TYPE_X, /* 0741 */
- JOINING_TYPE_X, /* 0742 */
- JOINING_TYPE_X, /* 0743 */
- JOINING_TYPE_X, /* 0744 */
- JOINING_TYPE_X, /* 0745 */
- JOINING_TYPE_X, /* 0746 */
- JOINING_TYPE_X, /* 0747 */
- JOINING_TYPE_X, /* 0748 */
- JOINING_TYPE_X, /* 0749 */
- JOINING_TYPE_X, /* 074A */
- JOINING_TYPE_X, /* 074B */
- JOINING_TYPE_X, /* 074C */
- JOINING_TYPE_R, /* 074D; SOGDIAN ZHAIN; R; ZHAIN */
- JOINING_TYPE_D, /* 074E; SOGDIAN KHAPH; D; KHAPH */
- JOINING_TYPE_D, /* 074F; SOGDIAN FE; D; FE */
+ X, /* 0700 */
+ X, /* 0701 */
+ X, /* 0702 */
+ X, /* 0703 */
+ X, /* 0704 */
+ X, /* 0705 */
+ X, /* 0706 */
+ X, /* 0707 */
+ X, /* 0708 */
+ X, /* 0709 */
+ X, /* 070A */
+ X, /* 070B */
+ X, /* 070C */
+ X, /* 070D */
+ X, /* 070E */
+ X, /* 070F */
+ A, /* 0710; ALAPH; R; ALAPH */
+ X, /* 0711 */
+ D, /* 0712; BETH; D; BETH */
+ D, /* 0713; GAMAL; D; GAMAL */
+ D, /* 0714; GAMAL GARSHUNI; D; GAMAL */
+ DR, /* 0715; DALATH; R; DALATH RISH */
+ DR, /* 0716; DOTLESS DALATH RISH; R; DALATH RISH */
+ R, /* 0717; HE; R; HE */
+ R, /* 0718; WAW; R; SYRIAC WAW */
+ R, /* 0719; ZAIN; R; ZAIN */
+ D, /* 071A; HETH; D; HETH */
+ D, /* 071B; TETH; D; TETH */
+ D, /* 071C; TETH GARSHUNI; D; TETH */
+ D, /* 071D; YUDH; D; YUDH */
+ R, /* 071E; YUDH HE; R; YUDH HE */
+ D, /* 071F; KAPH; D; KAPH */
+ D, /* 0720; LAMADH; D; LAMADH */
+ D, /* 0721; MIM; D; MIM */
+ D, /* 0722; NUN; D; NUN */
+ D, /* 0723; SEMKATH; D; SEMKATH */
+ D, /* 0724; FINAL SEMKATH; D; FINAL SEMKATH */
+ D, /* 0725; E; D; E */
+ D, /* 0726; PE; D; PE */
+ D, /* 0727; REVERSED PE; D; REVERSED PE */
+ R, /* 0728; SADHE; R; SADHE */
+ D, /* 0729; QAPH; D; QAPH */
+ DR, /* 072A; RISH; R; DALATH RISH */
+ D, /* 072B; SHIN; D; SHIN */
+ R, /* 072C; TAW; R; TAW */
+ D, /* 072D; PERSIAN BHETH; D; BETH */
+ D, /* 072E; PERSIAN GHAMAL; D; GAMAL */
+ DR, /* 072F; PERSIAN DHALATH; R; DALATH RISH */
+ X, /* 0730 */
+ X, /* 0731 */
+ X, /* 0732 */
+ X, /* 0733 */
+ X, /* 0734 */
+ X, /* 0735 */
+ X, /* 0736 */
+ X, /* 0737 */
+ X, /* 0738 */
+ X, /* 0739 */
+ X, /* 073A */
+ X, /* 073B */
+ X, /* 073C */
+ X, /* 073D */
+ X, /* 073E */
+ X, /* 073F */
+ X, /* 0740 */
+ X, /* 0741 */
+ X, /* 0742 */
+ X, /* 0743 */
+ X, /* 0744 */
+ X, /* 0745 */
+ X, /* 0746 */
+ X, /* 0747 */
+ X, /* 0748 */
+ X, /* 0749 */
+ X, /* 074A */
+ X, /* 074B */
+ X, /* 074C */
+ R, /* 074D; SOGDIAN ZHAIN; R; ZHAIN */
+ D, /* 074E; SOGDIAN KHAPH; D; KHAPH */
+ D, /* 074F; SOGDIAN FE; D; FE */
/* 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 */
- JOINING_TYPE_D, /* 0752; DOTLESS BEH WITH INVERTED 3 DOTS BELOW; D; BEH */
- JOINING_TYPE_D, /* 0753; DOTLESS BEH WITH INVERTED 3 DOTS BELOW AND 2 DOTS ABOVE; D; BEH */
- JOINING_TYPE_D, /* 0754; DOTLESS BEH WITH 2 DOTS BELOW AND DOT ABOVE; D; BEH */
- JOINING_TYPE_D, /* 0755; DOTLESS BEH WITH INVERTED V BELOW; D; BEH */
- JOINING_TYPE_D, /* 0756; DOTLESS BEH WITH V ABOVE; D; BEH */
- JOINING_TYPE_D, /* 0757; HAH WITH 2 DOTS ABOVE; D; HAH */
- JOINING_TYPE_D, /* 0758; HAH WITH INVERTED 3 DOTS BELOW; D; HAH */
- JOINING_TYPE_R, /* 0759; DAL WITH VERTICAL 2 DOTS BELOW AND TAH ABOVE; R; DAL */
- JOINING_TYPE_R, /* 075A; DAL WITH INVERTED V BELOW; R; DAL */
- JOINING_TYPE_R, /* 075B; REH WITH BAR; R; REH */
- JOINING_TYPE_D, /* 075C; SEEN WITH 4 DOTS ABOVE; D; SEEN */
- JOINING_TYPE_D, /* 075D; AIN WITH 2 DOTS ABOVE; D; AIN */
- JOINING_TYPE_D, /* 075E; AIN WITH INVERTED 3 DOTS ABOVE; D; AIN */
- JOINING_TYPE_D, /* 075F; AIN WITH VERTICAL 2 DOTS ABOVE; D; AIN */
- JOINING_TYPE_D, /* 0760; DOTLESS FEH WITH 2 DOTS BELOW; D; FEH */
- JOINING_TYPE_D, /* 0761; DOTLESS FEH WITH INVERTED 3 DOTS BELOW; D; FEH */
- JOINING_TYPE_D, /* 0762; KEHEH WITH DOT ABOVE; D; GAF */
- JOINING_TYPE_D, /* 0763; KEHEH WITH 3 DOTS ABOVE; D; GAF */
- JOINING_TYPE_D, /* 0764; KEHEH WITH INVERTED 3 DOTS BELOW; D; GAF */
- JOINING_TYPE_D, /* 0765; MEEM WITH DOT ABOVE; D; MEEM */
- JOINING_TYPE_D, /* 0766; MEEM WITH DOT BELOW; D; MEEM */
- JOINING_TYPE_D, /* 0767; NOON WITH 2 DOTS BELOW; D; NOON */
- JOINING_TYPE_D, /* 0768; NOON WITH TAH ABOVE; D; NOON */
- JOINING_TYPE_D, /* 0769; NOON WITH V ABOVE; D; NOON */
- JOINING_TYPE_D, /* 076A; LAM WITH BAR; D; LAM */
- JOINING_TYPE_R, /* 076B; REH WITH VERTICAL 2 DOTS ABOVE; R; REH */
- JOINING_TYPE_R, /* 076C; REH WITH HAMZA ABOVE; R; REH */
- JOINING_TYPE_D, /* 076D; SEEN WITH VERTICAL 2 DOTS ABOVE; D; SEEN */
- JOINING_TYPE_D, /* 076E; HAH WITH TAH BELOW; D; HAH */
- JOINING_TYPE_D, /* 076F; HAH WITH TAH AND 2 DOTS BELOW; D; HAH */
- JOINING_TYPE_D, /* 0770; SEEN WITH 2 DOTS AND TAH ABOVE; D; SEEN */
- JOINING_TYPE_R, /* 0771; REH WITH 2 DOTS AND TAH ABOVE; R; REH */
- JOINING_TYPE_D, /* 0772; HAH WITH TAH ABOVE; D; HAH */
- JOINING_TYPE_R, /* 0773; ALEF WITH DIGIT TWO ABOVE; R; ALEF */
- JOINING_TYPE_R, /* 0774; ALEF WITH DIGIT THREE ABOVE; R; ALEF */
- JOINING_TYPE_D, /* 0775; FARSI YEH WITH DIGIT TWO ABOVE; D; FARSI YEH */
- JOINING_TYPE_D, /* 0776; FARSI YEH WITH DIGIT THREE ABOVE; D; FARSI YEH */
- JOINING_TYPE_D, /* 0777; DOTLESS YEH WITH DIGIT FOUR BELOW; D; YEH */
- JOINING_TYPE_R, /* 0778; WAW WITH DIGIT TWO ABOVE; R; WAW */
- JOINING_TYPE_R, /* 0779; WAW WITH DIGIT THREE ABOVE; R; WAW */
- JOINING_TYPE_D, /* 077A; BURUSHASKI YEH BARREE WITH DIGIT TWO ABOVE; D; BURUSHASKI YEH BARREE */
- JOINING_TYPE_D, /* 077B; BURUSHASKI YEH BARREE WITH DIGIT THREE ABOVE; D; BURUSHASKI YEH BARREE */
- JOINING_TYPE_D, /* 077C; HAH WITH DIGIT FOUR BELOW; D; HAH */
- JOINING_TYPE_D, /* 077D; SEEN WITH DIGIT FOUR ABOVE; D; SEEN */
- JOINING_TYPE_D, /* 077E; SEEN WITH INVERTED V ABOVE; D; SEEN */
- JOINING_TYPE_D, /* 077F; KAF WITH 2 DOTS ABOVE; D; KAF */
+ D, /* 0750; DOTLESS BEH WITH HORIZONTAL 3 DOTS BELOW; D; BEH */
+ D, /* 0751; BEH WITH 3 DOTS ABOVE; D; BEH */
+ D, /* 0752; DOTLESS BEH WITH INVERTED 3 DOTS BELOW; D; BEH */
+ D, /* 0753; DOTLESS BEH WITH INVERTED 3 DOTS BELOW AND 2 DOTS ABOVE; D; BEH */
+ D, /* 0754; DOTLESS BEH WITH 2 DOTS BELOW AND DOT ABOVE; D; BEH */
+ D, /* 0755; DOTLESS BEH WITH INVERTED V BELOW; D; BEH */
+ D, /* 0756; DOTLESS BEH WITH V ABOVE; D; BEH */
+ D, /* 0757; HAH WITH 2 DOTS ABOVE; D; HAH */
+ D, /* 0758; HAH WITH INVERTED 3 DOTS BELOW; D; HAH */
+ R, /* 0759; DAL WITH VERTICAL 2 DOTS BELOW AND TAH ABOVE; R; DAL */
+ R, /* 075A; DAL WITH INVERTED V BELOW; R; DAL */
+ R, /* 075B; REH WITH BAR; R; REH */
+ D, /* 075C; SEEN WITH 4 DOTS ABOVE; D; SEEN */
+ D, /* 075D; AIN WITH 2 DOTS ABOVE; D; AIN */
+ D, /* 075E; AIN WITH INVERTED 3 DOTS ABOVE; D; AIN */
+ D, /* 075F; AIN WITH VERTICAL 2 DOTS ABOVE; D; AIN */
+ D, /* 0760; DOTLESS FEH WITH 2 DOTS BELOW; D; FEH */
+ D, /* 0761; DOTLESS FEH WITH INVERTED 3 DOTS BELOW; D; FEH */
+ D, /* 0762; KEHEH WITH DOT ABOVE; D; GAF */
+ D, /* 0763; KEHEH WITH 3 DOTS ABOVE; D; GAF */
+ D, /* 0764; KEHEH WITH INVERTED 3 DOTS BELOW; D; GAF */
+ D, /* 0765; MEEM WITH DOT ABOVE; D; MEEM */
+ D, /* 0766; MEEM WITH DOT BELOW; D; MEEM */
+ D, /* 0767; NOON WITH 2 DOTS BELOW; D; NOON */
+ D, /* 0768; NOON WITH TAH ABOVE; D; NOON */
+ D, /* 0769; NOON WITH V ABOVE; D; NOON */
+ D, /* 076A; LAM WITH BAR; D; LAM */
+ R, /* 076B; REH WITH VERTICAL 2 DOTS ABOVE; R; REH */
+ R, /* 076C; REH WITH HAMZA ABOVE; R; REH */
+ D, /* 076D; SEEN WITH VERTICAL 2 DOTS ABOVE; D; SEEN */
+ D, /* 076E; HAH WITH TAH BELOW; D; HAH */
+ D, /* 076F; HAH WITH TAH AND 2 DOTS BELOW; D; HAH */
+ D, /* 0770; SEEN WITH 2 DOTS AND TAH ABOVE; D; SEEN */
+ R, /* 0771; REH WITH 2 DOTS AND TAH ABOVE; R; REH */
+ D, /* 0772; HAH WITH TAH ABOVE; D; HAH */
+ R, /* 0773; ALEF WITH DIGIT TWO ABOVE; R; ALEF */
+ R, /* 0774; ALEF WITH DIGIT THREE ABOVE; R; ALEF */
+ D, /* 0775; FARSI YEH WITH DIGIT TWO ABOVE; D; FARSI YEH */
+ D, /* 0776; FARSI YEH WITH DIGIT THREE ABOVE; D; FARSI YEH */
+ D, /* 0777; DOTLESS YEH WITH DIGIT FOUR BELOW; D; YEH */
+ R, /* 0778; WAW WITH DIGIT TWO ABOVE; R; WAW */
+ R, /* 0779; WAW WITH DIGIT THREE ABOVE; R; WAW */
+ D, /* 077A; BURUSHASKI YEH BARREE WITH DIGIT TWO ABOVE; D; BURUSHASKI YEH BARREE */
+ D, /* 077B; BURUSHASKI YEH BARREE WITH DIGIT THREE ABOVE; D; BURUSHASKI YEH BARREE */
+ D, /* 077C; HAH WITH DIGIT FOUR BELOW; D; HAH */
+ D, /* 077D; SEEN WITH DIGIT FOUR ABOVE; D; SEEN */
+ D, /* 077E; SEEN WITH INVERTED V ABOVE; D; SEEN */
+ D, /* 077F; KAF WITH 2 DOTS ABOVE; D; KAF */
/* Thaana */
- JOINING_TYPE_X, /* 0780 */
- JOINING_TYPE_X, /* 0781 */
- JOINING_TYPE_X, /* 0782 */
- JOINING_TYPE_X, /* 0783 */
- JOINING_TYPE_X, /* 0784 */
- JOINING_TYPE_X, /* 0785 */
- JOINING_TYPE_X, /* 0786 */
- JOINING_TYPE_X, /* 0787 */
- JOINING_TYPE_X, /* 0788 */
- JOINING_TYPE_X, /* 0789 */
- JOINING_TYPE_X, /* 078A */
- JOINING_TYPE_X, /* 078B */
- JOINING_TYPE_X, /* 078C */
- JOINING_TYPE_X, /* 078D */
- JOINING_TYPE_X, /* 078E */
- JOINING_TYPE_X, /* 078F */
- JOINING_TYPE_X, /* 0790 */
- JOINING_TYPE_X, /* 0791 */
- JOINING_TYPE_X, /* 0792 */
- JOINING_TYPE_X, /* 0793 */
- JOINING_TYPE_X, /* 0794 */
- JOINING_TYPE_X, /* 0795 */
- JOINING_TYPE_X, /* 0796 */
- JOINING_TYPE_X, /* 0797 */
- JOINING_TYPE_X, /* 0798 */
- JOINING_TYPE_X, /* 0799 */
- JOINING_TYPE_X, /* 079A */
- JOINING_TYPE_X, /* 079B */
- JOINING_TYPE_X, /* 079C */
- JOINING_TYPE_X, /* 079D */
- JOINING_TYPE_X, /* 079E */
- JOINING_TYPE_X, /* 079F */
- JOINING_TYPE_X, /* 07A0 */
- JOINING_TYPE_X, /* 07A1 */
- JOINING_TYPE_X, /* 07A2 */
- JOINING_TYPE_X, /* 07A3 */
- JOINING_TYPE_X, /* 07A4 */
- JOINING_TYPE_X, /* 07A5 */
- JOINING_TYPE_X, /* 07A6 */
- JOINING_TYPE_X, /* 07A7 */
- JOINING_TYPE_X, /* 07A8 */
- JOINING_TYPE_X, /* 07A9 */
- JOINING_TYPE_X, /* 07AA */
- JOINING_TYPE_X, /* 07AB */
- JOINING_TYPE_X, /* 07AC */
- JOINING_TYPE_X, /* 07AD */
- JOINING_TYPE_X, /* 07AE */
- JOINING_TYPE_X, /* 07AF */
- JOINING_TYPE_X, /* 07B0 */
- JOINING_TYPE_X, /* 07B1 */
- JOINING_TYPE_X, /* 07B2 */
- JOINING_TYPE_X, /* 07B3 */
- JOINING_TYPE_X, /* 07B4 */
- JOINING_TYPE_X, /* 07B5 */
- JOINING_TYPE_X, /* 07B6 */
- JOINING_TYPE_X, /* 07B7 */
- JOINING_TYPE_X, /* 07B8 */
- JOINING_TYPE_X, /* 07B9 */
- JOINING_TYPE_X, /* 07BA */
- JOINING_TYPE_X, /* 07BB */
- JOINING_TYPE_X, /* 07BC */
- JOINING_TYPE_X, /* 07BD */
- JOINING_TYPE_X, /* 07BE */
- JOINING_TYPE_X, /* 07BF */
+ X, /* 0780 */
+ X, /* 0781 */
+ X, /* 0782 */
+ X, /* 0783 */
+ X, /* 0784 */
+ X, /* 0785 */
+ X, /* 0786 */
+ X, /* 0787 */
+ X, /* 0788 */
+ X, /* 0789 */
+ X, /* 078A */
+ X, /* 078B */
+ X, /* 078C */
+ X, /* 078D */
+ X, /* 078E */
+ X, /* 078F */
+ X, /* 0790 */
+ X, /* 0791 */
+ X, /* 0792 */
+ X, /* 0793 */
+ X, /* 0794 */
+ X, /* 0795 */
+ X, /* 0796 */
+ X, /* 0797 */
+ X, /* 0798 */
+ X, /* 0799 */
+ X, /* 079A */
+ X, /* 079B */
+ X, /* 079C */
+ X, /* 079D */
+ X, /* 079E */
+ X, /* 079F */
+ X, /* 07A0 */
+ X, /* 07A1 */
+ X, /* 07A2 */
+ X, /* 07A3 */
+ X, /* 07A4 */
+ X, /* 07A5 */
+ X, /* 07A6 */
+ X, /* 07A7 */
+ X, /* 07A8 */
+ X, /* 07A9 */
+ X, /* 07AA */
+ X, /* 07AB */
+ X, /* 07AC */
+ X, /* 07AD */
+ X, /* 07AE */
+ X, /* 07AF */
+ X, /* 07B0 */
+ X, /* 07B1 */
+ X, /* 07B2 */
+ X, /* 07B3 */
+ X, /* 07B4 */
+ X, /* 07B5 */
+ X, /* 07B6 */
+ X, /* 07B7 */
+ X, /* 07B8 */
+ X, /* 07B9 */
+ X, /* 07BA */
+ X, /* 07BB */
+ X, /* 07BC */
+ X, /* 07BD */
+ X, /* 07BE */
+ X, /* 07BF */
/* NKo */
- JOINING_TYPE_X, /* 07C0 */
- JOINING_TYPE_X, /* 07C1 */
- JOINING_TYPE_X, /* 07C2 */
- JOINING_TYPE_X, /* 07C3 */
- JOINING_TYPE_X, /* 07C4 */
- JOINING_TYPE_X, /* 07C5 */
- JOINING_TYPE_X, /* 07C6 */
- JOINING_TYPE_X, /* 07C7 */
- JOINING_TYPE_X, /* 07C8 */
- JOINING_TYPE_X, /* 07C9 */
- JOINING_TYPE_D, /* 07CA; NKO A; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07CB; NKO EE; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07CC; NKO I; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07CD; NKO E; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07CE; NKO U; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07CF; NKO OO; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07D0; NKO O; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07D1; NKO DAGBASINNA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07D2; NKO N; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07D3; NKO BA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07D4; NKO PA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07D5; NKO TA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07D6; NKO JA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07D7; NKO CHA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07D8; NKO DA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07D9; NKO RA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07DA; NKO RRA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07DB; NKO SA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07DC; NKO GBA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07DD; NKO FA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07DE; NKO KA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07DF; NKO LA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07E0; NKO NA WOLOSO; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07E1; NKO MA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07E2; NKO NYA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07E3; NKO NA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07E4; NKO HA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07E5; NKO WA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07E6; NKO YA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07E7; NKO NYA WOLOSO; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07E8; NKO JONA JA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07E9; NKO JONA CHA; D; No_Joining_Group */
- JOINING_TYPE_D, /* 07EA; NKO JONA RA; D; No_Joining_Group */
- JOINING_TYPE_X, /* 07EB */
- JOINING_TYPE_X, /* 07EC */
- JOINING_TYPE_X, /* 07ED */
- JOINING_TYPE_X, /* 07EE */
- JOINING_TYPE_X, /* 07EF */
- JOINING_TYPE_X, /* 07F0 */
- JOINING_TYPE_X, /* 07F1 */
- JOINING_TYPE_X, /* 07F2 */
- JOINING_TYPE_X, /* 07F3 */
- JOINING_TYPE_X, /* 07F4 */
- JOINING_TYPE_X, /* 07F5 */
- JOINING_TYPE_X, /* 07F6 */
- JOINING_TYPE_X, /* 07F7 */
- JOINING_TYPE_X, /* 07F8 */
- JOINING_TYPE_X, /* 07F9 */
- JOINING_TYPE_C, /* 07FA; NKO LAJANYALAN; C; No_Joining_Group */
- JOINING_TYPE_X, /* 07FB */
- JOINING_TYPE_X, /* 07FC */
- JOINING_TYPE_X, /* 07FD */
- JOINING_TYPE_X, /* 07FE */
- JOINING_TYPE_X, /* 07FF */
+ X, /* 07C0 */
+ X, /* 07C1 */
+ X, /* 07C2 */
+ X, /* 07C3 */
+ X, /* 07C4 */
+ X, /* 07C5 */
+ X, /* 07C6 */
+ X, /* 07C7 */
+ X, /* 07C8 */
+ X, /* 07C9 */
+ D, /* 07CA; NKO A; D; No_Joining_Group */
+ D, /* 07CB; NKO EE; D; No_Joining_Group */
+ D, /* 07CC; NKO I; D; No_Joining_Group */
+ D, /* 07CD; NKO E; D; No_Joining_Group */
+ D, /* 07CE; NKO U; D; No_Joining_Group */
+ D, /* 07CF; NKO OO; D; No_Joining_Group */
+ D, /* 07D0; NKO O; D; No_Joining_Group */
+ D, /* 07D1; NKO DAGBASINNA; D; No_Joining_Group */
+ D, /* 07D2; NKO N; D; No_Joining_Group */
+ D, /* 07D3; NKO BA; D; No_Joining_Group */
+ D, /* 07D4; NKO PA; D; No_Joining_Group */
+ D, /* 07D5; NKO TA; D; No_Joining_Group */
+ D, /* 07D6; NKO JA; D; No_Joining_Group */
+ D, /* 07D7; NKO CHA; D; No_Joining_Group */
+ D, /* 07D8; NKO DA; D; No_Joining_Group */
+ D, /* 07D9; NKO RA; D; No_Joining_Group */
+ D, /* 07DA; NKO RRA; D; No_Joining_Group */
+ D, /* 07DB; NKO SA; D; No_Joining_Group */
+ D, /* 07DC; NKO GBA; D; No_Joining_Group */
+ D, /* 07DD; NKO FA; D; No_Joining_Group */
+ D, /* 07DE; NKO KA; D; No_Joining_Group */
+ D, /* 07DF; NKO LA; D; No_Joining_Group */
+ D, /* 07E0; NKO NA WOLOSO; D; No_Joining_Group */
+ D, /* 07E1; NKO MA; D; No_Joining_Group */
+ D, /* 07E2; NKO NYA; D; No_Joining_Group */
+ D, /* 07E3; NKO NA; D; No_Joining_Group */
+ D, /* 07E4; NKO HA; D; No_Joining_Group */
+ D, /* 07E5; NKO WA; D; No_Joining_Group */
+ D, /* 07E6; NKO YA; D; No_Joining_Group */
+ D, /* 07E7; NKO NYA WOLOSO; D; No_Joining_Group */
+ D, /* 07E8; NKO JONA JA; D; No_Joining_Group */
+ D, /* 07E9; NKO JONA CHA; D; No_Joining_Group */
+ D, /* 07EA; NKO JONA RA; D; No_Joining_Group */
+ X, /* 07EB */
+ X, /* 07EC */
+ X, /* 07ED */
+ X, /* 07EE */
+ X, /* 07EF */
+ X, /* 07F0 */
+ X, /* 07F1 */
+ X, /* 07F2 */
+ X, /* 07F3 */
+ X, /* 07F4 */
+ X, /* 07F5 */
+ X, /* 07F6 */
+ X, /* 07F7 */
+ X, /* 07F8 */
+ X, /* 07F9 */
+ C, /* 07FA; NKO LAJANYALAN; C; No_Joining_Group */
+ X, /* 07FB */
+ X, /* 07FC */
+ X, /* 07FD */
+ X, /* 07FE */
+ X, /* 07FF */
/* Samaritan */
- JOINING_TYPE_X, /* 0800 */
- JOINING_TYPE_X, /* 0801 */
- JOINING_TYPE_X, /* 0802 */
- JOINING_TYPE_X, /* 0803 */
- JOINING_TYPE_X, /* 0804 */
- JOINING_TYPE_X, /* 0805 */
- JOINING_TYPE_X, /* 0806 */
- JOINING_TYPE_X, /* 0807 */
- JOINING_TYPE_X, /* 0808 */
- JOINING_TYPE_X, /* 0809 */
- JOINING_TYPE_X, /* 080A */
- JOINING_TYPE_X, /* 080B */
- JOINING_TYPE_X, /* 080C */
- JOINING_TYPE_X, /* 080D */
- JOINING_TYPE_X, /* 080E */
- JOINING_TYPE_X, /* 080F */
- JOINING_TYPE_X, /* 0810 */
- JOINING_TYPE_X, /* 0811 */
- JOINING_TYPE_X, /* 0812 */
- JOINING_TYPE_X, /* 0813 */
- JOINING_TYPE_X, /* 0814 */
- JOINING_TYPE_X, /* 0815 */
- JOINING_TYPE_X, /* 0816 */
- JOINING_TYPE_X, /* 0817 */
- JOINING_TYPE_X, /* 0818 */
- JOINING_TYPE_X, /* 0819 */
- JOINING_TYPE_X, /* 081A */
- JOINING_TYPE_X, /* 081B */
- JOINING_TYPE_X, /* 081C */
- JOINING_TYPE_X, /* 081D */
- JOINING_TYPE_X, /* 081E */
- JOINING_TYPE_X, /* 081F */
- JOINING_TYPE_X, /* 0820 */
- JOINING_TYPE_X, /* 0821 */
- JOINING_TYPE_X, /* 0822 */
- JOINING_TYPE_X, /* 0823 */
- JOINING_TYPE_X, /* 0824 */
- JOINING_TYPE_X, /* 0825 */
- JOINING_TYPE_X, /* 0826 */
- JOINING_TYPE_X, /* 0827 */
- JOINING_TYPE_X, /* 0828 */
- JOINING_TYPE_X, /* 0829 */
- JOINING_TYPE_X, /* 082A */
- JOINING_TYPE_X, /* 082B */
- JOINING_TYPE_X, /* 082C */
- JOINING_TYPE_X, /* 082D */
- JOINING_TYPE_X, /* 082E */
- JOINING_TYPE_X, /* 082F */
- JOINING_TYPE_X, /* 0830 */
- JOINING_TYPE_X, /* 0831 */
- JOINING_TYPE_X, /* 0832 */
- JOINING_TYPE_X, /* 0833 */
- JOINING_TYPE_X, /* 0834 */
- JOINING_TYPE_X, /* 0835 */
- JOINING_TYPE_X, /* 0836 */
- JOINING_TYPE_X, /* 0837 */
- JOINING_TYPE_X, /* 0838 */
- JOINING_TYPE_X, /* 0839 */
- JOINING_TYPE_X, /* 083A */
- JOINING_TYPE_X, /* 083B */
- JOINING_TYPE_X, /* 083C */
- JOINING_TYPE_X, /* 083D */
- JOINING_TYPE_X, /* 083E */
- JOINING_TYPE_X, /* 083F */
+ X, /* 0800 */
+ X, /* 0801 */
+ X, /* 0802 */
+ X, /* 0803 */
+ X, /* 0804 */
+ X, /* 0805 */
+ X, /* 0806 */
+ X, /* 0807 */
+ X, /* 0808 */
+ X, /* 0809 */
+ X, /* 080A */
+ X, /* 080B */
+ X, /* 080C */
+ X, /* 080D */
+ X, /* 080E */
+ X, /* 080F */
+ X, /* 0810 */
+ X, /* 0811 */
+ X, /* 0812 */
+ X, /* 0813 */
+ X, /* 0814 */
+ X, /* 0815 */
+ X, /* 0816 */
+ X, /* 0817 */
+ X, /* 0818 */
+ X, /* 0819 */
+ X, /* 081A */
+ X, /* 081B */
+ X, /* 081C */
+ X, /* 081D */
+ X, /* 081E */
+ X, /* 081F */
+ X, /* 0820 */
+ X, /* 0821 */
+ X, /* 0822 */
+ X, /* 0823 */
+ X, /* 0824 */
+ X, /* 0825 */
+ X, /* 0826 */
+ X, /* 0827 */
+ X, /* 0828 */
+ X, /* 0829 */
+ X, /* 082A */
+ X, /* 082B */
+ X, /* 082C */
+ X, /* 082D */
+ X, /* 082E */
+ X, /* 082F */
+ X, /* 0830 */
+ X, /* 0831 */
+ X, /* 0832 */
+ X, /* 0833 */
+ X, /* 0834 */
+ X, /* 0835 */
+ X, /* 0836 */
+ X, /* 0837 */
+ X, /* 0838 */
+ X, /* 0839 */
+ X, /* 083A */
+ X, /* 083B */
+ X, /* 083C */
+ X, /* 083D */
+ X, /* 083E */
+ 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 */
- JOINING_TYPE_D, /* 0843; MANDAIC AD; D; No_Joining_Group */
- JOINING_TYPE_D, /* 0844; MANDAIC AH; D; No_Joining_Group */
- JOINING_TYPE_D, /* 0845; MANDAIC USHENNA; D; No_Joining_Group */
- JOINING_TYPE_R, /* 0846; MANDAIC AZ; R; No_Joining_Group */
- JOINING_TYPE_D, /* 0847; MANDAIC IT; D; No_Joining_Group */
- JOINING_TYPE_D, /* 0848; MANDAIC ATT; D; No_Joining_Group */
- JOINING_TYPE_R, /* 0849; MANDAIC AKSA; R; No_Joining_Group */
- JOINING_TYPE_D, /* 084A; MANDAIC AK; D; No_Joining_Group */
- JOINING_TYPE_D, /* 084B; MANDAIC AL; D; No_Joining_Group */
- JOINING_TYPE_D, /* 084C; MANDAIC AM; D; No_Joining_Group */
- JOINING_TYPE_D, /* 084D; MANDAIC AN; D; No_Joining_Group */
- JOINING_TYPE_D, /* 084E; MANDAIC AS; D; No_Joining_Group */
- JOINING_TYPE_R, /* 084F; MANDAIC IN; R; No_Joining_Group */
- JOINING_TYPE_D, /* 0850; MANDAIC AP; D; No_Joining_Group */
- JOINING_TYPE_D, /* 0851; MANDAIC ASZ; D; No_Joining_Group */
- JOINING_TYPE_D, /* 0852; MANDAIC AQ; D; No_Joining_Group */
- JOINING_TYPE_D, /* 0853; MANDAIC AR; D; No_Joining_Group */
- JOINING_TYPE_R, /* 0854; MANDAIC ASH; R; No_Joining_Group */
- JOINING_TYPE_D, /* 0855; MANDAIC AT; D; No_Joining_Group */
- 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 */
- JOINING_TYPE_X, /* 0859 */
- JOINING_TYPE_X, /* 085A */
- JOINING_TYPE_X, /* 085B */
- JOINING_TYPE_X, /* 085C */
- JOINING_TYPE_X, /* 085D */
- JOINING_TYPE_X, /* 085E */
- JOINING_TYPE_X, /* 085F */
- JOINING_TYPE_X, /* 0860 */
- JOINING_TYPE_X, /* 0861 */
- JOINING_TYPE_X, /* 0862 */
- JOINING_TYPE_X, /* 0863 */
- JOINING_TYPE_X, /* 0864 */
- JOINING_TYPE_X, /* 0865 */
- JOINING_TYPE_X, /* 0866 */
- JOINING_TYPE_X, /* 0867 */
- JOINING_TYPE_X, /* 0868 */
- JOINING_TYPE_X, /* 0869 */
- JOINING_TYPE_X, /* 086A */
- JOINING_TYPE_X, /* 086B */
- JOINING_TYPE_X, /* 086C */
- JOINING_TYPE_X, /* 086D */
- JOINING_TYPE_X, /* 086E */
- JOINING_TYPE_X, /* 086F */
- JOINING_TYPE_X, /* 0870 */
- JOINING_TYPE_X, /* 0871 */
- JOINING_TYPE_X, /* 0872 */
- JOINING_TYPE_X, /* 0873 */
- JOINING_TYPE_X, /* 0874 */
- JOINING_TYPE_X, /* 0875 */
- JOINING_TYPE_X, /* 0876 */
- JOINING_TYPE_X, /* 0877 */
- JOINING_TYPE_X, /* 0878 */
- JOINING_TYPE_X, /* 0879 */
- JOINING_TYPE_X, /* 087A */
- JOINING_TYPE_X, /* 087B */
- JOINING_TYPE_X, /* 087C */
- JOINING_TYPE_X, /* 087D */
- JOINING_TYPE_X, /* 087E */
- JOINING_TYPE_X, /* 087F */
- JOINING_TYPE_X, /* 0880 */
- JOINING_TYPE_X, /* 0881 */
- JOINING_TYPE_X, /* 0882 */
- JOINING_TYPE_X, /* 0883 */
- JOINING_TYPE_X, /* 0884 */
- JOINING_TYPE_X, /* 0885 */
- JOINING_TYPE_X, /* 0886 */
- JOINING_TYPE_X, /* 0887 */
- JOINING_TYPE_X, /* 0888 */
- JOINING_TYPE_X, /* 0889 */
- JOINING_TYPE_X, /* 088A */
- JOINING_TYPE_X, /* 088B */
- JOINING_TYPE_X, /* 088C */
- JOINING_TYPE_X, /* 088D */
- JOINING_TYPE_X, /* 088E */
- JOINING_TYPE_X, /* 088F */
- JOINING_TYPE_X, /* 0890 */
- JOINING_TYPE_X, /* 0891 */
- JOINING_TYPE_X, /* 0892 */
- JOINING_TYPE_X, /* 0893 */
- JOINING_TYPE_X, /* 0894 */
- JOINING_TYPE_X, /* 0895 */
- JOINING_TYPE_X, /* 0896 */
- JOINING_TYPE_X, /* 0897 */
- JOINING_TYPE_X, /* 0898 */
- JOINING_TYPE_X, /* 0899 */
- JOINING_TYPE_X, /* 089A */
- JOINING_TYPE_X, /* 089B */
- JOINING_TYPE_X, /* 089C */
- JOINING_TYPE_X, /* 089D */
- JOINING_TYPE_X, /* 089E */
- JOINING_TYPE_X, /* 089F */
+ R, /* 0840; MANDAIC HALQA; R; No_Joining_Group */
+ D, /* 0841; MANDAIC AB; D; No_Joining_Group */
+ D, /* 0842; MANDAIC AG; D; No_Joining_Group */
+ D, /* 0843; MANDAIC AD; D; No_Joining_Group */
+ D, /* 0844; MANDAIC AH; D; No_Joining_Group */
+ D, /* 0845; MANDAIC USHENNA; D; No_Joining_Group */
+ R, /* 0846; MANDAIC AZ; R; No_Joining_Group */
+ D, /* 0847; MANDAIC IT; D; No_Joining_Group */
+ D, /* 0848; MANDAIC ATT; D; No_Joining_Group */
+ R, /* 0849; MANDAIC AKSA; R; No_Joining_Group */
+ D, /* 084A; MANDAIC AK; D; No_Joining_Group */
+ D, /* 084B; MANDAIC AL; D; No_Joining_Group */
+ D, /* 084C; MANDAIC AM; D; No_Joining_Group */
+ D, /* 084D; MANDAIC AN; D; No_Joining_Group */
+ D, /* 084E; MANDAIC AS; D; No_Joining_Group */
+ R, /* 084F; MANDAIC IN; R; No_Joining_Group */
+ D, /* 0850; MANDAIC AP; D; No_Joining_Group */
+ D, /* 0851; MANDAIC ASZ; D; No_Joining_Group */
+ D, /* 0852; MANDAIC AQ; D; No_Joining_Group */
+ D, /* 0853; MANDAIC AR; D; No_Joining_Group */
+ R, /* 0854; MANDAIC ASH; R; No_Joining_Group */
+ D, /* 0855; MANDAIC AT; D; No_Joining_Group */
+ U, /* 0856; MANDAIC DUSHENNA; U; No_Joining_Group */
+ U, /* 0857; MANDAIC KAD; U; No_Joining_Group */
+ U, /* 0858; MANDAIC AIN; U; No_Joining_Group */
+ X, /* 0859 */
+ X, /* 085A */
+ X, /* 085B */
+ X, /* 085C */
+ X, /* 085D */
+ X, /* 085E */
+ X, /* 085F */
+ X, /* 0860 */
+ X, /* 0861 */
+ X, /* 0862 */
+ X, /* 0863 */
+ X, /* 0864 */
+ X, /* 0865 */
+ X, /* 0866 */
+ X, /* 0867 */
+ X, /* 0868 */
+ X, /* 0869 */
+ X, /* 086A */
+ X, /* 086B */
+ X, /* 086C */
+ X, /* 086D */
+ X, /* 086E */
+ X, /* 086F */
+ X, /* 0870 */
+ X, /* 0871 */
+ X, /* 0872 */
+ X, /* 0873 */
+ X, /* 0874 */
+ X, /* 0875 */
+ X, /* 0876 */
+ X, /* 0877 */
+ X, /* 0878 */
+ X, /* 0879 */
+ X, /* 087A */
+ X, /* 087B */
+ X, /* 087C */
+ X, /* 087D */
+ X, /* 087E */
+ X, /* 087F */
+ X, /* 0880 */
+ X, /* 0881 */
+ X, /* 0882 */
+ X, /* 0883 */
+ X, /* 0884 */
+ X, /* 0885 */
+ X, /* 0886 */
+ X, /* 0887 */
+ X, /* 0888 */
+ X, /* 0889 */
+ X, /* 088A */
+ X, /* 088B */
+ X, /* 088C */
+ X, /* 088D */
+ X, /* 088E */
+ X, /* 088F */
+ X, /* 0890 */
+ X, /* 0891 */
+ X, /* 0892 */
+ X, /* 0893 */
+ X, /* 0894 */
+ X, /* 0895 */
+ X, /* 0896 */
+ X, /* 0897 */
+ X, /* 0898 */
+ X, /* 0899 */
+ X, /* 089A */
+ X, /* 089B */
+ X, /* 089C */
+ X, /* 089D */
+ X, /* 089E */
+ 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 */
- JOINING_TYPE_D, /* 08A3; TAH WITH 2 DOTS ABOVE; D; TAH */
- JOINING_TYPE_D, /* 08A4; DOTLESS FEH WITH DOT BELOW AND 3 DOTS ABOVE; D; FEH */
- JOINING_TYPE_D, /* 08A5; QAF WITH DOT BELOW; D; QAF */
- JOINING_TYPE_D, /* 08A6; LAM WITH DOUBLE BAR; D; LAM */
- JOINING_TYPE_D, /* 08A7; MEEM WITH 3 DOTS ABOVE; D; MEEM */
- JOINING_TYPE_D, /* 08A8; YEH WITH HAMZA ABOVE; D; YEH */
- JOINING_TYPE_D, /* 08A9; YEH WITH DOT ABOVE; D; YEH */
- JOINING_TYPE_R, /* 08AA; REH WITH LOOP; R; REH */
- JOINING_TYPE_R, /* 08AB; WAW WITH DOT WITHIN; R; WAW */
- JOINING_TYPE_R, /* 08AC; ROHINGYA YEH; R; ROHINGYA YEH */
+ D, /* 08A0; DOTLESS BEH WITH V BELOW; D; BEH */
+ X, /* 08A1 */
+ D, /* 08A2; HAH WITH DOT BELOW AND 2 DOTS ABOVE; D; HAH */
+ D, /* 08A3; TAH WITH 2 DOTS ABOVE; D; TAH */
+ D, /* 08A4; DOTLESS FEH WITH DOT BELOW AND 3 DOTS ABOVE; D; FEH */
+ D, /* 08A5; QAF WITH DOT BELOW; D; QAF */
+ D, /* 08A6; LAM WITH DOUBLE BAR; D; LAM */
+ D, /* 08A7; MEEM WITH 3 DOTS ABOVE; D; MEEM */
+ D, /* 08A8; YEH WITH HAMZA ABOVE; D; YEH */
+ D, /* 08A9; YEH WITH DOT ABOVE; D; YEH */
+ R, /* 08AA; REH WITH LOOP; R; REH */
+ R, /* 08AB; WAW WITH DOT WITHIN; R; WAW */
+ R, /* 08AC; ROHINGYA YEH; R; ROHINGYA YEH */
};
#define JOINING_TABLE_FIRST 0x0600
#define JOINING_TABLE_LAST 0x08AC
+#undef X
+#undef R
+#undef U
+#undef A
+#undef DR
+#undef C
+#undef D
+
static const uint16_t shaping_table[][4] =
{
commit 3f5327a41efcf50f64d9498ef3dfd6875ef6a5ab
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Fri Jun 20 16:17:42 2014 -0400
[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 @@ indic-table: gen-indic-table.py IndicSyllabicCategory.txt IndicMatraCategory.txt
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:
-def print_joining_table(f):
+ j = line.find ('#')
+ if j >= 0:
+ line = line[:j]
- print
- print "static const uint8_t joining_table[] ="
- print "{"
+ 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)
- min_u = 0x110000
- max_u = 0
- num = 0
- last = -1
- block = ''
+ t = fields[1]
+
+ for u in range (start, end + 1):
+ blocks[u] = t
+
+def print_joining_table(f):
+
+ 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 @@ def print_joining_table(f):
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 "/* == Start of generated table == */"
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 "#ifndef HB_OT_SHAPE_COMPLEX_ARABIC_TABLE_HH"
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 @@ static const uint8_t joining_table[] =
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 @@ static const uint8_t joining_table[] =
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 @@ static const uint8_t joining_table[] =
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 @@ static const uint8_t joining_table[] =
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 @@ static const uint8_t joining_table[] =
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 @@ static const uint8_t joining_table[] =
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 @@ static const uint8_t joining_table[] =
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 @@ static const uint8_t joining_table[] =
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 */
commit 171f970e4f72d9fe1af30eab32b96906ee4a14f5
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Fri Jun 20 15:25:30 2014 -0400
[indic-table] Black-list Thai, Lao, and Tibetan
We don't need Indic table for those.
diff --git a/src/gen-indic-table.py b/src/gen-indic-table.py
index e94c3e5..10e4579 100755
--- a/src/gen-indic-table.py
+++ b/src/gen-indic-table.py
@@ -6,6 +6,8 @@ if len (sys.argv) != 4:
print >>sys.stderr, "usage: ./gen-indic-table.py IndicSyllabicCategory.txt IndicMatraCategory.txt Blocks.txt"
sys.exit (1)
+BLACKLISTED_BLOCKS = ["Thai", "Lao", "Tibetan"]
+
files = [file (x) for x in sys.argv[1:]]
headers = [[f.readline () for i in range (2)] for f in files]
@@ -52,6 +54,7 @@ for i,d in enumerate (data):
if not u in combined:
combined[u] = list (defaults)
combined[u][i] = v
+combined = {k:v for k,v in combined.items() if v[2] not in BLACKLISTED_BLOCKS}
data = combined
del combined
num = len (data)
diff --git a/src/hb-ot-shape-complex-indic-table.cc b/src/hb-ot-shape-complex-indic-table.cc
index 642c4e3..a6d805e 100644
--- a/src/hb-ot-shape-complex-indic-table.cc
+++ b/src/hb-ot-shape-complex-indic-table.cc
@@ -252,65 +252,8 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 0DE0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 0DE8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 0DF0 */ _(x,x), _(x,x), _(M,R), _(M,R), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0DF8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-
- /* Thai */
-
- /* 0E00 */ _(x,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 0E08 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 0E10 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 0E18 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 0E20 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 0E28 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(x,x),
- /* 0E30 */ _(M,R), _(M,T), _(M,R), _(M,R), _(M,T), _(M,T), _(M,T), _(M,T),
- /* 0E38 */ _(M,B), _(M,B), _(V,B), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0E40 */_(M,VOL),_(M,VOL),_(M,VOL),_(M,VOL),_(M,VOL), _(M,R), _(x,x), _(M,T),
- /* 0E48 */ _(TM,x), _(TM,x), _(TM,x), _(TM,x), _(x,x), _(Bi,x), _(V,T), _(x,x),
- /* 0E50 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0E58 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0E60 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0E68 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0E70 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0E78 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-
- /* Lao */
-
- /* 0E80 */ _(x,x), _(C,x), _(C,x), _(x,x), _(C,x), _(x,x), _(x,x), _(C,x),
- /* 0E88 */ _(C,x), _(x,x), _(C,x), _(x,x), _(x,x), _(C,x), _(x,x), _(x,x),
- /* 0E90 */ _(x,x), _(x,x), _(x,x), _(x,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 0E98 */ _(x,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 0EA0 */ _(x,x), _(C,x), _(C,x), _(C,x), _(x,x), _(C,x), _(x,x), _(C,x),
- /* 0EA8 */ _(x,x), _(x,x), _(C,x), _(C,x), _(x,x), _(C,x), _(C,x), _(x,x),
- /* 0EB0 */ _(M,R), _(M,T), _(M,R), _(M,R), _(M,T), _(M,T), _(M,T), _(M,T),
- /* 0EB8 */ _(M,B), _(M,B), _(x,x), _(M,T), _(CM,x), _(CM,x), _(x,x), _(x,x),
- /* 0EC0 */_(M,VOL),_(M,VOL),_(M,VOL),_(M,VOL),_(M,VOL), _(x,x), _(x,x), _(x,x),
- /* 0EC8 */ _(TM,x), _(TM,x), _(TM,x), _(TM,x), _(x,x), _(Bi,x), _(x,x), _(x,x),
- /* 0ED0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0ED8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(C,x), _(C,x), _(x,x), _(x,x),
-
-#define indic_offset_0x0f40 1504
-
-
- /* Tibetan */
-
- /* 0F40 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 0F48 */ _(x,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 0F50 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 0F58 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 0F60 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 0F68 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(x,x), _(x,x), _(x,x),
- /* 0F70 */ _(x,x), _(M,B), _(M,T), _(M,TB), _(M,B), _(M,B), _(M,TB), _(M,TB),
- /* 0F78 */ _(M,TB), _(M,TB), _(M,T), _(M,T), _(M,T), _(M,T), _(Bi,x), _(Vs,x),
- /* 0F80 */ _(M,T), _(M,TB), _(Bi,x), _(Bi,x), _(V,B), _(A,x), _(x,x), _(x,x),
- /* 0F88 */_(CHL,x),_(CHL,x),_(CHL,x),_(CHL,x),_(CHL,x), _(CS,x), _(CS,x), _(CS,x),
- /* 0F90 */ _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x),
- /* 0F98 */ _(x,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x),
- /* 0FA0 */ _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x),
- /* 0FA8 */ _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x),
- /* 0FB0 */ _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x),
- /* 0FB8 */ _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(x,x), _(x,x), _(x,x),
-
-#define indic_offset_0x1000 1632
+
+#define indic_offset_0x1000 1272
/* Myanmar */
@@ -336,7 +279,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 1090 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 1098 */ _(x,x), _(x,x), _(TM,x), _(TM,x), _(M,R), _(M,T), _(x,x), _(x,x),
-#define indic_offset_0x1700 1792
+#define indic_offset_0x1700 1432
/* Tagalog */
@@ -382,7 +325,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 17D0 */ _(x,x), _(V,T), _(V,I), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 17D8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(A,x), _(x,x), _(x,x), _(x,x),
-#define indic_offset_0x1900 2016
+#define indic_offset_0x1900 1656
/* Limbu */
@@ -448,7 +391,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 1A70 */ _(M,L), _(M,L), _(M,L), _(M,T), _(M,T), _(TM,x), _(TM,x), _(TM,x),
/* 1A78 */ _(TM,x), _(TM,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-#define indic_offset_0x1b00 2400
+#define indic_offset_0x1b00 2040
/* Balinese */
@@ -505,14 +448,14 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 1C40 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 1C48 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(C,x), _(C,x), _(C,x),
-#define indic_offset_0x1cf0 2736
+#define indic_offset_0x1cf0 2376
/* Vedic Extensions */
/* 1CF0 */ _(x,x), _(x,x), _(Vs,x), _(Vs,x), _(x,x), _(x,x), _(x,x), _(x,x),
-#define indic_offset_0xa800 2744
+#define indic_offset_0xa800 2384
/* Syloti Nagri */
@@ -549,7 +492,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* A8B8 */ _(M,R), _(M,R), _(M,R), _(M,R), _(M,R), _(M,R), _(M,R), _(M,R),
/* A8C0 */ _(M,R), _(M,R), _(M,R), _(M,R), _(V,B), _(x,x), _(x,x), _(x,x),
-#define indic_offset_0xa908 2944
+#define indic_offset_0xa908 2584
/* Kayah Li */
@@ -585,7 +528,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* A9B8 */ _(M,B), _(M,B), _(M,L), _(M,L), _(M,T), _(CS,x), _(CM,x), _(CM,x),
/* A9C0 */ _(V,BR), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-#define indic_offset_0xaa00 3136
+#define indic_offset_0xaa00 2776
/* Cham */
@@ -631,7 +574,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* AAE8 */ _(C,x), _(C,x), _(C,x), _(M,L), _(M,B), _(M,T), _(M,L), _(M,R),
/* AAF0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(Vs,x), _(V,I), _(x,x),
-#define indic_offset_0xabc0 3384
+#define indic_offset_0xabc0 3024
/* Meetei Mayek */
@@ -643,7 +586,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* ABE0 */ _(CF,x), _(CF,x), _(CF,x), _(M,R), _(M,R), _(M,T), _(M,R), _(M,R),
/* ABE8 */ _(M,B), _(M,R), _(M,R), _(x,x), _(TM,x), _(V,B), _(x,x), _(x,x),
-#define indic_offset_0x10a00 3432
+#define indic_offset_0x10a00 3072
/* Kharoshthi */
@@ -657,7 +600,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 10A30 */ _(C,x), _(C,x), _(C,x), _(C,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 10A38 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(V,I),
-#define indic_offset_0x11000 3496
+#define indic_offset_0x11000 3136
/* Brahmi */
@@ -672,7 +615,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 11038 */ _(M,T), _(M,T), _(M,T), _(M,T), _(M,B), _(M,B), _(M,B), _(M,B),
/* 11040 */ _(M,B), _(M,B), _(M,T), _(M,T), _(M,T), _(M,T), _(V,T), _(x,x),
-#define indic_offset_0x11080 3568
+#define indic_offset_0x11080 3208
/* Kaithi */
@@ -686,7 +629,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 110B0 */ _(M,R), _(M,L), _(M,R), _(M,B), _(M,B), _(M,T), _(M,T), _(M,R),
/* 110B8 */ _(M,R), _(V,B), _(N,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-#define indic_offset_0x11100 3632
+#define indic_offset_0x11100 3272
/* Chakma */
@@ -699,7 +642,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 11128 */ _(M,T), _(M,T), _(M,B), _(M,B), _(M,L), _(M,T), _(M,TB), _(M,TB),
/* 11130 */ _(M,T), _(M,B), _(M,B), _(V,I), _(V,T), _(x,x), _(x,x), _(x,x),
-#define indic_offset_0x11180 3688
+#define indic_offset_0x11180 3328
/* Sharada */
@@ -714,7 +657,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 111B8 */ _(M,B), _(M,B), _(M,B), _(M,B), _(M,T), _(M,T), _(M,T), _(M,TR),
/* 111C0 */ _(V,R), _(A,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-#define indic_offset_0x11680 3760
+#define indic_offset_0x11680 3400
/* Takri */
@@ -727,7 +670,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 116A8 */ _(C,x), _(C,x), _(C,x), _(Bi,x), _(Vs,x), _(M,T), _(M,L), _(M,R),
/* 116B0 */ _(M,B), _(M,B), _(M,T), _(M,T), _(M,T), _(M,T), _(V,T), _(N,x),
-}; /* Table items: 3816; occupancy: 69% */
+}; /* Table items: 3456; occupancy: 69% */
INDIC_TABLE_ELEMENT_TYPE
hb_indic_get_categories (hb_codepoint_t u)
@@ -735,8 +678,7 @@ hb_indic_get_categories (hb_codepoint_t u)
switch (u >> 12)
{
case 0x0:
- if (0x0900 <= u && u <= 0x0EE0) return indic_table[u - 0x0900 + indic_offset_0x0900];
- if (0x0F40 <= u && u <= 0x0FC0) return indic_table[u - 0x0F40 + indic_offset_0x0f40];
+ if (0x0900 <= u && u <= 0x0DF8) return indic_table[u - 0x0900 + indic_offset_0x0900];
if (unlikely (u == 0x00A0)) return _(CP,x);
break;
commit 65ac2dae4f284f563b2dc476a21e2b5a48124de8
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Fri Jun 20 15:12:49 2014 -0400
[indic-table] Speed up lookup
diff --git a/src/gen-indic-table.py b/src/gen-indic-table.py
index b568d1e..e94c3e5 100755
--- a/src/gen-indic-table.py
+++ b/src/gen-indic-table.py
@@ -194,11 +194,23 @@ print
print "INDIC_TABLE_ELEMENT_TYPE"
print "hb_indic_get_categories (hb_codepoint_t u)"
print "{"
-for (start,end) in zip (starts, ends):
- offset = "indic_offset_0x%04x" % start
- print " if (0x%04X <= u && u <= 0x%04X) return indic_table[u - 0x%04X + %s];" % (start, end, start, offset)
-for u,d in singles.items ():
- print " if (unlikely (u == 0x%04X)) return _(%s,%s);" % (u, short[0][d[0]], short[1][d[1]])
+print " switch (u >> 12)"
+print " {"
+pages = set([u>>12 for u in starts+ends+singles.keys()])
+for p in pages:
+ print " case 0x%0X:" % p
+ for (start,end) in zip (starts, ends):
+ if p not in [start>>12, end>>12]: continue
+ offset = "indic_offset_0x%04x" % start
+ print " if (0x%04X <= u && u <= 0x%04X) return indic_table[u - 0x%04X + %s];" % (start, end, start, offset)
+ for u,d in singles.items ():
+ if p != u>>12: continue
+ print " if (unlikely (u == 0x%04X)) return _(%s,%s);" % (u, short[0][d[0]], short[1][d[1]])
+ print " break;"
+ print ""
+print " default:"
+print " break;"
+print " }"
print " return _(x,x);"
print "}"
print
diff --git a/src/hb-ot-shape-complex-indic-table.cc b/src/hb-ot-shape-complex-indic-table.cc
index e37509f..642c4e3 100644
--- a/src/hb-ot-shape-complex-indic-table.cc
+++ b/src/hb-ot-shape-complex-indic-table.cc
@@ -732,25 +732,48 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
INDIC_TABLE_ELEMENT_TYPE
hb_indic_get_categories (hb_codepoint_t u)
{
- if (0x0900 <= u && u <= 0x0EE0) return indic_table[u - 0x0900 + indic_offset_0x0900];
- if (0x0F40 <= u && u <= 0x0FC0) return indic_table[u - 0x0F40 + indic_offset_0x0f40];
- if (0x1000 <= u && u <= 0x10A0) return indic_table[u - 0x1000 + indic_offset_0x1000];
- if (0x1700 <= u && u <= 0x17E0) return indic_table[u - 0x1700 + indic_offset_0x1700];
- if (0x1900 <= u && u <= 0x1A80) return indic_table[u - 0x1900 + indic_offset_0x1900];
- if (0x1B00 <= u && u <= 0x1C50) return indic_table[u - 0x1B00 + indic_offset_0x1b00];
- if (0x1CF0 <= u && u <= 0x1CF8) return indic_table[u - 0x1CF0 + indic_offset_0x1cf0];
- if (0xA800 <= u && u <= 0xA8C8) return indic_table[u - 0xA800 + indic_offset_0xa800];
- if (0xA908 <= u && u <= 0xA9C8) return indic_table[u - 0xA908 + indic_offset_0xa908];
- if (0xAA00 <= u && u <= 0xAAF8) return indic_table[u - 0xAA00 + indic_offset_0xaa00];
- if (0xABC0 <= u && u <= 0xABF0) return indic_table[u - 0xABC0 + indic_offset_0xabc0];
- if (0x10A00 <= u && u <= 0x10A40) return indic_table[u - 0x10A00 + indic_offset_0x10a00];
- if (0x11000 <= u && u <= 0x11048) return indic_table[u - 0x11000 + indic_offset_0x11000];
- if (0x11080 <= u && u <= 0x110C0) return indic_table[u - 0x11080 + indic_offset_0x11080];
- if (0x11100 <= u && u <= 0x11138) return indic_table[u - 0x11100 + indic_offset_0x11100];
- if (0x11180 <= u && u <= 0x111C8) return indic_table[u - 0x11180 + indic_offset_0x11180];
- if (0x11680 <= u && u <= 0x116B8) return indic_table[u - 0x11680 + indic_offset_0x11680];
- if (unlikely (u == 0x00A0)) return _(CP,x);
- if (unlikely (u == 0x25CC)) return _(CP,x);
+ switch (u >> 12)
+ {
+ case 0x0:
+ if (0x0900 <= u && u <= 0x0EE0) return indic_table[u - 0x0900 + indic_offset_0x0900];
+ if (0x0F40 <= u && u <= 0x0FC0) return indic_table[u - 0x0F40 + indic_offset_0x0f40];
+ if (unlikely (u == 0x00A0)) return _(CP,x);
+ break;
+
+ case 0x1:
+ if (0x1000 <= u && u <= 0x10A0) return indic_table[u - 0x1000 + indic_offset_0x1000];
+ if (0x1700 <= u && u <= 0x17E0) return indic_table[u - 0x1700 + indic_offset_0x1700];
+ if (0x1900 <= u && u <= 0x1A80) return indic_table[u - 0x1900 + indic_offset_0x1900];
+ if (0x1B00 <= u && u <= 0x1C50) return indic_table[u - 0x1B00 + indic_offset_0x1b00];
+ if (0x1CF0 <= u && u <= 0x1CF8) return indic_table[u - 0x1CF0 + indic_offset_0x1cf0];
+ break;
+
+ case 0x2:
+ if (unlikely (u == 0x25CC)) return _(CP,x);
+ break;
+
+ case 0xA:
+ if (0xA800 <= u && u <= 0xA8C8) return indic_table[u - 0xA800 + indic_offset_0xa800];
+ if (0xA908 <= u && u <= 0xA9C8) return indic_table[u - 0xA908 + indic_offset_0xa908];
+ if (0xAA00 <= u && u <= 0xAAF8) return indic_table[u - 0xAA00 + indic_offset_0xaa00];
+ if (0xABC0 <= u && u <= 0xABF0) return indic_table[u - 0xABC0 + indic_offset_0xabc0];
+ break;
+
+ case 0x10:
+ if (0x10A00 <= u && u <= 0x10A40) return indic_table[u - 0x10A00 + indic_offset_0x10a00];
+ break;
+
+ case 0x11:
+ if (0x11000 <= u && u <= 0x11048) return indic_table[u - 0x11000 + indic_offset_0x11000];
+ if (0x11080 <= u && u <= 0x110C0) return indic_table[u - 0x11080 + indic_offset_0x11080];
+ if (0x11100 <= u && u <= 0x11138) return indic_table[u - 0x11100 + indic_offset_0x11100];
+ if (0x11180 <= u && u <= 0x111C8) return indic_table[u - 0x11180 + indic_offset_0x11180];
+ if (0x11680 <= u && u <= 0x116B8) return indic_table[u - 0x11680 + indic_offset_0x11680];
+ break;
+
+ default:
+ break;
+ }
return _(x,x);
}
commit 64442a3f4c5c7be08893454742cad6bfe73cb8d7
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Fri Jun 20 14:58:53 2014 -0400
[indic-table] Fix compiler warning
diff --git a/src/gen-indic-table.py b/src/gen-indic-table.py
index 0310a9c..b568d1e 100755
--- a/src/gen-indic-table.py
+++ b/src/gen-indic-table.py
@@ -188,10 +188,8 @@ ends.append (last + 1)
offset += ends[-1] - starts[-1]
print
print
-print "#define indic_offset_total %d" % offset
-print
occupancy = used * 100. / total
-print "}; /* Table occupancy: %d%% */" % occupancy
+print "}; /* Table items: %d; occupancy: %d%% */" % (offset, occupancy)
print
print "INDIC_TABLE_ELEMENT_TYPE"
print "hb_indic_get_categories (hb_codepoint_t u)"
diff --git a/src/hb-ot-shape-complex-indic-table.cc b/src/hb-ot-shape-complex-indic-table.cc
index ca986dd..e37509f 100644
--- a/src/hb-ot-shape-complex-indic-table.cc
+++ b/src/hb-ot-shape-complex-indic-table.cc
@@ -727,9 +727,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 116A8 */ _(C,x), _(C,x), _(C,x), _(Bi,x), _(Vs,x), _(M,T), _(M,L), _(M,R),
/* 116B0 */ _(M,B), _(M,B), _(M,T), _(M,T), _(M,T), _(M,T), _(V,T), _(N,x),
-#define indic_offset_total 3816
-
-}; /* Table occupancy: 69% */
+}; /* Table items: 3816; occupancy: 69% */
INDIC_TABLE_ELEMENT_TYPE
hb_indic_get_categories (hb_codepoint_t u)
commit 0436e1d50527497ebe5053b51a34ce6590276249
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Fri Jun 20 14:56:22 2014 -0400
[indic-table] Make table more compact by not covering full blocks
-#define indic_offset_total 4416
+#define indic_offset_total 3816
-}; /* Table occupancy: 60% */
+}; /* Table occupancy: 69% */
diff --git a/src/gen-indic-table.py b/src/gen-indic-table.py
index 5adbe6a..0310a9c 100755
--- a/src/gen-indic-table.py
+++ b/src/gen-indic-table.py
@@ -124,10 +124,13 @@ print
total = 0
used = 0
+last_block = None
def print_block (block, start, end, data):
- print
- print
- print " /* %s */" % block
+ global total, used, last_block
+ if block and block != last_block:
+ print
+ print
+ print " /* %s */" % block
num = 0
assert start % 8 == 0
assert (end+1) % 8 == 0
@@ -140,9 +143,10 @@ def print_block (block, start, end, data):
d = data.get (u, defaults)
sys.stdout.write ("%9s" % ("_(%s,%s)," % (short[0][d[0]], short[1][d[1]])))
- global total, used
total += end - start + 1
used += num
+ if block:
+ last_block = block
uu = data.keys ()
uu.sort ()
@@ -157,11 +161,17 @@ for u in uu:
if u <= last:
continue
block = data[u][2]
- (start, end) = blocks[block]
+ (bstart, bend) = blocks[block]
+
+ start = u//8*8
+ end = start+1
+ while end < bend and end in uu:
+ end += 1
+ end = (end-1)//8*8 + 7
if start != last + 1:
- if start - last <= 33:
- print_block ("FILLER", last+1, start-1, data)
+ if start - last <= 1+16*3:
+ print_block (None, last+1, start-1, data)
last = start-1
else:
if last >= 0:
diff --git a/src/hb-ot-shape-complex-indic-table.cc b/src/hb-ot-shape-complex-indic-table.cc
index fc3a149..ca986dd 100644
--- a/src/hb-ot-shape-complex-indic-table.cc
+++ b/src/hb-ot-shape-complex-indic-table.cc
@@ -287,21 +287,12 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 0EC8 */ _(TM,x), _(TM,x), _(TM,x), _(TM,x), _(x,x), _(Bi,x), _(x,x), _(x,x),
/* 0ED0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 0ED8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(C,x), _(C,x), _(x,x), _(x,x),
- /* 0EE0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0EE8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0EF0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0EF8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+
+#define indic_offset_0x0f40 1504
+
/* Tibetan */
- /* 0F00 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0F08 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0F10 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0F18 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0F20 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0F28 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0F30 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0F38 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 0F40 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 0F48 */ _(x,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 0F50 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -318,14 +309,9 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 0FA8 */ _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x),
/* 0FB0 */ _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x),
/* 0FB8 */ _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(CS,x), _(x,x), _(x,x), _(x,x),
- /* 0FC0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0FC8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0FD0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0FD8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0FE0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0FE8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0FF0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0FF8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+
+#define indic_offset_0x1000 1632
+
/* Myanmar */
@@ -350,7 +336,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 1090 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 1098 */ _(x,x), _(x,x), _(TM,x), _(TM,x), _(M,R), _(M,T), _(x,x), _(x,x),
-#define indic_offset_0x1700 1952
+#define indic_offset_0x1700 1792
/* Tagalog */
@@ -395,12 +381,8 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 17C8 */ _(M,R), _(RS,x), _(RS,x), _(x,x), _(CR,x), _(x,x), _(x,x), _(x,x),
/* 17D0 */ _(x,x), _(V,T), _(V,I), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 17D8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(A,x), _(x,x), _(x,x), _(x,x),
- /* 17E0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 17E8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 17F0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 17F8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-#define indic_offset_0x1900 2208
+#define indic_offset_0x1900 2016
/* Limbu */
@@ -439,9 +421,6 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 19C8 */ _(TM,x), _(TM,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 19D0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 19D8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-
- /* FILLER */
-
/* 19E0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 19E8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 19F0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
@@ -468,14 +447,8 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 1A68 */ _(M,T), _(M,B), _(M,B), _(M,T), _(M,B), _(M,R), _(M,L), _(M,L),
/* 1A70 */ _(M,L), _(M,L), _(M,L), _(M,T), _(M,T), _(TM,x), _(TM,x), _(TM,x),
/* 1A78 */ _(TM,x), _(TM,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1A80 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1A88 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1A90 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1A98 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1AA0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1AA8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-#define indic_offset_0x1b00 2640
+#define indic_offset_0x1b00 2400
/* Balinese */
@@ -532,19 +505,14 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 1C40 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 1C48 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(C,x), _(C,x), _(C,x),
-#define indic_offset_0x1cd0 2976
+#define indic_offset_0x1cf0 2736
/* Vedic Extensions */
- /* 1CD0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1CD8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1CE0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1CE8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 1CF0 */ _(x,x), _(x,x), _(Vs,x), _(Vs,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 1CF8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-#define indic_offset_0xa800 3024
+#define indic_offset_0xa800 2744
/* Syloti Nagri */
@@ -555,9 +523,6 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* A818 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* A820 */ _(C,x), _(C,x), _(C,x), _(M,R), _(M,R), _(M,B), _(M,T), _(M,R),
/* A828 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-
- /* FILLER */
-
/* A830 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* A838 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
@@ -583,20 +548,12 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* A8B0 */ _(C,x), _(C,x), _(C,x), _(C,x), _(CF,x), _(M,R), _(M,R), _(M,R),
/* A8B8 */ _(M,R), _(M,R), _(M,R), _(M,R), _(M,R), _(M,R), _(M,R), _(M,R),
/* A8C0 */ _(M,R), _(M,R), _(M,R), _(M,R), _(V,B), _(x,x), _(x,x), _(x,x),
- /* A8C8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* A8D0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* A8D8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* FILLER */
+#define indic_offset_0xa908 2944
- /* A8E0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* A8E8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* A8F0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* A8F8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* Kayah Li */
- /* A900 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* A908 */ _(x,x), _(x,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* A910 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* A918 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -611,9 +568,6 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* A948 */ _(M,B), _(M,B), _(M,T), _(M,B), _(M,B), _(M,B), _(M,B), _(CF,x),
/* A950 */ _(CF,x), _(CF,x), _(CF,x), _(V,R), _(x,x), _(x,x), _(x,x), _(x,x),
/* A958 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-
- /* FILLER */
-
/* A960 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* A968 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* A970 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
@@ -630,16 +584,9 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* A9B0 */ _(C,x), _(C,x), _(C,x), _(N,x), _(M,R), _(M,R), _(M,T), _(M,T),
/* A9B8 */ _(M,B), _(M,B), _(M,L), _(M,L), _(M,T), _(CS,x), _(CM,x), _(CM,x),
/* A9C0 */ _(V,BR), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* A9C8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* A9D0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* A9D8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* FILLER */
+#define indic_offset_0xaa00 3136
- /* A9E0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* A9E8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* A9F0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* A9F8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* Cham */
@@ -683,9 +630,8 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* AAE0 */ _(VI,x), _(VI,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* AAE8 */ _(C,x), _(C,x), _(C,x), _(M,L), _(M,B), _(M,T), _(M,L), _(M,R),
/* AAF0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(Vs,x), _(V,I), _(x,x),
- /* AAF8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-#define indic_offset_0xabc0 3792
+#define indic_offset_0xabc0 3384
/* Meetei Mayek */
@@ -696,10 +642,8 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* ABD8 */ _(C,x), _(C,x), _(C,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x), _(CF,x),
/* ABE0 */ _(CF,x), _(CF,x), _(CF,x), _(M,R), _(M,R), _(M,T), _(M,R), _(M,R),
/* ABE8 */ _(M,B), _(M,R), _(M,R), _(x,x), _(TM,x), _(V,B), _(x,x), _(x,x),
- /* ABF0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* ABF8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-#define indic_offset_0x10a00 3856
+#define indic_offset_0x10a00 3432
/* Kharoshthi */
@@ -712,12 +656,8 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 10A28 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 10A30 */ _(C,x), _(C,x), _(C,x), _(C,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 10A38 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(V,I),
- /* 10A40 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 10A48 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 10A50 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 10A58 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-#define indic_offset_0x11000 3952
+#define indic_offset_0x11000 3496
/* Brahmi */
@@ -731,13 +671,9 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 11030 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 11038 */ _(M,T), _(M,T), _(M,T), _(M,T), _(M,B), _(M,B), _(M,B), _(M,B),
/* 11040 */ _(M,B), _(M,B), _(M,T), _(M,T), _(M,T), _(M,T), _(V,T), _(x,x),
- /* 11048 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 11050 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 11058 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 11060 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 11068 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 11070 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 11078 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+
+#define indic_offset_0x11080 3568
+
/* Kaithi */
@@ -749,10 +685,8 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 110A8 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 110B0 */ _(M,R), _(M,L), _(M,R), _(M,B), _(M,B), _(M,T), _(M,T), _(M,R),
/* 110B8 */ _(M,R), _(V,B), _(N,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 110C0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 110C8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-#define indic_offset_0x11100 4160
+#define indic_offset_0x11100 3632
/* Chakma */
@@ -764,11 +698,8 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 11120 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(M,T),
/* 11128 */ _(M,T), _(M,T), _(M,B), _(M,B), _(M,L), _(M,T), _(M,TB), _(M,TB),
/* 11130 */ _(M,T), _(M,B), _(M,B), _(V,I), _(V,T), _(x,x), _(x,x), _(x,x),
- /* 11138 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 11140 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 11148 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-#define indic_offset_0x11180 4240
+#define indic_offset_0x11180 3688
/* Sharada */
@@ -782,11 +713,8 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 111B0 */ _(C,x), _(C,x), _(C,x), _(M,R), _(M,L), _(M,R), _(M,B), _(M,B),
/* 111B8 */ _(M,B), _(M,B), _(M,B), _(M,B), _(M,T), _(M,T), _(M,T), _(M,TR),
/* 111C0 */ _(V,R), _(A,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 111C8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 111D0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 111D8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-#define indic_offset_0x11680 4336
+#define indic_offset_0x11680 3760
/* Takri */
@@ -798,29 +726,31 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 116A0 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 116A8 */ _(C,x), _(C,x), _(C,x), _(Bi,x), _(Vs,x), _(M,T), _(M,L), _(M,R),
/* 116B0 */ _(M,B), _(M,B), _(M,T), _(M,T), _(M,T), _(M,T), _(V,T), _(N,x),
- /* 116B8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 116C0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 116C8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
-#define indic_offset_total 4416
+#define indic_offset_total 3816
-}; /* Table occupancy: 60% */
+}; /* Table occupancy: 69% */
INDIC_TABLE_ELEMENT_TYPE
hb_indic_get_categories (hb_codepoint_t u)
{
- if (0x0900 <= u && u <= 0x10A0) return indic_table[u - 0x0900 + indic_offset_0x0900];
- if (0x1700 <= u && u <= 0x1800) return indic_table[u - 0x1700 + indic_offset_0x1700];
- if (0x1900 <= u && u <= 0x1AB0) return indic_table[u - 0x1900 + indic_offset_0x1900];
+ if (0x0900 <= u && u <= 0x0EE0) return indic_table[u - 0x0900 + indic_offset_0x0900];
+ if (0x0F40 <= u && u <= 0x0FC0) return indic_table[u - 0x0F40 + indic_offset_0x0f40];
+ if (0x1000 <= u && u <= 0x10A0) return indic_table[u - 0x1000 + indic_offset_0x1000];
+ if (0x1700 <= u && u <= 0x17E0) return indic_table[u - 0x1700 + indic_offset_0x1700];
+ if (0x1900 <= u && u <= 0x1A80) return indic_table[u - 0x1900 + indic_offset_0x1900];
if (0x1B00 <= u && u <= 0x1C50) return indic_table[u - 0x1B00 + indic_offset_0x1b00];
- if (0x1CD0 <= u && u <= 0x1D00) return indic_table[u - 0x1CD0 + indic_offset_0x1cd0];
- if (0xA800 <= u && u <= 0xAB00) return indic_table[u - 0xA800 + indic_offset_0xa800];
- if (0xABC0 <= u && u <= 0xAC00) return indic_table[u - 0xABC0 + indic_offset_0xabc0];
- if (0x10A00 <= u && u <= 0x10A60) return indic_table[u - 0x10A00 + indic_offset_0x10a00];
- if (0x11000 <= u && u <= 0x110D0) return indic_table[u - 0x11000 + indic_offset_0x11000];
- if (0x11100 <= u && u <= 0x11150) return indic_table[u - 0x11100 + indic_offset_0x11100];
- if (0x11180 <= u && u <= 0x111E0) return indic_table[u - 0x11180 + indic_offset_0x11180];
- if (0x11680 <= u && u <= 0x116D0) return indic_table[u - 0x11680 + indic_offset_0x11680];
+ if (0x1CF0 <= u && u <= 0x1CF8) return indic_table[u - 0x1CF0 + indic_offset_0x1cf0];
+ if (0xA800 <= u && u <= 0xA8C8) return indic_table[u - 0xA800 + indic_offset_0xa800];
+ if (0xA908 <= u && u <= 0xA9C8) return indic_table[u - 0xA908 + indic_offset_0xa908];
+ if (0xAA00 <= u && u <= 0xAAF8) return indic_table[u - 0xAA00 + indic_offset_0xaa00];
+ if (0xABC0 <= u && u <= 0xABF0) return indic_table[u - 0xABC0 + indic_offset_0xabc0];
+ if (0x10A00 <= u && u <= 0x10A40) return indic_table[u - 0x10A00 + indic_offset_0x10a00];
+ if (0x11000 <= u && u <= 0x11048) return indic_table[u - 0x11000 + indic_offset_0x11000];
+ if (0x11080 <= u && u <= 0x110C0) return indic_table[u - 0x11080 + indic_offset_0x11080];
+ if (0x11100 <= u && u <= 0x11138) return indic_table[u - 0x11100 + indic_offset_0x11100];
+ if (0x11180 <= u && u <= 0x111C8) return indic_table[u - 0x11180 + indic_offset_0x11180];
+ if (0x11680 <= u && u <= 0x116B8) return indic_table[u - 0x11680 + indic_offset_0x11680];
if (unlikely (u == 0x00A0)) return _(CP,x);
if (unlikely (u == 0x25CC)) return _(CP,x);
return _(x,x);
commit 190a251479b3cfc68871ff1daf9a9d1abe3f86e6
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Fri Jun 20 14:41:39 2014 -0400
[indic-table] Remove block range from data table
No functional change.
diff --git a/src/gen-indic-table.py b/src/gen-indic-table.py
index 9ed3fd6..5adbe6a 100755
--- a/src/gen-indic-table.py
+++ b/src/gen-indic-table.py
@@ -127,8 +127,10 @@ used = 0
def print_block (block, start, end, data):
print
print
- print " /* %s (%04X..%04X) */" % (block, start, end)
+ print " /* %s */" % block
num = 0
+ assert start % 8 == 0
+ assert (end+1) % 8 == 0
for u in range (start, end+1):
if u % 8 == 0:
print
diff --git a/src/hb-ot-shape-complex-indic-table.cc b/src/hb-ot-shape-complex-indic-table.cc
index 18a022b..fc3a149 100644
--- a/src/hb-ot-shape-complex-indic-table.cc
+++ b/src/hb-ot-shape-complex-indic-table.cc
@@ -64,7 +64,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
#define indic_offset_0x0900 0
- /* Devanagari (0900..097F) */
+ /* Devanagari */
/* 0900 */ _(Bi,x), _(Bi,x), _(Bi,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
/* 0908 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
@@ -83,7 +83,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 0970 */ _(x,x), _(x,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
/* 0978 */ _(x,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* Bengali (0980..09FF) */
+ /* Bengali */
/* 0980 */ _(x,x), _(Bi,x), _(Bi,x), _(Vs,x), _(x,x), _(VI,x), _(VI,x), _(VI,x),
/* 0988 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(x,x), _(x,x), _(VI,x),
@@ -102,7 +102,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 09F0 */ _(C,x), _(C,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 09F8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Gurmukhi (0A00..0A7F) */
+ /* Gurmukhi */
/* 0A00 */ _(x,x), _(Bi,x), _(Bi,x), _(Vs,x), _(x,x), _(VI,x), _(VI,x), _(VI,x),
/* 0A08 */ _(VI,x), _(VI,x), _(VI,x), _(x,x), _(x,x), _(x,x), _(x,x), _(VI,x),
@@ -121,7 +121,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 0A70 */ _(Bi,x), _(x,x), _(CP,x), _(CP,x), _(x,x), _(CM,x), _(x,x), _(x,x),
/* 0A78 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Gujarati (0A80..0AFF) */
+ /* Gujarati */
/* 0A80 */ _(x,x), _(Bi,x), _(Bi,x), _(Vs,x), _(x,x), _(VI,x), _(VI,x), _(VI,x),
/* 0A88 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(x,x), _(VI,x),
@@ -140,7 +140,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 0AF0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 0AF8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Oriya (0B00..0B7F) */
+ /* Oriya */
/* 0B00 */ _(x,x), _(Bi,x), _(Bi,x), _(Vs,x), _(x,x), _(VI,x), _(VI,x), _(VI,x),
/* 0B08 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(x,x), _(x,x), _(VI,x),
@@ -159,7 +159,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 0B70 */ _(x,x), _(C,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 0B78 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Tamil (0B80..0BFF) */
+ /* Tamil */
/* 0B80 */ _(x,x), _(x,x), _(Bi,x), _(ML,x), _(x,x), _(VI,x), _(VI,x), _(VI,x),
/* 0B88 */ _(VI,x), _(VI,x), _(VI,x), _(x,x), _(x,x), _(x,x), _(VI,x), _(VI,x),
@@ -178,7 +178,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 0BF0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 0BF8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Telugu (0C00..0C7F) */
+ /* Telugu */
/* 0C00 */ _(x,x), _(Bi,x), _(Bi,x), _(Vs,x), _(x,x), _(VI,x), _(VI,x), _(VI,x),
/* 0C08 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(x,x), _(VI,x), _(VI,x),
@@ -197,7 +197,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 0C70 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 0C78 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Kannada (0C80..0CFF) */
+ /* Kannada */
/* 0C80 */ _(x,x), _(x,x), _(Bi,x), _(Vs,x), _(x,x), _(VI,x), _(VI,x), _(VI,x),
/* 0C88 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(x,x), _(VI,x), _(VI,x),
@@ -216,7 +216,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 0CF0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 0CF8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Malayalam (0D00..0D7F) */
+ /* Malayalam */
/* 0D00 */ _(x,x), _(x,x), _(Bi,x), _(Vs,x), _(x,x), _(VI,x), _(VI,x), _(VI,x),
/* 0D08 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(x,x), _(VI,x), _(VI,x),
@@ -235,7 +235,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 0D70 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 0D78 */ _(x,x), _(x,x), _(CD,x), _(CD,x), _(CD,x), _(CD,x), _(CD,x), _(CD,x),
- /* Sinhala (0D80..0DFF) */
+ /* Sinhala */
/* 0D80 */ _(x,x), _(x,x), _(Bi,x), _(Vs,x), _(x,x), _(VI,x), _(VI,x), _(VI,x),
/* 0D88 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
@@ -254,7 +254,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 0DF0 */ _(x,x), _(x,x), _(M,R), _(M,R), _(x,x), _(x,x), _(x,x), _(x,x),
/* 0DF8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Thai (0E00..0E7F) */
+ /* Thai */
/* 0E00 */ _(x,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 0E08 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -273,7 +273,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 0E70 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 0E78 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Lao (0E80..0EFF) */
+ /* Lao */
/* 0E80 */ _(x,x), _(C,x), _(C,x), _(x,x), _(C,x), _(x,x), _(x,x), _(C,x),
/* 0E88 */ _(C,x), _(x,x), _(C,x), _(x,x), _(x,x), _(C,x), _(x,x), _(x,x),
@@ -292,7 +292,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 0EF0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 0EF8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Tibetan (0F00..0FFF) */
+ /* Tibetan */
/* 0F00 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 0F08 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
@@ -327,7 +327,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 0FF0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 0FF8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Myanmar (1000..109F) */
+ /* Myanmar */
/* 1000 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1008 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -353,35 +353,35 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
#define indic_offset_0x1700 1952
- /* Tagalog (1700..171F) */
+ /* Tagalog */
/* 1700 */ _(VI,x), _(VI,x), _(VI,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1708 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(x,x), _(C,x), _(C,x),
/* 1710 */ _(C,x), _(C,x), _(M,T), _(M,B), _(V,B), _(x,x), _(x,x), _(x,x),
/* 1718 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Hanunoo (1720..173F) */
+ /* Hanunoo */
/* 1720 */ _(VI,x), _(VI,x), _(VI,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1728 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1730 */ _(C,x), _(C,x), _(M,T), _(M,B), _(V,B), _(x,x), _(x,x), _(x,x),
/* 1738 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Buhid (1740..175F) */
+ /* Buhid */
/* 1740 */ _(VI,x), _(VI,x), _(VI,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1748 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1750 */ _(C,x), _(C,x), _(M,T), _(M,B), _(x,x), _(x,x), _(x,x), _(x,x),
/* 1758 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Tagbanwa (1760..177F) */
+ /* Tagbanwa */
/* 1760 */ _(VI,x), _(VI,x), _(VI,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1768 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(x,x), _(C,x), _(C,x),
/* 1770 */ _(C,x), _(x,x), _(M,T), _(M,B), _(x,x), _(x,x), _(x,x), _(x,x),
/* 1778 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Khmer (1780..17FF) */
+ /* Khmer */
/* 1780 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1788 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -403,7 +403,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
#define indic_offset_0x1900 2208
- /* Limbu (1900..194F) */
+ /* Limbu */
/* 1900 */ _(CP,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1908 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -416,7 +416,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 1940 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 1948 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Tai Le (1950..197F) */
+ /* Tai Le */
/* 1950 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1958 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -425,7 +425,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 1970 */ _(TL,x), _(TL,x), _(TL,x), _(TL,x), _(TL,x), _(x,x), _(x,x), _(x,x),
/* 1978 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* New Tai Lue (1980..19DF) */
+ /* New Tai Lue */
/* 1980 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1988 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -440,21 +440,21 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 19D0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 19D8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* FILLER (19E0..19FF) */
+ /* FILLER */
/* 19E0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 19E8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 19F0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 19F8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Buginese (1A00..1A1F) */
+ /* Buginese */
/* 1A00 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1A08 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1A10 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(M,T),
/* 1A18 */ _(M,B), _(M,L), _(M,R), _(M,L), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Tai Tham (1A20..1AAF) */
+ /* Tai Tham */
/* 1A20 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1A28 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -478,7 +478,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
#define indic_offset_0x1b00 2640
- /* Balinese (1B00..1B7F) */
+ /* Balinese */
/* 1B00 */ _(Bi,x), _(Bi,x), _(Bi,x), _(CR,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x),
/* 1B08 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
@@ -497,7 +497,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 1B70 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 1B78 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Sundanese (1B80..1BBF) */
+ /* Sundanese */
/* 1B80 */ _(Bi,x), _(CR,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
/* 1B88 */ _(VI,x), _(VI,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -508,7 +508,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 1BB0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 1BB8 */ _(x,x), _(x,x), _(A,x), _(C,x), _(C,x), _(C,x), _(CF,x), _(CF,x),
- /* Batak (1BC0..1BFF) */
+ /* Batak */
/* 1BC0 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1BC8 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -519,7 +519,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 1BF0 */ _(CF,x), _(CF,x), _(V,R), _(V,R), _(x,x), _(x,x), _(x,x), _(x,x),
/* 1BF8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Lepcha (1C00..1C4F) */
+ /* Lepcha */
/* 1C00 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 1C08 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -535,7 +535,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
#define indic_offset_0x1cd0 2976
- /* Vedic Extensions (1CD0..1CFF) */
+ /* Vedic Extensions */
/* 1CD0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 1CD8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
@@ -547,7 +547,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
#define indic_offset_0xa800 3024
- /* Syloti Nagri (A800..A82F) */
+ /* Syloti Nagri */
/* A800 */ _(VI,x), _(VI,x), _(x,x), _(VI,x), _(VI,x), _(VI,x), _(V,T), _(C,x),
/* A808 */ _(C,x), _(C,x), _(C,x), _(Bi,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -556,12 +556,12 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* A820 */ _(C,x), _(C,x), _(C,x), _(M,R), _(M,R), _(M,B), _(M,T), _(M,R),
/* A828 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* FILLER (A830..A83F) */
+ /* FILLER */
/* A830 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* A838 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Phags-pa (A840..A87F) */
+ /* Phags-pa */
/* A840 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* A848 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -572,7 +572,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* A870 */ _(C,x), _(CS,x), _(C,x), _(Bi,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* A878 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Saurashtra (A880..A8DF) */
+ /* Saurashtra */
/* A880 */ _(Bi,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
/* A888 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
@@ -587,14 +587,14 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* A8D0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* A8D8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* FILLER (A8E0..A8FF) */
+ /* FILLER */
/* A8E0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* A8E8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* A8F0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* A8F8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Kayah Li (A900..A92F) */
+ /* Kayah Li */
/* A900 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* A908 */ _(x,x), _(x,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -603,7 +603,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* A920 */ _(C,x), _(C,x), _(Vo,x), _(Vo,x), _(Vo,x), _(Vo,x), _(Vo,x), _(Vo,x),
/* A928 */ _(Vo,x), _(Vo,x), _(Vo,x), _(TM,x), _(TM,x), _(TM,x), _(x,x), _(x,x),
- /* Rejang (A930..A95F) */
+ /* Rejang */
/* A930 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* A938 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -612,14 +612,14 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* A950 */ _(CF,x), _(CF,x), _(CF,x), _(V,R), _(x,x), _(x,x), _(x,x), _(x,x),
/* A958 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* FILLER (A960..A97F) */
+ /* FILLER */
/* A960 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* A968 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* A970 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* A978 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Javanese (A980..A9DF) */
+ /* Javanese */
/* A980 */ _(Bi,x), _(Bi,x), _(CR,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
/* A988 */ _(VI,x), _(C,x), _(C,x), _(C,x), _(VI,x), _(VI,x), _(VI,x), _(C,x),
@@ -634,14 +634,14 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* A9D0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* A9D8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* FILLER (A9E0..A9FF) */
+ /* FILLER */
/* A9E0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* A9E8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* A9F0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* A9F8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Cham (AA00..AA5F) */
+ /* Cham */
/* AA00 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(C,x), _(C,x),
/* AA08 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -656,14 +656,14 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* AA50 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* AA58 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Myanmar Extended-A (AA60..AA7F) */
+ /* Myanmar Extended-A */
/* AA60 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* AA68 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* AA70 */ _(x,x), _(C,x), _(C,x), _(C,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* AA78 */ _(x,x), _(x,x), _(C,x), _(TM,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Tai Viet (AA80..AADF) */
+ /* Tai Viet */
/* AA80 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* AA88 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -678,7 +678,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* AAD0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* AAD8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Meetei Mayek Extensions (AAE0..AAFF) */
+ /* Meetei Mayek Extensions */
/* AAE0 */ _(VI,x), _(VI,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* AAE8 */ _(C,x), _(C,x), _(C,x), _(M,L), _(M,B), _(M,T), _(M,L), _(M,R),
@@ -688,7 +688,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
#define indic_offset_0xabc0 3792
- /* Meetei Mayek (ABC0..ABFF) */
+ /* Meetei Mayek */
/* ABC0 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* ABC8 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(VI,x), _(VI,x),
@@ -702,7 +702,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
#define indic_offset_0x10a00 3856
- /* Kharoshthi (10A00..10A5F) */
+ /* Kharoshthi */
/* 10A00 */ _(C,x), _(M,O), _(M,B), _(M,B), _(x,x), _(M,T), _(M,O), _(x,x),
/* 10A08 */ _(x,x), _(x,x), _(x,x), _(x,x), _(M,B), _(x,x), _(Bi,x), _(Vs,x),
@@ -720,7 +720,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
#define indic_offset_0x11000 3952
- /* Brahmi (11000..1107F) */
+ /* Brahmi */
/* 11000 */ _(Bi,x), _(Bi,x), _(Vs,x), _(x,x), _(x,x), _(VI,x), _(VI,x), _(VI,x),
/* 11008 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
@@ -739,7 +739,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 11070 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 11078 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* Kaithi (11080..110CF) */
+ /* Kaithi */
/* 11080 */ _(Bi,x), _(Bi,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
/* 11088 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(C,x), _(C,x), _(C,x),
@@ -755,7 +755,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
#define indic_offset_0x11100 4160
- /* Chakma (11100..1114F) */
+ /* Chakma */
/* 11100 */ _(Bi,x), _(Bi,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(C,x),
/* 11108 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
@@ -771,7 +771,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
#define indic_offset_0x11180 4240
- /* Sharada (11180..111DF) */
+ /* Sharada */
/* 11180 */ _(Bi,x), _(Bi,x), _(Vs,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
/* 11188 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
@@ -789,7 +789,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
#define indic_offset_0x11680 4336
- /* Takri (11680..116CF) */
+ /* Takri */
/* 11680 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),
/* 11688 */ _(VI,x), _(VI,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
More information about the HarfBuzz
mailing list