1 /***************************************************************************/ 2 /* */ 3 /* ftgxval.h */ 4 /* */ 5 /* FreeType API for validating TrueTypeGX/AAT tables (specification). */ 6 /* */ 7 /* Copyright 2004-2015 by */ 8 /* Masatake YAMATO, Redhat K.K, */ 9 /* David Turner, Robert Wilhelm, and Werner Lemberg. */ 10 /* */ 11 /* This file is part of the FreeType project, and may only be used, */ 12 /* modified, and distributed under the terms of the FreeType project */ 13 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 14 /* this file you indicate that you have read the license and */ 15 /* understand and accept it fully. */ 16 /* */ 17 /***************************************************************************/ 18 19 /***************************************************************************/ 20 /* */ 21 /* gxvalid is derived from both gxlayout module and otvalid module. */ 22 /* Development of gxlayout is supported by the Information-technology */ 23 /* Promotion Agency(IPA), Japan. */ 24 /* */ 25 /***************************************************************************/ 26 27 28 #ifndef __FTGXVAL_H__ 29 #define __FTGXVAL_H__ 30 31 #include <ft2build.h> 32 #include FT_FREETYPE_H 33 34 #ifdef FREETYPE_H 35 #error "freetype.h of FreeType 1 has been loaded!" 36 #error "Please fix the directory search order for header files" 37 #error "so that freetype.h of FreeType 2 is found first." 38 #endif 39 40 41 FT_BEGIN_HEADER 42 43 44 /*************************************************************************/ 45 /* */ 46 /* <Section> */ 47 /* gx_validation */ 48 /* */ 49 /* <Title> */ 50 /* TrueTypeGX/AAT Validation */ 51 /* */ 52 /* <Abstract> */ 53 /* An API to validate TrueTypeGX/AAT tables. */ 54 /* */ 55 /* <Description> */ 56 /* This section contains the declaration of functions to validate */ 57 /* some TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd, */ 58 /* trak, prop, lcar). */ 59 /* */ 60 /* <Order> */ 61 /* FT_TrueTypeGX_Validate */ 62 /* FT_TrueTypeGX_Free */ 63 /* */ 64 /* FT_ClassicKern_Validate */ 65 /* FT_ClassicKern_Free */ 66 /* */ 67 /* FT_VALIDATE_GX_LENGTH */ 68 /* FT_VALIDATE_GXXXX */ 69 /* FT_VALIDATE_CKERNXXX */ 70 /* */ 71 /*************************************************************************/ 72 73 /*************************************************************************/ 74 /* */ 75 /* */ 76 /* Warning: Use FT_VALIDATE_XXX to validate a table. */ 77 /* Following definitions are for gxvalid developers. */ 78 /* */ 79 /* */ 80 /*************************************************************************/ 81 82 #define FT_VALIDATE_feat_INDEX 0 83 #define FT_VALIDATE_mort_INDEX 1 84 #define FT_VALIDATE_morx_INDEX 2 85 #define FT_VALIDATE_bsln_INDEX 3 86 #define FT_VALIDATE_just_INDEX 4 87 #define FT_VALIDATE_kern_INDEX 5 88 #define FT_VALIDATE_opbd_INDEX 6 89 #define FT_VALIDATE_trak_INDEX 7 90 #define FT_VALIDATE_prop_INDEX 8 91 #define FT_VALIDATE_lcar_INDEX 9 92 #define FT_VALIDATE_GX_LAST_INDEX FT_VALIDATE_lcar_INDEX 93 94 95 /************************************************************************* 96 * 97 * @macro: 98 * FT_VALIDATE_GX_LENGTH 99 * 100 * @description: 101 * The number of tables checked in this module. Use it as a parameter 102 * for the `table-length' argument of function @FT_TrueTypeGX_Validate. 103 */ 104 #define FT_VALIDATE_GX_LENGTH (FT_VALIDATE_GX_LAST_INDEX + 1) 105 106 /* */ 107 108 /* Up to 0x1000 is used by otvalid. 109 Ox2xxx is reserved for feature OT extension. */ 110 #define FT_VALIDATE_GX_START 0x4000 111 #define FT_VALIDATE_GX_BITFIELD( tag ) \ 112 ( FT_VALIDATE_GX_START << FT_VALIDATE_##tag##_INDEX ) 113 114 115 /********************************************************************** 116 * 117 * @enum: 118 * FT_VALIDATE_GXXXX 119 * 120 * @description: 121 * A list of bit-field constants used with @FT_TrueTypeGX_Validate to 122 * indicate which TrueTypeGX/AAT Type tables should be validated. 123 * 124 * @values: 125 * FT_VALIDATE_feat :: 126 * Validate `feat' table. 127 * 128 * FT_VALIDATE_mort :: 129 * Validate `mort' table. 130 * 131 * FT_VALIDATE_morx :: 132 * Validate `morx' table. 133 * 134 * FT_VALIDATE_bsln :: 135 * Validate `bsln' table. 136 * 137 * FT_VALIDATE_just :: 138 * Validate `just' table. 139 * 140 * FT_VALIDATE_kern :: 141 * Validate `kern' table. 142 * 143 * FT_VALIDATE_opbd :: 144 * Validate `opbd' table. 145 * 146 * FT_VALIDATE_trak :: 147 * Validate `trak' table. 148 * 149 * FT_VALIDATE_prop :: 150 * Validate `prop' table. 151 * 152 * FT_VALIDATE_lcar :: 153 * Validate `lcar' table. 154 * 155 * FT_VALIDATE_GX :: 156 * Validate all TrueTypeGX tables (feat, mort, morx, bsln, just, kern, 157 * opbd, trak, prop and lcar). 158 * 159 */ 160 161 #define FT_VALIDATE_feat FT_VALIDATE_GX_BITFIELD( feat ) 162 #define FT_VALIDATE_mort FT_VALIDATE_GX_BITFIELD( mort ) 163 #define FT_VALIDATE_morx FT_VALIDATE_GX_BITFIELD( morx ) 164 #define FT_VALIDATE_bsln FT_VALIDATE_GX_BITFIELD( bsln ) 165 #define FT_VALIDATE_just FT_VALIDATE_GX_BITFIELD( just ) 166 #define FT_VALIDATE_kern FT_VALIDATE_GX_BITFIELD( kern ) 167 #define FT_VALIDATE_opbd FT_VALIDATE_GX_BITFIELD( opbd ) 168 #define FT_VALIDATE_trak FT_VALIDATE_GX_BITFIELD( trak ) 169 #define FT_VALIDATE_prop FT_VALIDATE_GX_BITFIELD( prop ) 170 #define FT_VALIDATE_lcar FT_VALIDATE_GX_BITFIELD( lcar ) 171 172 #define FT_VALIDATE_GX ( FT_VALIDATE_feat | \ 173 FT_VALIDATE_mort | \ 174 FT_VALIDATE_morx | \ 175 FT_VALIDATE_bsln | \ 176 FT_VALIDATE_just | \ 177 FT_VALIDATE_kern | \ 178 FT_VALIDATE_opbd | \ 179 FT_VALIDATE_trak | \ 180 FT_VALIDATE_prop | \ 181 FT_VALIDATE_lcar ) 182 183 184 /********************************************************************** 185 * 186 * @function: 187 * FT_TrueTypeGX_Validate 188 * 189 * @description: 190 * Validate various TrueTypeGX tables to assure that all offsets and 191 * indices are valid. The idea is that a higher-level library that 192 * actually does the text layout can access those tables without 193 * error checking (which can be quite time consuming). 194 * 195 * @input: 196 * face :: 197 * A handle to the input face. 198 * 199 * validation_flags :: 200 * A bit field that specifies the tables to be validated. See 201 * @FT_VALIDATE_GXXXX for possible values. 202 * 203 * table_length :: 204 * The size of the `tables' array. Normally, @FT_VALIDATE_GX_LENGTH 205 * should be passed. 206 * 207 * @output: 208 * tables :: 209 * The array where all validated sfnt tables are stored. 210 * The array itself must be allocated by a client. 211 * 212 * @return: 213 * FreeType error code. 0~means success. 214 * 215 * @note: 216 * This function only works with TrueTypeGX fonts, returning an error 217 * otherwise. 218 * 219 * After use, the application should deallocate the buffers pointed to by 220 * each `tables' element, by calling @FT_TrueTypeGX_Free. A NULL value 221 * indicates that the table either doesn't exist in the font, the 222 * application hasn't asked for validation, or the validator doesn't have 223 * the ability to validate the sfnt table. 224 */ 225 FT_EXPORT( FT_Error ) 226 FT_TrueTypeGX_Validate( FT_Face face, 227 FT_UInt validation_flags, 228 FT_Bytes tables[FT_VALIDATE_GX_LENGTH], 229 FT_UInt table_length ); 230 231 232 /********************************************************************** 233 * 234 * @function: 235 * FT_TrueTypeGX_Free 236 * 237 * @description: 238 * Free the buffer allocated by TrueTypeGX validator. 239 * 240 * @input: 241 * face :: 242 * A handle to the input face. 243 * 244 * table :: 245 * The pointer to the buffer allocated by 246 * @FT_TrueTypeGX_Validate. 247 * 248 * @note: 249 * This function must be used to free the buffer allocated by 250 * @FT_TrueTypeGX_Validate only. 251 */ 252 FT_EXPORT( void ) 253 FT_TrueTypeGX_Free( FT_Face face, 254 FT_Bytes table ); 255 256 257 /********************************************************************** 258 * 259 * @enum: 260 * FT_VALIDATE_CKERNXXX 261 * 262 * @description: 263 * A list of bit-field constants used with @FT_ClassicKern_Validate 264 * to indicate the classic kern dialect or dialects. If the selected 265 * type doesn't fit, @FT_ClassicKern_Validate regards the table as 266 * invalid. 267 * 268 * @values: 269 * FT_VALIDATE_MS :: 270 * Handle the `kern' table as a classic Microsoft kern table. 271 * 272 * FT_VALIDATE_APPLE :: 273 * Handle the `kern' table as a classic Apple kern table. 274 * 275 * FT_VALIDATE_CKERN :: 276 * Handle the `kern' as either classic Apple or Microsoft kern table. 277 */ 278 #define FT_VALIDATE_MS ( FT_VALIDATE_GX_START << 0 ) 279 #define FT_VALIDATE_APPLE ( FT_VALIDATE_GX_START << 1 ) 280 281 #define FT_VALIDATE_CKERN ( FT_VALIDATE_MS | FT_VALIDATE_APPLE ) 282 283 284 /********************************************************************** 285 * 286 * @function: 287 * FT_ClassicKern_Validate 288 * 289 * @description: 290 * Validate classic (16-bit format) kern table to assure that the offsets 291 * and indices are valid. The idea is that a higher-level library that 292 * actually does the text layout can access those tables without error 293 * checking (which can be quite time consuming). 294 * 295 * The `kern' table validator in @FT_TrueTypeGX_Validate deals with both 296 * the new 32-bit format and the classic 16-bit format, while 297 * FT_ClassicKern_Validate only supports the classic 16-bit format. 298 * 299 * @input: 300 * face :: 301 * A handle to the input face. 302 * 303 * validation_flags :: 304 * A bit field that specifies the dialect to be validated. See 305 * @FT_VALIDATE_CKERNXXX for possible values. 306 * 307 * @output: 308 * ckern_table :: 309 * A pointer to the kern table. 310 * 311 * @return: 312 * FreeType error code. 0~means success. 313 * 314 * @note: 315 * After use, the application should deallocate the buffers pointed to by 316 * `ckern_table', by calling @FT_ClassicKern_Free. A NULL value 317 * indicates that the table doesn't exist in the font. 318 */ 319 FT_EXPORT( FT_Error ) 320 FT_ClassicKern_Validate( FT_Face face, 321 FT_UInt validation_flags, 322 FT_Bytes *ckern_table ); 323 324 325 /********************************************************************** 326 * 327 * @function: 328 * FT_ClassicKern_Free 329 * 330 * @description: 331 * Free the buffer allocated by classic Kern validator. 332 * 333 * @input: 334 * face :: 335 * A handle to the input face. 336 * 337 * table :: 338 * The pointer to the buffer that is allocated by 339 * @FT_ClassicKern_Validate. 340 * 341 * @note: 342 * This function must be used to free the buffer allocated by 343 * @FT_ClassicKern_Validate only. 344 */ 345 FT_EXPORT( void ) 346 FT_ClassicKern_Free( FT_Face face, 347 FT_Bytes table ); 348 349 /* */ 350 351 352 FT_END_HEADER 353 354 #endif /* __FTGXVAL_H__ */ 355 356 357 /* END */ 358