#ifndef HB_OT_SHAPE_COMPLEX_ARABIC_TABLE_HH
#define HB_OT_SHAPE_COMPLEX_ARABIC_TABLE_HH
#define X JOINING_TYPE_X
#define R JOINING_TYPE_R
#define T JOINING_TYPE_T
#define U JOINING_TYPE_U
#define A JOINING_GROUP_ALAPH
#define DR JOINING_GROUP_DALATH_RISH
#define L JOINING_TYPE_L
#define C JOINING_TYPE_C
#define D JOINING_TYPE_D
static const uint8_t joining_table[] =
{
#define joining_offset_0x0600u 0
U,U,U,U,U,U,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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
X,X,X,X,X,X,X,X,X,X,X,X,X,R,D,D,
D,D,D,D,D,D,D,D,D,R,R,R,D,D,D,D,
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,
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,
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,
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,
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,
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,
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,
R,D,D,D,D,D,R,R,D,R,D,D,D,D,D,D,D,D,D,D,R,D,U,U,U,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,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,X,X,X,X,X,X,X,
D,D,D,D,D,D,D,D,D,D,R,R,R,U,R,D,D,R,R,D,D,X,D,D,D,R,D,D,D,D,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,X,X,
X,X,U,
#define joining_offset_0x1806u 739
U,D,X,X,C,X,X,X,U,X,X,X,X,X,X,X,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,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,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,D,D,X,X,X,X,X,X,X,X,
U,U,U,U,U,T,T,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,D,D,X,D,
#define joining_offset_0x200cu 904
U,C,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,X,U,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,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
X,X,X,X,X,X,U,U,U,U,
#define joining_offset_0xa840u 998
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,
D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,L,U,
#define joining_offset_0x10ac0u 1050
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,
D,R,U,U,R,X,X,X,X,X,X,D,D,D,D,R,
#define joining_offset_0x10b80u 1098
D,R,D,R,R,R,D,D,D,R,D,D,R,D,R,R,D,R,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
X,X,X,X,X,X,X,X,X,R,R,R,R,D,D,U,
#define joining_offset_0x1e900u 1146
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,
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,
D,D,D,D,
};
static unsigned int
joining_type (hb_codepoint_t u)
{
switch (u >> 12)
{
case 0x0u:
if (hb_in_range<hb_codepoint_t> (u, 0x0600u, 0x08E2u)) return joining_table[u - 0x0600u + joining_offset_0x0600u];
break;
case 0x1u:
if (hb_in_range<hb_codepoint_t> (u, 0x1806u, 0x18AAu)) return joining_table[u - 0x1806u + joining_offset_0x1806u];
break;
case 0x2u:
if (hb_in_range<hb_codepoint_t> (u, 0x200Cu, 0x2069u)) return joining_table[u - 0x200Cu + joining_offset_0x200cu];
break;
case 0xAu:
if (hb_in_range<hb_codepoint_t> (u, 0xA840u, 0xA873u)) return joining_table[u - 0xA840u + joining_offset_0xa840u];
break;
case 0x10u:
if (hb_in_range<hb_codepoint_t> (u, 0x10AC0u, 0x10AEFu)) return joining_table[u - 0x10AC0u + joining_offset_0x10ac0u];
if (hb_in_range<hb_codepoint_t> (u, 0x10B80u, 0x10BAFu)) return joining_table[u - 0x10B80u + joining_offset_0x10b80u];
break;
case 0x1Eu:
if (hb_in_range<hb_codepoint_t> (u, 0x1E900u, 0x1E943u)) return joining_table[u - 0x1E900u + joining_offset_0x1e900u];
break;
default:
break;
}
return X;
}
#undef X
#undef R
#undef T
#undef U
#undef A
#undef DR
#undef L
#undef C
#undef D
static const uint16_t shaping_table[][4] =
{
{0x0000u, 0x0000u, 0x0000u, 0xFE80u},
{0x0000u, 0x0000u, 0xFE82u, 0xFE81u},
{0x0000u, 0x0000u, 0xFE84u, 0xFE83u},
{0x0000u, 0x0000u, 0xFE86u, 0xFE85u},
{0x0000u, 0x0000u, 0xFE88u, 0xFE87u},
{0xFE8Bu, 0xFE8Cu, 0xFE8Au, 0xFE89u},
{0x0000u, 0x0000u, 0xFE8Eu, 0xFE8Du},
{0xFE91u, 0xFE92u, 0xFE90u, 0xFE8Fu},
{0x0000u, 0x0000u, 0xFE94u, 0xFE93u},
{0xFE97u, 0xFE98u, 0xFE96u, 0xFE95u},
{0xFE9Bu, 0xFE9Cu, 0xFE9Au, 0xFE99u},
{0xFE9Fu, 0xFEA0u, 0xFE9Eu, 0xFE9Du},
{0xFEA3u, 0xFEA4u, 0xFEA2u, 0xFEA1u},
{0xFEA7u, 0xFEA8u, 0xFEA6u, 0xFEA5u},
{0x0000u, 0x0000u, 0xFEAAu, 0xFEA9u},
{0x0000u, 0x0000u, 0xFEACu, 0xFEABu},
{0x0000u, 0x0000u, 0xFEAEu, 0xFEADu},
{0x0000u, 0x0000u, 0xFEB0u, 0xFEAFu},
{0xFEB3u, 0xFEB4u, 0xFEB2u, 0xFEB1u},
{0xFEB7u, 0xFEB8u, 0xFEB6u, 0xFEB5u},
{0xFEBBu, 0xFEBCu, 0xFEBAu, 0xFEB9u},
{0xFEBFu, 0xFEC0u, 0xFEBEu, 0xFEBDu},
{0xFEC3u, 0xFEC4u, 0xFEC2u, 0xFEC1u},
{0xFEC7u, 0xFEC8u, 0xFEC6u, 0xFEC5u},
{0xFECBu, 0xFECCu, 0xFECAu, 0xFEC9u},
{0xFECFu, 0xFED0u, 0xFECEu, 0xFECDu},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0xFED3u, 0xFED4u, 0xFED2u, 0xFED1u},
{0xFED7u, 0xFED8u, 0xFED6u, 0xFED5u},
{0xFEDBu, 0xFEDCu, 0xFEDAu, 0xFED9u},
{0xFEDFu, 0xFEE0u, 0xFEDEu, 0xFEDDu},
{0xFEE3u, 0xFEE4u, 0xFEE2u, 0xFEE1u},
{0xFEE7u, 0xFEE8u, 0xFEE6u, 0xFEE5u},
{0xFEEBu, 0xFEECu, 0xFEEAu, 0xFEE9u},
{0x0000u, 0x0000u, 0xFEEEu, 0xFEEDu},
{0xFBE8u, 0xFBE9u, 0xFEF0u, 0xFEEFu},
{0xFEF3u, 0xFEF4u, 0xFEF2u, 0xFEF1u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0xFB51u, 0xFB50u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0xFBDDu},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0xFB68u, 0xFB69u, 0xFB67u, 0xFB66u},
{0xFB60u, 0xFB61u, 0xFB5Fu, 0xFB5Eu},
{0xFB54u, 0xFB55u, 0xFB53u, 0xFB52u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0xFB58u, 0xFB59u, 0xFB57u, 0xFB56u},
{0xFB64u, 0xFB65u, 0xFB63u, 0xFB62u},
{0xFB5Cu, 0xFB5Du, 0xFB5Bu, 0xFB5Au},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0xFB78u, 0xFB79u, 0xFB77u, 0xFB76u},
{0xFB74u, 0xFB75u, 0xFB73u, 0xFB72u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0xFB7Cu, 0xFB7Du, 0xFB7Bu, 0xFB7Au},
{0xFB80u, 0xFB81u, 0xFB7Fu, 0xFB7Eu},
{0x0000u, 0x0000u, 0xFB89u, 0xFB88u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0xFB85u, 0xFB84u},
{0x0000u, 0x0000u, 0xFB83u, 0xFB82u},
{0x0000u, 0x0000u, 0xFB87u, 0xFB86u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0xFB8Du, 0xFB8Cu},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0xFB8Bu, 0xFB8Au},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0xFB6Cu, 0xFB6Du, 0xFB6Bu, 0xFB6Au},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0xFB70u, 0xFB71u, 0xFB6Fu, 0xFB6Eu},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0xFB90u, 0xFB91u, 0xFB8Fu, 0xFB8Eu},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0xFBD5u, 0xFBD6u, 0xFBD4u, 0xFBD3u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0xFB94u, 0xFB95u, 0xFB93u, 0xFB92u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0xFB9Cu, 0xFB9Du, 0xFB9Bu, 0xFB9Au},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0xFB98u, 0xFB99u, 0xFB97u, 0xFB96u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0xFB9Fu, 0xFB9Eu},
{0xFBA2u, 0xFBA3u, 0xFBA1u, 0xFBA0u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0xFBACu, 0xFBADu, 0xFBABu, 0xFBAAu},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0xFBA5u, 0xFBA4u},
{0xFBA8u, 0xFBA9u, 0xFBA7u, 0xFBA6u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0xFBE1u, 0xFBE0u},
{0x0000u, 0x0000u, 0xFBDAu, 0xFBD9u},
{0x0000u, 0x0000u, 0xFBD8u, 0xFBD7u},
{0x0000u, 0x0000u, 0xFBDCu, 0xFBDBu},
{0x0000u, 0x0000u, 0xFBE3u, 0xFBE2u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0xFBDFu, 0xFBDEu},
{0xFBFEu, 0xFBFFu, 0xFBFDu, 0xFBFCu},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0xFBE6u, 0xFBE7u, 0xFBE5u, 0xFBE4u},
{0x0000u, 0x0000u, 0x0000u, 0x0000u},
{0x0000u, 0x0000u, 0xFBAFu, 0xFBAEu},
{0x0000u, 0x0000u, 0xFBB1u, 0xFBB0u},
};
#define SHAPING_TABLE_FIRST 0x0621u
#define SHAPING_TABLE_LAST 0x06D3u
static const struct ligature_set_t {
uint16_t first;
struct ligature_pairs_t {
uint16_t second;
uint16_t ligature;
} ligatures[4];
} ligature_table[] =
{
{ 0xFEDFu, {
{ 0xFE88u, 0xFEF9u },
{ 0xFE82u, 0xFEF5u },
{ 0xFE8Eu, 0xFEFBu },
{ 0xFE84u, 0xFEF7u },
}},
{ 0xFEE0u, {
{ 0xFE88u, 0xFEFAu },
{ 0xFE82u, 0xFEF6u },
{ 0xFE8Eu, 0xFEFCu },
{ 0xFE84u, 0xFEF8u },
}},
};
#endif