1 /***************************************************************************/ 2 /* */ 3 /* ftgxval.h */ 4 /* */ 5 /* FreeType API for validating TrueTypeGX/AAT tables (specification). */ 6 /* */ 7 /* Copyright 2004-2006, 2013 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 /*************************************************************************/ 61 62 63 /*************************************************************************/ 64 /* */ 65 /* */ 66 /* Warning: Use FT_VALIDATE_XXX to validate a table. */ 67 /* Following definitions are for gxvalid developers. */ 68 /* */ 69 /* */ 70 /*************************************************************************/ 71 72 #define FT_VALIDATE_feat_INDEX 0 73 #define FT_VALIDATE_mort_INDEX 1 74 #define FT_VALIDATE_morx_INDEX 2 75 #define FT_VALIDATE_bsln_INDEX 3 76 #define FT_VALIDATE_just_INDEX 4 77 #define FT_VALIDATE_kern_INDEX 5 78 #define FT_VALIDATE_opbd_INDEX 6 79 #define FT_VALIDATE_trak_INDEX 7 80 #define FT_VALIDATE_prop_INDEX 8 81 #define FT_VALIDATE_lcar_INDEX 9 82 #define FT_VALIDATE_GX_LAST_INDEX FT_VALIDATE_lcar_INDEX 83 84 85 /************************************************************************* 86 * 87 * @macro: 88 * FT_VALIDATE_GX_LENGTH 89 * 90 * @description: 91 * The number of tables checked in this module. Use it as a parameter 92 * for the `table-length' argument of function @FT_TrueTypeGX_Validate. 93 */ 94 #define FT_VALIDATE_GX_LENGTH (FT_VALIDATE_GX_LAST_INDEX + 1) 95 96 /* */ 97 98 /* Up to 0x1000 is used by otvalid. 99 Ox2xxx is reserved for feature OT extension. */ 100 #define FT_VALIDATE_GX_START 0x4000 101 #define FT_VALIDATE_GX_BITFIELD( tag ) \ 102 ( FT_VALIDATE_GX_START << FT_VALIDATE_##tag##_INDEX ) 103 104 105 /********************************************************************** 106 * 107 * @enum: 108 * FT_VALIDATE_GXXXX 109 * 110 * @description: 111 * A list of bit-field constants used with @FT_TrueTypeGX_Validate to 112 * indicate which TrueTypeGX/AAT Type tables should be validated. 113 * 114 * @values: 115 * FT_VALIDATE_feat :: 116 * Validate `feat' table. 117 * 118 * FT_VALIDATE_mort :: 119 * Validate `mort' table. 120 * 121 * FT_VALIDATE_morx :: 122 * Validate `morx' table. 123 * 124 * FT_VALIDATE_bsln :: 125 * Validate `bsln' table. 126 * 127 * FT_VALIDATE_just :: 128 * Validate `just' table. 129 * 130 * FT_VALIDATE_kern :: 131 * Validate `kern' table. 132 * 133 * FT_VALIDATE_opbd :: 134 * Validate `opbd' table. 135 * 136 * FT_VALIDATE_trak :: 137 * Validate `trak' table. 138 * 139 * FT_VALIDATE_prop :: 140 * Validate `prop' table. 141 * 142 * FT_VALIDATE_lcar :: 143 * Validate `lcar' table. 144 * 145 * FT_VALIDATE_GX :: 146 * Validate all TrueTypeGX tables (feat, mort, morx, bsln, just, kern, 147 * opbd, trak, prop and lcar). 148 * 149 */ 150 151 #define FT_VALIDATE_feat FT_VALIDATE_GX_BITFIELD( feat ) 152 #define FT_VALIDATE_mort FT_VALIDATE_GX_BITFIELD( mort ) 153 #define FT_VALIDATE_morx FT_VALIDATE_GX_BITFIELD( morx ) 154 #define FT_VALIDATE_bsln FT_VALIDATE_GX_BITFIELD( bsln ) 155 #define FT_VALIDATE_just FT_VALIDATE_GX_BITFIELD( just ) 156 #define FT_VALIDATE_kern FT_VALIDATE_GX_BITFIELD( kern ) 157 #define FT_VALIDATE_opbd FT_VALIDATE_GX_BITFIELD( opbd ) 158 #define FT_VALIDATE_trak FT_VALIDATE_GX_BITFIELD( trak ) 159 #define FT_VALIDATE_prop FT_VALIDATE_GX_BITFIELD( prop ) 160 #define FT_VALIDATE_lcar FT_VALIDATE_GX_BITFIELD( lcar ) 161 162 #define FT_VALIDATE_GX ( FT_VALIDATE_feat | \ 163 FT_VALIDATE_mort | \ 164 FT_VALIDATE_morx | \ 165 FT_VALIDATE_bsln | \ 166 FT_VALIDATE_just | \ 167 FT_VALIDATE_kern | \ 168 FT_VALIDATE_opbd | \ 169 FT_VALIDATE_trak | \ 170 FT_VALIDATE_prop | \ 171 FT_VALIDATE_lcar ) 172 173 174 /* */ 175 176 /********************************************************************** 177 * 178 * @function: 179 * FT_TrueTypeGX_Validate 180 * 181 * @description: 182 * Validate various TrueTypeGX tables to assure that all offsets and 183 * indices are valid. The idea is that a higher-level library that 184 * actually does the text layout can access those tables without 185 * error checking (which can be quite time consuming). 186 * 187 * @input: 188 * face :: 189 * A handle to the input face. 190 * 191 * validation_flags :: 192 * A bit field that specifies the tables to be validated. See 193 * @FT_VALIDATE_GXXXX for possible values. 194 * 195 * table_length :: 196 * The size of the `tables' array. Normally, @FT_VALIDATE_GX_LENGTH 197 * should be passed. 198 * 199 * @output: 200 * tables :: 201 * The array where all validated sfnt tables are stored. 202 * The array itself must be allocated by a client. 203 * 204 * @return: 205 * FreeType error code. 0~means success. 206 * 207 * @note: 208 * This function only works with TrueTypeGX fonts, returning an error 209 * otherwise. 210 * 211 * After use, the application should deallocate the buffers pointed to by 212 * each `tables' element, by calling @FT_TrueTypeGX_Free. A NULL value 213 * indicates that the table either doesn't exist in the font, the 214 * application hasn't asked for validation, or the validator doesn't have 215 * the ability to validate the sfnt table. 216 */ 217 FT_EXPORT( FT_Error ) 218 FT_TrueTypeGX_Validate( FT_Face face, 219 FT_UInt validation_flags, 220 FT_Bytes tables[FT_VALIDATE_GX_LENGTH], 221 FT_UInt table_length ); 222 223 224 /* */ 225 226 /********************************************************************** 227 * 228 * @function: 229 * FT_TrueTypeGX_Free 230 * 231 * @description: 232 * Free the buffer allocated by TrueTypeGX validator. 233 * 234 * @input: 235 * face :: 236 * A handle to the input face. 237 * 238 * table :: 239 * The pointer to the buffer allocated by 240 * @FT_TrueTypeGX_Validate. 241 * 242 * @note: 243 * This function must be used to free the buffer allocated by 244 * @FT_TrueTypeGX_Validate only. 245 */ 246 FT_EXPORT( void ) 247 FT_TrueTypeGX_Free( FT_Face face, 248 FT_Bytes table ); 249 250 251 /* */ 252 253 /********************************************************************** 254 * 255 * @enum: 256 * FT_VALIDATE_CKERNXXX 257 * 258 * @description: 259 * A list of bit-field constants used with @FT_ClassicKern_Validate 260 * to indicate the classic kern dialect or dialects. If the selected 261 * type doesn't fit, @FT_ClassicKern_Validate regards the table as 262 * invalid. 263 * 264 * @values: 265 * FT_VALIDATE_MS :: 266 * Handle the `kern' table as a classic Microsoft kern table. 267 * 268 * FT_VALIDATE_APPLE :: 269 * Handle the `kern' table as a classic Apple kern table. 270 * 271 * FT_VALIDATE_CKERN :: 272 * Handle the `kern' as either classic Apple or Microsoft kern table. 273 */ 274 #define FT_VALIDATE_MS ( FT_VALIDATE_GX_START << 0 ) 275 #define FT_VALIDATE_APPLE ( FT_VALIDATE_GX_START << 1 ) 276 277 #define FT_VALIDATE_CKERN ( FT_VALIDATE_MS | FT_VALIDATE_APPLE ) 278 279 280 /* */ 281 282 /********************************************************************** 283 * 284 * @function: 285 * FT_ClassicKern_Validate 286 * 287 * @description: 288 * Validate classic (16-bit format) kern table to assure that the offsets 289 * and indices are valid. The idea is that a higher-level library that 290 * actually does the text layout can access those tables without error 291 * checking (which can be quite time consuming). 292 * 293 * The `kern' table validator in @FT_TrueTypeGX_Validate deals with both 294 * the new 32-bit format and the classic 16-bit format, while 295 * FT_ClassicKern_Validate only supports the classic 16-bit format. 296 * 297 * @input: 298 * face :: 299 * A handle to the input face. 300 * 301 * validation_flags :: 302 * A bit field that specifies the dialect to be validated. See 303 * @FT_VALIDATE_CKERNXXX for possible values. 304 * 305 * @output: 306 * ckern_table :: 307 * A pointer to the kern table. 308 * 309 * @return: 310 * FreeType error code. 0~means success. 311 * 312 * @note: 313 * After use, the application should deallocate the buffers pointed to by 314 * `ckern_table', by calling @FT_ClassicKern_Free. A NULL value 315 * indicates that the table doesn't exist in the font. 316 */ 317 FT_EXPORT( FT_Error ) 318 FT_ClassicKern_Validate( FT_Face face, 319 FT_UInt validation_flags, 320 FT_Bytes *ckern_table ); 321 322 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 353 FT_END_HEADER 354 355 #endif /* __FTGXVAL_H__ */ 356 357 358 /* END */ 359