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