1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/
2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
3049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  afglobal.h                                                             */
4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*    Auto-fitter routines to compute global hinting values                */
6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*    (specification).                                                     */
7049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
89c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod/*  Copyright 2003-2005, 2007, 2009, 2011-2014 by                          */
9049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
10049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
11049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  This file is part of the FreeType project, and may only be used,       */
12049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  modified, and distributed under the terms of the FreeType project      */
13049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
14049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  this file you indicate that you have read the license and              */
15049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  understand and accept it fully.                                        */
16049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
17049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/
18049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
19049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
20aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#ifndef __AFGLOBAL_H__
21aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#define __AFGLOBAL_H__
22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "aftypes.h"
25727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#include "afmodule.h"
269c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#include "hbshim.h"
27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectFT_BEGIN_HEADER
30049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
31049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
32ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  FT_LOCAL_ARRAY( AF_WritingSystemClass )
33ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  af_writing_system_classes[];
34ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
359c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod
369c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#undef  SCRIPT
379c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define SCRIPT( s, S, d, h, sc1, sc2, sc3 )                    \
389c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod          AF_DECLARE_SCRIPT_CLASS( af_ ## s ## _script_class )
399c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod
409c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#include "afscript.h"
419c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod
42ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  FT_LOCAL_ARRAY( AF_ScriptClass )
43ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  af_script_classes[];
44ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
459c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod
469c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#undef  STYLE
479c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define STYLE( s, S, d, ws, sc, ss, c )                      \
489c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod          AF_DECLARE_STYLE_CLASS( af_ ## s ## _style_class )
499c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod
509c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#include "afstyles.h"
519c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod
529c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod  FT_LOCAL_ARRAY( AF_StyleClass )
539c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod  af_style_classes[];
549c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod
559c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod
56ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#ifdef FT_DEBUG_LEVEL_TRACE
57ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease  FT_LOCAL_ARRAY( char* )
589c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod  af_style_names[];
59ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#endif
60ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
619c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod
62727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease  /*
63727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease   *  Default values and flags for both autofitter globals (found in
64727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease   *  AF_ModuleRec) and face globals (in AF_FaceGlobalsRec).
65727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease   */
66727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
679c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod  /* index of fallback style in `af_style_classes' */
68ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#ifdef AF_CONFIG_OPTION_CJK
699c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define AF_STYLE_FALLBACK    AF_STYLE_HANI_DFLT
70ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#else
719c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define AF_STYLE_FALLBACK    AF_STYLE_NONE_DFLT
72ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#endif
739c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod  /* default script for OpenType; ignored if HarfBuzz isn't used */
749c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define AF_SCRIPT_DEFAULT    AF_SCRIPT_LATN
75727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease  /* a bit mask indicating an uncovered glyph        */
769c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define AF_STYLE_UNASSIGNED  0x7F
77727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease  /* if this flag is set, we have an ASCII digit     */
789c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define AF_DIGIT             0x80
79727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
80727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease  /* `increase-x-height' property */
81727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#define AF_PROP_INCREASE_X_HEIGHT_MIN  6
82727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#define AF_PROP_INCREASE_X_HEIGHT_MAX  0
83727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
84727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /************************************************************************/
86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /************************************************************************/
87049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*****                                                              *****/
88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*****                  F A C E   G L O B A L S                     *****/
89049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*****                                                              *****/
90049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /************************************************************************/
91049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /************************************************************************/
92049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
93049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
94049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*
959c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod   *  Note that glyph_styles[] maps each glyph to an index into the
969c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod   *  `af_style_classes' array.
97727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease   *
98727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease   */
99727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease  typedef struct  AF_FaceGlobalsRec_
100727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease  {
1019c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    FT_Face          face;
1029c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    FT_Long          glyph_count;    /* same as face->num_glyphs */
1039c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    FT_Byte*         glyph_styles;
1049c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod
1059c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ
1069c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    hb_font_t*       hb_font;
1079c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#endif
108727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
109727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease    /* per-face auto-hinter properties */
1109c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    FT_UInt          increase_x_height;
111727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
1129c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_StyleMetrics  metrics[AF_STYLE_MAX];
113727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
1149c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod    AF_Module        module;         /* to access global properties */
115727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
116727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease  } AF_FaceGlobalsRec;
117727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
118727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
119727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease  /*
120049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   *  model the global hints data for a given face, decomposed into
1219c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod   *  style-specific items
122049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project   */
123049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
124049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_LOCAL( FT_Error )
125049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  af_face_globals_new( FT_Face          face,
126727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease                       AF_FaceGlobals  *aglobals,
127727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease                       AF_Module        module );
128049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
129049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_LOCAL( FT_Error )
1309c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod  af_face_globals_get_metrics( AF_FaceGlobals    globals,
1319c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod                               FT_UInt           gindex,
1329c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod                               FT_UInt           options,
1339c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod                               AF_StyleMetrics  *ametrics );
134049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
135049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_LOCAL( void )
136049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  af_face_globals_free( AF_FaceGlobals  globals );
137049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
138295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner  FT_LOCAL_DEF( FT_Bool )
139295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner  af_face_globals_is_digit( AF_FaceGlobals  globals,
140295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner                            FT_UInt         gindex );
141295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner
142aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich  /* */
143049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
144049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
145049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectFT_END_HEADER
146049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
147aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#endif /* __AFGLOBAL_H__ */
148049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
149049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
150049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */
151