/* 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 2013-2017 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_BENGALI_BASE = 282,
    AF_BLUE_STRING_BENGALI_TOP = 314,
    AF_BLUE_STRING_BENGALI_HEAD = 342,
    AF_BLUE_STRING_CHEROKEE_CAPITAL = 374,
    AF_BLUE_STRING_CHEROKEE_SMALL_ASCENDER = 406,
    AF_BLUE_STRING_CHEROKEE_SMALL = 438,
    AF_BLUE_STRING_CHEROKEE_SMALL_DESCENDER = 470,
    AF_BLUE_STRING_CYPRIOT_TOP = 486,
    AF_BLUE_STRING_CYPRIOT_BOTTOM = 526,
    AF_BLUE_STRING_CYPRIOT_SMALL = 561,
    AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP = 576,
    AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM = 600,
    AF_BLUE_STRING_CYRILLIC_SMALL = 624,
    AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER = 648,
    AF_BLUE_STRING_DESERET_CAPITAL_TOP = 657,
    AF_BLUE_STRING_DESERET_CAPITAL_BOTTOM = 682,
    AF_BLUE_STRING_DESERET_SMALL_TOP = 707,
    AF_BLUE_STRING_DESERET_SMALL_BOTTOM = 732,
    AF_BLUE_STRING_DEVANAGARI_BASE = 757,
    AF_BLUE_STRING_DEVANAGARI_TOP = 789,
    AF_BLUE_STRING_DEVANAGARI_HEAD = 821,
    AF_BLUE_STRING_DEVANAGARI_BOTTOM = 853,
    AF_BLUE_STRING_ETHIOPIC_TOP = 861,
    AF_BLUE_STRING_ETHIOPIC_BOTTOM = 893,
    AF_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP = 925,
    AF_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM = 957,
    AF_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER = 989,
    AF_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER = 1021,
    AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP = 1053,
    AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM = 1085,
    AF_BLUE_STRING_GEORGIAN_NUSKHURI_TOP = 1117,
    AF_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM = 1149,
    AF_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER = 1181,
    AF_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER = 1213,
    AF_BLUE_STRING_GLAGOLITIC_CAPITAL_TOP = 1245,
    AF_BLUE_STRING_GLAGOLITIC_CAPITAL_BOTTOM = 1277,
    AF_BLUE_STRING_GLAGOLITIC_SMALL_TOP = 1309,
    AF_BLUE_STRING_GLAGOLITIC_SMALL_BOTTOM = 1341,
    AF_BLUE_STRING_GOTHIC_TOP = 1373,
    AF_BLUE_STRING_GOTHIC_BOTTOM = 1413,
    AF_BLUE_STRING_GREEK_CAPITAL_TOP = 1433,
    AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM = 1454,
    AF_BLUE_STRING_GREEK_SMALL_BETA_TOP = 1472,
    AF_BLUE_STRING_GREEK_SMALL = 1490,
    AF_BLUE_STRING_GREEK_SMALL_DESCENDER = 1514,
    AF_BLUE_STRING_GUJARATI_TOP = 1538,
    AF_BLUE_STRING_GUJARATI_BOTTOM = 1570,
    AF_BLUE_STRING_GUJARATI_ASCENDER = 1602,
    AF_BLUE_STRING_GUJARATI_DESCENDER = 1652,
    AF_BLUE_STRING_GUJARATI_DIGIT_TOP = 1685,
    AF_BLUE_STRING_GURMUKHI_BASE = 1705,
    AF_BLUE_STRING_GURMUKHI_HEAD = 1737,
    AF_BLUE_STRING_GURMUKHI_TOP = 1769,
    AF_BLUE_STRING_GURMUKHI_BOTTOM = 1801,
    AF_BLUE_STRING_GURMUKHI_DIGIT_TOP = 1833,
    AF_BLUE_STRING_HEBREW_TOP = 1853,
    AF_BLUE_STRING_HEBREW_BOTTOM = 1877,
    AF_BLUE_STRING_HEBREW_DESCENDER = 1895,
    AF_BLUE_STRING_KANNADA_TOP = 1910,
    AF_BLUE_STRING_KANNADA_BOTTOM = 1954,
    AF_BLUE_STRING_KHMER_TOP = 1986,
    AF_BLUE_STRING_KHMER_SUBSCRIPT_TOP = 2010,
    AF_BLUE_STRING_KHMER_BOTTOM = 2050,
    AF_BLUE_STRING_KHMER_DESCENDER = 2082,
    AF_BLUE_STRING_KHMER_LARGE_DESCENDER = 2116,
    AF_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP = 2203,
    AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM = 2211,
    AF_BLUE_STRING_LAO_TOP = 2219,
    AF_BLUE_STRING_LAO_BOTTOM = 2251,
    AF_BLUE_STRING_LAO_ASCENDER = 2283,
    AF_BLUE_STRING_LAO_LARGE_ASCENDER = 2299,
    AF_BLUE_STRING_LAO_DESCENDER = 2311,
    AF_BLUE_STRING_LATIN_CAPITAL_TOP = 2335,
    AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM = 2351,
    AF_BLUE_STRING_LATIN_SMALL_F_TOP = 2367,
    AF_BLUE_STRING_LATIN_SMALL_TOP = 2381,
    AF_BLUE_STRING_LATIN_SMALL_BOTTOM = 2397,
    AF_BLUE_STRING_LATIN_SMALL_DESCENDER = 2413,
    AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP = 2423,
    AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM = 2443,
    AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP = 2463,
    AF_BLUE_STRING_LATIN_SUBS_SMALL = 2483,
    AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER = 2519,
    AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP = 2539,
    AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM = 2570,
    AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP = 2599,
    AF_BLUE_STRING_LATIN_SUPS_SMALL = 2625,
    AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER = 2650,
    AF_BLUE_STRING_LISU_TOP = 2661,
    AF_BLUE_STRING_LISU_BOTTOM = 2693,
    AF_BLUE_STRING_MALAYALAM_TOP = 2725,
    AF_BLUE_STRING_MALAYALAM_BOTTOM = 2769,
    AF_BLUE_STRING_MYANMAR_TOP = 2801,
    AF_BLUE_STRING_MYANMAR_BOTTOM = 2833,
    AF_BLUE_STRING_MYANMAR_ASCENDER = 2865,
    AF_BLUE_STRING_MYANMAR_DESCENDER = 2893,
    AF_BLUE_STRING_NKO_TOP = 2925,
    AF_BLUE_STRING_NKO_BOTTOM = 2949,
    AF_BLUE_STRING_NKO_SMALL_TOP = 2964,
    AF_BLUE_STRING_NKO_SMALL_BOTTOM = 2973,
    AF_BLUE_STRING_OL_CHIKI = 2985,
    AF_BLUE_STRING_OSAGE_CAPITAL_TOP = 3009,
    AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM = 3049,
    AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER = 3079,
    AF_BLUE_STRING_OSAGE_SMALL_TOP = 3094,
    AF_BLUE_STRING_OSAGE_SMALL_BOTTOM = 3134,
    AF_BLUE_STRING_OSAGE_SMALL_ASCENDER = 3174,
    AF_BLUE_STRING_OSAGE_SMALL_DESCENDER = 3199,
    AF_BLUE_STRING_SINHALA_TOP = 3214,
    AF_BLUE_STRING_SINHALA_BOTTOM = 3246,
    AF_BLUE_STRING_SINHALA_DESCENDER = 3278,
    AF_BLUE_STRING_TAI_VIET_TOP = 3322,
    AF_BLUE_STRING_TAI_VIET_BOTTOM = 3342,
    AF_BLUE_STRING_TAMIL_TOP = 3354,
    AF_BLUE_STRING_TAMIL_BOTTOM = 3386,
    AF_BLUE_STRING_TELUGU_TOP = 3418,
    AF_BLUE_STRING_TELUGU_BOTTOM = 3446,
    AF_BLUE_STRING_THAI_TOP = 3474,
    AF_BLUE_STRING_THAI_BOTTOM = 3498,
    AF_BLUE_STRING_THAI_ASCENDER = 3526,
    AF_BLUE_STRING_THAI_LARGE_ASCENDER = 3538,
    AF_BLUE_STRING_THAI_DESCENDER = 3550,
    AF_BLUE_STRING_THAI_LARGE_DESCENDER = 3566,
    AF_BLUE_STRING_THAI_DIGIT_TOP = 3574,
    AF_BLUE_STRING_TIFINAGH = 3586,
    af_blue_1_1 = 3617,
#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_BENG = 16,
    AF_BLUE_STRINGSET_CHER = 21,
    AF_BLUE_STRINGSET_CPRT = 28,
    AF_BLUE_STRINGSET_CYRL = 33,
    AF_BLUE_STRINGSET_DEVA = 39,
    AF_BLUE_STRINGSET_DSRT = 45,
    AF_BLUE_STRINGSET_ETHI = 50,
    AF_BLUE_STRINGSET_GEOR = 53,
    AF_BLUE_STRINGSET_GEOK = 58,
    AF_BLUE_STRINGSET_GLAG = 65,
    AF_BLUE_STRINGSET_GOTH = 70,
    AF_BLUE_STRINGSET_GREK = 73,
    AF_BLUE_STRINGSET_GUJR = 80,
    AF_BLUE_STRINGSET_GURU = 86,
    AF_BLUE_STRINGSET_HEBR = 92,
    AF_BLUE_STRINGSET_KNDA = 96,
    AF_BLUE_STRINGSET_KHMR = 99,
    AF_BLUE_STRINGSET_KHMS = 105,
    AF_BLUE_STRINGSET_LAO = 108,
    AF_BLUE_STRINGSET_LATN = 114,
    AF_BLUE_STRINGSET_LATB = 121,
    AF_BLUE_STRINGSET_LATP = 128,
    AF_BLUE_STRINGSET_LISU = 135,
    AF_BLUE_STRINGSET_MLYM = 138,
    AF_BLUE_STRINGSET_MYMR = 141,
    AF_BLUE_STRINGSET_NKOO = 146,
    AF_BLUE_STRINGSET_NONE = 151,
    AF_BLUE_STRINGSET_OLCK = 152,
    AF_BLUE_STRINGSET_OSGE = 155,
    AF_BLUE_STRINGSET_SINH = 163,
    AF_BLUE_STRINGSET_TAML = 167,
    AF_BLUE_STRINGSET_TAVT = 170,
    AF_BLUE_STRINGSET_TELU = 173,
    AF_BLUE_STRINGSET_THAI = 176,
    AF_BLUE_STRINGSET_TFNG = 184,
    af_blue_2_1 = 187,
#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 */
