tor-browser

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

afindic.c (4719B)


      1 /****************************************************************************
      2 *
      3 * afindic.c
      4 *
      5 *   Auto-fitter hinting routines for Indic writing system (body).
      6 *
      7 * Copyright (C) 2007-2025 by
      8 * Rahul Bhalerao <rahul.bhalerao@redhat.com>, <b.rahul.pm@gmail.com>.
      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 #include "aftypes.h"
     20 #include "aflatin.h"
     21 #include "afcjk.h"
     22 
     23 
     24 #ifdef AF_CONFIG_OPTION_INDIC
     25 
     26 #include "afindic.h"
     27 #include "aferrors.h"
     28 
     29 
     30  static FT_Error
     31  af_indic_metrics_init( AF_StyleMetrics  metrics_, /* AF_CJKMetrics */
     32                         FT_Face          face )
     33  {
     34    AF_CJKMetrics  metrics = (AF_CJKMetrics)metrics_;
     35 
     36 
     37    /* skip blue zone init in CJK routines */
     38    FT_CharMap  oldmap = face->charmap;
     39 
     40 
     41    metrics->units_per_em = face->units_per_EM;
     42 
     43    if ( FT_Select_Charmap( face, FT_ENCODING_UNICODE ) )
     44      face->charmap = NULL;
     45    else
     46    {
     47      af_cjk_metrics_init_widths( metrics, face );
     48 #if 0
     49      /* either need indic specific blue_chars[] or just skip blue zones */
     50      af_cjk_metrics_init_blues( metrics, face, af_cjk_blue_chars );
     51 #endif
     52      af_cjk_metrics_check_digits( metrics, face );
     53    }
     54 
     55    face->charmap = oldmap;
     56    return FT_Err_Ok;
     57  }
     58 
     59 
     60  static void
     61  af_indic_metrics_scale( AF_StyleMetrics  metrics,
     62                          AF_Scaler        scaler )
     63  {
     64    /* use CJK routines */
     65    af_cjk_metrics_scale( metrics, scaler );
     66  }
     67 
     68 
     69  static FT_Error
     70  af_indic_hints_init( AF_GlyphHints    hints,
     71                       AF_StyleMetrics  metrics )
     72  {
     73    /* use CJK routines */
     74    return af_cjk_hints_init( hints, metrics );
     75  }
     76 
     77 
     78  static FT_Error
     79  af_indic_hints_apply( FT_UInt          glyph_index,
     80                        AF_GlyphHints    hints,
     81                        FT_Outline*      outline,
     82                        AF_StyleMetrics  metrics )
     83  {
     84    /* use CJK routines */
     85    return af_cjk_hints_apply( glyph_index, hints, outline, metrics );
     86  }
     87 
     88 
     89  /* Extract standard_width from writing system/script specific */
     90  /* metrics class.                                             */
     91 
     92  static void
     93  af_indic_get_standard_widths( AF_StyleMetrics  metrics_, /* AF_CJKMetrics */
     94                                FT_Pos*          stdHW,
     95                                FT_Pos*          stdVW )
     96  {
     97    AF_CJKMetrics  metrics = (AF_CJKMetrics)metrics_;
     98 
     99 
    100    if ( stdHW )
    101      *stdHW = metrics->axis[AF_DIMENSION_VERT].standard_width;
    102 
    103    if ( stdVW )
    104      *stdVW = metrics->axis[AF_DIMENSION_HORZ].standard_width;
    105  }
    106 
    107 
    108  /*************************************************************************/
    109  /*************************************************************************/
    110  /*****                                                               *****/
    111  /*****                I N D I C   S C R I P T   C L A S S            *****/
    112  /*****                                                               *****/
    113  /*************************************************************************/
    114  /*************************************************************************/
    115 
    116 
    117  AF_DEFINE_WRITING_SYSTEM_CLASS(
    118    af_indic_writing_system_class,
    119 
    120    AF_WRITING_SYSTEM_INDIC,
    121 
    122    sizeof ( AF_CJKMetricsRec ),
    123 
    124    (AF_WritingSystem_InitMetricsFunc) af_indic_metrics_init,        /* style_metrics_init    */
    125    (AF_WritingSystem_ScaleMetricsFunc)af_indic_metrics_scale,       /* style_metrics_scale   */
    126    (AF_WritingSystem_DoneMetricsFunc) NULL,                         /* style_metrics_done    */
    127    (AF_WritingSystem_GetStdWidthsFunc)af_indic_get_standard_widths, /* style_metrics_getstdw */
    128 
    129    (AF_WritingSystem_InitHintsFunc)   af_indic_hints_init,          /* style_hints_init      */
    130    (AF_WritingSystem_ApplyHintsFunc)  af_indic_hints_apply          /* style_hints_apply     */
    131  )
    132 
    133 
    134 #else /* !AF_CONFIG_OPTION_INDIC */
    135 
    136 
    137  AF_DEFINE_WRITING_SYSTEM_CLASS(
    138    af_indic_writing_system_class,
    139 
    140    AF_WRITING_SYSTEM_INDIC,
    141 
    142    sizeof ( AF_CJKMetricsRec ),
    143 
    144    (AF_WritingSystem_InitMetricsFunc) NULL, /* style_metrics_init    */
    145    (AF_WritingSystem_ScaleMetricsFunc)NULL, /* style_metrics_scale   */
    146    (AF_WritingSystem_DoneMetricsFunc) NULL, /* style_metrics_done    */
    147    (AF_WritingSystem_GetStdWidthsFunc)NULL, /* style_metrics_getstdw */
    148 
    149    (AF_WritingSystem_InitHintsFunc)   NULL, /* style_hints_init      */
    150    (AF_WritingSystem_ApplyHintsFunc)  NULL  /* style_hints_apply     */
    151  )
    152 
    153 
    154 #endif /* !AF_CONFIG_OPTION_INDIC */
    155 
    156 
    157 /* END */