1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/
2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
3049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  pshalgo.h                                                              */
4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*    PostScript hinting algorithm (specification).                        */
6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
7ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki/*  Copyright 2001-2015 by                                                 */
8049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
9049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
10049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  This file is part of the FreeType project, and may only be used,       */
11049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  modified, and distributed under the terms of the FreeType project      */
12049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
13049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  this file you indicate that you have read the license and              */
14049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  understand and accept it fully.                                        */
15049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
16049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/
17049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
18049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
19049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef __PSHALGO_H__
20049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define __PSHALGO_H__
21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "pshrec.h"
24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "pshglob.h"
25049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
26049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectFT_BEGIN_HEADER
28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
30049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* handle to Hint structure */
31049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct PSH_HintRec_*  PSH_Hint;
32049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
33049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
34ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki  /* hint bit-flags */
35ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki#define PSH_HINT_GHOST   PS_HINT_FLAG_GHOST
36ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki#define PSH_HINT_BOTTOM  PS_HINT_FLAG_BOTTOM
37ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki#define PSH_HINT_ACTIVE  4U
38ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki#define PSH_HINT_FITTED  8U
39049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
40049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
41049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_hint_is_active( x )  ( ( (x)->flags & PSH_HINT_ACTIVE ) != 0 )
42049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_hint_is_ghost( x )   ( ( (x)->flags & PSH_HINT_GHOST  ) != 0 )
43049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_hint_is_fitted( x )  ( ( (x)->flags & PSH_HINT_FITTED ) != 0 )
44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
45049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_hint_activate( x )    (x)->flags |=  PSH_HINT_ACTIVE
46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_hint_deactivate( x )  (x)->flags &= ~PSH_HINT_ACTIVE
47049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_hint_set_fitted( x )  (x)->flags |=  PSH_HINT_FITTED
48049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
49ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki
50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* hint structure */
51049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct  PSH_HintRec_
52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
53049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Int    org_pos;
54049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Int    org_len;
55049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Pos    cur_pos;
56049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Pos    cur_len;
57049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt   flags;
58049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_Hint  parent;
59049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Int    order;
60049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
61049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  } PSH_HintRec;
62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
63049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
64049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* this is an interpolation zone used for strong points;  */
65049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* weak points are interpolated according to their strong */
66049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* neighbours                                             */
67049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct  PSH_ZoneRec_
68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
69049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Fixed  scale;
70049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Fixed  delta;
71049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Pos    min;
72049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Pos    max;
73049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
74049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  } PSH_ZoneRec, *PSH_Zone;
75049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
76049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
77049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct  PSH_Hint_TableRec_
78049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
79049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt        max_hints;
80049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt        num_hints;
81049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_Hint       hints;
82049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_Hint*      sort;
83049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_Hint*      sort_global;
84049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt        num_zones;
85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_ZoneRec*   zones;
86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_Zone       zone;
87049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PS_Mask_Table  hint_masks;
88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PS_Mask_Table  counter_masks;
89049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
90049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  } PSH_Hint_TableRec, *PSH_Hint_Table;
91049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
92049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
93049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct PSH_PointRec_*    PSH_Point;
94049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct PSH_ContourRec_*  PSH_Contour;
95049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
96049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  enum
97049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
98049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_DIR_NONE  =  4,
99049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_DIR_UP    = -1,
100049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_DIR_DOWN  =  1,
101049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_DIR_LEFT  = -2,
102049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_DIR_RIGHT =  2
103049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  };
104049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
105049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define PSH_DIR_HORIZONTAL  2
106049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define PSH_DIR_VERTICAL    1
107049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
108049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define PSH_DIR_COMPARE( d1, d2 )   ( (d1) == (d2) || (d1) == -(d2) )
109049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define PSH_DIR_IS_HORIZONTAL( d )  PSH_DIR_COMPARE( d, PSH_DIR_HORIZONTAL )
110049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define PSH_DIR_IS_VERTICAL( d )    PSH_DIR_COMPARE( d, PSH_DIR_VERTICAL )
111049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
112049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
113ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki  /* the following bit-flags are computed once by the glyph */
114ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki  /* analyzer, for both dimensions                          */
115ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki#define PSH_POINT_OFF     1U      /* point is off the curve */
116ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki#define PSH_POINT_SMOOTH  2U      /* point is smooth        */
117ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki#define PSH_POINT_INFLEX  4U      /* point is inflection    */
118ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki
119049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
120049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_is_smooth( p )  ( (p)->flags & PSH_POINT_SMOOTH )
121049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_is_off( p )     ( (p)->flags & PSH_POINT_OFF    )
122049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_is_inflex( p )  ( (p)->flags & PSH_POINT_INFLEX )
123049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
124049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_set_smooth( p )  (p)->flags |= PSH_POINT_SMOOTH
125049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_set_off( p )     (p)->flags |= PSH_POINT_OFF
126049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_set_inflex( p )  (p)->flags |= PSH_POINT_INFLEX
127049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
128ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki
129049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* the following bit-flags are re-computed for each dimension */
130ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki#define PSH_POINT_STRONG      16U /* point is strong                           */
131ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki#define PSH_POINT_FITTED      32U /* point is already fitted                   */
132ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki#define PSH_POINT_EXTREMUM    64U /* point is local extremum                   */
133ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki#define PSH_POINT_POSITIVE   128U /* extremum has positive contour flow        */
134ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki#define PSH_POINT_NEGATIVE   256U /* extremum has negative contour flow        */
135ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki#define PSH_POINT_EDGE_MIN   512U /* point is aligned to left/bottom stem edge */
136ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki#define PSH_POINT_EDGE_MAX  1024U /* point is aligned to top/right stem edge   */
137ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki
138049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
139049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_is_strong( p )    ( (p)->flags2 & PSH_POINT_STRONG )
140049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_is_fitted( p )    ( (p)->flags2 & PSH_POINT_FITTED )
141049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_is_extremum( p )  ( (p)->flags2 & PSH_POINT_EXTREMUM )
142049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_is_positive( p )  ( (p)->flags2 & PSH_POINT_POSITIVE )
143049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_is_negative( p )  ( (p)->flags2 & PSH_POINT_NEGATIVE )
144049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_is_edge_min( p )  ( (p)->flags2 & PSH_POINT_EDGE_MIN )
145049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_is_edge_max( p )  ( (p)->flags2 & PSH_POINT_EDGE_MAX )
146049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
147049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_set_strong( p )    (p)->flags2 |= PSH_POINT_STRONG
148049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_set_fitted( p )    (p)->flags2 |= PSH_POINT_FITTED
149049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_set_extremum( p )  (p)->flags2 |= PSH_POINT_EXTREMUM
150049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_set_positive( p )  (p)->flags2 |= PSH_POINT_POSITIVE
151049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_set_negative( p )  (p)->flags2 |= PSH_POINT_NEGATIVE
152049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_set_edge_min( p )  (p)->flags2 |= PSH_POINT_EDGE_MIN
153049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_set_edge_max( p )  (p)->flags2 |= PSH_POINT_EDGE_MAX
154049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
155049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
156049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct  PSH_PointRec_
157049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
158049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_Point    prev;
159049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_Point    next;
160049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_Contour  contour;
161049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt      flags;
162049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt      flags2;
163049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Char      dir_in;
164049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Char      dir_out;
165049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_Hint     hint;
166049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Pos       org_u;
167049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Pos       org_v;
168049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Pos       cur_u;
169049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef DEBUG_HINTER
170049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Pos       org_x;
171049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Pos       cur_x;
172049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Pos       org_y;
173049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Pos       cur_y;
174049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt      flags_x;
175049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt      flags_y;
176049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
177049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
178049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  } PSH_PointRec;
179049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
180049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
181049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct  PSH_ContourRec_
182049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
183049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_Point  start;
184049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt    count;
185049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
186049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  } PSH_ContourRec;
187049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
188049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
189049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct  PSH_GlyphRec_
190049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
191049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt            num_points;
192049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt            num_contours;
193049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
194049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_Point          points;
195049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_Contour        contours;
196049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
197049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Memory          memory;
198049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Outline*        outline;
199049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_Globals        globals;
200049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_Hint_TableRec  hint_tables[2];
201049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
202049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Bool            vertical;
203049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Int             major_dir;
204049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Int             minor_dir;
205049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
206049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Bool            do_horz_hints;
207049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Bool            do_vert_hints;
208049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Bool            do_horz_snapping;
209049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Bool            do_vert_snapping;
210049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Bool            do_stem_adjust;
211049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
212049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  } PSH_GlyphRec, *PSH_Glyph;
213049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
214049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
215049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef DEBUG_HINTER
216049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  extern PSH_Hint_Table  ps_debug_hint_table;
217049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
218049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef void
219049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  (*PSH_HintFunc)( PSH_Hint  hint,
220049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                   FT_Bool   vertical );
221049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
222049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  extern PSH_HintFunc    ps_debug_hint_func;
223049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
224049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  extern PSH_Glyph       ps_debug_glyph;
225049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
226049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
227049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
228049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  extern FT_Error
229049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  ps_hints_apply( PS_Hints        ps_hints,
230049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                  FT_Outline*     outline,
231049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                  PSH_Globals     globals,
232049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                  FT_Render_Mode  hint_mode );
233049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
234049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
235049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectFT_END_HEADER
236049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
237049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
238049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* __PSHALGO_H__ */
239049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
240049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
241049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */
242