misc/libfreetype/src/autofit/aflatin.h
changeset 9431 0f5961910e27
parent 9357 a501f5ec7b34
parent 9429 7a97a554ac80
child 9433 f0a8ac191839
equal deleted inserted replaced
9357:a501f5ec7b34 9431:0f5961910e27
     1 /***************************************************************************/
       
     2 /*                                                                         */
       
     3 /*  aflatin.h                                                              */
       
     4 /*                                                                         */
       
     5 /*    Auto-fitter hinting routines for latin script (specification).       */
       
     6 /*                                                                         */
       
     7 /*  Copyright 2003-2007, 2009, 2011 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 __AFLATIN_H__
       
    20 #define __AFLATIN_H__
       
    21 
       
    22 #include "afhints.h"
       
    23 
       
    24 
       
    25 FT_BEGIN_HEADER
       
    26 
       
    27 
       
    28   /* the latin-specific script class */
       
    29 
       
    30   AF_DECLARE_SCRIPT_CLASS(af_latin_script_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 script hinters to
       
    50    *  re-use some of them.
       
    51    */
       
    52 
       
    53 
       
    54   /* Latin (global) metrics management */
       
    55 
       
    56   enum
       
    57   {
       
    58     AF_LATIN_BLUE_CAPITAL_TOP,
       
    59     AF_LATIN_BLUE_CAPITAL_BOTTOM,
       
    60     AF_LATIN_BLUE_SMALL_F_TOP,
       
    61     AF_LATIN_BLUE_SMALL_TOP,
       
    62     AF_LATIN_BLUE_SMALL_BOTTOM,
       
    63     AF_LATIN_BLUE_SMALL_MINOR,
       
    64 
       
    65     AF_LATIN_BLUE_MAX
       
    66   };
       
    67 
       
    68 
       
    69 #define AF_LATIN_IS_TOP_BLUE( b )  ( (b) == AF_LATIN_BLUE_CAPITAL_TOP || \
       
    70                                      (b) == AF_LATIN_BLUE_SMALL_F_TOP || \
       
    71                                      (b) == AF_LATIN_BLUE_SMALL_TOP   )
       
    72 
       
    73 #define AF_LATIN_MAX_WIDTHS  16
       
    74 #define AF_LATIN_MAX_BLUES   AF_LATIN_BLUE_MAX
       
    75 
       
    76 
       
    77   enum
       
    78   {
       
    79     AF_LATIN_BLUE_ACTIVE     = 1 << 0,  /* set if zone height is <= 3/4px */
       
    80     AF_LATIN_BLUE_TOP        = 1 << 1,  /* result of AF_LATIN_IS_TOP_BLUE */
       
    81     AF_LATIN_BLUE_ADJUSTMENT = 1 << 2,  /* used for scale adjustment      */
       
    82                                         /* optimization                   */
       
    83     AF_LATIN_BLUE_FLAG_MAX
       
    84   };
       
    85 
       
    86 
       
    87   typedef struct  AF_LatinBlueRec_
       
    88   {
       
    89     AF_WidthRec  ref;
       
    90     AF_WidthRec  shoot;
       
    91     FT_UInt      flags;
       
    92 
       
    93   } AF_LatinBlueRec, *AF_LatinBlue;
       
    94 
       
    95 
       
    96   typedef struct  AF_LatinAxisRec_
       
    97   {
       
    98     FT_Fixed         scale;
       
    99     FT_Pos           delta;
       
   100 
       
   101     FT_UInt          width_count;                 /* number of used widths */
       
   102     AF_WidthRec      widths[AF_LATIN_MAX_WIDTHS]; /* widths array          */
       
   103     FT_Pos           edge_distance_threshold;   /* used for creating edges */
       
   104     FT_Pos           standard_width;         /* the default stem thickness */
       
   105     FT_Bool          extra_light;         /* is standard width very light? */
       
   106 
       
   107     /* ignored for horizontal metrics */
       
   108     FT_Bool          control_overshoot;
       
   109     FT_UInt          blue_count;
       
   110     AF_LatinBlueRec  blues[AF_LATIN_BLUE_MAX];
       
   111 
       
   112     FT_Fixed         org_scale;
       
   113     FT_Pos           org_delta;
       
   114 
       
   115   } AF_LatinAxisRec, *AF_LatinAxis;
       
   116 
       
   117 
       
   118   typedef struct  AF_LatinMetricsRec_
       
   119   {
       
   120     AF_ScriptMetricsRec  root;
       
   121     FT_UInt              units_per_em;
       
   122     AF_LatinAxisRec      axis[AF_DIMENSION_MAX];
       
   123 
       
   124   } AF_LatinMetricsRec, *AF_LatinMetrics;
       
   125 
       
   126 
       
   127   FT_LOCAL( FT_Error )
       
   128   af_latin_metrics_init( AF_LatinMetrics  metrics,
       
   129                          FT_Face          face );
       
   130 
       
   131   FT_LOCAL( void )
       
   132   af_latin_metrics_scale( AF_LatinMetrics  metrics,
       
   133                           AF_Scaler        scaler );
       
   134 
       
   135   FT_LOCAL( void )
       
   136   af_latin_metrics_init_widths( AF_LatinMetrics  metrics,
       
   137                                 FT_Face          face,
       
   138                                 FT_ULong         charcode );
       
   139 
       
   140   FT_LOCAL( void )
       
   141   af_latin_metrics_check_digits( AF_LatinMetrics  metrics,
       
   142                                  FT_Face          face );
       
   143 
       
   144 
       
   145   /*************************************************************************/
       
   146   /*************************************************************************/
       
   147   /*****                                                               *****/
       
   148   /*****           L A T I N   G L Y P H   A N A L Y S I S             *****/
       
   149   /*****                                                               *****/
       
   150   /*************************************************************************/
       
   151   /*************************************************************************/
       
   152 
       
   153   enum
       
   154   {
       
   155     AF_LATIN_HINTS_HORZ_SNAP   = 1 << 0, /* enable stem width snapping  */
       
   156     AF_LATIN_HINTS_VERT_SNAP   = 1 << 1, /* enable stem height snapping */
       
   157     AF_LATIN_HINTS_STEM_ADJUST = 1 << 2, /* enable stem width/height    */
       
   158                                          /* adjustment                  */
       
   159     AF_LATIN_HINTS_MONO        = 1 << 3  /* indicate monochrome         */
       
   160                                          /* rendering                   */
       
   161   };
       
   162 
       
   163 
       
   164 #define AF_LATIN_HINTS_DO_HORZ_SNAP( h )             \
       
   165   AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_HORZ_SNAP )
       
   166 
       
   167 #define AF_LATIN_HINTS_DO_VERT_SNAP( h )             \
       
   168   AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_VERT_SNAP )
       
   169 
       
   170 #define AF_LATIN_HINTS_DO_STEM_ADJUST( h )             \
       
   171   AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_STEM_ADJUST )
       
   172 
       
   173 #define AF_LATIN_HINTS_DO_MONO( h )             \
       
   174   AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_MONO )
       
   175 
       
   176 
       
   177   /*
       
   178    *  This shouldn't normally be exported.  However, other scripts might
       
   179    *  like to use this function as-is.
       
   180    */
       
   181   FT_LOCAL( FT_Error )
       
   182   af_latin_hints_compute_segments( AF_GlyphHints  hints,
       
   183                                    AF_Dimension   dim );
       
   184 
       
   185   /*
       
   186    *  This shouldn't normally be exported.  However, other scripts might
       
   187    *  want to use this function as-is.
       
   188    */
       
   189   FT_LOCAL( void )
       
   190   af_latin_hints_link_segments( AF_GlyphHints  hints,
       
   191                                 AF_Dimension   dim );
       
   192 
       
   193   /*
       
   194    *  This shouldn't normally be exported.  However, other scripts might
       
   195    *  want to use this function as-is.
       
   196    */
       
   197   FT_LOCAL( FT_Error )
       
   198   af_latin_hints_compute_edges( AF_GlyphHints  hints,
       
   199                                 AF_Dimension   dim );
       
   200 
       
   201   FT_LOCAL( FT_Error )
       
   202   af_latin_hints_detect_features( AF_GlyphHints  hints,
       
   203                                   AF_Dimension   dim );
       
   204 
       
   205 /* */
       
   206 
       
   207 FT_END_HEADER
       
   208 
       
   209 #endif /* __AFLATIN_H__ */
       
   210 
       
   211 
       
   212 /* END */