/* 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-2015 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 )                    \
          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 ); \
          }


  /*************************************************************************/
  /*************************************************************************/
  /*****                                                               *****/
  /*****                    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_ARABIC_TOP = 0,
    AF_BLUE_STRING_ARABIC_BOTTOM = 13,
    AF_BLUE_STRING_ARABIC_JOIN = 24,
    AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP = 27,
    AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM = 44,
    AF_BLUE_STRING_CYRILLIC_SMALL = 61,
    AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER = 78,
    AF_BLUE_STRING_DEVANAGARI_BASE = 85,
    AF_BLUE_STRING_DEVANAGARI_TOP = 110,
    AF_BLUE_STRING_DEVANAGARI_HEAD = 135,
    AF_BLUE_STRING_DEVANAGARI_BOTTOM = 160,
    AF_BLUE_STRING_GREEK_CAPITAL_TOP = 167,
    AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM = 182,
    AF_BLUE_STRING_GREEK_SMALL_BETA_TOP = 195,
    AF_BLUE_STRING_GREEK_SMALL = 208,
    AF_BLUE_STRING_GREEK_SMALL_DESCENDER = 225,
    AF_BLUE_STRING_HEBREW_TOP = 242,
    AF_BLUE_STRING_HEBREW_BOTTOM = 259,
    AF_BLUE_STRING_HEBREW_DESCENDER = 272,
    AF_BLUE_STRING_LAO_TOP = 283,
    AF_BLUE_STRING_LAO_BOTTOM = 308,
    AF_BLUE_STRING_LAO_ASCENDER = 333,
    AF_BLUE_STRING_LAO_LARGE_ASCENDER = 346,
    AF_BLUE_STRING_LAO_DESCENDER = 356,
    AF_BLUE_STRING_LATIN_CAPITAL_TOP = 375,
    AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM = 384,
    AF_BLUE_STRING_LATIN_SMALL_F_TOP = 393,
    AF_BLUE_STRING_LATIN_SMALL = 401,
    AF_BLUE_STRING_LATIN_SMALL_DESCENDER = 409,
    AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP = 415,
    AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM = 431,
    AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP = 447,
    AF_BLUE_STRING_LATIN_SUBS_SMALL = 463,
    AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER = 491,
    AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP = 507,
    AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM = 531,
    AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP = 553,
    AF_BLUE_STRING_LATIN_SUPS_SMALL = 573,
    AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER = 592,
    AF_BLUE_STRING_TELUGU_TOP = 601,
    AF_BLUE_STRING_TELUGU_BOTTOM = 623,
    AF_BLUE_STRING_THAI_TOP = 645,
    AF_BLUE_STRING_THAI_BOTTOM = 664,
    AF_BLUE_STRING_THAI_ASCENDER = 686,
    AF_BLUE_STRING_THAI_LARGE_ASCENDER = 696,
    AF_BLUE_STRING_THAI_DESCENDER = 706,
    AF_BLUE_STRING_THAI_LARGE_DESCENDER = 719,
    AF_BLUE_STRING_THAI_DIGIT_TOP = 726,
    af_blue_1_1 = 735,
#ifdef AF_CONFIG_OPTION_CJK
    AF_BLUE_STRING_CJK_TOP = af_blue_1_1 + 1,
    AF_BLUE_STRING_CJK_BOTTOM = af_blue_1_1 + 153,
    af_blue_1_1_1 = af_blue_1_1 + 304,
#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 + 153,
    af_blue_1_1_2 = af_blue_1_1_1 + 304,
#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_NEUTRAL   ( 1U << 1 )
#define AF_BLUE_PROPERTY_LATIN_X_HEIGHT  ( 1U << 2 )
#define AF_BLUE_PROPERTY_LATIN_LONG      ( 1U << 3 )

#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_ARAB = 0,
    AF_BLUE_STRINGSET_CYRL = 4,
    AF_BLUE_STRINGSET_DEVA = 10,
    AF_BLUE_STRINGSET_GREK = 16,
    AF_BLUE_STRINGSET_HEBR = 23,
    AF_BLUE_STRINGSET_LAO = 27,
    AF_BLUE_STRINGSET_LATN = 33,
    AF_BLUE_STRINGSET_LATB = 40,
    AF_BLUE_STRINGSET_LATP = 47,
    AF_BLUE_STRINGSET_TELU = 54,
    AF_BLUE_STRINGSET_THAI = 57,
    af_blue_2_1 = 65,
#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 */
