Use hb_in_range() for arabic and indic tables

Though, looks like gcc was smart enough to produce the same code
before...
This commit is contained in:
Behdad Esfahbod 2014-07-11 15:05:36 -04:00
parent 7627100f42
commit c09a607a84
4 changed files with 268 additions and 268 deletions

View File

@ -90,7 +90,7 @@ def print_joining_table(f):
for start,end in ranges:
print
print "#define joining_offset_0x%04x %d" % (start, offset)
print "#define joining_offset_0x%04xu %d" % (start, offset)
for u in range(start, end+1):
@ -130,11 +130,11 @@ def print_joining_table(f):
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
print " case 0x%0Xu:" % 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)
offset = "joining_offset_0x%04xu" % start
print " if (hb_in_range (u, 0x%04Xu, 0x%04Xu)) return joining_table[u - 0x%04Xu + %s];" % (start, end, start, offset)
print " break;"
print ""
print " default:"
@ -195,13 +195,13 @@ def print_shaping_table(f):
for u in range (min_u, max_u + 1):
s = [shapes[u][shape] if u in shapes and shape in shapes[u] else 0
for shape in ['initial', 'medial', 'final', 'isolated']]
value = ', '.join ("0x%04X" % c for c in s)
value = ', '.join ("0x%04Xu" % c for c in s)
print " {%s}, /* U+%04X %s */" % (value, u, names[u] if u in names else "")
print "};"
print
print "#define SHAPING_TABLE_FIRST 0x%04X" % min_u
print "#define SHAPING_TABLE_LAST 0x%04X" % max_u
print "#define SHAPING_TABLE_FIRST 0x%04Xu" % min_u
print "#define SHAPING_TABLE_LAST 0x%04Xu" % max_u
print
ligas = {}
@ -231,9 +231,9 @@ def print_shaping_table(f):
keys.sort ()
for first in keys:
print " { 0x%04X, {" % (first)
print " { 0x%04Xu, {" % (first)
for liga in ligas[first]:
print " { 0x%04X, 0x%04X }, /* %s */" % (liga[0], liga[1], names[liga[1]])
print " { 0x%04Xu, 0x%04Xu }, /* %s */" % (liga[0], liga[1], names[liga[1]])
print " }},"
print "};"

View File

@ -185,7 +185,7 @@ for u in uu:
offset += ends[-1] - starts[-1]
print
print
print "#define indic_offset_0x%04x %d" % (start, offset)
print "#define indic_offset_0x%04xu %d" % (start, offset)
starts.append (start)
print_block (block, start, end, data)
@ -205,14 +205,14 @@ print " switch (u >> %d)" % page_bits
print " {"
pages = set([u>>page_bits for u in starts+ends+singles.keys()])
for p in sorted(pages):
print " case 0x%0X:" % p
print " case 0x%0Xu:" % p
for (start,end) in zip (starts, ends):
if p not in [start>>page_bits, end>>page_bits]: 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)
offset = "indic_offset_0x%04xu" % start
print " if (hb_in_range (u, 0x%04Xu, 0x%04Xu)) return indic_table[u - 0x%04Xu + %s];" % (start, end, start, offset)
for u,d in singles.items ():
if p != u>>page_bits: continue
print " if (unlikely (u == 0x%04X)) return _(%s,%s);" % (u, short[0][d[0]], short[1][d[1]])
print " if (unlikely (u == 0x%04Xu)) return _(%s,%s);" % (u, short[0][d[0]], short[1][d[1]])
print " break;"
print ""
print " default:"

View File

@ -29,7 +29,7 @@
static const uint8_t joining_table[] =
{
#define joining_offset_0x0600 0
#define joining_offset_0x0600u 0
/* Arabic */
@ -78,7 +78,7 @@ static const uint8_t joining_table[] =
/* 08A0 */ D,D,D,D,D,D,D,D,D,D,R,R,R,U,R,D,D,R,R,
#define joining_offset_0x1806 691
#define joining_offset_0x1806u 691
/* Mongolian */
@ -89,33 +89,33 @@ static const uint8_t joining_table[] =
/* 1880 */ U,U,U,U,U,U,U,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,
/* 18A0 */ D,D,D,D,D,D,D,D,D,X,D,
#define joining_offset_0x200c 856
#define joining_offset_0x200cu 856
/* General Punctuation */
/* 2000 */ U,C,
#define joining_offset_0x2066 858
#define joining_offset_0x2066u 858
/* General Punctuation */
/* 2060 */ U,U,U,U,
#define joining_offset_0xa840 862
#define joining_offset_0xa840u 862
/* Phags-pa */
/* A840 */ 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,
/* A860 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,L,U,
#define joining_offset_0x10ac0 914
#define joining_offset_0x10ac0u 914
/* Manichaean */
/* 10AC0 */ D,D,D,D,D,R,U,R,U,R,R,U,U,L,R,R,R,R,R,D,D,D,D,L,D,D,D,D,D,R,D,D,
/* 10AE0 */ D,R,U,U,R,X,X,X,X,X,X,D,D,D,D,R,
#define joining_offset_0x10b80 962
#define joining_offset_0x10b80u 962
/* Psalter Pahlavi */
@ -130,26 +130,26 @@ joining_type (hb_codepoint_t u)
{
switch (u >> 12)
{
case 0x0:
if (0x0600 <= u && u <= 0x08B2) return joining_table[u - 0x0600 + joining_offset_0x0600];
case 0x0u:
if (hb_in_range (u, 0x0600u, 0x08B2u)) return joining_table[u - 0x0600u + joining_offset_0x0600u];
break;
case 0x1:
if (0x1806 <= u && u <= 0x18AA) return joining_table[u - 0x1806 + joining_offset_0x1806];
case 0x1u:
if (hb_in_range (u, 0x1806u, 0x18AAu)) return joining_table[u - 0x1806u + joining_offset_0x1806u];
break;
case 0x2:
if (0x200C <= u && u <= 0x200D) return joining_table[u - 0x200C + joining_offset_0x200c];
if (0x2066 <= u && u <= 0x2069) return joining_table[u - 0x2066 + joining_offset_0x2066];
case 0x2u:
if (hb_in_range (u, 0x200Cu, 0x200Du)) return joining_table[u - 0x200Cu + joining_offset_0x200cu];
if (hb_in_range (u, 0x2066u, 0x2069u)) return joining_table[u - 0x2066u + joining_offset_0x2066u];
break;
case 0xA:
if (0xA840 <= u && u <= 0xA873) return joining_table[u - 0xA840 + joining_offset_0xa840];
case 0xAu:
if (hb_in_range (u, 0xA840u, 0xA873u)) return joining_table[u - 0xA840u + joining_offset_0xa840u];
break;
case 0x10:
if (0x10AC0 <= u && u <= 0x10AEF) return joining_table[u - 0x10AC0 + joining_offset_0x10ac0];
if (0x10B80 <= u && u <= 0x10BAF) return joining_table[u - 0x10B80 + joining_offset_0x10b80];
case 0x10u:
if (hb_in_range (u, 0x10AC0u, 0x10AEFu)) return joining_table[u - 0x10AC0u + joining_offset_0x10ac0u];
if (hb_in_range (u, 0x10B80u, 0x10BAFu)) return joining_table[u - 0x10B80u + joining_offset_0x10b80u];
break;
default:
@ -170,189 +170,189 @@ joining_type (hb_codepoint_t u)
static const uint16_t shaping_table[][4] =
{
{0x0000, 0x0000, 0x0000, 0xFE80}, /* U+0621 ARABIC LETTER HAMZA ISOLATED FORM */
{0x0000, 0x0000, 0xFE82, 0xFE81}, /* U+0622 ARABIC LETTER ALEF WITH MADDA ABOVE */
{0x0000, 0x0000, 0xFE84, 0xFE83}, /* U+0623 ARABIC LETTER ALEF WITH HAMZA ABOVE */
{0x0000, 0x0000, 0xFE86, 0xFE85}, /* U+0624 ARABIC LETTER WAW WITH HAMZA ABOVE */
{0x0000, 0x0000, 0xFE88, 0xFE87}, /* U+0625 ARABIC LETTER ALEF WITH HAMZA BELOW */
{0xFE8B, 0xFE8C, 0xFE8A, 0xFE89}, /* U+0626 ARABIC LETTER YEH WITH HAMZA ABOVE */
{0x0000, 0x0000, 0xFE8E, 0xFE8D}, /* U+0627 ARABIC LETTER ALEF */
{0xFE91, 0xFE92, 0xFE90, 0xFE8F}, /* U+0628 ARABIC LETTER BEH */
{0x0000, 0x0000, 0xFE94, 0xFE93}, /* U+0629 ARABIC LETTER TEH MARBUTA */
{0xFE97, 0xFE98, 0xFE96, 0xFE95}, /* U+062A ARABIC LETTER TEH */
{0xFE9B, 0xFE9C, 0xFE9A, 0xFE99}, /* U+062B ARABIC LETTER THEH */
{0xFE9F, 0xFEA0, 0xFE9E, 0xFE9D}, /* U+062C ARABIC LETTER JEEM */
{0xFEA3, 0xFEA4, 0xFEA2, 0xFEA1}, /* U+062D ARABIC LETTER HAH */
{0xFEA7, 0xFEA8, 0xFEA6, 0xFEA5}, /* U+062E ARABIC LETTER KHAH */
{0x0000, 0x0000, 0xFEAA, 0xFEA9}, /* U+062F ARABIC LETTER DAL */
{0x0000, 0x0000, 0xFEAC, 0xFEAB}, /* U+0630 ARABIC LETTER THAL */
{0x0000, 0x0000, 0xFEAE, 0xFEAD}, /* U+0631 ARABIC LETTER REH */
{0x0000, 0x0000, 0xFEB0, 0xFEAF}, /* U+0632 ARABIC LETTER ZAIN */
{0xFEB3, 0xFEB4, 0xFEB2, 0xFEB1}, /* U+0633 ARABIC LETTER SEEN */
{0xFEB7, 0xFEB8, 0xFEB6, 0xFEB5}, /* U+0634 ARABIC LETTER SHEEN */
{0xFEBB, 0xFEBC, 0xFEBA, 0xFEB9}, /* U+0635 ARABIC LETTER SAD */
{0xFEBF, 0xFEC0, 0xFEBE, 0xFEBD}, /* U+0636 ARABIC LETTER DAD */
{0xFEC3, 0xFEC4, 0xFEC2, 0xFEC1}, /* U+0637 ARABIC LETTER TAH */
{0xFEC7, 0xFEC8, 0xFEC6, 0xFEC5}, /* U+0638 ARABIC LETTER ZAH */
{0xFECB, 0xFECC, 0xFECA, 0xFEC9}, /* U+0639 ARABIC LETTER AIN */
{0xFECF, 0xFED0, 0xFECE, 0xFECD}, /* U+063A ARABIC LETTER GHAIN */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+063B */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+063C */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+063D */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+063E */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+063F */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0640 */
{0xFED3, 0xFED4, 0xFED2, 0xFED1}, /* U+0641 ARABIC LETTER FEH */
{0xFED7, 0xFED8, 0xFED6, 0xFED5}, /* U+0642 ARABIC LETTER QAF */
{0xFEDB, 0xFEDC, 0xFEDA, 0xFED9}, /* U+0643 ARABIC LETTER KAF */
{0xFEDF, 0xFEE0, 0xFEDE, 0xFEDD}, /* U+0644 ARABIC LETTER LAM */
{0xFEE3, 0xFEE4, 0xFEE2, 0xFEE1}, /* U+0645 ARABIC LETTER MEEM */
{0xFEE7, 0xFEE8, 0xFEE6, 0xFEE5}, /* U+0646 ARABIC LETTER NOON */
{0xFEEB, 0xFEEC, 0xFEEA, 0xFEE9}, /* U+0647 ARABIC LETTER HEH */
{0x0000, 0x0000, 0xFEEE, 0xFEED}, /* U+0648 ARABIC LETTER WAW */
{0xFBE8, 0xFBE9, 0xFEF0, 0xFEEF}, /* U+0649 ARABIC LETTER */
{0xFEF3, 0xFEF4, 0xFEF2, 0xFEF1}, /* U+064A ARABIC LETTER YEH */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+064B */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+064C */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+064D */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+064E */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+064F */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0650 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0651 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0652 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0653 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0654 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0655 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0656 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0657 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0658 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0659 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+065A */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+065B */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+065C */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+065D */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+065E */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+065F */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0660 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0661 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0662 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0663 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0664 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0665 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0666 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0667 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0668 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0669 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+066A */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+066B */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+066C */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+066D */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+066E */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+066F */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0670 */
{0x0000, 0x0000, 0xFB51, 0xFB50}, /* U+0671 ARABIC LETTER ALEF WASLA */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0672 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0673 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0674 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0675 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0676 */
{0x0000, 0x0000, 0x0000, 0xFBDD}, /* U+0677 ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0678 */
{0xFB68, 0xFB69, 0xFB67, 0xFB66}, /* U+0679 ARABIC LETTER TTEH */
{0xFB60, 0xFB61, 0xFB5F, 0xFB5E}, /* U+067A ARABIC LETTER TTEHEH */
{0xFB54, 0xFB55, 0xFB53, 0xFB52}, /* U+067B ARABIC LETTER BEEH */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+067C */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+067D */
{0xFB58, 0xFB59, 0xFB57, 0xFB56}, /* U+067E ARABIC LETTER PEH */
{0xFB64, 0xFB65, 0xFB63, 0xFB62}, /* U+067F ARABIC LETTER TEHEH */
{0xFB5C, 0xFB5D, 0xFB5B, 0xFB5A}, /* U+0680 ARABIC LETTER BEHEH */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0681 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0682 */
{0xFB78, 0xFB79, 0xFB77, 0xFB76}, /* U+0683 ARABIC LETTER NYEH */
{0xFB74, 0xFB75, 0xFB73, 0xFB72}, /* U+0684 ARABIC LETTER DYEH */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0685 */
{0xFB7C, 0xFB7D, 0xFB7B, 0xFB7A}, /* U+0686 ARABIC LETTER TCHEH */
{0xFB80, 0xFB81, 0xFB7F, 0xFB7E}, /* U+0687 ARABIC LETTER TCHEHEH */
{0x0000, 0x0000, 0xFB89, 0xFB88}, /* U+0688 ARABIC LETTER DDAL */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0689 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+068A */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+068B */
{0x0000, 0x0000, 0xFB85, 0xFB84}, /* U+068C ARABIC LETTER DAHAL */
{0x0000, 0x0000, 0xFB83, 0xFB82}, /* U+068D ARABIC LETTER DDAHAL */
{0x0000, 0x0000, 0xFB87, 0xFB86}, /* U+068E ARABIC LETTER DUL */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+068F */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0690 */
{0x0000, 0x0000, 0xFB8D, 0xFB8C}, /* U+0691 ARABIC LETTER RREH */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0692 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0693 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0694 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0695 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0696 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0697 */
{0x0000, 0x0000, 0xFB8B, 0xFB8A}, /* U+0698 ARABIC LETTER JEH */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+0699 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+069A */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+069B */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+069C */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+069D */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+069E */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+069F */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A0 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A1 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A2 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A3 */
{0xFB6C, 0xFB6D, 0xFB6B, 0xFB6A}, /* U+06A4 ARABIC LETTER VEH */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A5 */
{0xFB70, 0xFB71, 0xFB6F, 0xFB6E}, /* U+06A6 ARABIC LETTER PEHEH */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A7 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06A8 */
{0xFB90, 0xFB91, 0xFB8F, 0xFB8E}, /* U+06A9 ARABIC LETTER KEHEH */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06AA */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06AB */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06AC */
{0xFBD5, 0xFBD6, 0xFBD4, 0xFBD3}, /* U+06AD ARABIC LETTER NG */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06AE */
{0xFB94, 0xFB95, 0xFB93, 0xFB92}, /* U+06AF ARABIC LETTER GAF */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B0 */
{0xFB9C, 0xFB9D, 0xFB9B, 0xFB9A}, /* U+06B1 ARABIC LETTER NGOEH */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B2 */
{0xFB98, 0xFB99, 0xFB97, 0xFB96}, /* U+06B3 ARABIC LETTER GUEH */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B4 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B5 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B6 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B7 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B8 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06B9 */
{0x0000, 0x0000, 0xFB9F, 0xFB9E}, /* U+06BA ARABIC LETTER NOON GHUNNA */
{0xFBA2, 0xFBA3, 0xFBA1, 0xFBA0}, /* U+06BB ARABIC LETTER RNOON */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06BC */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06BD */
{0xFBAC, 0xFBAD, 0xFBAB, 0xFBAA}, /* U+06BE ARABIC LETTER HEH DOACHASHMEE */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06BF */
{0x0000, 0x0000, 0xFBA5, 0xFBA4}, /* U+06C0 ARABIC LETTER HEH WITH YEH ABOVE */
{0xFBA8, 0xFBA9, 0xFBA7, 0xFBA6}, /* U+06C1 ARABIC LETTER HEH GOAL */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06C2 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06C3 */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06C4 */
{0x0000, 0x0000, 0xFBE1, 0xFBE0}, /* U+06C5 ARABIC LETTER KIRGHIZ OE */
{0x0000, 0x0000, 0xFBDA, 0xFBD9}, /* U+06C6 ARABIC LETTER OE */
{0x0000, 0x0000, 0xFBD8, 0xFBD7}, /* U+06C7 ARABIC LETTER U */
{0x0000, 0x0000, 0xFBDC, 0xFBDB}, /* U+06C8 ARABIC LETTER YU */
{0x0000, 0x0000, 0xFBE3, 0xFBE2}, /* U+06C9 ARABIC LETTER KIRGHIZ YU */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06CA */
{0x0000, 0x0000, 0xFBDF, 0xFBDE}, /* U+06CB ARABIC LETTER VE */
{0xFBFE, 0xFBFF, 0xFBFD, 0xFBFC}, /* U+06CC ARABIC LETTER FARSI YEH */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06CD */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06CE */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06CF */
{0xFBE6, 0xFBE7, 0xFBE5, 0xFBE4}, /* U+06D0 ARABIC LETTER E */
{0x0000, 0x0000, 0x0000, 0x0000}, /* U+06D1 */
{0x0000, 0x0000, 0xFBAF, 0xFBAE}, /* U+06D2 ARABIC LETTER YEH BARREE */
{0x0000, 0x0000, 0xFBB1, 0xFBB0}, /* U+06D3 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE */
{0x0000u, 0x0000u, 0x0000u, 0xFE80u}, /* U+0621 ARABIC LETTER HAMZA ISOLATED FORM */
{0x0000u, 0x0000u, 0xFE82u, 0xFE81u}, /* U+0622 ARABIC LETTER ALEF WITH MADDA ABOVE */
{0x0000u, 0x0000u, 0xFE84u, 0xFE83u}, /* U+0623 ARABIC LETTER ALEF WITH HAMZA ABOVE */
{0x0000u, 0x0000u, 0xFE86u, 0xFE85u}, /* U+0624 ARABIC LETTER WAW WITH HAMZA ABOVE */
{0x0000u, 0x0000u, 0xFE88u, 0xFE87u}, /* U+0625 ARABIC LETTER ALEF WITH HAMZA BELOW */
{0xFE8Bu, 0xFE8Cu, 0xFE8Au, 0xFE89u}, /* U+0626 ARABIC LETTER YEH WITH HAMZA ABOVE */
{0x0000u, 0x0000u, 0xFE8Eu, 0xFE8Du}, /* U+0627 ARABIC LETTER ALEF */
{0xFE91u, 0xFE92u, 0xFE90u, 0xFE8Fu}, /* U+0628 ARABIC LETTER BEH */
{0x0000u, 0x0000u, 0xFE94u, 0xFE93u}, /* U+0629 ARABIC LETTER TEH MARBUTA */
{0xFE97u, 0xFE98u, 0xFE96u, 0xFE95u}, /* U+062A ARABIC LETTER TEH */
{0xFE9Bu, 0xFE9Cu, 0xFE9Au, 0xFE99u}, /* U+062B ARABIC LETTER THEH */
{0xFE9Fu, 0xFEA0u, 0xFE9Eu, 0xFE9Du}, /* U+062C ARABIC LETTER JEEM */
{0xFEA3u, 0xFEA4u, 0xFEA2u, 0xFEA1u}, /* U+062D ARABIC LETTER HAH */
{0xFEA7u, 0xFEA8u, 0xFEA6u, 0xFEA5u}, /* U+062E ARABIC LETTER KHAH */
{0x0000u, 0x0000u, 0xFEAAu, 0xFEA9u}, /* U+062F ARABIC LETTER DAL */
{0x0000u, 0x0000u, 0xFEACu, 0xFEABu}, /* U+0630 ARABIC LETTER THAL */
{0x0000u, 0x0000u, 0xFEAEu, 0xFEADu}, /* U+0631 ARABIC LETTER REH */
{0x0000u, 0x0000u, 0xFEB0u, 0xFEAFu}, /* U+0632 ARABIC LETTER ZAIN */
{0xFEB3u, 0xFEB4u, 0xFEB2u, 0xFEB1u}, /* U+0633 ARABIC LETTER SEEN */
{0xFEB7u, 0xFEB8u, 0xFEB6u, 0xFEB5u}, /* U+0634 ARABIC LETTER SHEEN */
{0xFEBBu, 0xFEBCu, 0xFEBAu, 0xFEB9u}, /* U+0635 ARABIC LETTER SAD */
{0xFEBFu, 0xFEC0u, 0xFEBEu, 0xFEBDu}, /* U+0636 ARABIC LETTER DAD */
{0xFEC3u, 0xFEC4u, 0xFEC2u, 0xFEC1u}, /* U+0637 ARABIC LETTER TAH */
{0xFEC7u, 0xFEC8u, 0xFEC6u, 0xFEC5u}, /* U+0638 ARABIC LETTER ZAH */
{0xFECBu, 0xFECCu, 0xFECAu, 0xFEC9u}, /* U+0639 ARABIC LETTER AIN */
{0xFECFu, 0xFED0u, 0xFECEu, 0xFECDu}, /* U+063A ARABIC LETTER GHAIN */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+063B */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+063C */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+063D */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+063E */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+063F */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0640 */
{0xFED3u, 0xFED4u, 0xFED2u, 0xFED1u}, /* U+0641 ARABIC LETTER FEH */
{0xFED7u, 0xFED8u, 0xFED6u, 0xFED5u}, /* U+0642 ARABIC LETTER QAF */
{0xFEDBu, 0xFEDCu, 0xFEDAu, 0xFED9u}, /* U+0643 ARABIC LETTER KAF */
{0xFEDFu, 0xFEE0u, 0xFEDEu, 0xFEDDu}, /* U+0644 ARABIC LETTER LAM */
{0xFEE3u, 0xFEE4u, 0xFEE2u, 0xFEE1u}, /* U+0645 ARABIC LETTER MEEM */
{0xFEE7u, 0xFEE8u, 0xFEE6u, 0xFEE5u}, /* U+0646 ARABIC LETTER NOON */
{0xFEEBu, 0xFEECu, 0xFEEAu, 0xFEE9u}, /* U+0647 ARABIC LETTER HEH */
{0x0000u, 0x0000u, 0xFEEEu, 0xFEEDu}, /* U+0648 ARABIC LETTER WAW */
{0xFBE8u, 0xFBE9u, 0xFEF0u, 0xFEEFu}, /* U+0649 ARABIC LETTER */
{0xFEF3u, 0xFEF4u, 0xFEF2u, 0xFEF1u}, /* U+064A ARABIC LETTER YEH */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+064B */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+064C */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+064D */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+064E */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+064F */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0650 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0651 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0652 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0653 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0654 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0655 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0656 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0657 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0658 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0659 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+065A */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+065B */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+065C */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+065D */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+065E */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+065F */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0660 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0661 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0662 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0663 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0664 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0665 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0666 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0667 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0668 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0669 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+066A */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+066B */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+066C */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+066D */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+066E */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+066F */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0670 */
{0x0000u, 0x0000u, 0xFB51u, 0xFB50u}, /* U+0671 ARABIC LETTER ALEF WASLA */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0672 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0673 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0674 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0675 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0676 */
{0x0000u, 0x0000u, 0x0000u, 0xFBDDu}, /* U+0677 ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0678 */
{0xFB68u, 0xFB69u, 0xFB67u, 0xFB66u}, /* U+0679 ARABIC LETTER TTEH */
{0xFB60u, 0xFB61u, 0xFB5Fu, 0xFB5Eu}, /* U+067A ARABIC LETTER TTEHEH */
{0xFB54u, 0xFB55u, 0xFB53u, 0xFB52u}, /* U+067B ARABIC LETTER BEEH */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+067C */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+067D */
{0xFB58u, 0xFB59u, 0xFB57u, 0xFB56u}, /* U+067E ARABIC LETTER PEH */
{0xFB64u, 0xFB65u, 0xFB63u, 0xFB62u}, /* U+067F ARABIC LETTER TEHEH */
{0xFB5Cu, 0xFB5Du, 0xFB5Bu, 0xFB5Au}, /* U+0680 ARABIC LETTER BEHEH */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0681 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0682 */
{0xFB78u, 0xFB79u, 0xFB77u, 0xFB76u}, /* U+0683 ARABIC LETTER NYEH */
{0xFB74u, 0xFB75u, 0xFB73u, 0xFB72u}, /* U+0684 ARABIC LETTER DYEH */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0685 */
{0xFB7Cu, 0xFB7Du, 0xFB7Bu, 0xFB7Au}, /* U+0686 ARABIC LETTER TCHEH */
{0xFB80u, 0xFB81u, 0xFB7Fu, 0xFB7Eu}, /* U+0687 ARABIC LETTER TCHEHEH */
{0x0000u, 0x0000u, 0xFB89u, 0xFB88u}, /* U+0688 ARABIC LETTER DDAL */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0689 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+068A */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+068B */
{0x0000u, 0x0000u, 0xFB85u, 0xFB84u}, /* U+068C ARABIC LETTER DAHAL */
{0x0000u, 0x0000u, 0xFB83u, 0xFB82u}, /* U+068D ARABIC LETTER DDAHAL */
{0x0000u, 0x0000u, 0xFB87u, 0xFB86u}, /* U+068E ARABIC LETTER DUL */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+068F */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0690 */
{0x0000u, 0x0000u, 0xFB8Du, 0xFB8Cu}, /* U+0691 ARABIC LETTER RREH */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0692 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0693 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0694 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0695 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0696 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0697 */
{0x0000u, 0x0000u, 0xFB8Bu, 0xFB8Au}, /* U+0698 ARABIC LETTER JEH */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+0699 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+069A */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+069B */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+069C */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+069D */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+069E */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+069F */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06A0 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06A1 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06A2 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06A3 */
{0xFB6Cu, 0xFB6Du, 0xFB6Bu, 0xFB6Au}, /* U+06A4 ARABIC LETTER VEH */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06A5 */
{0xFB70u, 0xFB71u, 0xFB6Fu, 0xFB6Eu}, /* U+06A6 ARABIC LETTER PEHEH */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06A7 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06A8 */
{0xFB90u, 0xFB91u, 0xFB8Fu, 0xFB8Eu}, /* U+06A9 ARABIC LETTER KEHEH */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06AA */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06AB */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06AC */
{0xFBD5u, 0xFBD6u, 0xFBD4u, 0xFBD3u}, /* U+06AD ARABIC LETTER NG */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06AE */
{0xFB94u, 0xFB95u, 0xFB93u, 0xFB92u}, /* U+06AF ARABIC LETTER GAF */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06B0 */
{0xFB9Cu, 0xFB9Du, 0xFB9Bu, 0xFB9Au}, /* U+06B1 ARABIC LETTER NGOEH */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06B2 */
{0xFB98u, 0xFB99u, 0xFB97u, 0xFB96u}, /* U+06B3 ARABIC LETTER GUEH */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06B4 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06B5 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06B6 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06B7 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06B8 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06B9 */
{0x0000u, 0x0000u, 0xFB9Fu, 0xFB9Eu}, /* U+06BA ARABIC LETTER NOON GHUNNA */
{0xFBA2u, 0xFBA3u, 0xFBA1u, 0xFBA0u}, /* U+06BB ARABIC LETTER RNOON */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06BC */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06BD */
{0xFBACu, 0xFBADu, 0xFBABu, 0xFBAAu}, /* U+06BE ARABIC LETTER HEH DOACHASHMEE */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06BF */
{0x0000u, 0x0000u, 0xFBA5u, 0xFBA4u}, /* U+06C0 ARABIC LETTER HEH WITH YEH ABOVE */
{0xFBA8u, 0xFBA9u, 0xFBA7u, 0xFBA6u}, /* U+06C1 ARABIC LETTER HEH GOAL */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06C2 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06C3 */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06C4 */
{0x0000u, 0x0000u, 0xFBE1u, 0xFBE0u}, /* U+06C5 ARABIC LETTER KIRGHIZ OE */
{0x0000u, 0x0000u, 0xFBDAu, 0xFBD9u}, /* U+06C6 ARABIC LETTER OE */
{0x0000u, 0x0000u, 0xFBD8u, 0xFBD7u}, /* U+06C7 ARABIC LETTER U */
{0x0000u, 0x0000u, 0xFBDCu, 0xFBDBu}, /* U+06C8 ARABIC LETTER YU */
{0x0000u, 0x0000u, 0xFBE3u, 0xFBE2u}, /* U+06C9 ARABIC LETTER KIRGHIZ YU */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06CA */
{0x0000u, 0x0000u, 0xFBDFu, 0xFBDEu}, /* U+06CB ARABIC LETTER VE */
{0xFBFEu, 0xFBFFu, 0xFBFDu, 0xFBFCu}, /* U+06CC ARABIC LETTER FARSI YEH */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06CD */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06CE */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06CF */
{0xFBE6u, 0xFBE7u, 0xFBE5u, 0xFBE4u}, /* U+06D0 ARABIC LETTER E */
{0x0000u, 0x0000u, 0x0000u, 0x0000u}, /* U+06D1 */
{0x0000u, 0x0000u, 0xFBAFu, 0xFBAEu}, /* U+06D2 ARABIC LETTER YEH BARREE */
{0x0000u, 0x0000u, 0xFBB1u, 0xFBB0u}, /* U+06D3 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE */
};
#define SHAPING_TABLE_FIRST 0x0621
#define SHAPING_TABLE_LAST 0x06D3
#define SHAPING_TABLE_FIRST 0x0621u
#define SHAPING_TABLE_LAST 0x06D3u
static const struct ligature_set_t {
@ -363,17 +363,17 @@ static const struct ligature_set_t {
} ligatures[4];
} ligature_table[] =
{
{ 0xFEDF, {
{ 0xFE88, 0xFEF9 }, /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM */
{ 0xFE82, 0xFEF5 }, /* ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM */
{ 0xFE8E, 0xFEFB }, /* ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM */
{ 0xFE84, 0xFEF7 }, /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM */
{ 0xFEDFu, {
{ 0xFE88u, 0xFEF9u }, /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM */
{ 0xFE82u, 0xFEF5u }, /* ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM */
{ 0xFE8Eu, 0xFEFBu }, /* ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM */
{ 0xFE84u, 0xFEF7u }, /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM */
}},
{ 0xFEE0, {
{ 0xFE88, 0xFEFA }, /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM */
{ 0xFE82, 0xFEF6 }, /* ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM */
{ 0xFE8E, 0xFEFC }, /* ARABIC LIGATURE LAM WITH ALEF FINAL FORM */
{ 0xFE84, 0xFEF8 }, /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM */
{ 0xFEE0u, {
{ 0xFE88u, 0xFEFAu }, /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM */
{ 0xFE82u, 0xFEF6u }, /* ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM */
{ 0xFE8Eu, 0xFEFCu }, /* ARABIC LIGATURE LAM WITH ALEF FINAL FORM */
{ 0xFE84u, 0xFEF8u }, /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM */
}},
};

View File

@ -70,7 +70,7 @@
static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
#define indic_offset_0x0028 0
#define indic_offset_0x0028u 0
/* Basic Latin */
@ -79,14 +79,14 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 0030 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
/* 0038 */ _(Nd,x), _(Nd,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
#define indic_offset_0x00d0 24
#define indic_offset_0x00d0u 24
/* Latin-1 Supplement */
/* 00D0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(CP,x),
#define indic_offset_0x0900 32
#define indic_offset_0x0900u 32
/* Devanagari */
@ -278,7 +278,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 0DE8 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
/* 0DF0 */ _(x,x), _(x,x), _(M,R), _(M,R), _(x,x), _(x,x), _(x,x), _(x,x),
#define indic_offset_0x1000 1304
#define indic_offset_0x1000u 1304
/* Myanmar */
@ -304,7 +304,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 1090 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
/* 1098 */ _(Nd,x), _(Nd,x), _(TM,x), _(TM,x), _(M,R), _(M,T), _(x,x), _(x,x),
#define indic_offset_0x1700 1464
#define indic_offset_0x1700u 1464
/* Tagalog */
@ -352,7 +352,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 17E0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
/* 17E8 */ _(Nd,x), _(Nd,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
#define indic_offset_0x1900 1704
#define indic_offset_0x1900u 1704
/* Limbu */
@ -422,7 +422,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 1A90 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
/* 1A98 */ _(Nd,x), _(Nd,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
#define indic_offset_0x1b00 2120
#define indic_offset_0x1b00u 2120
/* Balinese */
@ -479,7 +479,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 1C40 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
/* 1C48 */ _(Nd,x), _(Nd,x), _(x,x), _(x,x), _(x,x), _(C,x), _(C,x), _(C,x),
#define indic_offset_0x1cd0 2456
#define indic_offset_0x1cd0u 2456
/* Vedic Extensions */
@ -490,7 +490,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 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), _(TM,x), _(x,x), _(x,x), _(x,x),
#define indic_offset_0x2008 2496
#define indic_offset_0x2008u 2496
/* General Punctuation */
@ -498,7 +498,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 2008 */ _(x,x), _(x,x), _(x,x), _(x,x),_(ZWNJ,x),_(ZWJ,x), _(x,x), _(x,x),
/* 2010 */ _(x,x), _(x,x), _(CP,x), _(CP,x), _(CP,x), _(x,x), _(x,x), _(x,x),
#define indic_offset_0xa800 2512
#define indic_offset_0xa800u 2512
/* Syloti Nagri */
@ -632,7 +632,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), _(IS,x), _(x,x),
#define indic_offset_0xabc0 3272
#define indic_offset_0xabc0u 3272
/* Meetei Mayek */
@ -646,7 +646,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* ABF0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
/* ABF8 */ _(Nd,x), _(Nd,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
#define indic_offset_0x10a00 3336
#define indic_offset_0x10a00u 3336
/* Kharoshthi */
@ -661,7 +661,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 10A38 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(IS,x),
/* 10A40 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
#define indic_offset_0x11000 3408
#define indic_offset_0x11000u 3408
/* Brahmi */
@ -694,7 +694,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 3600
#define indic_offset_0x11100u 3600
/* Chakma */
@ -751,7 +751,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 11228 */ _(C,x), _(C,x), _(C,x), _(C,x), _(M,R), _(M,R), _(M,R), _(M,B),
/* 11230 */ _(M,T), _(M,T), _(M,TR), _(M,TR), _(Bi,x), _(V,R), _(N,x), _(GM,T),
#define indic_offset_0x112b0 3912
#define indic_offset_0x112b0u 3912
/* Khudawadi */
@ -785,7 +785,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 11368 */ _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(x,x), _(x,x), _(x,x),
/* 11370 */ _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(Ca,x), _(x,x), _(x,x), _(x,x),
#define indic_offset_0x11480 4112
#define indic_offset_0x11480u 4112
/* Tirhuta */
@ -803,7 +803,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 114D0 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
/* 114D8 */ _(Nd,x), _(Nd,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
#define indic_offset_0x11580 4208
#define indic_offset_0x11580u 4208
/* Siddham */
@ -818,7 +818,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 115B8 */ _(M,L), _(M,TL), _(M,LR),_(M,TLR), _(Bi,x), _(Bi,x), _(Vs,x), _(V,B),
/* 115C0 */ _(N,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
#define indic_offset_0x11600 4280
#define indic_offset_0x11600u 4280
/* Modi */
@ -860,42 +860,42 @@ hb_indic_get_categories (hb_codepoint_t u)
{
switch (u >> 12)
{
case 0x0:
if (0x0028 <= u && u <= 0x0040) return indic_table[u - 0x0028 + indic_offset_0x0028];
if (0x00D0 <= u && u <= 0x00D8) return indic_table[u - 0x00D0 + indic_offset_0x00d0];
if (0x0900 <= u && u <= 0x0DF8) return indic_table[u - 0x0900 + indic_offset_0x0900];
if (unlikely (u == 0x00A0)) return _(CP,x);
case 0x0u:
if (hb_in_range (u, 0x0028u, 0x0040u)) return indic_table[u - 0x0028u + indic_offset_0x0028u];
if (hb_in_range (u, 0x00D0u, 0x00D8u)) return indic_table[u - 0x00D0u + indic_offset_0x00d0u];
if (hb_in_range (u, 0x0900u, 0x0DF8u)) return indic_table[u - 0x0900u + indic_offset_0x0900u];
if (unlikely (u == 0x00A0u)) return _(CP,x);
break;
case 0x1:
if (0x1000 <= u && u <= 0x10A0) return indic_table[u - 0x1000 + indic_offset_0x1000];
if (0x1700 <= u && u <= 0x17F0) return indic_table[u - 0x1700 + indic_offset_0x1700];
if (0x1900 <= u && u <= 0x1AA0) 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 <= 0x1CF8) return indic_table[u - 0x1CD0 + indic_offset_0x1cd0];
case 0x1u:
if (hb_in_range (u, 0x1000u, 0x10A0u)) return indic_table[u - 0x1000u + indic_offset_0x1000u];
if (hb_in_range (u, 0x1700u, 0x17F0u)) return indic_table[u - 0x1700u + indic_offset_0x1700u];
if (hb_in_range (u, 0x1900u, 0x1AA0u)) return indic_table[u - 0x1900u + indic_offset_0x1900u];
if (hb_in_range (u, 0x1B00u, 0x1C50u)) return indic_table[u - 0x1B00u + indic_offset_0x1b00u];
if (hb_in_range (u, 0x1CD0u, 0x1CF8u)) return indic_table[u - 0x1CD0u + indic_offset_0x1cd0u];
break;
case 0x2:
if (0x2008 <= u && u <= 0x2018) return indic_table[u - 0x2008 + indic_offset_0x2008];
if (unlikely (u == 0x25CC)) return _(CP,x);
case 0x2u:
if (hb_in_range (u, 0x2008u, 0x2018u)) return indic_table[u - 0x2008u + indic_offset_0x2008u];
if (unlikely (u == 0x25CCu)) return _(CP,x);
break;
case 0xA:
if (0xA800 <= u && u <= 0xAAF8) return indic_table[u - 0xA800 + indic_offset_0xa800];
if (0xABC0 <= u && u <= 0xAC00) return indic_table[u - 0xABC0 + indic_offset_0xabc0];
case 0xAu:
if (hb_in_range (u, 0xA800u, 0xAAF8u)) return indic_table[u - 0xA800u + indic_offset_0xa800u];
if (hb_in_range (u, 0xABC0u, 0xAC00u)) return indic_table[u - 0xABC0u + indic_offset_0xabc0u];
break;
case 0x10:
if (0x10A00 <= u && u <= 0x10A48) return indic_table[u - 0x10A00 + indic_offset_0x10a00];
case 0x10u:
if (hb_in_range (u, 0x10A00u, 0x10A48u)) return indic_table[u - 0x10A00u + indic_offset_0x10a00u];
break;
case 0x11:
if (0x11000 <= u && u <= 0x110C0) return indic_table[u - 0x11000 + indic_offset_0x11000];
if (0x11100 <= u && u <= 0x11238) return indic_table[u - 0x11100 + indic_offset_0x11100];
if (0x112B0 <= u && u <= 0x11378) return indic_table[u - 0x112B0 + indic_offset_0x112b0];
if (0x11480 <= u && u <= 0x114E0) return indic_table[u - 0x11480 + indic_offset_0x11480];
if (0x11580 <= u && u <= 0x115C8) return indic_table[u - 0x11580 + indic_offset_0x11580];
if (0x11600 <= u && u <= 0x116D0) return indic_table[u - 0x11600 + indic_offset_0x11600];
case 0x11u:
if (hb_in_range (u, 0x11000u, 0x110C0u)) return indic_table[u - 0x11000u + indic_offset_0x11000u];
if (hb_in_range (u, 0x11100u, 0x11238u)) return indic_table[u - 0x11100u + indic_offset_0x11100u];
if (hb_in_range (u, 0x112B0u, 0x11378u)) return indic_table[u - 0x112B0u + indic_offset_0x112b0u];
if (hb_in_range (u, 0x11480u, 0x114E0u)) return indic_table[u - 0x11480u + indic_offset_0x11480u];
if (hb_in_range (u, 0x11580u, 0x115C8u)) return indic_table[u - 0x11580u + indic_offset_0x11580u];
if (hb_in_range (u, 0x11600u, 0x116D0u)) return indic_table[u - 0x11600u + indic_offset_0x11600u];
break;
default: