Home | History | Annotate | Download | only in autofit
      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 */
    174