Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /***************************************************************************/
  2. /*                                                                         */
  3. /*  aflatin.h                                                              */
  4. /*                                                                         */
  5. /*    Auto-fitter hinting routines for latin script (specification).       */
  6. /*                                                                         */
  7. /*  Copyright 2003-2007, 2009, 2011-2012 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_UInt          blue_count;
  109.     AF_LatinBlueRec  blues[AF_LATIN_BLUE_MAX];
  110.  
  111.     FT_Fixed         org_scale;
  112.     FT_Pos           org_delta;
  113.  
  114.   } AF_LatinAxisRec, *AF_LatinAxis;
  115.  
  116.  
  117.   typedef struct  AF_LatinMetricsRec_
  118.   {
  119.     AF_ScriptMetricsRec  root;
  120.     FT_UInt              units_per_em;
  121.     AF_LatinAxisRec      axis[AF_DIMENSION_MAX];
  122.  
  123.   } AF_LatinMetricsRec, *AF_LatinMetrics;
  124.  
  125.  
  126.   FT_LOCAL( FT_Error )
  127.   af_latin_metrics_init( AF_LatinMetrics  metrics,
  128.                          FT_Face          face );
  129.  
  130.   FT_LOCAL( void )
  131.   af_latin_metrics_scale( AF_LatinMetrics  metrics,
  132.                           AF_Scaler        scaler );
  133.  
  134.   FT_LOCAL( void )
  135.   af_latin_metrics_init_widths( AF_LatinMetrics  metrics,
  136.                                 FT_Face          face );
  137.  
  138.   FT_LOCAL( void )
  139.   af_latin_metrics_check_digits( AF_LatinMetrics  metrics,
  140.                                  FT_Face          face );
  141.  
  142.  
  143.   /*************************************************************************/
  144.   /*************************************************************************/
  145.   /*****                                                               *****/
  146.   /*****           L A T I N   G L Y P H   A N A L Y S I S             *****/
  147.   /*****                                                               *****/
  148.   /*************************************************************************/
  149.   /*************************************************************************/
  150.  
  151.   enum
  152.   {
  153.     AF_LATIN_HINTS_HORZ_SNAP   = 1 << 0, /* enable stem width snapping  */
  154.     AF_LATIN_HINTS_VERT_SNAP   = 1 << 1, /* enable stem height snapping */
  155.     AF_LATIN_HINTS_STEM_ADJUST = 1 << 2, /* enable stem width/height    */
  156.                                          /* adjustment                  */
  157.     AF_LATIN_HINTS_MONO        = 1 << 3  /* indicate monochrome         */
  158.                                          /* rendering                   */
  159.   };
  160.  
  161.  
  162. #define AF_LATIN_HINTS_DO_HORZ_SNAP( h )             \
  163.   AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_HORZ_SNAP )
  164.  
  165. #define AF_LATIN_HINTS_DO_VERT_SNAP( h )             \
  166.   AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_VERT_SNAP )
  167.  
  168. #define AF_LATIN_HINTS_DO_STEM_ADJUST( h )             \
  169.   AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_STEM_ADJUST )
  170.  
  171. #define AF_LATIN_HINTS_DO_MONO( h )             \
  172.   AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_MONO )
  173.  
  174.  
  175.   /*
  176.    *  The next functions shouldn't normally be exported.  However, other
  177.    *  scripts might like to use these functions as-is.
  178.    */
  179.   FT_LOCAL( FT_Error )
  180.   af_latin_hints_compute_segments( AF_GlyphHints  hints,
  181.                                    AF_Dimension   dim );
  182.  
  183.   FT_LOCAL( void )
  184.   af_latin_hints_link_segments( AF_GlyphHints  hints,
  185.                                 AF_Dimension   dim );
  186.  
  187.   FT_LOCAL( FT_Error )
  188.   af_latin_hints_compute_edges( AF_GlyphHints  hints,
  189.                                 AF_Dimension   dim );
  190.  
  191.   FT_LOCAL( FT_Error )
  192.   af_latin_hints_detect_features( AF_GlyphHints  hints,
  193.                                   AF_Dimension   dim );
  194.  
  195. /* */
  196.  
  197. FT_END_HEADER
  198.  
  199. #endif /* __AFLATIN_H__ */
  200.  
  201.  
  202. /* END */
  203.