[arabic-table] Further tune

In anticipation of Unicode 7.0 data coming in the next commit.
This commit is contained in:
Behdad Esfahbod 2014-06-21 14:07:00 -06:00
parent a133e6067a
commit 2390d9b67e
2 changed files with 24 additions and 24 deletions

View File

@ -73,11 +73,12 @@ def print_joining_table(f):
uu = sorted(values.keys()) uu = sorted(values.keys())
num = len(values) num = len(values)
all_blocks = set([blocks[u] for u in uu])
last = -1 last = -1
ranges = [] ranges = []
for u in uu: for u in uu:
if u - last <= 1+16*3: if u - last <= 1+16*5:
ranges[-1][-1] = u ranges[-1][-1] = u
else: else:
ranges.append([u,u]) ranges.append([u,u])
@ -101,7 +102,10 @@ def print_joining_table(f):
if block != last_block or u == start: if block != last_block or u == start:
if u != start: if u != start:
print print
print "\n /* %s */" % block if block in all_blocks:
print "\n /* %s */" % block
else:
print "\n /* FILLER */"
last_block = block last_block = block
if u % 32 != 0: if u % 32 != 0:
print print
@ -119,7 +123,7 @@ def print_joining_table(f):
print "}; /* Table items: %d; occupancy: %d%% */" % (offset, occupancy) print "}; /* Table items: %d; occupancy: %d%% */" % (offset, occupancy)
print print
page_bits = 8 page_bits = 12;
print print
print "static unsigned int" print "static unsigned int"
print "joining_type (hb_codepoint_t u)" print "joining_type (hb_codepoint_t u)"

View File

@ -52,45 +52,41 @@ static const uint8_t joining_table[] =
/* 0740 */ 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, /* 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,
#define joining_offset_0x07ca 384 /* FILLER */
/* 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 */ /* NKo */
/* 07C0 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D, /* 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, /* 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,
#define joining_offset_0x0840 433 /* FILLER */
/* 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 */ /* 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, /* 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,
#define joining_offset_0x08a0 458 /* 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 */ /* Arabic Extended-A */
/* 08A0 */ D,X,D,D,D,D,D,D,D,D,R,R,R, /* 08A0 */ D,X,D,D,D,D,D,D,D,D,R,R,R,
}; /* Table items: 471; occupancy: 66% */ }; /* Table items: 685; occupancy: 45% */
static unsigned int static unsigned int
joining_type (hb_codepoint_t u) joining_type (hb_codepoint_t u)
{ {
switch (u >> 8) switch (u >> 12)
{ {
case 0x6: case 0x0:
if (0x0600 <= u && u <= 0x077F) return joining_table[u - 0x0600 + joining_offset_0x0600]; if (0x0600 <= u && u <= 0x08AC) 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; break;
default: default: