1ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/* This file has been generated by the Perl script `afblue.pl', */
2ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/* using data from file `afblue.dat'.                           */
3ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
4ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/***************************************************************************/
5ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/*                                                                         */
6ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/*  afblue.h                                                               */
7ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/*                                                                         */
8ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/*    Auto-fitter data for blue strings (specification).                   */
9ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/*                                                                         */
109c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod/*  Copyright 2013, 2014 by                                                */
11ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
12ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/*                                                                         */
13ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/*  This file is part of the FreeType project, and may only be used,       */
14ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/*  modified, and distributed under the terms of the FreeType project      */
15ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
16ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/*  this file you indicate that you have read the license and              */
17ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/*  understand and accept it fully.                                        */
18ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/*                                                                         */
19ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/***************************************************************************/
20ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
21ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
22ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#ifndef __AFBLUE_H__
23ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#define __AFBLUE_H__
24ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
25ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
26ec0bab5697bb31ba980810145f62e3799946ec60Victoria LeaseFT_BEGIN_HEADER
27ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
28ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
29ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  /* an auxiliary macro to decode a UTF-8 character -- since we only use */
30ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  /* hard-coded, self-converted data, no error checking is performed     */
31ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#define GET_UTF8_CHAR( ch, p )                    \
32ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease          ch = (unsigned char)*p++;               \
33ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease          if ( ch >= 0x80 )                       \
34ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease          {                                       \
35ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease            FT_UInt  len;                         \
36ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease                                                  \
37ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease                                                  \
38ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease            if ( ch < 0xE0 )                      \
39ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease            {                                     \
40ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease              len = 1;                            \
41ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease              ch &= 0x1F;                         \
42ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease            }                                     \
43ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease            else if ( ch < 0xF0 )                 \
44ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease            {                                     \
45ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease              len = 2;                            \
46ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease              ch &= 0x0F;                         \
47ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease            }                                     \
48ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease            else                                  \
49ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease            {                                     \
50ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease              len = 3;                            \
51ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease              ch &= 0x07;                         \
52ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease            }                                     \
53ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease                                                  \
54ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease            for ( ; len > 0; len-- )              \
55ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease              ch = ( ch << 6 ) | ( *p++ & 0x3F ); \
56ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease          }
57ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
58ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
59ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  /*************************************************************************/
60ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  /*************************************************************************/
61ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  /*****                                                               *****/
62ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  /*****                    B L U E   S T R I N G S                    *****/
63ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  /*****                                                               *****/
64ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  /*************************************************************************/
65ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  /*************************************************************************/
66ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
67ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  /* At the bottommost level, we define strings for finding blue zones. */
68ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
69ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
709c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define AF_BLUE_STRING_MAX_LEN  51
71ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
72ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  /* The AF_Blue_String enumeration values are offsets into the */
73ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  /* `af_blue_strings' array.                                   */
74ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
75ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  typedef enum  AF_Blue_String_
76ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  {
779c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP = 0,
789c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM = 17,
799c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRING_CYRILLIC_SMALL = 34,
809c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER = 51,
819c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRING_DEVANAGARI_BASE = 58,
829c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRING_DEVANAGARI_TOP = 83,
839c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRING_DEVANAGARI_HEAD = 108,
849c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRING_DEVANAGARI_BOTTOM = 133,
859c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRING_GREEK_CAPITAL_TOP = 140,
869c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM = 155,
879c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRING_GREEK_SMALL_BETA_TOP = 168,
889c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRING_GREEK_SMALL = 181,
899c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRING_GREEK_SMALL_DESCENDER = 198,
909c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRING_HEBREW_TOP = 215,
919c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRING_HEBREW_BOTTOM = 232,
929c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRING_HEBREW_DESCENDER = 245,
939c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRING_LATIN_CAPITAL_TOP = 256,
949c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM = 265,
959c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRING_LATIN_SMALL_F_TOP = 274,
969c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRING_LATIN_SMALL = 282,
979c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRING_LATIN_SMALL_DESCENDER = 290,
989c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    af_blue_1_1 = 295,
99ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#ifdef AF_CONFIG_OPTION_CJK
1009c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRING_CJK_TOP = af_blue_1_1 + 1,
1019c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRING_CJK_BOTTOM = af_blue_1_1 + 153,
102ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease    af_blue_1_1_1 = af_blue_1_1 + 304,
103ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT
1049c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRING_CJK_LEFT = af_blue_1_1_1 + 1,
1059c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRING_CJK_RIGHT = af_blue_1_1_1 + 153,
1069c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    af_blue_1_1_2 = af_blue_1_1_1 + 304,
107ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#else
1089c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    af_blue_1_1_2 = af_blue_1_1_1 + 0,
109ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */
1109c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    af_blue_1_2 = af_blue_1_1_2 + 0,
111ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#else
1129c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    af_blue_1_2 = af_blue_1_1 + 0,
113ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#endif /* AF_CONFIG_OPTION_CJK                */
114ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
115ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
116ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease    AF_BLUE_STRING_MAX   /* do not remove */
117ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
118ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  } AF_Blue_String;
119ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
120ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
121ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  FT_LOCAL_ARRAY( char )
122ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  af_blue_strings[];
123ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
124ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
125ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  /*************************************************************************/
126ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  /*************************************************************************/
127ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  /*****                                                               *****/
128ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  /*****                 B L U E   S T R I N G S E T S                 *****/
129ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  /*****                                                               *****/
130ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  /*************************************************************************/
131ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  /*************************************************************************/
132ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
1339c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod  /* The next level is to group blue strings into style-specific sets. */
134ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
135ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
136ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  /* Properties are specific to a writing system.  We assume that a given  */
137ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  /* blue string can't be used in more than a single writing system, which */
138ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  /* is a safe bet.                                                        */
1399c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define AF_BLUE_PROPERTY_LATIN_TOP       ( 1 << 0 )   /* must have value 1 */
1409c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define AF_BLUE_PROPERTY_LATIN_NEUTRAL   ( 1 << 1 )
1419c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define AF_BLUE_PROPERTY_LATIN_X_HEIGHT  ( 1 << 2 )
1429c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define AF_BLUE_PROPERTY_LATIN_LONG      ( 1 << 3 )
143ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
1449c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define AF_BLUE_PROPERTY_CJK_TOP    ( 1 << 0 )        /* must have value 1 */
1459c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define AF_BLUE_PROPERTY_CJK_HORIZ  ( 1 << 1 )        /* must have value 2 */
146ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#define AF_BLUE_PROPERTY_CJK_RIGHT  AF_BLUE_PROPERTY_CJK_TOP
147ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
148ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
1499c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define AF_BLUE_STRINGSET_MAX_LEN  7
150ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
151ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  /* The AF_Blue_Stringset enumeration values are offsets into the */
152ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  /* `af_blue_stringsets' array.                                   */
153ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
154ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  typedef enum  AF_Blue_Stringset_
155ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  {
1569c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRINGSET_CYRL = 0,
1579c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRINGSET_DEVA = 6,
1589c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRINGSET_GREK = 12,
1599c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRINGSET_HEBR = 19,
1609c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_BLUE_STRINGSET_LATN = 23,
1619c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    af_blue_2_1 = 30,
162ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#ifdef AF_CONFIG_OPTION_CJK
163ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease    AF_BLUE_STRINGSET_HANI = af_blue_2_1 + 0,
1649c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    af_blue_2_1_1 = af_blue_2_1 + 2,
165ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT
1669c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    af_blue_2_1_2 = af_blue_2_1_1 + 2,
167ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#else
1689c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    af_blue_2_1_2 = af_blue_2_1_1 + 0,
169ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */
1709c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    af_blue_2_2 = af_blue_2_1_2 + 1,
171ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#else
1729c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    af_blue_2_2 = af_blue_2_1 + 0,
173ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#endif /* AF_CONFIG_OPTION_CJK                */
174ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
175ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
176ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease    AF_BLUE_STRINGSET_MAX   /* do not remove */
177ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
178ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  } AF_Blue_Stringset;
179ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
180ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
181ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  typedef struct  AF_Blue_StringRec_
182ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  {
183ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease    AF_Blue_String  string;
184ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease    FT_UShort       properties;
185ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
186ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  } AF_Blue_StringRec;
187ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
188ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
189ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  FT_LOCAL_ARRAY( AF_Blue_StringRec )
190ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  af_blue_stringsets[];
191ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
192ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/* */
193ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
194ec0bab5697bb31ba980810145f62e3799946ec60Victoria LeaseFT_END_HEADER
195ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
196ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
197ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#endif /* __AFBLUE_H__ */
198ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
199ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
200ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/* END */
201