1 /**************************************************************************** 2 * 3 * ftgxval.h 4 * 5 * FreeType API for validating TrueTypeGX/AAT tables (specification). 6 * 7 * Copyright 2004-2018 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