(root)/
freetype-2.13.2/
src/
autofit/
afglobal.h
       1  /****************************************************************************
       2   *
       3   * afglobal.h
       4   *
       5   *   Auto-fitter routines to compute global hinting values
       6   *   (specification).
       7   *
       8   * Copyright (C) 2003-2023 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_UInt          glyph_count;    /* unsigned 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( void*  globals );
     160  
     161    FT_LOCAL( 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 */