1 /***************************************************************************/
   2 /*                                                                         */
   3 /*  afglobal.h                                                             */
   4 /*                                                                         */
   5 /*    Auto-fitter routines to compute global hinting values                */
   6 /*    (specification).                                                     */
   7 /*                                                                         */
   8 /*  Copyright 2003-2018 by                                                 */
   9 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
  10 /*                                                                         */
  11 /*  This file is part of the FreeType project, and may only be used,       */
  12 /*  modified, and distributed under the terms of the FreeType project      */
  13 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
  14 /*  this file you indicate that you have read the license and              */
  15 /*  understand and accept it fully.                                        */
  16 /*                                                                         */
  17 /***************************************************************************/
  18 
  19 
  20 #ifndef AFGLOBAL_H_
  21 #define AFGLOBAL_H_
  22 
  23 
  24 #include "aftypes.h"
  25 #include "afmodule.h"
  26 #include "afshaper.h"
  27 
  28 
  29 FT_BEGIN_HEADER
  30 
  31 
  32   FT_LOCAL_ARRAY( AF_WritingSystemClass )
  33   af_writing_system_classes[];
  34 
  35 
  36 #undef  SCRIPT
  37 #define SCRIPT( s, S, d, h, H, ss )                            \
  38           AF_DECLARE_SCRIPT_CLASS( af_ ## s ## _script_class )
  39 
  40 #include "afscript.h"
  41 
  42   FT_LOCAL_ARRAY( AF_ScriptClass )
  43   af_script_classes[];
  44 
  45 
  46 #undef  STYLE
  47 #define STYLE( s, S, d, ws, sc, ss, c )                      \
  48           AF_DECLARE_STYLE_CLASS( af_ ## s ## _style_class )
  49 
  50 #include "afstyles.h"
  51 
  52   FT_LOCAL_ARRAY( AF_StyleClass )
  53   af_style_classes[];
  54 
  55 
  56 #ifdef FT_DEBUG_LEVEL_TRACE
  57   FT_LOCAL_ARRAY( char* )
  58   af_style_names[];
  59 #endif
  60 
  61 
  62   /*
  63    *  Default values and flags for both autofitter globals (found in
  64    *  AF_ModuleRec) and face globals (in AF_FaceGlobalsRec).
  65    */
  66 
  67   /* index of fallback style in `af_style_classes' */
  68 #ifdef AF_CONFIG_OPTION_CJK
  69 #define AF_STYLE_FALLBACK    AF_STYLE_HANI_DFLT
  70 #else
  71 #define AF_STYLE_FALLBACK    AF_STYLE_NONE_DFLT
  72 #endif
  73   /* default script for OpenType; ignored if HarfBuzz isn't used */
  74 #define AF_SCRIPT_DEFAULT    AF_SCRIPT_LATN
  75 
  76   /* a bit mask for AF_DIGIT and AF_NONBASE */
  77 #define AF_STYLE_MASK        0x3FFF
  78   /* an uncovered glyph      */
  79 #define AF_STYLE_UNASSIGNED  AF_STYLE_MASK
  80 
  81   /* if this flag is set, we have an ASCII digit   */
  82 #define AF_DIGIT             0x8000U
  83   /* if this flag is set, we have a non-base character */
  84 #define AF_NONBASE           0x4000U
  85 
  86   /* `increase-x-height' property */
  87 #define AF_PROP_INCREASE_X_HEIGHT_MIN  6
  88 #define AF_PROP_INCREASE_X_HEIGHT_MAX  0
  89 
  90 
  91   /************************************************************************/
  92   /************************************************************************/
  93   /*****                                                              *****/
  94   /*****                  F A C E   G L O B A L S                     *****/
  95   /*****                                                              *****/
  96   /************************************************************************/
  97   /************************************************************************/
  98 
  99 
 100   /*
 101    *  Note that glyph_styles[] maps each glyph to an index into the
 102    *  `af_style_classes' array.
 103    *
 104    */
 105   typedef struct  AF_FaceGlobalsRec_
 106   {
 107     FT_Face          face;
 108     FT_Long          glyph_count;    /* same as face->num_glyphs */
 109     FT_UShort*       glyph_styles;
 110 
 111 #ifdef FT_CONFIG_OPTION_USE_HARFBUZZ
 112     hb_font_t*       hb_font;
 113     hb_buffer_t*     hb_buf;           /* for feature comparison */
 114 #endif
 115 
 116     /* per-face auto-hinter properties */
 117     FT_UInt          increase_x_height;
 118 
 119     AF_StyleMetrics  metrics[AF_STYLE_MAX];
 120 
 121     /* Compute darkening amount once per size.  Use this to check whether */
 122     /* darken_{x,y} needs to be recomputed.                               */
 123     FT_UShort        stem_darkening_for_ppem;
 124     /* Copy from e.g. AF_LatinMetrics.axis[AF_DIMENSION_HORZ] */
 125     /* to compute the darkening amount.                       */
 126     FT_Pos           standard_vertical_width;
 127     /* Copy from e.g. AF_LatinMetrics.axis[AF_DIMENSION_VERT] */
 128     /* to compute the darkening amount.                       */
 129     FT_Pos           standard_horizontal_width;
 130     /* The actual amount to darken a glyph along the X axis. */
 131     FT_Pos           darken_x;
 132     /* The actual amount to darken a glyph along the Y axis. */
 133     FT_Pos           darken_y;
 134     /* Amount to scale down by to keep emboldened points */
 135     /* on the Y-axis in pre-computed blue zones.         */
 136     FT_Fixed         scale_down_factor;
 137     AF_Module        module;         /* to access global properties */
 138 
 139   } AF_FaceGlobalsRec;
 140 
 141 
 142   /*
 143    *  model the global hints data for a given face, decomposed into
 144    *  style-specific items
 145    */
 146 
 147   FT_LOCAL( FT_Error )
 148   af_face_globals_new( FT_Face          face,
 149                        AF_FaceGlobals  *aglobals,
 150                        AF_Module        module );
 151 
 152   FT_LOCAL( FT_Error )
 153   af_face_globals_get_metrics( AF_FaceGlobals    globals,
 154                                FT_UInt           gindex,
 155                                FT_UInt           options,
 156                                AF_StyleMetrics  *ametrics );
 157 
 158   FT_LOCAL( void )
 159   af_face_globals_free( AF_FaceGlobals  globals );
 160 
 161   FT_LOCAL_DEF( FT_Bool )
 162   af_face_globals_is_digit( AF_FaceGlobals  globals,
 163                             FT_UInt         gindex );
 164 
 165   /* */
 166 
 167 
 168 FT_END_HEADER
 169 
 170 #endif /* AFGLOBAL_H_ */
 171 
 172 
 173 /* END */