1*37da2899SCharles.Forsyth /***************************************************************************/ 2*37da2899SCharles.Forsyth /* */ 3*37da2899SCharles.Forsyth /* otlcommn.h */ 4*37da2899SCharles.Forsyth /* */ 5*37da2899SCharles.Forsyth /* OpenType layout support, common tables (specification). */ 6*37da2899SCharles.Forsyth /* */ 7*37da2899SCharles.Forsyth /* Copyright 2002 by */ 8*37da2899SCharles.Forsyth /* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9*37da2899SCharles.Forsyth /* */ 10*37da2899SCharles.Forsyth /* This file is part of the FreeType project, and may only be used, */ 11*37da2899SCharles.Forsyth /* modified, and distributed under the terms of the FreeType project */ 12*37da2899SCharles.Forsyth /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13*37da2899SCharles.Forsyth /* this file you indicate that you have read the license and */ 14*37da2899SCharles.Forsyth /* understand and accept it fully. */ 15*37da2899SCharles.Forsyth /* */ 16*37da2899SCharles.Forsyth /***************************************************************************/ 17*37da2899SCharles.Forsyth 18*37da2899SCharles.Forsyth 19*37da2899SCharles.Forsyth #ifndef __OTLCOMMN_H__ 20*37da2899SCharles.Forsyth #define __OTLCOMMN_H__ 21*37da2899SCharles.Forsyth 22*37da2899SCharles.Forsyth #include "otlayout.h" 23*37da2899SCharles.Forsyth 24*37da2899SCharles.Forsyth OTL_BEGIN_HEADER 25*37da2899SCharles.Forsyth 26*37da2899SCharles.Forsyth 27*37da2899SCharles.Forsyth /*************************************************************************/ 28*37da2899SCharles.Forsyth /*************************************************************************/ 29*37da2899SCharles.Forsyth /***** *****/ 30*37da2899SCharles.Forsyth /***** COVERAGE TABLE *****/ 31*37da2899SCharles.Forsyth /***** *****/ 32*37da2899SCharles.Forsyth /*************************************************************************/ 33*37da2899SCharles.Forsyth /*************************************************************************/ 34*37da2899SCharles.Forsyth 35*37da2899SCharles.Forsyth /* validate coverage table */ 36*37da2899SCharles.Forsyth OTL_LOCALDEF( void ) 37*37da2899SCharles.Forsyth otl_coverage_validate( OTL_Bytes base, 38*37da2899SCharles.Forsyth OTL_Validator valid ); 39*37da2899SCharles.Forsyth 40*37da2899SCharles.Forsyth /* return number of covered glyphs */ 41*37da2899SCharles.Forsyth OTL_LOCALDEF( OTL_UInt ) 42*37da2899SCharles.Forsyth otl_coverage_get_count( OTL_Bytes base ); 43*37da2899SCharles.Forsyth 44*37da2899SCharles.Forsyth /* Return the coverage index corresponding to a glyph glyph index. */ 45*37da2899SCharles.Forsyth /* Return -1 if the glyph isn't covered. */ 46*37da2899SCharles.Forsyth OTL_LOCALDEF( OTL_Int ) 47*37da2899SCharles.Forsyth otl_coverage_get_index( OTL_Bytes base, 48*37da2899SCharles.Forsyth OTL_UInt glyph_index ); 49*37da2899SCharles.Forsyth 50*37da2899SCharles.Forsyth 51*37da2899SCharles.Forsyth /*************************************************************************/ 52*37da2899SCharles.Forsyth /*************************************************************************/ 53*37da2899SCharles.Forsyth /***** *****/ 54*37da2899SCharles.Forsyth /***** CLASS DEFINITION TABLE *****/ 55*37da2899SCharles.Forsyth /***** *****/ 56*37da2899SCharles.Forsyth /*************************************************************************/ 57*37da2899SCharles.Forsyth /*************************************************************************/ 58*37da2899SCharles.Forsyth 59*37da2899SCharles.Forsyth /* validate class definition table */ 60*37da2899SCharles.Forsyth OTL_LOCALDEF( void ) 61*37da2899SCharles.Forsyth otl_class_definition_validate( OTL_Bytes table, 62*37da2899SCharles.Forsyth OTL_Validator valid ); 63*37da2899SCharles.Forsyth 64*37da2899SCharles.Forsyth /* return class value for a given glyph index */ 65*37da2899SCharles.Forsyth OTL_LOCALDEF( OTL_UInt ) 66*37da2899SCharles.Forsyth otl_class_definition_get_value( OTL_Bytes table, 67*37da2899SCharles.Forsyth OTL_UInt glyph_index ); 68*37da2899SCharles.Forsyth 69*37da2899SCharles.Forsyth 70*37da2899SCharles.Forsyth /*************************************************************************/ 71*37da2899SCharles.Forsyth /*************************************************************************/ 72*37da2899SCharles.Forsyth /***** *****/ 73*37da2899SCharles.Forsyth /***** DEVICE TABLE *****/ 74*37da2899SCharles.Forsyth /***** *****/ 75*37da2899SCharles.Forsyth /*************************************************************************/ 76*37da2899SCharles.Forsyth /*************************************************************************/ 77*37da2899SCharles.Forsyth 78*37da2899SCharles.Forsyth /* validate a device table */ 79*37da2899SCharles.Forsyth OTL_LOCALDEF( void ) 80*37da2899SCharles.Forsyth otl_device_table_validate( OTL_Bytes table, 81*37da2899SCharles.Forsyth OTL_Validator valid ); 82*37da2899SCharles.Forsyth 83*37da2899SCharles.Forsyth /* return a device table's first size */ 84*37da2899SCharles.Forsyth OTL_LOCALDEF( OTL_UInt ) 85*37da2899SCharles.Forsyth otl_device_table_get_start( OTL_Bytes table ); 86*37da2899SCharles.Forsyth 87*37da2899SCharles.Forsyth /* return a device table's last size */ 88*37da2899SCharles.Forsyth OTL_LOCALDEF( OTL_UInt ) 89*37da2899SCharles.Forsyth otl_device_table_get_end( OTL_Bytes table ); 90*37da2899SCharles.Forsyth 91*37da2899SCharles.Forsyth /* return pixel adjustment for a given size */ 92*37da2899SCharles.Forsyth OTL_LOCALDEF( OTL_Int ) 93*37da2899SCharles.Forsyth otl_device_table_get_delta( OTL_Bytes table, 94*37da2899SCharles.Forsyth OTL_UInt size ); 95*37da2899SCharles.Forsyth 96*37da2899SCharles.Forsyth 97*37da2899SCharles.Forsyth /*************************************************************************/ 98*37da2899SCharles.Forsyth /*************************************************************************/ 99*37da2899SCharles.Forsyth /***** *****/ 100*37da2899SCharles.Forsyth /***** LOOKUPS *****/ 101*37da2899SCharles.Forsyth /***** *****/ 102*37da2899SCharles.Forsyth /*************************************************************************/ 103*37da2899SCharles.Forsyth /*************************************************************************/ 104*37da2899SCharles.Forsyth 105*37da2899SCharles.Forsyth /* validate lookup table */ 106*37da2899SCharles.Forsyth OTL_LOCALDEF( void ) 107*37da2899SCharles.Forsyth otl_lookup_validate( OTL_Bytes table, 108*37da2899SCharles.Forsyth OTL_Validator valid ); 109*37da2899SCharles.Forsyth 110*37da2899SCharles.Forsyth /* return number of sub-tables in a lookup */ 111*37da2899SCharles.Forsyth OTL_LOCALDEF( OTL_UInt ) 112*37da2899SCharles.Forsyth otl_lookup_get_count( OTL_Bytes table ); 113*37da2899SCharles.Forsyth 114*37da2899SCharles.Forsyth 115*37da2899SCharles.Forsyth /* return lookup sub-table */ 116*37da2899SCharles.Forsyth OTL_LOCALDEF( OTL_Bytes ) 117*37da2899SCharles.Forsyth otl_lookup_get_table( OTL_Bytes table, 118*37da2899SCharles.Forsyth OTL_UInt idx ); 119*37da2899SCharles.Forsyth 120*37da2899SCharles.Forsyth 121*37da2899SCharles.Forsyth /*************************************************************************/ 122*37da2899SCharles.Forsyth /*************************************************************************/ 123*37da2899SCharles.Forsyth /***** *****/ 124*37da2899SCharles.Forsyth /***** LOOKUP LISTS *****/ 125*37da2899SCharles.Forsyth /***** *****/ 126*37da2899SCharles.Forsyth /*************************************************************************/ 127*37da2899SCharles.Forsyth /*************************************************************************/ 128*37da2899SCharles.Forsyth 129*37da2899SCharles.Forsyth /* validate lookup list */ 130*37da2899SCharles.Forsyth OTL_LOCALDEF( void ) 131*37da2899SCharles.Forsyth otl_lookup_list_validate( OTL_Bytes table, 132*37da2899SCharles.Forsyth OTL_Validator valid ); 133*37da2899SCharles.Forsyth 134*37da2899SCharles.Forsyth /* return number of lookups in list */ 135*37da2899SCharles.Forsyth OTL_LOCALDEF( OTL_UInt ) 136*37da2899SCharles.Forsyth otl_lookup_list_get_count( OTL_Bytes table ); 137*37da2899SCharles.Forsyth 138*37da2899SCharles.Forsyth /* return a given lookup from a list */ 139*37da2899SCharles.Forsyth OTL_LOCALDEF( OTL_Bytes ) 140*37da2899SCharles.Forsyth otl_lookup_list_get_lookup( OTL_Bytes table, 141*37da2899SCharles.Forsyth OTL_UInt idx ); 142*37da2899SCharles.Forsyth 143*37da2899SCharles.Forsyth /* return lookup sub-table from a list */ 144*37da2899SCharles.Forsyth OTL_LOCALDEF( OTL_Bytes ) 145*37da2899SCharles.Forsyth otl_lookup_list_get_table( OTL_Bytes table, 146*37da2899SCharles.Forsyth OTL_UInt lookup_index, 147*37da2899SCharles.Forsyth OTL_UInt table_index ); 148*37da2899SCharles.Forsyth 149*37da2899SCharles.Forsyth /* iterate over lookup list */ 150*37da2899SCharles.Forsyth OTL_LOCALDEF( void ) 151*37da2899SCharles.Forsyth otl_lookup_list_foreach( OTL_Bytes table, 152*37da2899SCharles.Forsyth OTL_ForeachFunc func, 153*37da2899SCharles.Forsyth OTL_Pointer func_data ); 154*37da2899SCharles.Forsyth 155*37da2899SCharles.Forsyth 156*37da2899SCharles.Forsyth /*************************************************************************/ 157*37da2899SCharles.Forsyth /*************************************************************************/ 158*37da2899SCharles.Forsyth /***** *****/ 159*37da2899SCharles.Forsyth /***** FEATURES *****/ 160*37da2899SCharles.Forsyth /***** *****/ 161*37da2899SCharles.Forsyth /*************************************************************************/ 162*37da2899SCharles.Forsyth /*************************************************************************/ 163*37da2899SCharles.Forsyth 164*37da2899SCharles.Forsyth /* validate feature table */ 165*37da2899SCharles.Forsyth OTL_LOCALDEF( void ) 166*37da2899SCharles.Forsyth otl_feature_validate( OTL_Bytes table, 167*37da2899SCharles.Forsyth OTL_Validator valid ); 168*37da2899SCharles.Forsyth 169*37da2899SCharles.Forsyth /* return feature's lookup count */ 170*37da2899SCharles.Forsyth OTL_LOCALDEF( OTL_UInt ) 171*37da2899SCharles.Forsyth otl_feature_get_count( OTL_Bytes table ); 172*37da2899SCharles.Forsyth 173*37da2899SCharles.Forsyth /* get several lookups indices from a feature. returns the number of */ 174*37da2899SCharles.Forsyth /* lookups grabbed */ 175*37da2899SCharles.Forsyth OTL_LOCALDEF( OTL_UInt ) 176*37da2899SCharles.Forsyth otl_feature_get_lookups( OTL_Bytes table, 177*37da2899SCharles.Forsyth OTL_UInt start, 178*37da2899SCharles.Forsyth OTL_UInt count, 179*37da2899SCharles.Forsyth OTL_UInt *lookups ); 180*37da2899SCharles.Forsyth 181*37da2899SCharles.Forsyth 182*37da2899SCharles.Forsyth /*************************************************************************/ 183*37da2899SCharles.Forsyth /*************************************************************************/ 184*37da2899SCharles.Forsyth /***** *****/ 185*37da2899SCharles.Forsyth /***** FEATURE LIST *****/ 186*37da2899SCharles.Forsyth /***** *****/ 187*37da2899SCharles.Forsyth /*************************************************************************/ 188*37da2899SCharles.Forsyth /*************************************************************************/ 189*37da2899SCharles.Forsyth 190*37da2899SCharles.Forsyth /* validate a feature list */ 191*37da2899SCharles.Forsyth OTL_LOCALDEF( void ) 192*37da2899SCharles.Forsyth otl_feature_list_validate( OTL_Bytes table, 193*37da2899SCharles.Forsyth OTL_Validator valid ); 194*37da2899SCharles.Forsyth 195*37da2899SCharles.Forsyth /* return number of features in list */ 196*37da2899SCharles.Forsyth OTL_LOCALDEF( OTL_UInt ) 197*37da2899SCharles.Forsyth otl_feature_list_get_count( OTL_Bytes table ); 198*37da2899SCharles.Forsyth 199*37da2899SCharles.Forsyth 200*37da2899SCharles.Forsyth /* return a given feature from a list */ 201*37da2899SCharles.Forsyth OTL_LOCALDEF( OTL_Bytes ) 202*37da2899SCharles.Forsyth otl_feature_list_get_feature( OTL_Bytes table, 203*37da2899SCharles.Forsyth OTL_UInt idx ); 204*37da2899SCharles.Forsyth 205*37da2899SCharles.Forsyth /* iterate over all features in a list */ 206*37da2899SCharles.Forsyth OTL_LOCALDEF( void ) 207*37da2899SCharles.Forsyth otl_feature_list_foreach( OTL_Bytes table, 208*37da2899SCharles.Forsyth OTL_ForeachFunc func, 209*37da2899SCharles.Forsyth OTL_Pointer func_data ); 210*37da2899SCharles.Forsyth 211*37da2899SCharles.Forsyth 212*37da2899SCharles.Forsyth /*************************************************************************/ 213*37da2899SCharles.Forsyth /*************************************************************************/ 214*37da2899SCharles.Forsyth /***** *****/ 215*37da2899SCharles.Forsyth /***** LANGUAGE SYSTEM *****/ 216*37da2899SCharles.Forsyth /***** *****/ 217*37da2899SCharles.Forsyth /*************************************************************************/ 218*37da2899SCharles.Forsyth /*************************************************************************/ 219*37da2899SCharles.Forsyth 220*37da2899SCharles.Forsyth OTL_LOCAL( void ) 221*37da2899SCharles.Forsyth otl_lang_validate( OTL_Bytes table, 222*37da2899SCharles.Forsyth OTL_Validator valid ); 223*37da2899SCharles.Forsyth 224*37da2899SCharles.Forsyth 225*37da2899SCharles.Forsyth OTL_LOCAL( OTL_UInt ) 226*37da2899SCharles.Forsyth otl_lang_get_req_feature( OTL_Bytes table ); 227*37da2899SCharles.Forsyth 228*37da2899SCharles.Forsyth 229*37da2899SCharles.Forsyth OTL_LOCAL( OTL_UInt ) 230*37da2899SCharles.Forsyth otl_lang_get_count( OTL_Bytes table ); 231*37da2899SCharles.Forsyth 232*37da2899SCharles.Forsyth 233*37da2899SCharles.Forsyth OTL_LOCAL( OTL_UInt ) 234*37da2899SCharles.Forsyth otl_lang_get_features( OTL_Bytes table, 235*37da2899SCharles.Forsyth OTL_UInt start, 236*37da2899SCharles.Forsyth OTL_UInt count, 237*37da2899SCharles.Forsyth OTL_UInt *features ); 238*37da2899SCharles.Forsyth 239*37da2899SCharles.Forsyth 240*37da2899SCharles.Forsyth /*************************************************************************/ 241*37da2899SCharles.Forsyth /*************************************************************************/ 242*37da2899SCharles.Forsyth /***** *****/ 243*37da2899SCharles.Forsyth /***** SCRIPTS *****/ 244*37da2899SCharles.Forsyth /***** *****/ 245*37da2899SCharles.Forsyth /*************************************************************************/ 246*37da2899SCharles.Forsyth /*************************************************************************/ 247*37da2899SCharles.Forsyth 248*37da2899SCharles.Forsyth OTL_LOCAL( void ) 249*37da2899SCharles.Forsyth otl_script_list_validate( OTL_Bytes list, 250*37da2899SCharles.Forsyth OTL_Validator valid ); 251*37da2899SCharles.Forsyth 252*37da2899SCharles.Forsyth OTL_LOCAL( OTL_Bytes ) 253*37da2899SCharles.Forsyth otl_script_list_get_script( OTL_Bytes table ); 254*37da2899SCharles.Forsyth 255*37da2899SCharles.Forsyth 256*37da2899SCharles.Forsyth /*************************************************************************/ 257*37da2899SCharles.Forsyth /*************************************************************************/ 258*37da2899SCharles.Forsyth /***** *****/ 259*37da2899SCharles.Forsyth /***** LOOKUP LISTS *****/ 260*37da2899SCharles.Forsyth /***** *****/ 261*37da2899SCharles.Forsyth /*************************************************************************/ 262*37da2899SCharles.Forsyth /*************************************************************************/ 263*37da2899SCharles.Forsyth 264*37da2899SCharles.Forsyth OTL_LOCAL( void ) 265*37da2899SCharles.Forsyth otl_lookup_list_validate( OTL_Bytes list, 266*37da2899SCharles.Forsyth OTL_UInt type_count, 267*37da2899SCharles.Forsyth OTL_ValidateFunc* type_funcs, 268*37da2899SCharles.Forsyth OTL_Validator valid ); 269*37da2899SCharles.Forsyth 270*37da2899SCharles.Forsyth /* */ 271*37da2899SCharles.Forsyth 272*37da2899SCharles.Forsyth OTL_END_HEADER 273*37da2899SCharles.Forsyth 274*37da2899SCharles.Forsyth #endif /* __OTLCOMMN_H__ */ 275*37da2899SCharles.Forsyth 276*37da2899SCharles.Forsyth 277*37da2899SCharles.Forsyth /* END */ 278