1 /***************************************************************************/ 2 /* */ 3 /* afcjk.h */ 4 /* */ 5 /* Auto-fitter hinting routines for CJK script (specification). */ 6 /* */ 7 /* Copyright 2006, 2007, 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 __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 FT_LOCAL( FT_Error ) 107 af_cjk_metrics_init( AF_CJKMetrics metrics, 108 FT_Face face ); 109 110 FT_LOCAL( void ) 111 af_cjk_metrics_scale( AF_CJKMetrics metrics, 112 AF_Scaler scaler ); 113 114 FT_LOCAL( FT_Error ) 115 af_cjk_hints_init( AF_GlyphHints hints, 116 AF_CJKMetrics metrics ); 117 118 FT_LOCAL( FT_Error ) 119 af_cjk_hints_apply( AF_GlyphHints hints, 120 FT_Outline* outline, 121 AF_CJKMetrics metrics ); 122 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 133 134 /* */ 135 136 FT_END_HEADER 137 138 #endif /* __AFCJK_H__ */ 139 140 141 /* END */ 142