1/***************************************************************************/
2/*                                                                         */
3/*  afblue.h                                                               */
4/*                                                                         */
5/*    Auto-fitter data for blue strings (specification).                   */
6/*                                                                         */
7/*  Copyright 2013-2015 by                                                 */
8/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
9/*                                                                         */
10/*  This file is part of the FreeType project, and may only be used,       */
11/*  modified, and distributed under the terms of the FreeType project      */
12/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
13/*  this file you indicate that you have read the license and              */
14/*  understand and accept it fully.                                        */
15/*                                                                         */
16/***************************************************************************/
17
18
19#ifndef __AFBLUE_H__
20#define __AFBLUE_H__
21
22
23FT_BEGIN_HEADER
24
25
26  /* an auxiliary macro to decode a UTF-8 character -- since we only use */
27  /* hard-coded, self-converted data, no error checking is performed     */
28#define GET_UTF8_CHAR( ch, p )                    \
29          ch = (unsigned char)*p++;               \
30          if ( ch >= 0x80 )                       \
31          {                                       \
32            FT_UInt  len;                         \
33                                                  \
34                                                  \
35            if ( ch < 0xE0 )                      \
36            {                                     \
37              len = 1;                            \
38              ch &= 0x1F;                         \
39            }                                     \
40            else if ( ch < 0xF0 )                 \
41            {                                     \
42              len = 2;                            \
43              ch &= 0x0F;                         \
44            }                                     \
45            else                                  \
46            {                                     \
47              len = 3;                            \
48              ch &= 0x07;                         \
49            }                                     \
50                                                  \
51            for ( ; len > 0; len-- )              \
52              ch = ( ch << 6 ) | ( *p++ & 0x3F ); \
53          }
54
55
56  /*************************************************************************/
57  /*************************************************************************/
58  /*****                                                               *****/
59  /*****                    B L U E   S T R I N G S                    *****/
60  /*****                                                               *****/
61  /*************************************************************************/
62  /*************************************************************************/
63
64  /* At the bottommost level, we define strings for finding blue zones. */
65
66
67#define AF_BLUE_STRING_MAX_LEN  @AF_BLUE_STRING_MAX_LEN@
68
69  /* The AF_Blue_String enumeration values are offsets into the */
70  /* `af_blue_strings' array.                                   */
71
72  typedef enum  AF_Blue_String_
73  {
74@AF_BLUE_STRING_ENUM@
75
76    AF_BLUE_STRING_MAX   /* do not remove */
77
78  } AF_Blue_String;
79
80
81  FT_LOCAL_ARRAY( char )
82  af_blue_strings[];
83
84
85  /*************************************************************************/
86  /*************************************************************************/
87  /*****                                                               *****/
88  /*****                 B L U E   S T R I N G S E T S                 *****/
89  /*****                                                               *****/
90  /*************************************************************************/
91  /*************************************************************************/
92
93  /* The next level is to group blue strings into style-specific sets. */
94
95
96  /* Properties are specific to a writing system.  We assume that a given  */
97  /* blue string can't be used in more than a single writing system, which */
98  /* is a safe bet.                                                        */
99#define AF_BLUE_PROPERTY_LATIN_TOP       ( 1U << 0 )  /* must have value 1 */
100#define AF_BLUE_PROPERTY_LATIN_NEUTRAL   ( 1U << 1 )
101#define AF_BLUE_PROPERTY_LATIN_X_HEIGHT  ( 1U << 2 )
102#define AF_BLUE_PROPERTY_LATIN_LONG      ( 1U << 3 )
103
104#define AF_BLUE_PROPERTY_CJK_TOP    ( 1U << 0 )       /* must have value 1 */
105#define AF_BLUE_PROPERTY_CJK_HORIZ  ( 1U << 1 )       /* must have value 2 */
106#define AF_BLUE_PROPERTY_CJK_RIGHT  AF_BLUE_PROPERTY_CJK_TOP
107
108
109#define AF_BLUE_STRINGSET_MAX_LEN  @AF_BLUE_STRINGSET_MAX_LEN@
110
111  /* The AF_Blue_Stringset enumeration values are offsets into the */
112  /* `af_blue_stringsets' array.                                   */
113
114  typedef enum  AF_Blue_Stringset_
115  {
116@AF_BLUE_STRINGSET_ENUM@
117
118    AF_BLUE_STRINGSET_MAX   /* do not remove */
119
120  } AF_Blue_Stringset;
121
122
123  typedef struct  AF_Blue_StringRec_
124  {
125    AF_Blue_String  string;
126    FT_UShort       properties;
127
128  } AF_Blue_StringRec;
129
130
131  FT_LOCAL_ARRAY( AF_Blue_StringRec )
132  af_blue_stringsets[];
133
134/* */
135
136FT_END_HEADER
137
138
139#endif /* __AFBLUE_H__ */
140
141
142/* END */
143