blob: 8416c0d0214b210744a0951727c0ec2888e876d9 [file] [log] [blame]
Wu, Chia-I (吳佳一)4cdb45c2006-02-09 14:17:04 +00001/***************************************************************************/
2/* */
3/* afcjk.h */
4/* */
5/* Auto-fitter hinting routines for CJK script (specification). */
6/* */
Werner Lemberg27b20e92011-05-09 09:48:49 +02007/* Copyright 2006, 2007, 2011 by */
Wu, Chia-I (吳佳一)4cdb45c2006-02-09 14:17:04 +00008/* 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"
suzuki toshiya084abf02011-05-08 19:07:13 +090023#include "aflatin.h"
Wu, Chia-I (吳佳一)4cdb45c2006-02-09 14:17:04 +000024
25
26FT_BEGIN_HEADER
27
28
29 /* the CJK-specific script class */
30
Oran Agra59b4af82009-04-05 18:23:38 +030031 AF_DECLARE_SCRIPT_CLASS(af_cjk_script_class)
Wu, Chia-I (吳佳一)4cdb45c2006-02-09 14:17:04 +000032
suzuki toshiya084abf02011-05-08 19:07:13 +090033 /* CJK (global) metrics management */
34
35 /*
Werner Lemberg27b20e92011-05-09 09:48:49 +020036 * 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.
suzuki toshiya084abf02011-05-08 19:07:13 +090039 */
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 */
Werner Lemberg27b20e92011-05-09 09:48:49 +020061 /* optimization */
suzuki toshiya084abf02011-05-08 19:07:13 +090062 AF_CJK_BLUE_FLAG_MAX
63 };
64
Werner Lemberg27b20e92011-05-09 09:48:49 +020065
suzuki toshiya084abf02011-05-08 19:07:13 +090066 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
Werner Lemberg27b20e92011-05-09 09:48:49 +020074
suzuki toshiya084abf02011-05-08 19:07:13 +090075 typedef struct AF_CJKAxisRec_
76 {
Werner Lemberg27b20e92011-05-09 09:48:49 +020077 FT_Fixed scale;
78 FT_Pos delta;
suzuki toshiya084abf02011-05-08 19:07:13 +090079
Werner Lemberg27b20e92011-05-09 09:48:49 +020080 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;
suzuki toshiya084abf02011-05-08 19:07:13 +090085
86 /* used for horizontal metrics too for CJK */
Werner Lemberg27b20e92011-05-09 09:48:49 +020087 FT_Bool control_overshoot;
88 FT_UInt blue_count;
89 AF_CJKBlueRec blues[AF_CJK_BLUE_MAX];
suzuki toshiya084abf02011-05-08 19:07:13 +090090
Werner Lemberg27b20e92011-05-09 09:48:49 +020091 FT_Fixed org_scale;
92 FT_Pos org_delta;
suzuki toshiya084abf02011-05-08 19:07:13 +090093
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;
Wu, Chia-I (吳佳一)4cdb45c2006-02-09 14:17:04 +0000104
Werner Lemberg27b20e92011-05-09 09:48:49 +0200105
Werner Lemberg1e1b6df2007-07-07 07:30:40 +0000106 FT_LOCAL( FT_Error )
Werner Lemberg27b20e92011-05-09 09:48:49 +0200107 af_cjk_metrics_init( AF_CJKMetrics metrics,
108 FT_Face face );
Werner Lemberg1e1b6df2007-07-07 07:30:40 +0000109
110 FT_LOCAL( void )
Werner Lemberg27b20e92011-05-09 09:48:49 +0200111 af_cjk_metrics_scale( AF_CJKMetrics metrics,
112 AF_Scaler scaler );
Werner Lemberg1e1b6df2007-07-07 07:30:40 +0000113
114 FT_LOCAL( FT_Error )
Werner Lemberg27b20e92011-05-09 09:48:49 +0200115 af_cjk_hints_init( AF_GlyphHints hints,
116 AF_CJKMetrics metrics );
Werner Lemberg1e1b6df2007-07-07 07:30:40 +0000117
118 FT_LOCAL( FT_Error )
Werner Lemberg27b20e92011-05-09 09:48:49 +0200119 af_cjk_hints_apply( AF_GlyphHints hints,
120 FT_Outline* outline,
121 AF_CJKMetrics metrics );
suzuki toshiya084abf02011-05-08 19:07:13 +0900122
123 /* Shared. called from afindic.c */
124 FT_LOCAL( void )
125 af_cjk_metrics_check_digits( AF_CJKMetrics metrics,
126 FT_Face face );
127
128 FT_LOCAL( void )
129 af_cjk_metrics_init_widths( AF_CJKMetrics metrics,
130 FT_Face face,
131 FT_ULong charcode );
132
Werner Lemberg1e1b6df2007-07-07 07:30:40 +0000133
Wu, Chia-I (吳佳一)4cdb45c2006-02-09 14:17:04 +0000134/* */
135
136FT_END_HEADER
137
138#endif /* __AFCJK_H__ */
139
140
141/* END */