/* == 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.1.0.txt
 * # Date: 2023-01-05
 * # Scripts-15.1.0.txt
 * # Date: 2023-07-28, 16:01:07 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 == */
