hb-ot-shape-complex-arabic-table.hh 18.6 KB
Newer Older
1 2 3 4
/* == Start of generated table == */
/*
 * The following table is generated by running:
 *
5
 *   ./gen-arabic-table.py ArabicShaping.txt UnicodeData.txt Blocks.txt
6
 *
B
Minor  
Behdad Esfahbod 已提交
7
 * on files with these headers:
8
 *
D
David Corbett 已提交
9 10 11 12
 * # ArabicShaping-12.0.0.txt
 * # Date: 2018-09-22, 23:54:00 GMT [KW, RP]
 * # Blocks-12.0.0.txt
 * # Date: 2018-07-30, 19:40:00 GMT [KW]
13
 * UnicodeData.txt does not have a header.
14
 */
B
Behdad Esfahbod 已提交
15 16 17 18

#ifndef HB_OT_SHAPE_COMPLEX_ARABIC_TABLE_HH
#define HB_OT_SHAPE_COMPLEX_ARABIC_TABLE_HH

19

20 21
#define X	JOINING_TYPE_X
#define R	JOINING_TYPE_R
22
#define T	JOINING_TYPE_T
23 24 25
#define U	JOINING_TYPE_U
#define A	JOINING_GROUP_ALAPH
#define DR	JOINING_GROUP_DALATH_RISH
26
#define L	JOINING_TYPE_L
27 28 29
#define C	JOINING_TYPE_C
#define D	JOINING_TYPE_D

30
static const uint8_t joining_table[] =
31
{
32

33
#define joining_offset_0x0600u 0
34

35
  /* Arabic */
36

37
  /* 0600 */ 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,
38 39 40 41 42 43 44
  /* 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,
45

46
  /* Syriac */
47

B
Behdad Esfahbod 已提交
48
  /* 0700 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,T,A,X,D,D,D,DR,DR,R,R,R,D,D,D,D,R,D,
49 50
  /* 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,
51

52
  /* Arabic Supplement */
53

54
  /* 0740 */                                 D,D,D,D,D,D,D,D,D,R,R,R,D,D,D,D,
55
  /* 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,
56

B
Behdad Esfahbod 已提交
57 58 59 60
  /* 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,
61 62 63

  /* NKo */

B
Behdad Esfahbod 已提交
64 65
  /* 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,
66

B
Behdad Esfahbod 已提交
67
  /* FILLER */
68

B
Behdad Esfahbod 已提交
69 70
  /* 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,
71

B
Behdad Esfahbod 已提交
72
  /* Mandaic */
73

74
  /* 0840 */ 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,
75 76 77 78

  /* Syriac Supplement */

  /* 0860 */ D,U,D,D,D,D,U,R,D,R,R,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
B
Behdad Esfahbod 已提交
79
  /* 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,
80 81 82

  /* Arabic Extended-A */

83 84 85
  /* 08A0 */ 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,
  /* 08C0 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
  /* 08E0 */ X,X,U,
86

87
#define joining_offset_0x1806u 739
88 89 90 91 92 93

  /* Mongolian */

  /* 1800 */             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,
  /* 1820 */ 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,
  /* 1840 */ 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,
B
Behdad Esfahbod 已提交
94
  /* 1860 */ 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,
95
  /* 1880 */ 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,
96 97
  /* 18A0 */ D,D,D,D,D,D,D,D,D,X,D,

98
#define joining_offset_0x200cu 904
99 100 101

  /* General Punctuation */

102 103 104 105
  /* 2000 */                         U,C,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
  /* 2020 */ 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,
  /* 2040 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
  /* 2060 */ X,X,X,X,X,X,U,U,U,U,
106

107
#define joining_offset_0xa840u 998
108 109 110 111 112 113

  /* 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,

114
#define joining_offset_0x10ac0u 1050
115 116 117 118 119 120

  /* 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,

121
#define joining_offset_0x10b80u 1098
122 123 124 125 126 127

  /* Psalter Pahlavi */

  /* 10B80 */ 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,
  /* 10BA0 */ X,X,X,X,X,X,X,X,X,R,R,R,R,D,D,U,

B
Behdad Esfahbod 已提交
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
#define joining_offset_0x10d00u 1146

  /* Hanifi Rohingya */

  /* 10D00 */ L,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,
  /* 10D20 */ D,D,R,D,

#define joining_offset_0x10f30u 1182

  /* Sogdian */

  /* 10F20 */                                 D,D,D,R,D,D,D,D,D,D,D,D,D,D,D,D,
  /* 10F40 */ D,D,D,D,D,U,X,X,X,X,X,X,X,X,X,X,X,D,D,D,R,

#define joining_offset_0x110bdu 1219

  /* Kaithi */

  /* 110A0 */                                                           U,X,X,
  /* 110C0 */ X,X,X,X,X,X,X,X,X,X,X,X,X,U,

#define joining_offset_0x1e900u 1236
150 151 152 153 154

  /* Adlam */

  /* 1E900 */ 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,
  /* 1E920 */ 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
David Corbett 已提交
155
  /* 1E940 */ D,D,D,D,X,X,X,X,X,X,X,T,
156

D
David Corbett 已提交
157
}; /* Table items: 1312; occupancy: 56% */
158 159 160 161 162


static unsigned int
joining_type (hb_codepoint_t u)
{
B
Behdad Esfahbod 已提交
163
  switch (u >> 12)
164
  {
165
    case 0x0u:
166
      if (hb_in_range<hb_codepoint_t> (u, 0x0600u, 0x08E2u)) return joining_table[u - 0x0600u + joining_offset_0x0600u];
167 168
      break;

169
    case 0x1u:
170
      if (hb_in_range<hb_codepoint_t> (u, 0x1806u, 0x18AAu)) return joining_table[u - 0x1806u + joining_offset_0x1806u];
171 172
      break;

173
    case 0x2u:
174
      if (hb_in_range<hb_codepoint_t> (u, 0x200Cu, 0x2069u)) return joining_table[u - 0x200Cu + joining_offset_0x200cu];
175 176
      break;

177
    case 0xAu:
178
      if (hb_in_range<hb_codepoint_t> (u, 0xA840u, 0xA873u)) return joining_table[u - 0xA840u + joining_offset_0xa840u];
179 180
      break;

181
    case 0x10u:
182 183
      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];
B
Behdad Esfahbod 已提交
184 185 186 187 188 189
      if (hb_in_range<hb_codepoint_t> (u, 0x10D00u, 0x10D23u)) return joining_table[u - 0x10D00u + joining_offset_0x10d00u];
      if (hb_in_range<hb_codepoint_t> (u, 0x10F30u, 0x10F54u)) return joining_table[u - 0x10F30u + joining_offset_0x10f30u];
      break;

    case 0x11u:
      if (hb_in_range<hb_codepoint_t> (u, 0x110BDu, 0x110CDu)) return joining_table[u - 0x110BDu + joining_offset_0x110bdu];
190 191
      break;

192
    case 0x1Eu:
D
David Corbett 已提交
193
      if (hb_in_range<hb_codepoint_t> (u, 0x1E900u, 0x1E94Bu)) return joining_table[u - 0x1E900u + joining_offset_0x1e900u];
194 195
      break;

196 197 198 199 200
    default:
      break;
  }
  return X;
}
201

202 203
#undef X
#undef R
204
#undef T
205 206 207
#undef U
#undef A
#undef DR
208
#undef L
209 210 211
#undef C
#undef D

212 213 214

static const uint16_t shaping_table[][4] =
{
215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393
  {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 */
394 395
};

396 397
#define SHAPING_TABLE_FIRST	0x0621u
#define SHAPING_TABLE_LAST	0x06D3u
398 399


400
static const struct ligature_set_t {
401
 uint16_t first;
402
 struct ligature_pairs_t {
403 404 405 406
   uint16_t second;
   uint16_t ligature;
 } ligatures[4];
} ligature_table[] =
407
{
408 409 410 411 412
  { 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 */
413
  }},
414 415 416 417 418
  { 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 */
419
  }},
420 421 422
};


B
Behdad Esfahbod 已提交
423 424
#endif /* HB_OT_SHAPE_COMPLEX_ARABIC_TABLE_HH */

425
/* == End of generated table == */