/* This file has been generated by the Perl script `afblue.pl', */
/* using data from file `afblue.dat'.                           */

/****************************************************************************
 *
 * afblue.h
 *
 *   Auto-fitter data for blue strings (specification).
 *
 * Copyright (C) 2013-2019 by
 * David Turner, Robert Wilhelm, and Werner Lemberg.
 *
 * This file is part of the FreeType project, and may only be used,
 * modified, and distributed under the terms of the FreeType project
 * license, LICENSE.TXT.  By continuing to use, modify, or distribute
 * this file you indicate that you have read the license and
 * understand and accept it fully.
 *
 */


#ifndef AFBLUE_H_
#define AFBLUE_H_


FT_BEGIN_HEADER


  /* an auxiliary macro to decode a UTF-8 character -- since we only use */
  /* hard-coded, self-converted data, no error checking is performed     */
#define GET_UTF8_CHAR( ch, p )                      \
          do                                        \
          {                                         \
            ch = (unsigned char)*p++;               \
            if ( ch >= 0x80 )                       \
            {                                       \
              FT_UInt  len_;                        \
                                                    \
                                                    \
              if ( ch < 0xE0 )                      \
              {                                     \
                len_ = 1;                           \
                ch  &= 0x1F;                        \
              }                                     \
              else if ( ch < 0xF0 )                 \
              {                                     \
                len_ = 2;                           \
                ch  &= 0x0F;                        \
              }                                     \
              else                                  \
              {                                     \
                len_ = 3;                           \
                ch  &= 0x07;                        \
              }                                     \
                                                    \
              for ( ; len_ > 0; len_-- )            \
                ch = ( ch << 6 ) | ( *p++ & 0x3F ); \
            }                                       \
          } while ( 0 )


  /*************************************************************************/
  /*************************************************************************/
  /*****                                                               *****/
  /*****                    B L U E   S T R I N G S                    *****/
  /*****                                                               *****/
  /*************************************************************************/
  /*************************************************************************/

  /* At the bottommost level, we define strings for finding blue zones. */


#define AF_BLUE_STRING_MAX_LEN  51

  /* The AF_Blue_String enumeration values are offsets into the */
  /* `af_blue_strings' array.                                   */

  typedef enum  AF_Blue_String_
  {
    AF_BLUE_STRING_ADLAM_CAPITAL_TOP = 0,
    AF_BLUE_STRING_ADLAM_CAPITAL_BOTTOM = 30,
    AF_BLUE_STRING_ADLAM_SMALL_TOP = 40,
    AF_BLUE_STRING_ADLAM_SMALL_BOTTOM = 65,
    AF_BLUE_STRING_ARABIC_TOP = 105,
    AF_BLUE_STRING_ARABIC_BOTTOM = 123,
    AF_BLUE_STRING_ARABIC_JOIN = 138,
    AF_BLUE_STRING_ARMENIAN_CAPITAL_TOP = 141,
    AF_BLUE_STRING_ARMENIAN_CAPITAL_BOTTOM = 165,
    AF_BLUE_STRING_ARMENIAN_SMALL_ASCENDER = 189,
    AF_BLUE_STRING_ARMENIAN_SMALL_TOP = 210,
    AF_BLUE_STRING_ARMENIAN_SMALL_BOTTOM = 234,
    AF_BLUE_STRING_ARMENIAN_SMALL_DESCENDER = 258,
    AF_BLUE_STRING_AVESTAN_TOP = 282,
    AF_BLUE_STRING_AVESTAN_BOTTOM = 302,
    AF_BLUE_STRING_BAMUM_TOP = 312,
    AF_BLUE_STRING_BAMUM_BOTTOM = 344,
    AF_BLUE_STRING_BENGALI_BASE = 376,
    AF_BLUE_STRING_BENGALI_TOP = 408,
    AF_BLUE_STRING_BENGALI_HEAD = 436,
    AF_BLUE_STRING_BUHID_TOP = 468,
    AF_BLUE_STRING_BUHID_LARGE = 476,
    AF_BLUE_STRING_BUHID_SMALL = 488,
    AF_BLUE_STRING_BUHID_BOTTOM = 504,
    AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP = 532,
    AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM = 564,
    AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP = 596,
    AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM = 628,
    AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP = 660,
    AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM = 688,
    AF_BLUE_STRING_CARIAN_TOP = 720,
    AF_BLUE_STRING_CARIAN_BOTTOM = 760,
    AF_BLUE_STRING_CHAKMA_TOP = 795,
    AF_BLUE_STRING_CHAKMA_BOTTOM = 820,
    AF_BLUE_STRING_CHAKMA_DESCENDER = 845,
    AF_BLUE_STRING_CHEROKEE_CAPITAL = 910,
    AF_BLUE_STRING_CHEROKEE_SMALL_ASCENDER = 942,
    AF_BLUE_STRING_CHEROKEE_SMALL = 974,
    AF_BLUE_STRING_CHEROKEE_SMALL_DESCENDER = 1006,
    AF_BLUE_STRING_COPTIC_CAPITAL_TOP = 1022,
    AF_BLUE_STRING_COPTIC_CAPITAL_BOTTOM = 1054,
    AF_BLUE_STRING_COPTIC_SMALL_TOP = 1086,
    AF_BLUE_STRING_COPTIC_SMALL_BOTTOM = 1118,
    AF_BLUE_STRING_CYPRIOT_TOP = 1150,
    AF_BLUE_STRING_CYPRIOT_BOTTOM = 1190,
    AF_BLUE_STRING_CYPRIOT_SMALL = 1225,
    AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP = 1240,
    AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM = 1264,
    AF_BLUE_STRING_CYRILLIC_SMALL = 1288,
    AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER = 1312,
    AF_BLUE_STRING_DESERET_CAPITAL_TOP = 1321,
    AF_BLUE_STRING_DESERET_CAPITAL_BOTTOM = 1346,
    AF_BLUE_STRING_DESERET_SMALL_TOP = 1371,
    AF_BLUE_STRING_DESERET_SMALL_BOTTOM = 1396,
    AF_BLUE_STRING_DEVANAGARI_BASE = 1421,
    AF_BLUE_STRING_DEVANAGARI_TOP = 1453,
    AF_BLUE_STRING_DEVANAGARI_HEAD = 1485,
    AF_BLUE_STRING_DEVANAGARI_BOTTOM = 1517,
    AF_BLUE_STRING_ETHIOPIC_TOP = 1525,
    AF_BLUE_STRING_ETHIOPIC_BOTTOM = 1557,
    AF_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP = 1589,
    AF_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM = 1621,
    AF_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER = 1653,
    AF_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER = 1685,
    AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP = 1717,
    AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM = 1749,
    AF_BLUE_STRING_GEORGIAN_NUSKHURI_TOP = 1781,
    AF_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM = 1813,
    AF_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER = 1845,
    AF_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER = 1877,
    AF_BLUE_STRING_GEORGIAN_MTAVRULI_TOP = 1909,
    AF_BLUE_STRING_GEORGIAN_MTAVRULI_BOTTOM = 1941,
    AF_BLUE_STRING_GLAGOLITIC_CAPITAL_TOP = 1973,
    AF_BLUE_STRING_GLAGOLITIC_CAPITAL_BOTTOM = 2005,
    AF_BLUE_STRING_GLAGOLITIC_SMALL_TOP = 2037,
    AF_BLUE_STRING_GLAGOLITIC_SMALL_BOTTOM = 2069,
    AF_BLUE_STRING_GOTHIC_TOP = 2101,
    AF_BLUE_STRING_GOTHIC_BOTTOM = 2141,
    AF_BLUE_STRING_GREEK_CAPITAL_TOP = 2161,
    AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM = 2182,
    AF_BLUE_STRING_GREEK_SMALL_BETA_TOP = 2200,
    AF_BLUE_STRING_GREEK_SMALL = 2218,
    AF_BLUE_STRING_GREEK_SMALL_DESCENDER = 2242,
    AF_BLUE_STRING_GUJARATI_TOP = 2266,
    AF_BLUE_STRING_GUJARATI_BOTTOM = 2298,
    AF_BLUE_STRING_GUJARATI_ASCENDER = 2330,
    AF_BLUE_STRING_GUJARATI_DESCENDER = 2380,
    AF_BLUE_STRING_GUJARATI_DIGIT_TOP = 2413,
    AF_BLUE_STRING_GURMUKHI_BASE = 2433,
    AF_BLUE_STRING_GURMUKHI_HEAD = 2465,
    AF_BLUE_STRING_GURMUKHI_TOP = 2497,
    AF_BLUE_STRING_GURMUKHI_BOTTOM = 2529,
    AF_BLUE_STRING_GURMUKHI_DIGIT_TOP = 2561,
    AF_BLUE_STRING_HEBREW_TOP = 2581,
    AF_BLUE_STRING_HEBREW_BOTTOM = 2605,
    AF_BLUE_STRING_HEBREW_DESCENDER = 2623,
    AF_BLUE_STRING_KANNADA_TOP = 2638,
    AF_BLUE_STRING_KANNADA_BOTTOM = 2682,
    AF_BLUE_STRING_KAYAH_LI_TOP = 2714,
    AF_BLUE_STRING_KAYAH_LI_BOTTOM = 2738,
    AF_BLUE_STRING_KAYAH_LI_ASCENDER = 2758,
    AF_BLUE_STRING_KAYAH_LI_DESCENDER = 2766,
    AF_BLUE_STRING_KAYAH_LI_LARGE_DESCENDER = 2778,
    AF_BLUE_STRING_KHMER_TOP = 2799,
    AF_BLUE_STRING_KHMER_SUBSCRIPT_TOP = 2823,
    AF_BLUE_STRING_KHMER_BOTTOM = 2863,
    AF_BLUE_STRING_KHMER_DESCENDER = 2895,
    AF_BLUE_STRING_KHMER_LARGE_DESCENDER = 2929,
    AF_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP = 3016,
    AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM = 3024,
    AF_BLUE_STRING_LAO_TOP = 3032,
    AF_BLUE_STRING_LAO_BOTTOM = 3064,
    AF_BLUE_STRING_LAO_ASCENDER = 3096,
    AF_BLUE_STRING_LAO_LARGE_ASCENDER = 3112,
    AF_BLUE_STRING_LAO_DESCENDER = 3124,
    AF_BLUE_STRING_LATIN_CAPITAL_TOP = 3148,
    AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM = 3164,
    AF_BLUE_STRING_LATIN_SMALL_F_TOP = 3180,
    AF_BLUE_STRING_LATIN_SMALL_TOP = 3194,
    AF_BLUE_STRING_LATIN_SMALL_BOTTOM = 3210,
    AF_BLUE_STRING_LATIN_SMALL_DESCENDER = 3226,
    AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP = 3236,
    AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM = 3256,
    AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP = 3276,
    AF_BLUE_STRING_LATIN_SUBS_SMALL = 3296,
    AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER = 3332,
    AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP = 3352,
    AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM = 3383,
    AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP = 3412,
    AF_BLUE_STRING_LATIN_SUPS_SMALL = 3438,
    AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER = 3463,
    AF_BLUE_STRING_LISU_TOP = 3474,
    AF_BLUE_STRING_LISU_BOTTOM = 3506,
    AF_BLUE_STRING_MALAYALAM_TOP = 3538,
    AF_BLUE_STRING_MALAYALAM_BOTTOM = 3582,
    AF_BLUE_STRING_MYANMAR_TOP = 3614,
    AF_BLUE_STRING_MYANMAR_BOTTOM = 3646,
    AF_BLUE_STRING_MYANMAR_ASCENDER = 3678,
    AF_BLUE_STRING_MYANMAR_DESCENDER = 3706,
    AF_BLUE_STRING_NKO_TOP = 3738,
    AF_BLUE_STRING_NKO_BOTTOM = 3762,
    AF_BLUE_STRING_NKO_SMALL_TOP = 3777,
    AF_BLUE_STRING_NKO_SMALL_BOTTOM = 3786,
    AF_BLUE_STRING_OL_CHIKI = 3798,
    AF_BLUE_STRING_OLD_TURKIC_TOP = 3822,
    AF_BLUE_STRING_OLD_TURKIC_BOTTOM = 3837,
    AF_BLUE_STRING_OSAGE_CAPITAL_TOP = 3857,
    AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM = 3897,
    AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER = 3927,
    AF_BLUE_STRING_OSAGE_SMALL_TOP = 3942,
    AF_BLUE_STRING_OSAGE_SMALL_BOTTOM = 3982,
    AF_BLUE_STRING_OSAGE_SMALL_ASCENDER = 4022,
    AF_BLUE_STRING_OSAGE_SMALL_DESCENDER = 4047,
    AF_BLUE_STRING_OSMANYA_TOP = 4062,
    AF_BLUE_STRING_OSMANYA_BOTTOM = 4102,
    AF_BLUE_STRING_SAURASHTRA_TOP = 4142,
    AF_BLUE_STRING_SAURASHTRA_BOTTOM = 4174,
    AF_BLUE_STRING_SHAVIAN_TOP = 4194,
    AF_BLUE_STRING_SHAVIAN_BOTTOM = 4204,
    AF_BLUE_STRING_SHAVIAN_DESCENDER = 4229,
    AF_BLUE_STRING_SHAVIAN_SMALL_TOP = 4239,
    AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM = 4274,
    AF_BLUE_STRING_SINHALA_TOP = 4289,
    AF_BLUE_STRING_SINHALA_BOTTOM = 4321,
    AF_BLUE_STRING_SINHALA_DESCENDER = 4353,
    AF_BLUE_STRING_SUNDANESE_TOP = 4397,
    AF_BLUE_STRING_SUNDANESE_BOTTOM = 4421,
    AF_BLUE_STRING_SUNDANESE_DESCENDER = 4453,
    AF_BLUE_STRING_TAI_VIET_TOP = 4461,
    AF_BLUE_STRING_TAI_VIET_BOTTOM = 4481,
    AF_BLUE_STRING_TAMIL_TOP = 4493,
    AF_BLUE_STRING_TAMIL_BOTTOM = 4525,
    AF_BLUE_STRING_TELUGU_TOP = 4557,
    AF_BLUE_STRING_TELUGU_BOTTOM = 4585,
    AF_BLUE_STRING_THAI_TOP = 4613,
    AF_BLUE_STRING_THAI_BOTTOM = 4637,
    AF_BLUE_STRING_THAI_ASCENDER = 4665,
    AF_BLUE_STRING_THAI_LARGE_ASCENDER = 4677,
    AF_BLUE_STRING_THAI_DESCENDER = 4689,
    AF_BLUE_STRING_THAI_LARGE_DESCENDER = 4705,
    AF_BLUE_STRING_THAI_DIGIT_TOP = 4713,
    AF_BLUE_STRING_TIFINAGH = 4725,
    AF_BLUE_STRING_VAI_TOP = 4757,
    AF_BLUE_STRING_VAI_BOTTOM = 4789,
    af_blue_1_1 = 4820,
#ifdef AF_CONFIG_OPTION_CJK
    AF_BLUE_STRING_CJK_TOP = af_blue_1_1 + 1,
    AF_BLUE_STRING_CJK_BOTTOM = af_blue_1_1 + 203,
    af_blue_1_1_1 = af_blue_1_1 + 404,
#ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT
    AF_BLUE_STRING_CJK_LEFT = af_blue_1_1_1 + 1,
    AF_BLUE_STRING_CJK_RIGHT = af_blue_1_1_1 + 204,
    af_blue_1_1_2 = af_blue_1_1_1 + 405,
#else
    af_blue_1_1_2 = af_blue_1_1_1 + 0,
#endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */
    af_blue_1_2 = af_blue_1_1_2 + 0,
#else
    af_blue_1_2 = af_blue_1_1 + 0,
#endif /* AF_CONFIG_OPTION_CJK                */


    AF_BLUE_STRING_MAX   /* do not remove */

  } AF_Blue_String;


  FT_LOCAL_ARRAY( char )
  af_blue_strings[];


  /*************************************************************************/
  /*************************************************************************/
  /*****                                                               *****/
  /*****                 B L U E   S T R I N G S E T S                 *****/
  /*****                                                               *****/
  /*************************************************************************/
  /*************************************************************************/

  /* The next level is to group blue strings into style-specific sets. */


  /* Properties are specific to a writing system.  We assume that a given  */
  /* blue string can't be used in more than a single writing system, which */
  /* is a safe bet.                                                        */
#define AF_BLUE_PROPERTY_LATIN_TOP       ( 1U << 0 )  /* must have value 1 */
#define AF_BLUE_PROPERTY_LATIN_SUB_TOP   ( 1U << 1 )
#define AF_BLUE_PROPERTY_LATIN_NEUTRAL   ( 1U << 2 )
#define AF_BLUE_PROPERTY_LATIN_X_HEIGHT  ( 1U << 3 )
#define AF_BLUE_PROPERTY_LATIN_LONG      ( 1U << 4 )

#define AF_BLUE_PROPERTY_CJK_TOP    ( 1U << 0 )       /* must have value 1 */
#define AF_BLUE_PROPERTY_CJK_HORIZ  ( 1U << 1 )       /* must have value 2 */
#define AF_BLUE_PROPERTY_CJK_RIGHT  AF_BLUE_PROPERTY_CJK_TOP


#define AF_BLUE_STRINGSET_MAX_LEN  8

  /* The AF_Blue_Stringset enumeration values are offsets into the */
  /* `af_blue_stringsets' array.                                   */

  typedef enum  AF_Blue_Stringset_
  {
    AF_BLUE_STRINGSET_ADLM = 0,
    AF_BLUE_STRINGSET_ARAB = 5,
    AF_BLUE_STRINGSET_ARMN = 9,
    AF_BLUE_STRINGSET_AVST = 16,
    AF_BLUE_STRINGSET_BAMU = 19,
    AF_BLUE_STRINGSET_BENG = 22,
    AF_BLUE_STRINGSET_BUHD = 27,
    AF_BLUE_STRINGSET_CAKM = 32,
    AF_BLUE_STRINGSET_CANS = 36,
    AF_BLUE_STRINGSET_CARI = 43,
    AF_BLUE_STRINGSET_CHER = 46,
    AF_BLUE_STRINGSET_COPT = 53,
    AF_BLUE_STRINGSET_CPRT = 58,
    AF_BLUE_STRINGSET_CYRL = 63,
    AF_BLUE_STRINGSET_DEVA = 69,
    AF_BLUE_STRINGSET_DSRT = 75,
    AF_BLUE_STRINGSET_ETHI = 80,
    AF_BLUE_STRINGSET_GEOR = 83,
    AF_BLUE_STRINGSET_GEOK = 90,
    AF_BLUE_STRINGSET_GLAG = 97,
    AF_BLUE_STRINGSET_GOTH = 102,
    AF_BLUE_STRINGSET_GREK = 105,
    AF_BLUE_STRINGSET_GUJR = 112,
    AF_BLUE_STRINGSET_GURU = 118,
    AF_BLUE_STRINGSET_HEBR = 124,
    AF_BLUE_STRINGSET_KALI = 128,
    AF_BLUE_STRINGSET_KHMR = 134,
    AF_BLUE_STRINGSET_KHMS = 140,
    AF_BLUE_STRINGSET_KNDA = 143,
    AF_BLUE_STRINGSET_LAO = 146,
    AF_BLUE_STRINGSET_LATN = 152,
    AF_BLUE_STRINGSET_LATB = 159,
    AF_BLUE_STRINGSET_LATP = 166,
    AF_BLUE_STRINGSET_LISU = 173,
    AF_BLUE_STRINGSET_MLYM = 176,
    AF_BLUE_STRINGSET_MYMR = 179,
    AF_BLUE_STRINGSET_NKOO = 184,
    AF_BLUE_STRINGSET_NONE = 189,
    AF_BLUE_STRINGSET_OLCK = 190,
    AF_BLUE_STRINGSET_ORKH = 193,
    AF_BLUE_STRINGSET_OSGE = 196,
    AF_BLUE_STRINGSET_OSMA = 204,
    AF_BLUE_STRINGSET_SAUR = 207,
    AF_BLUE_STRINGSET_SHAW = 210,
    AF_BLUE_STRINGSET_SINH = 216,
    AF_BLUE_STRINGSET_SUND = 220,
    AF_BLUE_STRINGSET_TAML = 224,
    AF_BLUE_STRINGSET_TAVT = 227,
    AF_BLUE_STRINGSET_TELU = 230,
    AF_BLUE_STRINGSET_TFNG = 233,
    AF_BLUE_STRINGSET_THAI = 236,
    AF_BLUE_STRINGSET_VAII = 244,
    af_blue_2_1 = 247,
#ifdef AF_CONFIG_OPTION_CJK
    AF_BLUE_STRINGSET_HANI = af_blue_2_1 + 0,
    af_blue_2_1_1 = af_blue_2_1 + 2,
#ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT
    af_blue_2_1_2 = af_blue_2_1_1 + 2,
#else
    af_blue_2_1_2 = af_blue_2_1_1 + 0,
#endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */
    af_blue_2_2 = af_blue_2_1_2 + 1,
#else
    af_blue_2_2 = af_blue_2_1 + 0,
#endif /* AF_CONFIG_OPTION_CJK                */


    AF_BLUE_STRINGSET_MAX   /* do not remove */

  } AF_Blue_Stringset;


  typedef struct  AF_Blue_StringRec_
  {
    AF_Blue_String  string;
    FT_UShort       properties;

  } AF_Blue_StringRec;


  FT_LOCAL_ARRAY( AF_Blue_StringRec )
  af_blue_stringsets[];

/* */

FT_END_HEADER


#endif /* AFBLUE_H_ */


/* END */
