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