/* == 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-15.0.0.txt
 * # Date: 2022-02-14, 18:50:00 GMT [KW, RP]
 * # Scripts-15.0.0.txt
 * # Date: 2022-04-26, 23:15:02 GMT
 */

#ifndef HB_OT_SHAPER_ARABIC_JOINING_LIST_HH
#define HB_OT_SHAPER_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_SHAPER_ARABIC_JOINING_LIST_HH */

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