Hash :
94f1227f
        
        Author :
  
        
        Date :
2007-04-03T07:19:53
        
      
formatting; improved ChangeLog entries
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209
/***************************************************************************/
/*                                                                         */
/*  aflatin.h                                                              */
/*                                                                         */
/*    Auto-fitter hinting routines for latin script (specification).       */
/*                                                                         */
/*  Copyright 2003, 2004, 2005, 2006, 2007 by                              */
/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
/*                                                                         */
/*  This file is part of the FreeType project, and may only be used,       */
/*  modified, and distributed under the terms of the FreeType project      */
/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
/*  this file you indicate that you have read the license and              */
/*  understand and accept it fully.                                        */
/*                                                                         */
/***************************************************************************/
#ifndef __AFLATIN_H__
#define __AFLATIN_H__
#include "afhints.h"
FT_BEGIN_HEADER
  /* the latin-specific script class */
  FT_CALLBACK_TABLE const AF_ScriptClassRec
  af_latin_script_class;
/* constants are given with units_per_em == 2048 in mind */
#define AF_LATIN_CONSTANT( metrics, c ) \
  ( ( (c) * (FT_Long)( (AF_LatinMetrics)(metrics) )->units_per_em ) / 2048 )
  /*************************************************************************/
  /*************************************************************************/
  /*****                                                               *****/
  /*****            L A T I N   G L O B A L   M E T R I C S            *****/
  /*****                                                               *****/
  /*************************************************************************/
  /*************************************************************************/
  /*
   *  The following declarations could be embedded in the file `aflatin.c';
   *  they have been made semi-public to allow alternate script hinters to
   *  re-use some of them.
   */
  /* Latin (global) metrics management */
  enum
  {
    AF_LATIN_BLUE_CAPITAL_TOP,
    AF_LATIN_BLUE_CAPITAL_BOTTOM,
    AF_LATIN_BLUE_SMALL_F_TOP,
    AF_LATIN_BLUE_SMALL_TOP,
    AF_LATIN_BLUE_SMALL_BOTTOM,
    AF_LATIN_BLUE_SMALL_MINOR,
    AF_LATIN_BLUE_MAX
  };
#define AF_LATIN_IS_TOP_BLUE( b )  ( (b) == AF_LATIN_BLUE_CAPITAL_TOP || \
                                     (b) == AF_LATIN_BLUE_SMALL_F_TOP || \
                                     (b) == AF_LATIN_BLUE_SMALL_TOP   )
#define AF_LATIN_MAX_WIDTHS  16
#define AF_LATIN_MAX_BLUES   AF_LATIN_BLUE_MAX
  enum
  {
    AF_LATIN_BLUE_ACTIVE     = 1 << 0,
    AF_LATIN_BLUE_TOP        = 1 << 1,
    AF_LATIN_BLUE_ADJUSTMENT = 1 << 2,  /* used for scale adjustment */
                                        /* optimization              */
    AF_LATIN_BLUE_FLAG_MAX
  };
  typedef struct  AF_LatinBlueRec_
  {
    AF_WidthRec  ref;
    AF_WidthRec  shoot;
    FT_UInt      flags;
  } AF_LatinBlueRec, *AF_LatinBlue;
  typedef struct  AF_LatinAxisRec_
  {
    FT_Fixed         scale;
    FT_Pos           delta;
    FT_UInt          width_count;
    AF_WidthRec      widths[AF_LATIN_MAX_WIDTHS];
    FT_Pos           edge_distance_threshold;
    FT_Pos           standard_width;
    FT_Bool          extra_light;
    /* ignored for horizontal metrics */
    FT_Bool          control_overshoot;
    FT_UInt          blue_count;
    AF_LatinBlueRec  blues[AF_LATIN_BLUE_MAX];
    FT_Fixed         org_scale;
    FT_Pos           org_delta;
  } AF_LatinAxisRec, *AF_LatinAxis;
  typedef struct  AF_LatinMetricsRec_
  {
    AF_ScriptMetricsRec  root;
    FT_UInt              units_per_em;
    AF_LatinAxisRec      axis[AF_DIMENSION_MAX];
  } AF_LatinMetricsRec, *AF_LatinMetrics;
  FT_LOCAL( FT_Error )
  af_latin_metrics_init( AF_LatinMetrics  metrics,
                         FT_Face          face );
  FT_LOCAL( void )
  af_latin_metrics_scale( AF_LatinMetrics  metrics,
                          AF_Scaler        scaler );
  FT_LOCAL( void )
  af_latin_metrics_init_widths( AF_LatinMetrics  metrics,
                                FT_Face          face,
                                FT_ULong         charcode );
  /*************************************************************************/
  /*************************************************************************/
  /*****                                                               *****/
  /*****           L A T I N   G L Y P H   A N A L Y S I S             *****/
  /*****                                                               *****/
  /*************************************************************************/
  /*************************************************************************/
  enum
  {
    AF_LATIN_HINTS_HORZ_SNAP   = 1 << 0, /* enable stem width snapping  */
    AF_LATIN_HINTS_VERT_SNAP   = 1 << 1, /* enable stem height snapping */
    AF_LATIN_HINTS_STEM_ADJUST = 1 << 2, /* enable stem width/height    */
                                         /* adjustment                  */
    AF_LATIN_HINTS_MONO        = 1 << 3  /* indicate monochrome         */
                                         /* rendering                   */
  };
#define AF_LATIN_HINTS_DO_HORZ_SNAP( h )             \
  AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_HORZ_SNAP )
#define AF_LATIN_HINTS_DO_VERT_SNAP( h )             \
  AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_VERT_SNAP )
#define AF_LATIN_HINTS_DO_STEM_ADJUST( h )             \
  AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_STEM_ADJUST )
#define AF_LATIN_HINTS_DO_MONO( h )             \
  AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_MONO )
  /*
   *  This shouldn't normally be exported.  However, other scripts might
   *  like to use this function as-is.
   */
  FT_LOCAL( FT_Error )
  af_latin_hints_compute_segments( AF_GlyphHints  hints,
                                   AF_Dimension   dim );
  /*
   *  This shouldn't normally be exported.  However, other scripts might
   *  want to use this function as-is.
   */
  FT_LOCAL( void )
  af_latin_hints_link_segments( AF_GlyphHints  hints,
                                AF_Dimension   dim );
  /*
   *  This shouldn't normally be exported.  However, other scripts might
   *  want to use this function as-is.
   */
  FT_LOCAL( FT_Error )
  af_latin_hints_compute_edges( AF_GlyphHints  hints,
                                AF_Dimension   dim );
  FT_LOCAL( FT_Error )
  af_latin_hints_detect_features( AF_GlyphHints  hints,
                                  AF_Dimension   dim );
/* */
FT_END_HEADER
#endif /* __AFLATIN_H__ */
/* END */