(root)/
freetype-2.13.2/
src/
autofit/
afcjk.h
       1  /****************************************************************************
       2   *
       3   * afcjk.h
       4   *
       5   *   Auto-fitter hinting routines for CJK writing system (specification).
       6   *
       7   * Copyright (C) 2006-2023 by
       8   * David Turner, Robert Wilhelm, and Werner Lemberg.
       9   *
      10   * This file is part of the FreeType project, and may only be used,
      11   * modified, and distributed under the terms of the FreeType project
      12   * license, LICENSE.TXT.  By continuing to use, modify, or distribute
      13   * this file you indicate that you have read the license and
      14   * understand and accept it fully.
      15   *
      16   */
      17  
      18  
      19  #ifndef AFCJK_H_
      20  #define AFCJK_H_
      21  
      22  #include "afhints.h"
      23  #include "aflatin.h"
      24  
      25  
      26  FT_BEGIN_HEADER
      27  
      28  
      29    /* the CJK-specific writing system */
      30  
      31    AF_DECLARE_WRITING_SYSTEM_CLASS( af_cjk_writing_system_class )
      32  
      33  
      34    /*************************************************************************/
      35    /*************************************************************************/
      36    /*****                                                               *****/
      37    /*****              C J K   G L O B A L   M E T R I C S              *****/
      38    /*****                                                               *****/
      39    /*************************************************************************/
      40    /*************************************************************************/
      41  
      42  
      43    /*
      44     * CJK glyphs tend to fill the square.  So we have both vertical and
      45     * horizontal blue zones.  But some glyphs have flat bounding strokes that
      46     * leave some space between neighbour glyphs.
      47     */
      48  
      49  #define AF_CJK_IS_TOP_BLUE( b ) \
      50            ( (b)->properties & AF_BLUE_PROPERTY_CJK_TOP )
      51  #define AF_CJK_IS_HORIZ_BLUE( b ) \
      52            ( (b)->properties & AF_BLUE_PROPERTY_CJK_HORIZ )
      53  #define AF_CJK_IS_RIGHT_BLUE  AF_CJK_IS_TOP_BLUE
      54  
      55  #define AF_CJK_MAX_WIDTHS  16
      56  
      57  
      58  #define AF_CJK_BLUE_ACTIVE      ( 1U << 0 ) /* zone height is <= 3/4px      */
      59  #define AF_CJK_BLUE_TOP         ( 1U << 1 ) /* result of AF_CJK_IS_TOP_BLUE */
      60  #define AF_CJK_BLUE_ADJUSTMENT  ( 1U << 2 ) /* used for scale adjustment    */
      61                                              /* optimization                 */
      62  
      63  
      64    typedef struct  AF_CJKBlueRec_
      65    {
      66      AF_WidthRec  ref;
      67      AF_WidthRec  shoot; /* undershoot */
      68      FT_UInt      flags;
      69  
      70    } AF_CJKBlueRec, *AF_CJKBlue;
      71  
      72  
      73    typedef struct  AF_CJKAxisRec_
      74    {
      75      FT_Fixed       scale;
      76      FT_Pos         delta;
      77  
      78      FT_UInt        width_count;                   /* number of used widths */
      79      AF_WidthRec    widths[AF_CJK_MAX_WIDTHS];     /* widths array          */
      80      FT_Pos         edge_distance_threshold;     /* used for creating edges */
      81      FT_Pos         standard_width;           /* the default stem thickness */
      82      FT_Bool        extra_light;           /* is standard width very light? */
      83  
      84      /* used for horizontal metrics too for CJK */
      85      FT_Bool        control_overshoot;
      86      FT_UInt        blue_count;
      87      AF_CJKBlueRec  blues[AF_BLUE_STRINGSET_MAX];
      88  
      89      FT_Fixed       org_scale;
      90      FT_Pos         org_delta;
      91  
      92    } AF_CJKAxisRec, *AF_CJKAxis;
      93  
      94  
      95    typedef struct  AF_CJKMetricsRec_
      96    {
      97      AF_StyleMetricsRec  root;
      98      FT_UInt             units_per_em;
      99      AF_CJKAxisRec       axis[AF_DIMENSION_MAX];
     100  
     101    } AF_CJKMetricsRec, *AF_CJKMetrics;
     102  
     103  
     104  #ifdef AF_CONFIG_OPTION_CJK
     105    FT_LOCAL( FT_Error )
     106    af_cjk_metrics_init( AF_StyleMetrics  metrics,
     107                         FT_Face          face );
     108  
     109    FT_LOCAL( void )
     110    af_cjk_metrics_scale( AF_StyleMetrics  metrics,
     111                          AF_Scaler        scaler );
     112  
     113    FT_LOCAL( FT_Error )
     114    af_cjk_hints_init( AF_GlyphHints    hints,
     115                       AF_StyleMetrics  metrics );
     116  
     117    FT_LOCAL( FT_Error )
     118    af_cjk_hints_apply( FT_UInt          glyph_index,
     119                        AF_GlyphHints    hints,
     120                        FT_Outline*      outline,
     121                        AF_StyleMetrics  metrics );
     122  
     123    /* shared; called from afindic.c */
     124    FT_LOCAL( void )
     125    af_cjk_metrics_check_digits( AF_CJKMetrics  metrics,
     126                                 FT_Face        face );
     127  
     128    FT_LOCAL( void )
     129    af_cjk_metrics_init_widths( AF_CJKMetrics  metrics,
     130                                FT_Face        face );
     131  #endif /* AF_CONFIG_OPTION_CJK */
     132  
     133  
     134  /* */
     135  
     136  FT_END_HEADER
     137  
     138  #endif /* AFCJK_H_ */
     139  
     140  
     141  /* END */