1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/
2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
3049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  aftypes.h                                                              */
4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*    Auto-fitter types (specification only).                              */
6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
7aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner/*  Copyright 2003-2009, 2011 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  /*************************************************************************
20049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *
21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *  The auto-fitter is a complete rewrite of the old auto-hinter.
22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *  Its main feature is the ability to differentiate between different
23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *  scripts in order to apply language-specific rules.
24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *
25049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *  The code has also been compartmentized into several entities that
26049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *  should make algorithmic experimentation easier than with the old
27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *  code.
28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *
29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *  Finally, we get rid of the Catharon license, since this code is
30049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *  released under the FreeType one.
31049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *
32049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *************************************************************************/
33049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef __AFTYPES_H__
36049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define __AFTYPES_H__
37049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include <ft2build.h>
39049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
40049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_FREETYPE_H
41049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_OUTLINE_H
42049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_OBJECTS_H
43049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_DEBUG_H
44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
45049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectFT_BEGIN_HEADER
47049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
48049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*************************************************************************/
49049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*************************************************************************/
50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*****                                                               *****/
51049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*****                    D E B U G G I N G                          *****/
52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*****                                                               *****/
53049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*************************************************************************/
54049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*************************************************************************/
55049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
56aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#ifdef FT_DEBUG_AUTOFIT
57049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
580a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#include FT_CONFIG_STANDARD_LIBRARY_H
590a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project
60049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Projectextern int    _af_debug_disable_horz_hints;
61049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Projectextern int    _af_debug_disable_vert_hints;
62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Projectextern int    _af_debug_disable_blue_hints;
63049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Projectextern void*  _af_debug_hints;
64049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
65aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#endif /* FT_DEBUG_AUTOFIT */
66049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
67049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*************************************************************************/
69049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*************************************************************************/
70049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*****                                                               *****/
71049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*****                 U T I L I T Y   S T U F F                     *****/
72049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*****                                                               *****/
73049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*************************************************************************/
74049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*************************************************************************/
75049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
76049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct  AF_WidthRec_
77049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
78049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Pos  org;  /* original position/width in font units              */
79049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Pos  cur;  /* current/scaled position/width in device sub-pixels */
80049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Pos  fit;  /* current/fitted position/width in device sub-pixels */
81049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
82049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  } AF_WidthRec, *AF_Width;
83049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
84049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_LOCAL( void )
86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  af_sort_pos( FT_UInt  count,
87049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project               FT_Pos*  table );
88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
89049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_LOCAL( void )
90049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  af_sort_widths( FT_UInt   count,
91049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                  AF_Width  widths );
92049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
93049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
94049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*************************************************************************/
95049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*************************************************************************/
96049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*****                                                               *****/
97049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*****                   A N G L E   T Y P E S                       *****/
98049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*****                                                               *****/
99049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*************************************************************************/
100049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*************************************************************************/
101049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
102049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*
103049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *  The auto-fitter doesn't need a very high angular accuracy;
104049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *  this allows us to speed up some computations considerably with a
105049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *  light Cordic algorithm (see afangles.c).
106049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   */
107049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
108049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef FT_Int  AF_Angle;
109049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
110049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
111049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define AF_ANGLE_PI   256
112049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define AF_ANGLE_2PI  ( AF_ANGLE_PI * 2 )
113049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define AF_ANGLE_PI2  ( AF_ANGLE_PI / 2 )
114049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define AF_ANGLE_PI4  ( AF_ANGLE_PI / 4 )
115049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
116049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
117049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 0
118049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*
119049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *  compute the angle of a given 2-D vector
120049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   */
121049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_LOCAL( AF_Angle )
122049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  af_angle_atan( FT_Pos  dx,
123049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                 FT_Pos  dy );
124049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
125049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
126049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*
127049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *  compute `angle2 - angle1'; the result is always within
128049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *  the range [-AF_ANGLE_PI .. AF_ANGLE_PI - 1]
129049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   */
130049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_LOCAL( AF_Angle )
131049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  af_angle_diff( AF_Angle  angle1,
132049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                 AF_Angle  angle2 );
133049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* 0 */
134049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
135049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
136049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define AF_ANGLE_DIFF( result, angle1, angle2 ) \
137049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_BEGIN_STMNT                                \
138049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    AF_Angle  _delta = (angle2) - (angle1);     \
139049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                                                \
140049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                                                \
141049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    _delta %= AF_ANGLE_2PI;                     \
142049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    if ( _delta < 0 )                           \
143049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      _delta += AF_ANGLE_2PI;                   \
144049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                                                \
145049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    if ( _delta > AF_ANGLE_PI )                 \
146049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      _delta -= AF_ANGLE_2PI;                   \
147049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                                                \
148049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    result = _delta;                            \
149049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_END_STMNT
150049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
151049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
152049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*  opaque handle to glyph-specific hints -- see `afhints.h' for more
153049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *  details
154049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   */
155049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct AF_GlyphHintsRec_*  AF_GlyphHints;
156049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
157049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
158049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*************************************************************************/
159049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*************************************************************************/
160049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*****                                                               *****/
161049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*****                       S C A L E R S                           *****/
162049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*****                                                               *****/
163049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*************************************************************************/
164049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*************************************************************************/
165049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
166049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*
167049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *  A scaler models the target pixel device that will receive the
168049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *  auto-hinted glyph image.
169049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   */
170049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
171049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef enum  AF_ScalerFlags_
172049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
173049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    AF_SCALER_FLAG_NO_HORIZONTAL = 1,  /* disable horizontal hinting */
174049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    AF_SCALER_FLAG_NO_VERTICAL   = 2,  /* disable vertical hinting   */
175049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    AF_SCALER_FLAG_NO_ADVANCE    = 4   /* disable advance hinting    */
176049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
177049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  } AF_ScalerFlags;
178049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
179049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
180049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct  AF_ScalerRec_
181049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
182049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Face         face;        /* source font face                        */
183049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Fixed        x_scale;     /* from font units to 1/64th device pixels */
184049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Fixed        y_scale;     /* from font units to 1/64th device pixels */
185049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Pos          x_delta;     /* in 1/64th device pixels                 */
186049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Pos          y_delta;     /* in 1/64th device pixels                 */
187049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Render_Mode  render_mode; /* monochrome, anti-aliased, LCD, etc.     */
188049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt32       flags;       /* additional control flags, see above     */
189049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
190049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  } AF_ScalerRec, *AF_Scaler;
191049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
192049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
193049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define AF_SCALER_EQUAL_SCALES( a, b )      \
194049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project          ( (a)->x_scale == (b)->x_scale && \
195049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project            (a)->y_scale == (b)->y_scale && \
196049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project            (a)->x_delta == (b)->x_delta && \
197049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project            (a)->y_delta == (b)->y_delta )
198049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
199049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
200049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*************************************************************************/
201049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*************************************************************************/
202049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*****                                                               *****/
203049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*****                       S C R I P T S                           *****/
204049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*****                                                               *****/
205049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*************************************************************************/
206049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*************************************************************************/
207049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
208049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*
209aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner   *  The list of known scripts.  Each different script corresponds to the
210049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *  following information:
211049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *
212049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *   - A set of Unicode ranges to test whether the face supports the
213049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *     script.
214049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *
215049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *   - A specific global analyzer that will compute global metrics
216049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *     specific to the script.
217049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *
218049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *   - A specific glyph analyzer that will compute segments and
219049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *     edges for each glyph covered by the script.
220049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *
221049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *   - A specific grid-fitting algorithm that will distort the
222049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *     scaled glyph outline according to the results of the glyph
223049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *     analyzer.
224049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *
225049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *  Note that a given analyzer and/or grid-fitting algorithm can be
226049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *  used by more than one script.
227049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   */
228049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
229049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef enum  AF_Script_
230049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
231049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    AF_SCRIPT_NONE  = 0,
232049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    AF_SCRIPT_LATIN = 1,
233049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    AF_SCRIPT_CJK   = 2,
23441371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier    AF_SCRIPT_INDIC = 3,
235049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef FT_OPTION_AUTOFIT2
236049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    AF_SCRIPT_LATIN2,
237049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
238049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
239049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    /* add new scripts here.  Don't forget to update the list in */
240049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    /* `afglobal.c'.                                             */
241049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
242049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    AF_SCRIPT_MAX   /* do not remove */
243049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
244049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  } AF_Script;
245049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
246049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
247049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct AF_ScriptClassRec_ const*  AF_ScriptClass;
248049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
249049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct  AF_ScriptMetricsRec_
250049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
251049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    AF_ScriptClass  clazz;
252049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    AF_ScalerRec    scaler;
253295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner    FT_Bool         digits_have_same_width;
254049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
255049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  } AF_ScriptMetricsRec, *AF_ScriptMetrics;
256049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
257049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
258049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*  This function parses an FT_Face to compute global metrics for
259049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *  a specific script.
260049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   */
261049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef FT_Error
262049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  (*AF_Script_InitMetricsFunc)( AF_ScriptMetrics  metrics,
263049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                                FT_Face           face );
264049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
265049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef void
266049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  (*AF_Script_ScaleMetricsFunc)( AF_ScriptMetrics  metrics,
267049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                                 AF_Scaler         scaler );
268049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
269049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef void
270049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  (*AF_Script_DoneMetricsFunc)( AF_ScriptMetrics  metrics );
271049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
272049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
273049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef FT_Error
274049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  (*AF_Script_InitHintsFunc)( AF_GlyphHints     hints,
275049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                              AF_ScriptMetrics  metrics );
276049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
277049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef void
278049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  (*AF_Script_ApplyHintsFunc)( AF_GlyphHints     hints,
279049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                               FT_Outline*       outline,
280049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                               AF_ScriptMetrics  metrics );
281049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
282049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
283049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct  AF_Script_UniRangeRec_
284049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
285049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt32  first;
286049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt32  last;
287049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
288049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  } AF_Script_UniRangeRec;
289049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
290295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#define AF_UNIRANGE_REC( a, b ) { (FT_UInt32)(a), (FT_UInt32)(b) }
291295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner
292049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef const AF_Script_UniRangeRec  *AF_Script_UniRange;
293049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
294049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
295049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct  AF_ScriptClassRec_
296049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
297049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    AF_Script                   script;
298049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    AF_Script_UniRange          script_uni_ranges; /* last must be { 0, 0 } */
299049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
300295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner    FT_Offset                   script_metrics_size;
301049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    AF_Script_InitMetricsFunc   script_metrics_init;
302049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    AF_Script_ScaleMetricsFunc  script_metrics_scale;
303049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    AF_Script_DoneMetricsFunc   script_metrics_done;
304049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
305049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    AF_Script_InitHintsFunc     script_hints_init;
306049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    AF_Script_ApplyHintsFunc    script_hints_apply;
307049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
308049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  } AF_ScriptClassRec;
309049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
310aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner
311aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner  /* Declare and define vtables for classes */
312295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#ifndef FT_CONFIG_OPTION_PIC
313295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner
314aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#define AF_DECLARE_SCRIPT_CLASS( script_class ) \
315aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner  FT_CALLBACK_TABLE const AF_ScriptClassRec     \
316295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner  script_class;
317295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner
318aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#define AF_DEFINE_SCRIPT_CLASS( script_class, script_, ranges, m_size,     \
319aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner                                m_init, m_scale, m_done, h_init, h_apply ) \
320aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner  FT_CALLBACK_TABLE_DEF const AF_ScriptClassRec                            \
321aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner  script_class =                                                           \
322aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner  {                                                                        \
323aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner    script_,                                                               \
324aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner    ranges,                                                                \
325aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner                                                                           \
326aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner    m_size,                                                                \
327aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner                                                                           \
328aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner    m_init,                                                                \
329aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner    m_scale,                                                               \
330aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner    m_done,                                                                \
331aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner                                                                           \
332aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner    h_init,                                                                \
333aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner    h_apply                                                                \
334295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner  };
335295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner
336aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#else /* FT_CONFIG_OPTION_PIC */
337aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner
338aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#define AF_DECLARE_SCRIPT_CLASS( script_class )          \
339aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner  FT_LOCAL( void )                                       \
340aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner  FT_Init_Class_##script_class( AF_ScriptClassRec* ac );
341aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner
342aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#define AF_DEFINE_SCRIPT_CLASS( script_class, script_, ranges, m_size,     \
343aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner                                m_init, m_scale, m_done, h_init, h_apply ) \
344aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner  FT_LOCAL_DEF( void )                                                     \
345aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner  FT_Init_Class_##script_class( AF_ScriptClassRec* ac )                    \
346aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner  {                                                                        \
347aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner    ac->script               = script_;                                    \
348aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner    ac->script_uni_ranges    = ranges;                                     \
349aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner                                                                           \
350aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner    ac->script_metrics_size  = m_size;                                     \
351aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner                                                                           \
352aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner    ac->script_metrics_init  = m_init;                                     \
353aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner    ac->script_metrics_scale = m_scale;                                    \
354aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner    ac->script_metrics_done  = m_done;                                     \
355aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner                                                                           \
356aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner    ac->script_hints_init    = h_init;                                     \
357aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner    ac->script_hints_apply   = h_apply;                                    \
358295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner  }
359aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner
360aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#endif /* FT_CONFIG_OPTION_PIC */
361295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner
362049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
363049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */
364049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
365049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectFT_END_HEADER
366049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
367049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* __AFTYPES_H__ */
368049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
369049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
370049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */
371