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