"Fossies" - the Fresh Open Source Software Archive

Member "SDL2_ttf-2.20.2/external/freetype/src/autofit/aflatin.h" (25 May 2022, 6784 Bytes) of package /linux/misc/SDL2_ttf-2.20.2.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "aflatin.h" see the Fossies "Dox" file reference documentation.

    1 /****************************************************************************
    2  *
    3  * aflatin.h
    4  *
    5  *   Auto-fitter hinting routines for latin writing system
    6  *   (specification).
    7  *
    8  * Copyright (C) 2003-2022 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 AFLATIN_H_
   21 #define AFLATIN_H_
   22 
   23 #include "afhints.h"
   24 
   25 
   26 FT_BEGIN_HEADER
   27 
   28   /* the `latin' writing system */
   29 
   30   AF_DECLARE_WRITING_SYSTEM_CLASS( af_latin_writing_system_class )
   31 
   32 
   33   /* constants are given with units_per_em == 2048 in mind */
   34 #define AF_LATIN_CONSTANT( metrics, c )                                      \
   35   ( ( (c) * (FT_Long)( (AF_LatinMetrics)(metrics) )->units_per_em ) / 2048 )
   36 
   37 
   38   /*************************************************************************/
   39   /*************************************************************************/
   40   /*****                                                               *****/
   41   /*****            L A T I N   G L O B A L   M E T R I C S            *****/
   42   /*****                                                               *****/
   43   /*************************************************************************/
   44   /*************************************************************************/
   45 
   46 
   47   /*
   48    * The following declarations could be embedded in the file `aflatin.c';
   49    * they have been made semi-public to allow alternate writing system
   50    * hinters to re-use some of them.
   51    */
   52 
   53 
   54 #define AF_LATIN_IS_TOP_BLUE( b ) \
   55           ( (b)->properties & AF_BLUE_PROPERTY_LATIN_TOP )
   56 #define AF_LATIN_IS_SUB_TOP_BLUE( b ) \
   57           ( (b)->properties & AF_BLUE_PROPERTY_LATIN_SUB_TOP )
   58 #define AF_LATIN_IS_NEUTRAL_BLUE( b ) \
   59           ( (b)->properties & AF_BLUE_PROPERTY_LATIN_NEUTRAL )
   60 #define AF_LATIN_IS_X_HEIGHT_BLUE( b ) \
   61           ( (b)->properties & AF_BLUE_PROPERTY_LATIN_X_HEIGHT )
   62 #define AF_LATIN_IS_LONG_BLUE( b ) \
   63           ( (b)->properties & AF_BLUE_PROPERTY_LATIN_LONG )
   64 
   65 #define AF_LATIN_MAX_WIDTHS  16
   66 
   67 
   68 #define AF_LATIN_BLUE_ACTIVE      ( 1U << 0 ) /* zone height is <= 3/4px   */
   69 #define AF_LATIN_BLUE_TOP         ( 1U << 1 ) /* we have a top blue zone   */
   70 #define AF_LATIN_BLUE_SUB_TOP     ( 1U << 2 ) /* we have a subscript top   */
   71                                               /* blue zone                 */
   72 #define AF_LATIN_BLUE_NEUTRAL     ( 1U << 3 ) /* we have neutral blue zone */
   73 #define AF_LATIN_BLUE_ADJUSTMENT  ( 1U << 4 ) /* used for scale adjustment */
   74                                               /* optimization              */
   75 
   76 
   77   typedef struct  AF_LatinBlueRec_
   78   {
   79     AF_WidthRec  ref;
   80     AF_WidthRec  shoot;
   81     FT_Pos       ascender;
   82     FT_Pos       descender;
   83     FT_UInt      flags;
   84 
   85   } AF_LatinBlueRec, *AF_LatinBlue;
   86 
   87 
   88   typedef struct  AF_LatinAxisRec_
   89   {
   90     FT_Fixed         scale;
   91     FT_Pos           delta;
   92 
   93     FT_UInt          width_count;                 /* number of used widths */
   94     AF_WidthRec      widths[AF_LATIN_MAX_WIDTHS]; /* widths array          */
   95     FT_Pos           edge_distance_threshold;   /* used for creating edges */
   96     FT_Pos           standard_width;         /* the default stem thickness */
   97     FT_Bool          extra_light;         /* is standard width very light? */
   98 
   99     /* ignored for horizontal metrics */
  100     FT_UInt          blue_count;
  101     AF_LatinBlueRec  blues[AF_BLUE_STRINGSET_MAX];
  102 
  103     FT_Fixed         org_scale;
  104     FT_Pos           org_delta;
  105 
  106   } AF_LatinAxisRec, *AF_LatinAxis;
  107 
  108 
  109   typedef struct  AF_LatinMetricsRec_
  110   {
  111     AF_StyleMetricsRec  root;
  112     FT_UInt             units_per_em;
  113     AF_LatinAxisRec     axis[AF_DIMENSION_MAX];
  114 
  115   } AF_LatinMetricsRec, *AF_LatinMetrics;
  116 
  117 
  118   FT_LOCAL( FT_Error )
  119   af_latin_metrics_init( AF_LatinMetrics  metrics,
  120                          FT_Face          face );
  121 
  122   FT_LOCAL( void )
  123   af_latin_metrics_scale( AF_LatinMetrics  metrics,
  124                           AF_Scaler        scaler );
  125 
  126   FT_LOCAL( void )
  127   af_latin_metrics_init_widths( AF_LatinMetrics  metrics,
  128                                 FT_Face          face );
  129 
  130   FT_LOCAL( void )
  131   af_latin_metrics_check_digits( AF_LatinMetrics  metrics,
  132                                  FT_Face          face );
  133 
  134 
  135   /*************************************************************************/
  136   /*************************************************************************/
  137   /*****                                                               *****/
  138   /*****           L A T I N   G L Y P H   A N A L Y S I S             *****/
  139   /*****                                                               *****/
  140   /*************************************************************************/
  141   /*************************************************************************/
  142 
  143 #define AF_LATIN_HINTS_HORZ_SNAP    ( 1U << 0 ) /* stem width snapping  */
  144 #define AF_LATIN_HINTS_VERT_SNAP    ( 1U << 1 ) /* stem height snapping */
  145 #define AF_LATIN_HINTS_STEM_ADJUST  ( 1U << 2 ) /* stem width/height    */
  146                                                 /* adjustment           */
  147 #define AF_LATIN_HINTS_MONO         ( 1U << 3 ) /* monochrome rendering */
  148 
  149 
  150 #define AF_LATIN_HINTS_DO_HORZ_SNAP( h )             \
  151   AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_HORZ_SNAP )
  152 
  153 #define AF_LATIN_HINTS_DO_VERT_SNAP( h )             \
  154   AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_VERT_SNAP )
  155 
  156 #define AF_LATIN_HINTS_DO_STEM_ADJUST( h )             \
  157   AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_STEM_ADJUST )
  158 
  159 #define AF_LATIN_HINTS_DO_MONO( h )             \
  160   AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_MONO )
  161 
  162 
  163   /*
  164    * The next functions shouldn't normally be exported.  However, other
  165    * writing systems might like to use these functions as-is.
  166    */
  167   FT_LOCAL( FT_Error )
  168   af_latin_hints_compute_segments( AF_GlyphHints  hints,
  169                                    AF_Dimension   dim );
  170 
  171   FT_LOCAL( void )
  172   af_latin_hints_link_segments( AF_GlyphHints  hints,
  173                                 FT_UInt        width_count,
  174                                 AF_WidthRec*   widths,
  175                                 AF_Dimension   dim );
  176 
  177   FT_LOCAL( FT_Error )
  178   af_latin_hints_compute_edges( AF_GlyphHints  hints,
  179                                 AF_Dimension   dim );
  180 
  181   FT_LOCAL( FT_Error )
  182   af_latin_hints_detect_features( AF_GlyphHints  hints,
  183                                   FT_UInt        width_count,
  184                                   AF_WidthRec*   widths,
  185                                   AF_Dimension   dim );
  186 
  187 /* */
  188 
  189 FT_END_HEADER
  190 
  191 #endif /* AFLATIN_H_ */
  192 
  193 
  194 /* END */