| OLD | NEW |
| (Empty) |
| 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 /* <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 */ | |
| OLD | NEW |