/* 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_CYRILLIC_CAPITAL_TOP = 486,
    AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM = 510,
    AF_BLUE_STRING_CYRILLIC_SMALL = 534,
    AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER = 558,
    AF_BLUE_STRING_DEVANAGARI_BASE = 567,
    AF_BLUE_STRING_DEVANAGARI_TOP = 599,
    AF_BLUE_STRING_DEVANAGARI_HEAD = 631,
    AF_BLUE_STRING_DEVANAGARI_BOTTOM = 663,
    AF_BLUE_STRING_ETHIOPIC_TOP = 671,
    AF_BLUE_STRING_ETHIOPIC_BOTTOM = 703,
    AF_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP = 735,
    AF_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM = 767,
    AF_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER = 799,
    AF_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER = 831,
    AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP = 863,
    AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM = 895,
    AF_BLUE_STRING_GEORGIAN_NUSKHURI_TOP = 927,
    AF_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM = 959,
    AF_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER = 991,
    AF_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER = 1023,
    AF_BLUE_STRING_GREEK_CAPITAL_TOP = 1055,
    AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM = 1076,
    AF_BLUE_STRING_GREEK_SMALL_BETA_TOP = 1094,
    AF_BLUE_STRING_GREEK_SMALL = 1112,
    AF_BLUE_STRING_GREEK_SMALL_DESCENDER = 1136,
    AF_BLUE_STRING_GUJARATI_TOP = 1160,
    AF_BLUE_STRING_GUJARATI_BOTTOM = 1192,
    AF_BLUE_STRING_GUJARATI_ASCENDER = 1224,
    AF_BLUE_STRING_GUJARATI_DESCENDER = 1274,
    AF_BLUE_STRING_GUJARATI_DIGIT_TOP = 1307,
    AF_BLUE_STRING_GURMUKHI_BASE = 1327,
    AF_BLUE_STRING_GURMUKHI_HEAD = 1359,
    AF_BLUE_STRING_GURMUKHI_TOP = 1391,
    AF_BLUE_STRING_GURMUKHI_BOTTOM = 1423,
    AF_BLUE_STRING_GURMUKHI_DIGIT_TOP = 1455,
    AF_BLUE_STRING_HEBREW_TOP = 1475,
    AF_BLUE_STRING_HEBREW_BOTTOM = 1499,
    AF_BLUE_STRING_HEBREW_DESCENDER = 1517,
    AF_BLUE_STRING_KANNADA_TOP = 1532,
    AF_BLUE_STRING_KANNADA_BOTTOM = 1576,
    AF_BLUE_STRING_KHMER_TOP = 1608,
    AF_BLUE_STRING_KHMER_SUBSCRIPT_TOP = 1632,
    AF_BLUE_STRING_KHMER_BOTTOM = 1672,
    AF_BLUE_STRING_KHMER_DESCENDER = 1704,
    AF_BLUE_STRING_KHMER_LARGE_DESCENDER = 1738,
    AF_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP = 1825,
    AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM = 1833,
    AF_BLUE_STRING_LAO_TOP = 1841,
    AF_BLUE_STRING_LAO_BOTTOM = 1873,
    AF_BLUE_STRING_LAO_ASCENDER = 1905,
    AF_BLUE_STRING_LAO_LARGE_ASCENDER = 1921,
    AF_BLUE_STRING_LAO_DESCENDER = 1933,
    AF_BLUE_STRING_LATIN_CAPITAL_TOP = 1957,
    AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM = 1973,
    AF_BLUE_STRING_LATIN_SMALL_F_TOP = 1989,
    AF_BLUE_STRING_LATIN_SMALL_TOP = 2003,
    AF_BLUE_STRING_LATIN_SMALL_BOTTOM = 2019,
    AF_BLUE_STRING_LATIN_SMALL_DESCENDER = 2035,
    AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP = 2045,
    AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM = 2065,
    AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP = 2085,
    AF_BLUE_STRING_LATIN_SUBS_SMALL = 2105,
    AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER = 2141,
    AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP = 2161,
    AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM = 2192,
    AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP = 2221,
    AF_BLUE_STRING_LATIN_SUPS_SMALL = 2247,
    AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER = 2272,
    AF_BLUE_STRING_MALAYALAM_TOP = 2283,
    AF_BLUE_STRING_MALAYALAM_BOTTOM = 2327,
    AF_BLUE_STRING_MYANMAR_TOP = 2359,
    AF_BLUE_STRING_MYANMAR_BOTTOM = 2391,
    AF_BLUE_STRING_MYANMAR_ASCENDER = 2423,
    AF_BLUE_STRING_MYANMAR_DESCENDER = 2451,
    AF_BLUE_STRING_NKO_TOP = 2483,
    AF_BLUE_STRING_NKO_BOTTOM = 2507,
    AF_BLUE_STRING_NKO_SMALL_TOP = 2522,
    AF_BLUE_STRING_NKO_SMALL_BOTTOM = 2531,
    AF_BLUE_STRING_OL_CHIKI = 2543,
    AF_BLUE_STRING_SINHALA_TOP = 2567,
    AF_BLUE_STRING_SINHALA_BOTTOM = 2599,
    AF_BLUE_STRING_SINHALA_DESCENDER = 2631,
    AF_BLUE_STRING_TAI_VIET_TOP = 2675,
    AF_BLUE_STRING_TAI_VIET_BOTTOM = 2695,
    AF_BLUE_STRING_TAMIL_TOP = 2707,
    AF_BLUE_STRING_TAMIL_BOTTOM = 2739,
    AF_BLUE_STRING_TELUGU_TOP = 2771,
    AF_BLUE_STRING_TELUGU_BOTTOM = 2799,
    AF_BLUE_STRING_THAI_TOP = 2827,
    AF_BLUE_STRING_THAI_BOTTOM = 2851,
    AF_BLUE_STRING_THAI_ASCENDER = 2879,
    AF_BLUE_STRING_THAI_LARGE_ASCENDER = 2891,
    AF_BLUE_STRING_THAI_DESCENDER = 2903,
    AF_BLUE_STRING_THAI_LARGE_DESCENDER = 2919,
    AF_BLUE_STRING_THAI_DIGIT_TOP = 2927,
    AF_BLUE_STRING_TIFINAGH = 2939,
    af_blue_1_1 = 2970,
#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_CYRL = 28,
    AF_BLUE_STRINGSET_DEVA = 34,
    AF_BLUE_STRINGSET_ETHI = 40,
    AF_BLUE_STRINGSET_GEOR = 43,
    AF_BLUE_STRINGSET_GEOK = 48,
    AF_BLUE_STRINGSET_GREK = 55,
    AF_BLUE_STRINGSET_GUJR = 62,
    AF_BLUE_STRINGSET_GURU = 68,
    AF_BLUE_STRINGSET_HEBR = 74,
    AF_BLUE_STRINGSET_KNDA = 78,
    AF_BLUE_STRINGSET_KHMR = 81,
    AF_BLUE_STRINGSET_KHMS = 87,
    AF_BLUE_STRINGSET_LAO = 90,
    AF_BLUE_STRINGSET_LATN = 96,
    AF_BLUE_STRINGSET_LATB = 103,
    AF_BLUE_STRINGSET_LATP = 110,
    AF_BLUE_STRINGSET_MLYM = 117,
    AF_BLUE_STRINGSET_MYMR = 120,
    AF_BLUE_STRINGSET_NKOO = 125,
    AF_BLUE_STRINGSET_NONE = 130,
    AF_BLUE_STRINGSET_OLCK = 131,
    AF_BLUE_STRINGSET_SINH = 134,
    AF_BLUE_STRINGSET_TAML = 138,
    AF_BLUE_STRINGSET_TAVT = 141,
    AF_BLUE_STRINGSET_TELU = 144,
    AF_BLUE_STRINGSET_THAI = 147,
    AF_BLUE_STRINGSET_TFNG = 155,
    af_blue_2_1 = 158,
#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 */
