Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4349 Serge 1
/***************************************************************************/
2
/*                                                                         */
3
/*  afcjk.h                                                                */
4
/*                                                                         */
5
/*    Auto-fitter hinting routines for CJK script (specification).         */
6
/*                                                                         */
7
/*  Copyright 2006, 2007, 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 __AFCJK_H__
20
#define __AFCJK_H__
21
 
22
#include "afhints.h"
23
#include "aflatin.h"
24
 
25
 
26
FT_BEGIN_HEADER
27
 
28
 
29
  /* the CJK-specific script class */
30
 
31
  AF_DECLARE_SCRIPT_CLASS( af_cjk_script_class )
32
 
33
  /* CJK (global) metrics management */
34
 
35
  /*
36
   *  CJK glyphs tend to fill the square.  So we have both vertical and
37
   *  horizontal blue zones.  But some glyphs have flat bounding strokes that
38
   *  leave some space between neighbour glyphs.
39
   */
40
  enum
41
  {
42
    AF_CJK_BLUE_TOP,
43
    AF_CJK_BLUE_BOTTOM,
44
    AF_CJK_BLUE_LEFT,
45
    AF_CJK_BLUE_RIGHT,
46
 
47
    AF_CJK_BLUE_MAX
48
  };
49
 
50
 
51
#define AF_CJK_MAX_WIDTHS  16
52
#define AF_CJK_MAX_BLUES   AF_CJK_BLUE_MAX
53
 
54
 
55
  enum
56
  {
57
    AF_CJK_BLUE_ACTIVE     = 1 << 0,
58
    AF_CJK_BLUE_IS_TOP     = 1 << 1,
59
    AF_CJK_BLUE_IS_RIGHT   = 1 << 2,
60
    AF_CJK_BLUE_ADJUSTMENT = 1 << 3,  /* used for scale adjustment */
61
                                      /* optimization              */
62
    AF_CJK_BLUE_FLAG_MAX
63
  };
64
 
65
 
66
  typedef struct  AF_CJKBlueRec_
67
  {
68
    AF_WidthRec  ref;
69
    AF_WidthRec  shoot; /* undershoot */
70
    FT_UInt      flags;
71
 
72
  } AF_CJKBlueRec, *AF_CJKBlue;
73
 
74
 
75
  typedef struct  AF_CJKAxisRec_
76
  {
77
    FT_Fixed       scale;
78
    FT_Pos         delta;
79
 
80
    FT_UInt        width_count;
81
    AF_WidthRec    widths[AF_CJK_MAX_WIDTHS];
82
    FT_Pos         edge_distance_threshold;
83
    FT_Pos         standard_width;
84
    FT_Bool        extra_light;
85
 
86
    /* used for horizontal metrics too for CJK */
87
    FT_Bool        control_overshoot;
88
    FT_UInt        blue_count;
89
    AF_CJKBlueRec  blues[AF_CJK_BLUE_MAX];
90
 
91
    FT_Fixed       org_scale;
92
    FT_Pos         org_delta;
93
 
94
  } AF_CJKAxisRec, *AF_CJKAxis;
95
 
96
 
97
  typedef struct  AF_CJKMetricsRec_
98
  {
99
    AF_ScriptMetricsRec  root;
100
    FT_UInt              units_per_em;
101
    AF_CJKAxisRec        axis[AF_DIMENSION_MAX];
102
 
103
  } AF_CJKMetricsRec, *AF_CJKMetrics;
104
 
105
 
106
#ifdef AF_CONFIG_OPTION_CJK
107
  FT_LOCAL( FT_Error )
108
  af_cjk_metrics_init( AF_CJKMetrics  metrics,
109
                       FT_Face        face );
110
 
111
  FT_LOCAL( void )
112
  af_cjk_metrics_scale( AF_CJKMetrics  metrics,
113
                        AF_Scaler      scaler );
114
 
115
  FT_LOCAL( FT_Error )
116
  af_cjk_hints_init( AF_GlyphHints  hints,
117
                     AF_CJKMetrics  metrics );
118
 
119
  FT_LOCAL( FT_Error )
120
  af_cjk_hints_apply( AF_GlyphHints  hints,
121
                      FT_Outline*    outline,
122
                      AF_CJKMetrics  metrics );
123
 
124
  /* shared; called from afindic.c */
125
  FT_LOCAL( void )
126
  af_cjk_metrics_check_digits( AF_CJKMetrics  metrics,
127
                               FT_Face        face );
128
 
129
  FT_LOCAL( void )
130
  af_cjk_metrics_init_widths( AF_CJKMetrics  metrics,
131
                              FT_Face        face );
132
#endif /* AF_CONFIG_OPTION_CJK */
133
 
134
 
135
/* */
136
 
137
FT_END_HEADER
138
 
139
#endif /* __AFCJK_H__ */
140
 
141
 
142
/* END */