diff options
Diffstat (limited to 'text/syllabic-data.c')
| -rw-r--r-- | text/syllabic-data.c | 328 |
1 files changed, 328 insertions, 0 deletions
diff --git a/text/syllabic-data.c b/text/syllabic-data.c index cfff1b5..cd7e59b 100644 --- a/text/syllabic-data.c +++ b/text/syllabic-data.c @@ -452,6 +452,334 @@ static const uint16_t use_u16[856] = { static unsigned use_b4(const uint8_t *a, unsigned i) { return (a[i >> 1] >> ((i & 1u) << 2)) & 15u; } uint8_t vega_use_category(uint32_t u) { return (uint8_t)(u<921600u?use_u8[2953+(((use_u8[625+(((use_u16[((use_u8[113+(((use_b4(use_u8,u>>1>>3>>3>>5))<<5)+((u>>1>>3>>3)&31u))])<<3)+((u>>1>>3)&7u)])<<3)+((u>>1)&7u))])<<1)+((u)&1u))]:0); } +/* Arabic joining types (hb-ot-shaper-arabic-table.hh, Unicode 16): U 0, L 1, R 2, D and C 3, + * Alaph 4, Dalath-Rish 5, T 7; 8 where the general category decides. */ +static const uint8_t joining_cells[1434] = { + 0, 0, 0, 0, 0, 0, 8, 8, 0, 8, 8, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 3, 0, 2, 2, 2, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3, 3, 8, 2, 2, 2, 0, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 2, 3, 3, 2, 2, 8, 2, 8, 8, 8, 8, 8, 8, 8, 0, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 2, 2, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3, 3, 3, 8, 8, 3, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 4, 8, 3, 3, 3, 5, 5, 2, 2, 2, 3, 3, 3, 3, 2, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 5, 3, 2, 3, 3, 5, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 2, 3, 2, 2, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 2, 3, 3, 3, 3, 3, 2, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 2, 2, 2, 8, 8, 8, 8, 8, 8, 8, + 3, 0, 3, 3, 3, 3, 0, 2, 3, 2, 2, 8, 8, 8, 8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 3, 3, 3, 3, 0, 0, 3, 3, 3, 3, 3, 2, 8, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 0, 2, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 0, 0, 3, 8, 8, 3, 8, 8, 8, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, + 0, 0, 7, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 8, 3, 0, 3, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 3, 3, 3, 3, 3, 2, + 0, 2, 0, 2, 2, 0, 0, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 1, 3, 3, 3, 3, 3, 2, 3, 3, 3, 2, 0, 0, 2, 8, + 8, 8, 8, 8, 8, 3, 3, 3, 3, 2, 3, 2, 3, 2, 2, 2, 3, 3, 3, 2, 3, 3, 2, 3, 2, 2, 3, 2, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 2, 2, 2, 2, 3, 3, 0, 1, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 2, 3, + 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 3, 3, 3, 2, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 3, 0, 3, 3, 2, 2, 2, 0, 3, 2, 2, 3, 3, 2, 3, 3, 0, 3, 2, 2, 3, 0, 0, 0, 0, 2, 3, 1, 0, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 8, 8, 8, 8, 8, 8, 8, 7, +}; +static const struct { uint32_t first, last, at; } joining_runs[11] = { + {0x0600, 0x08E2, 0}, + {0x1806, 0x18AA, 739}, + {0x200C, 0x2069, 904}, + {0xA840, 0xA873, 998}, + {0x10AC0, 0x10AEF, 1050}, + {0x10B80, 0x10BAF, 1098}, + {0x10D00, 0x10D23, 1146}, + {0x10EC2, 0x10EC4, 1182}, + {0x10F30, 0x10FCB, 1185}, + {0x110BD, 0x110CD, 1341}, + {0x1E900, 0x1E94B, 1358}, +}; +uint8_t vega_arabic_joining(uint32_t u) { + for (unsigned i = 0; i < 11 && u >= joining_runs[i].first; ++i) + if (u <= joining_runs[i].last) return joining_cells[joining_runs[i].at + u - joining_runs[i].first]; + return 8; +} + +/* Presentation forms of U+0621..U+06D3: init, medi, fina, isol. */ +const uint16_t vega_arabic_forms[179][4] = { + {0x0000, 0x0000, 0x0000, 0xFE80}, + {0x0000, 0x0000, 0xFE82, 0xFE81}, + {0x0000, 0x0000, 0xFE84, 0xFE83}, + {0x0000, 0x0000, 0xFE86, 0xFE85}, + {0x0000, 0x0000, 0xFE88, 0xFE87}, + {0xFE8B, 0xFE8C, 0xFE8A, 0xFE89}, + {0x0000, 0x0000, 0xFE8E, 0xFE8D}, + {0xFE91, 0xFE92, 0xFE90, 0xFE8F}, + {0x0000, 0x0000, 0xFE94, 0xFE93}, + {0xFE97, 0xFE98, 0xFE96, 0xFE95}, + {0xFE9B, 0xFE9C, 0xFE9A, 0xFE99}, + {0xFE9F, 0xFEA0, 0xFE9E, 0xFE9D}, + {0xFEA3, 0xFEA4, 0xFEA2, 0xFEA1}, + {0xFEA7, 0xFEA8, 0xFEA6, 0xFEA5}, + {0x0000, 0x0000, 0xFEAA, 0xFEA9}, + {0x0000, 0x0000, 0xFEAC, 0xFEAB}, + {0x0000, 0x0000, 0xFEAE, 0xFEAD}, + {0x0000, 0x0000, 0xFEB0, 0xFEAF}, + {0xFEB3, 0xFEB4, 0xFEB2, 0xFEB1}, + {0xFEB7, 0xFEB8, 0xFEB6, 0xFEB5}, + {0xFEBB, 0xFEBC, 0xFEBA, 0xFEB9}, + {0xFEBF, 0xFEC0, 0xFEBE, 0xFEBD}, + {0xFEC3, 0xFEC4, 0xFEC2, 0xFEC1}, + {0xFEC7, 0xFEC8, 0xFEC6, 0xFEC5}, + {0xFECB, 0xFECC, 0xFECA, 0xFEC9}, + {0xFECF, 0xFED0, 0xFECE, 0xFECD}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0xFED3, 0xFED4, 0xFED2, 0xFED1}, + {0xFED7, 0xFED8, 0xFED6, 0xFED5}, + {0xFEDB, 0xFEDC, 0xFEDA, 0xFED9}, + {0xFEDF, 0xFEE0, 0xFEDE, 0xFEDD}, + {0xFEE3, 0xFEE4, 0xFEE2, 0xFEE1}, + {0xFEE7, 0xFEE8, 0xFEE6, 0xFEE5}, + {0xFEEB, 0xFEEC, 0xFEEA, 0xFEE9}, + {0x0000, 0x0000, 0xFEEE, 0xFEED}, + {0xFBE8, 0xFBE9, 0xFEF0, 0xFEEF}, + {0xFEF3, 0xFEF4, 0xFEF2, 0xFEF1}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0xFB51, 0xFB50}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0xFBDD}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0xFB68, 0xFB69, 0xFB67, 0xFB66}, + {0xFB60, 0xFB61, 0xFB5F, 0xFB5E}, + {0xFB54, 0xFB55, 0xFB53, 0xFB52}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0xFB58, 0xFB59, 0xFB57, 0xFB56}, + {0xFB64, 0xFB65, 0xFB63, 0xFB62}, + {0xFB5C, 0xFB5D, 0xFB5B, 0xFB5A}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0xFB78, 0xFB79, 0xFB77, 0xFB76}, + {0xFB74, 0xFB75, 0xFB73, 0xFB72}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0xFB7C, 0xFB7D, 0xFB7B, 0xFB7A}, + {0xFB80, 0xFB81, 0xFB7F, 0xFB7E}, + {0x0000, 0x0000, 0xFB89, 0xFB88}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0xFB85, 0xFB84}, + {0x0000, 0x0000, 0xFB83, 0xFB82}, + {0x0000, 0x0000, 0xFB87, 0xFB86}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0xFB8D, 0xFB8C}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0xFB8B, 0xFB8A}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0xFB6C, 0xFB6D, 0xFB6B, 0xFB6A}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0xFB70, 0xFB71, 0xFB6F, 0xFB6E}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0xFB90, 0xFB91, 0xFB8F, 0xFB8E}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0xFBD5, 0xFBD6, 0xFBD4, 0xFBD3}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0xFB94, 0xFB95, 0xFB93, 0xFB92}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0xFB9C, 0xFB9D, 0xFB9B, 0xFB9A}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0xFB98, 0xFB99, 0xFB97, 0xFB96}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0xFB9F, 0xFB9E}, + {0xFBA2, 0xFBA3, 0xFBA1, 0xFBA0}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0xFBAC, 0xFBAD, 0xFBAB, 0xFBAA}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0xFBA5, 0xFBA4}, + {0xFBA8, 0xFBA9, 0xFBA7, 0xFBA6}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0xFBE1, 0xFBE0}, + {0x0000, 0x0000, 0xFBDA, 0xFBD9}, + {0x0000, 0x0000, 0xFBD8, 0xFBD7}, + {0x0000, 0x0000, 0xFBDC, 0xFBDB}, + {0x0000, 0x0000, 0xFBE3, 0xFBE2}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0xFBDF, 0xFBDE}, + {0xFBFE, 0xFBFF, 0xFBFD, 0xFBFC}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0xFBE6, 0xFBE7, 0xFBE5, 0xFBE4}, + {0x0000, 0x0000, 0x0000, 0x0000}, + {0x0000, 0x0000, 0xFBAF, 0xFBAE}, + {0x0000, 0x0000, 0xFBB1, 0xFBB0}, +}; +/* Ligatures fallback shaping forms: three components, two, and marks. */ +static const VegaArabicLigature ligatures_three[3] = { + {0xFEDF, 0xFD88, {0xFEE4, 0xFEA4}}, + {0xFEDF, 0xF201, {0xFEE0, 0xFEEA}}, + {0xFEDF, 0xF211, {0xFEE4, 0xFEA0}}, +}; +static const VegaArabicLigature ligatures_two[57] = { + {0xFE91, 0xFC08, {0xFEE2, 0x0000}}, + {0xFE91, 0xFC9F, {0xFEE4, 0x0000}}, + {0xFE91, 0xFC9C, {0xFEA0, 0x0000}}, + {0xFE91, 0xFC9D, {0xFEA4, 0x0000}}, + {0xFE91, 0xFC9E, {0xFEA8, 0x0000}}, + {0xFE92, 0xFC6A, {0xFEAE, 0x0000}}, + {0xFE92, 0xFC6D, {0xFEE6, 0x0000}}, + {0xFE92, 0xFC6F, {0xFEF2, 0x0000}}, + {0xFE97, 0xFC0E, {0xFEE2, 0x0000}}, + {0xFE97, 0xFCA4, {0xFEE4, 0x0000}}, + {0xFE97, 0xFCA1, {0xFEA0, 0x0000}}, + {0xFE97, 0xFCA2, {0xFEA4, 0x0000}}, + {0xFE97, 0xFCA3, {0xFEA8, 0x0000}}, + {0xFE98, 0xFC70, {0xFEAE, 0x0000}}, + {0xFE98, 0xFC73, {0xFEE6, 0x0000}}, + {0xFE98, 0xFC75, {0xFEF2, 0x0000}}, + {0xFE9B, 0xFC12, {0xFEE2, 0x0000}}, + {0xFE9F, 0xFCA8, {0xFEE4, 0x0000}}, + {0xFEA3, 0xFCAA, {0xFEE4, 0x0000}}, + {0xFEA7, 0xFCAC, {0xFEE4, 0x0000}}, + {0xFEB3, 0xFCB0, {0xFEE4, 0x0000}}, + {0xFEB7, 0xFD30, {0xFEE4, 0x0000}}, + {0xFED3, 0xFC32, {0xFEF2, 0x0000}}, + {0xFEDF, 0xFC3F, {0xFE9E, 0x0000}}, + {0xFEDF, 0xFCC9, {0xFEA0, 0x0000}}, + {0xFEDF, 0xFC40, {0xFEA2, 0x0000}}, + {0xFEDF, 0xFCCA, {0xFEA4, 0x0000}}, + {0xFEDF, 0xFC41, {0xFEA6, 0x0000}}, + {0xFEDF, 0xFCCB, {0xFEA8, 0x0000}}, + {0xFEDF, 0xFC42, {0xFEE2, 0x0000}}, + {0xFEDF, 0xFCCC, {0xFEE4, 0x0000}}, + {0xFEDF, 0xFC44, {0xFEF2, 0x0000}}, + {0xFEDF, 0xFCCD, {0xFEEC, 0x0000}}, + {0xFEDF, 0xFEF5, {0xFE82, 0x0000}}, + {0xFEDF, 0xFEF7, {0xFE84, 0x0000}}, + {0xFEDF, 0xFEF9, {0xFE88, 0x0000}}, + {0xFEDF, 0xFEFB, {0xFE8E, 0x0000}}, + {0xFEE0, 0xFC86, {0xFEF0, 0x0000}}, + {0xFEE0, 0xFEF6, {0xFE82, 0x0000}}, + {0xFEE0, 0xFEF8, {0xFE84, 0x0000}}, + {0xFEE0, 0xFEFA, {0xFE88, 0x0000}}, + {0xFEE0, 0xFEFC, {0xFE8E, 0x0000}}, + {0xFEE3, 0xFCCE, {0xFEA0, 0x0000}}, + {0xFEE3, 0xFCCF, {0xFEA4, 0x0000}}, + {0xFEE3, 0xFCD0, {0xFEA8, 0x0000}}, + {0xFEE3, 0xFCD1, {0xFEE4, 0x0000}}, + {0xFEE7, 0xFC4E, {0xFEE2, 0x0000}}, + {0xFEE7, 0xFCD5, {0xFEE4, 0x0000}}, + {0xFEE7, 0xFCD2, {0xFEA0, 0x0000}}, + {0xFEE7, 0xFCD3, {0xFEA4, 0x0000}}, + {0xFEE8, 0xFC8F, {0xFEF2, 0x0000}}, + {0xFEF3, 0xFCDA, {0xFEA0, 0x0000}}, + {0xFEF3, 0xFCDB, {0xFEA4, 0x0000}}, + {0xFEF3, 0xFCDC, {0xFEA8, 0x0000}}, + {0xFEF3, 0xFCDD, {0xFEE4, 0x0000}}, + {0xFEF4, 0xFC91, {0xFEAE, 0x0000}}, + {0xFEF4, 0xFC94, {0xFEE6, 0x0000}}, +}; +static const VegaArabicLigature ligatures_marks[5] = { + {0x0651, 0xFC5E, {0x064C, 0x0000}}, + {0x0651, 0xFC60, {0x064E, 0x0000}}, + {0x0651, 0xFC61, {0x064F, 0x0000}}, + {0x0651, 0xFC62, {0x0650, 0x0000}}, + {0x0651, 0xF2EE, {0x064B, 0x0000}}, +}; +const VegaArabicLigatures vega_arabic_ligatures[3] = { + {ligatures_three, 3, 3}, + {ligatures_two, 57, 2}, + {ligatures_marks, 5, 2}, +}; + /* The categories syllabic.h names are the machines' own. */ _Static_assert(VEGA_OT_A == 9, "indic A"); _Static_assert(VEGA_OT_C == 1, "indic C"); |
