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/*                                                                         */
7a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*  Copyright 2001-2003, 2008, 2013 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  /* hint bit-flags */
34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef enum  PSH_Hint_Flags_
35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
36049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_HINT_GHOST  = PS_HINT_FLAG_GHOST,
37049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_HINT_BOTTOM = PS_HINT_FLAG_BOTTOM,
38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_HINT_ACTIVE = 4,
39049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_HINT_FITTED = 8
40049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
41049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  } PSH_Hint_Flags;
42049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
43049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_hint_is_active( x )  ( ( (x)->flags & PSH_HINT_ACTIVE ) != 0 )
45049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_hint_is_ghost( x )   ( ( (x)->flags & PSH_HINT_GHOST  ) != 0 )
46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_hint_is_fitted( x )  ( ( (x)->flags & PSH_HINT_FITTED ) != 0 )
47049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
48049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_hint_activate( x )    (x)->flags |=  PSH_HINT_ACTIVE
49049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_hint_deactivate( x )  (x)->flags &= ~PSH_HINT_ACTIVE
50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_hint_set_fitted( x )  (x)->flags |=  PSH_HINT_FITTED
51049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* hint structure */
53049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct  PSH_HintRec_
54049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
55049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Int    org_pos;
56049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Int    org_len;
57049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Pos    cur_pos;
58049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Pos    cur_len;
59049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt   flags;
60049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_Hint  parent;
61049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Int    order;
62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
63049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  } PSH_HintRec;
64049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
65049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
66049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* this is an interpolation zone used for strong points;  */
67049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* weak points are interpolated according to their strong */
68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* neighbours                                             */
69049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct  PSH_ZoneRec_
70049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
71049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Fixed  scale;
72049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Fixed  delta;
73049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Pos    min;
74049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Pos    max;
75049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
76049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  } PSH_ZoneRec, *PSH_Zone;
77049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
78049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
79049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct  PSH_Hint_TableRec_
80049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
81049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt        max_hints;
82049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt        num_hints;
83049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_Hint       hints;
84049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_Hint*      sort;
85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_Hint*      sort_global;
86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt        num_zones;
87049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_ZoneRec*   zones;
88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_Zone       zone;
89049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PS_Mask_Table  hint_masks;
90049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PS_Mask_Table  counter_masks;
91049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
92049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  } PSH_Hint_TableRec, *PSH_Hint_Table;
93049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
94049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
95049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct PSH_PointRec_*    PSH_Point;
96049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct PSH_ContourRec_*  PSH_Contour;
97049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
98049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  enum
99049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
100049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_DIR_NONE  =  4,
101049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_DIR_UP    = -1,
102049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_DIR_DOWN  =  1,
103049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_DIR_LEFT  = -2,
104049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_DIR_RIGHT =  2
105049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  };
106049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
107049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define PSH_DIR_HORIZONTAL  2
108049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define PSH_DIR_VERTICAL    1
109049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
110049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define PSH_DIR_COMPARE( d1, d2 )   ( (d1) == (d2) || (d1) == -(d2) )
111049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define PSH_DIR_IS_HORIZONTAL( d )  PSH_DIR_COMPARE( d, PSH_DIR_HORIZONTAL )
112049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define PSH_DIR_IS_VERTICAL( d )    PSH_DIR_COMPARE( d, PSH_DIR_VERTICAL )
113049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
114049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
115049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* the following bit-flags are computed once by the glyph */
116049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* analyzer, for both dimensions                          */
117049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  enum
118049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
119049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_POINT_OFF    = 1,   /* point is off the curve */
120049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_POINT_SMOOTH = 2,   /* point is smooth        */
121049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_POINT_INFLEX = 4    /* point is inflection    */
122049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  };
123049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
124049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_is_smooth( p )  ( (p)->flags & PSH_POINT_SMOOTH )
125049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_is_off( p )     ( (p)->flags & PSH_POINT_OFF    )
126049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_is_inflex( p )  ( (p)->flags & PSH_POINT_INFLEX )
127049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
128049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_set_smooth( p )  (p)->flags |= PSH_POINT_SMOOTH
129049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_set_off( p )     (p)->flags |= PSH_POINT_OFF
130049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_set_inflex( p )  (p)->flags |= PSH_POINT_INFLEX
131049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
132049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* the following bit-flags are re-computed for each dimension */
133049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  enum
134049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
135049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_POINT_STRONG   = 16,   /* point is strong                           */
136049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_POINT_FITTED   = 32,   /* point is already fitted                   */
137049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_POINT_EXTREMUM = 64,   /* point is local extremum                   */
138049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_POINT_POSITIVE = 128,  /* extremum has positive contour flow        */
139049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_POINT_NEGATIVE = 256,  /* extremum has negative contour flow        */
140049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_POINT_EDGE_MIN = 512,  /* point is aligned to left/bottom stem edge */
141049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_POINT_EDGE_MAX = 1024  /* point is aligned to top/right stem edge   */
142049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  };
143049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
144049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_is_strong( p )    ( (p)->flags2 & PSH_POINT_STRONG )
145049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_is_fitted( p )    ( (p)->flags2 & PSH_POINT_FITTED )
146049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_is_extremum( p )  ( (p)->flags2 & PSH_POINT_EXTREMUM )
147049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_is_positive( p )  ( (p)->flags2 & PSH_POINT_POSITIVE )
148049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_is_negative( p )  ( (p)->flags2 & PSH_POINT_NEGATIVE )
149049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_is_edge_min( p )  ( (p)->flags2 & PSH_POINT_EDGE_MIN )
150049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_is_edge_max( p )  ( (p)->flags2 & PSH_POINT_EDGE_MAX )
151049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
152049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_set_strong( p )    (p)->flags2 |= PSH_POINT_STRONG
153049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_set_fitted( p )    (p)->flags2 |= PSH_POINT_FITTED
154049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_set_extremum( p )  (p)->flags2 |= PSH_POINT_EXTREMUM
155049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_set_positive( p )  (p)->flags2 |= PSH_POINT_POSITIVE
156049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_set_negative( p )  (p)->flags2 |= PSH_POINT_NEGATIVE
157049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_set_edge_min( p )  (p)->flags2 |= PSH_POINT_EDGE_MIN
158049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define psh_point_set_edge_max( p )  (p)->flags2 |= PSH_POINT_EDGE_MAX
159049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
160049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
161049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct  PSH_PointRec_
162049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
163049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_Point    prev;
164049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_Point    next;
165049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_Contour  contour;
166049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt      flags;
167049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt      flags2;
168049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Char      dir_in;
169049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Char      dir_out;
170049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_Hint     hint;
171049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Pos       org_u;
172049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Pos       org_v;
173049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Pos       cur_u;
174049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef DEBUG_HINTER
175049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Pos       org_x;
176049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Pos       cur_x;
177049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Pos       org_y;
178049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Pos       cur_y;
179049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt      flags_x;
180049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt      flags_y;
181049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
182049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
183049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  } PSH_PointRec;
184049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
185049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
186049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct  PSH_ContourRec_
187049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
188049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_Point  start;
189049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt    count;
190049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
191049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  } PSH_ContourRec;
192049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
193049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
194049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct  PSH_GlyphRec_
195049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
196049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt            num_points;
197049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt            num_contours;
198049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
199049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_Point          points;
200049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_Contour        contours;
201049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
202049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Memory          memory;
203049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Outline*        outline;
204049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_Globals        globals;
205049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    PSH_Hint_TableRec  hint_tables[2];
206049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
207049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Bool            vertical;
208049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Int             major_dir;
209049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Int             minor_dir;
210049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
211049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Bool            do_horz_hints;
212049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Bool            do_vert_hints;
213049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Bool            do_horz_snapping;
214049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Bool            do_vert_snapping;
215049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Bool            do_stem_adjust;
216049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
217049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  } PSH_GlyphRec, *PSH_Glyph;
218049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
219049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
220049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef DEBUG_HINTER
221049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  extern PSH_Hint_Table  ps_debug_hint_table;
222049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
223049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef void
224049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  (*PSH_HintFunc)( PSH_Hint  hint,
225049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                   FT_Bool   vertical );
226049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
227049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  extern PSH_HintFunc    ps_debug_hint_func;
228049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
229049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  extern PSH_Glyph       ps_debug_glyph;
230049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
231049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
232049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
233049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  extern FT_Error
234049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  ps_hints_apply( PS_Hints        ps_hints,
235049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                  FT_Outline*     outline,
236049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                  PSH_Globals     globals,
237049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                  FT_Render_Mode  hint_mode );
238049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
239049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
240049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectFT_END_HEADER
241049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
242049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
243049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* __PSHALGO_H__ */
244049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
245049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
246049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */
247