/* == Start of generated function == */
/*
 * The following function is generated by running:
 *
 *   ./gen-arabic-joining-list.py ArabicShaping.txt Scripts.txt
 *
 * on files with these headers:
 *
 * # ArabicShaping-14.0.0.txt
 * # Date: 2021-05-21, 01:54:00 GMT [KW, RP]
 * # Scripts-14.0.0.txt
 * # Date: 2021-07-10, 00:35:31 GMT
 */

#ifndef HB_OT_SHAPE_COMPLEX_ARABIC_JOINING_LIST_HH
#define HB_OT_SHAPE_COMPLEX_ARABIC_JOINING_LIST_HH

static bool
has_arabic_joining (hb_script_t script)
{
  /* List of scripts that have data in arabic-table. */
  switch ((int) script)
  {
    case HB_SCRIPT_ADLAM:
    case HB_SCRIPT_ARABIC:
    case HB_SCRIPT_CHORASMIAN:
    case HB_SCRIPT_HANIFI_ROHINGYA:
    case HB_SCRIPT_MANDAIC:
    case HB_SCRIPT_MANICHAEAN:
    case HB_SCRIPT_MONGOLIAN:
    case HB_SCRIPT_NKO:
    case HB_SCRIPT_OLD_UYGHUR:
    case HB_SCRIPT_PHAGS_PA:
    case HB_SCRIPT_PSALTER_PAHLAVI:
    case HB_SCRIPT_SOGDIAN:
    case HB_SCRIPT_SYRIAC:
      return true;

    default:
      return false;
  }
}


#endif /* HB_OT_SHAPE_COMPLEX_ARABIC_JOINING_LIST_HH */

/* == End of generated function == */
