1 /***************************************************************************/ 2 /* */ 3 /* afindic.c */ 4 /* */ 5 /* Auto-fitter hinting routines for Indic scripts (body). */ 6 /* */ 7 /* Copyright 2007, 2011 by */ 8 /* Rahul Bhalerao <rahul.bhalerao@redhat.com>, <b.rahul.pm@gmail.com>. */ 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 #include "aftypes.h" 20 #include "aflatin.h" 21 22 23 #ifdef AF_CONFIG_OPTION_INDIC 24 25 #include "afindic.h" 26 #include "aferrors.h" 27 #include "afcjk.h" 28 29 30 #ifdef AF_CONFIG_OPTION_USE_WARPER 31 #include "afwarp.h" 32 #endif 33 34 35 static FT_Error af_indic_metrics_init(AF_CJKMetrics metrics,FT_Face face)36 af_indic_metrics_init( AF_CJKMetrics metrics, 37 FT_Face face ) 38 { 39 /* skip blue zone init in CJK routines */ 40 FT_CharMap oldmap = face->charmap; 41 42 43 metrics->units_per_em = face->units_per_EM; 44 45 if ( FT_Select_Charmap( face, FT_ENCODING_UNICODE ) ) 46 face->charmap = NULL; 47 else 48 { 49 af_cjk_metrics_init_widths( metrics, face, 0x7530 ); 50 #if 0 51 /* either need indic specific blue_chars[] or just skip blue zones */ 52 af_cjk_metrics_init_blues( metrics, face, af_cjk_blue_chars ); 53 #endif 54 af_cjk_metrics_check_digits( metrics, face ); 55 } 56 57 FT_Set_Charmap( face, oldmap ); 58 59 return AF_Err_Ok; 60 } 61 62 63 static void af_indic_metrics_scale(AF_CJKMetrics metrics,AF_Scaler scaler)64 af_indic_metrics_scale( AF_CJKMetrics metrics, 65 AF_Scaler scaler ) 66 { 67 /* use CJK routines */ 68 af_cjk_metrics_scale( metrics, scaler ); 69 } 70 71 72 static FT_Error af_indic_hints_init(AF_GlyphHints hints,AF_CJKMetrics metrics)73 af_indic_hints_init( AF_GlyphHints hints, 74 AF_CJKMetrics metrics ) 75 { 76 /* use CJK routines */ 77 return af_cjk_hints_init( hints, metrics ); 78 } 79 80 81 static FT_Error af_indic_hints_apply(AF_GlyphHints hints,FT_Outline * outline,AF_CJKMetrics metrics)82 af_indic_hints_apply( AF_GlyphHints hints, 83 FT_Outline* outline, 84 AF_CJKMetrics metrics ) 85 { 86 /* use CJK routines */ 87 return af_cjk_hints_apply( hints, outline, metrics ); 88 } 89 90 91 /*************************************************************************/ 92 /*************************************************************************/ 93 /***** *****/ 94 /***** I N D I C S C R I P T C L A S S *****/ 95 /***** *****/ 96 /*************************************************************************/ 97 /*************************************************************************/ 98 99 100 static const AF_Script_UniRangeRec af_indic_uniranges[] = 101 { 102 #if 0 103 AF_UNIRANGE_REC( 0x0100UL, 0xFFFFUL ), /* why this? */ 104 #endif 105 AF_UNIRANGE_REC( 0x0900UL, 0x0DFFUL), /* Indic Range */ 106 AF_UNIRANGE_REC( 0x0F00UL, 0x0FFFUL), /* Tibetan */ 107 AF_UNIRANGE_REC( 0x1900UL, 0x194FUL), /* Limbu */ 108 AF_UNIRANGE_REC( 0x1B80UL, 0x1BBFUL), /* Sundanese */ 109 AF_UNIRANGE_REC( 0x1C80UL, 0x1CDFUL), /* Meetei Mayak */ 110 AF_UNIRANGE_REC( 0xA800UL, 0xA82FUL), /* Syloti Nagri */ 111 AF_UNIRANGE_REC( 0x11800UL, 0x118DFUL), /* Sharada */ 112 AF_UNIRANGE_REC( 0UL, 0UL) 113 }; 114 115 116 AF_DEFINE_SCRIPT_CLASS( af_indic_script_class, 117 AF_SCRIPT_INDIC, 118 af_indic_uniranges, 119 120 sizeof ( AF_CJKMetricsRec ), 121 122 (AF_Script_InitMetricsFunc) af_indic_metrics_init, 123 (AF_Script_ScaleMetricsFunc)af_indic_metrics_scale, 124 (AF_Script_DoneMetricsFunc) NULL, 125 126 (AF_Script_InitHintsFunc) af_indic_hints_init, 127 (AF_Script_ApplyHintsFunc) af_indic_hints_apply 128 ) 129 130 #else /* !AF_CONFIG_OPTION_INDIC */ 131 132 static const AF_Script_UniRangeRec af_indic_uniranges[] = 133 { 134 { 0, 0 } 135 }; 136 137 138 AF_DEFINE_SCRIPT_CLASS( af_indic_script_class, 139 AF_SCRIPT_INDIC, 140 af_indic_uniranges, 141 142 sizeof ( AF_CJKMetricsRec ), 143 144 (AF_Script_InitMetricsFunc) NULL, 145 (AF_Script_ScaleMetricsFunc)NULL, 146 (AF_Script_DoneMetricsFunc) NULL, 147 148 (AF_Script_InitHintsFunc) NULL, 149 (AF_Script_ApplyHintsFunc) NULL 150 ) 151 152 #endif /* !AF_CONFIG_OPTION_INDIC */ 153 154 155 /* END */ 156