tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

afcjk.h (4215B)


      1 /****************************************************************************
      2 *
      3 * afcjk.h
      4 *
      5 *   Auto-fitter hinting routines for CJK writing system (specification).
      6 *
      7 * Copyright (C) 2006-2025 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_LEN];
     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 */