1 /***************************************************************************/ 2 /* */ 3 /* ftotval.h */ 4 /* */ 5 /* FreeType API for validating OpenType tables (specification). */ 6 /* */ 7 /* Copyright 2004-2015 by */ 8 /* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9 /* */ 10 /* This file is part of the FreeType project, and may only be used, */ 11 /* modified, and distributed under the terms of the FreeType project */ 12 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13 /* this file you indicate that you have read the license and */ 14 /* understand and accept it fully. */ 15 /* */ 16 /***************************************************************************/ 17 18 19 /***************************************************************************/ 20 /* */ 21 /* */ 22 /* Warning: This module might be moved to a different library in the */ 23 /* future to avoid a tight dependency between FreeType and the */ 24 /* OpenType specification. */ 25 /* */ 26 /* */ 27 /***************************************************************************/ 28 29 30 #ifndef __FTOTVAL_H__ 31 #define __FTOTVAL_H__ 32 33 #include <ft2build.h> 34 #include FT_FREETYPE_H 35 36 #ifdef FREETYPE_H 37 #error "freetype.h of FreeType 1 has been loaded!" 38 #error "Please fix the directory search order for header files" 39 #error "so that freetype.h of FreeType 2 is found first." 40 #endif 41 42 43 FT_BEGIN_HEADER 44 45 46 /*************************************************************************/ 47 /* */ 48 /* <Section> */ 49 /* ot_validation */ 50 /* */ 51 /* <Title> */ 52 /* OpenType Validation */ 53 /* */ 54 /* <Abstract> */ 55 /* An API to validate OpenType tables. */ 56 /* */ 57 /* <Description> */ 58 /* This section contains the declaration of functions to validate */ 59 /* some OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH). */ 60 /* */ 61 /* <Order> */ 62 /* FT_OpenType_Validate */ 63 /* FT_OpenType_Free */ 64 /* */ 65 /* FT_VALIDATE_OTXXX */ 66 /* */ 67 /*************************************************************************/ 68 69 70 /********************************************************************** 71 * 72 * @enum: 73 * FT_VALIDATE_OTXXX 74 * 75 * @description: 76 * A list of bit-field constants used with @FT_OpenType_Validate to 77 * indicate which OpenType tables should be validated. 78 * 79 * @values: 80 * FT_VALIDATE_BASE :: 81 * Validate BASE table. 82 * 83 * FT_VALIDATE_GDEF :: 84 * Validate GDEF table. 85 * 86 * FT_VALIDATE_GPOS :: 87 * Validate GPOS table. 88 * 89 * FT_VALIDATE_GSUB :: 90 * Validate GSUB table. 91 * 92 * FT_VALIDATE_JSTF :: 93 * Validate JSTF table. 94 * 95 * FT_VALIDATE_MATH :: 96 * Validate MATH table. 97 * 98 * FT_VALIDATE_OT :: 99 * Validate all OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH). 100 * 101 */ 102 #define FT_VALIDATE_BASE 0x0100 103 #define FT_VALIDATE_GDEF 0x0200 104 #define FT_VALIDATE_GPOS 0x0400 105 #define FT_VALIDATE_GSUB 0x0800 106 #define FT_VALIDATE_JSTF 0x1000 107 #define FT_VALIDATE_MATH 0x2000 108 109 #define FT_VALIDATE_OT FT_VALIDATE_BASE | \ 110 FT_VALIDATE_GDEF | \ 111 FT_VALIDATE_GPOS | \ 112 FT_VALIDATE_GSUB | \ 113 FT_VALIDATE_JSTF | \ 114 FT_VALIDATE_MATH 115 116 /********************************************************************** 117 * 118 * @function: 119 * FT_OpenType_Validate 120 * 121 * @description: 122 * Validate various OpenType tables to assure that all offsets and 123 * indices are valid. The idea is that a higher-level library that 124 * actually does the text layout can access those tables without 125 * error checking (which can be quite time consuming). 126 * 127 * @input: 128 * face :: 129 * A handle to the input face. 130 * 131 * validation_flags :: 132 * A bit field that specifies the tables to be validated. See 133 * @FT_VALIDATE_OTXXX for possible values. 134 * 135 * @output: 136 * BASE_table :: 137 * A pointer to the BASE table. 138 * 139 * GDEF_table :: 140 * A pointer to the GDEF table. 141 * 142 * GPOS_table :: 143 * A pointer to the GPOS table. 144 * 145 * GSUB_table :: 146 * A pointer to the GSUB table. 147 * 148 * JSTF_table :: 149 * A pointer to the JSTF table. 150 * 151 * @return: 152 * FreeType error code. 0~means success. 153 * 154 * @note: 155 * This function only works with OpenType fonts, returning an error 156 * otherwise. 157 * 158 * After use, the application should deallocate the five tables with 159 * @FT_OpenType_Free. A NULL value indicates that the table either 160 * doesn't exist in the font, or the application hasn't asked for 161 * validation. 162 */ 163 FT_EXPORT( FT_Error ) 164 FT_OpenType_Validate( FT_Face face, 165 FT_UInt validation_flags, 166 FT_Bytes *BASE_table, 167 FT_Bytes *GDEF_table, 168 FT_Bytes *GPOS_table, 169 FT_Bytes *GSUB_table, 170 FT_Bytes *JSTF_table ); 171 172 /********************************************************************** 173 * 174 * @function: 175 * FT_OpenType_Free 176 * 177 * @description: 178 * Free the buffer allocated by OpenType validator. 179 * 180 * @input: 181 * face :: 182 * A handle to the input face. 183 * 184 * table :: 185 * The pointer to the buffer that is allocated by 186 * @FT_OpenType_Validate. 187 * 188 * @note: 189 * This function must be used to free the buffer allocated by 190 * @FT_OpenType_Validate only. 191 */ 192 FT_EXPORT( void ) 193 FT_OpenType_Free( FT_Face face, 194 FT_Bytes table ); 195 196 /* */ 197 198 199 FT_END_HEADER 200 201 #endif /* __FTOTVAL_H__ */ 202 203 204 /* END */ 205