1/***************************************************************************/
2/*                                                                         */
3/*  ftotval.h                                                              */
4/*                                                                         */
5/*    FreeType API for validating OpenType tables (specification).         */
6/*                                                                         */
7/*  Copyright 2004-2007, 2013 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
43FT_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  /*************************************************************************/
62
63
64 /**********************************************************************
65  *
66  * @enum:
67  *    FT_VALIDATE_OTXXX
68  *
69  * @description:
70  *    A list of bit-field constants used with @FT_OpenType_Validate to
71  *    indicate which OpenType tables should be validated.
72  *
73  * @values:
74  *    FT_VALIDATE_BASE ::
75  *      Validate BASE table.
76  *
77  *    FT_VALIDATE_GDEF ::
78  *      Validate GDEF table.
79  *
80  *    FT_VALIDATE_GPOS ::
81  *      Validate GPOS table.
82  *
83  *    FT_VALIDATE_GSUB ::
84  *      Validate GSUB table.
85  *
86  *    FT_VALIDATE_JSTF ::
87  *      Validate JSTF table.
88  *
89  *    FT_VALIDATE_MATH ::
90  *      Validate MATH table.
91  *
92  *    FT_VALIDATE_OT ::
93  *      Validate all OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH).
94  *
95  */
96#define FT_VALIDATE_BASE  0x0100
97#define FT_VALIDATE_GDEF  0x0200
98#define FT_VALIDATE_GPOS  0x0400
99#define FT_VALIDATE_GSUB  0x0800
100#define FT_VALIDATE_JSTF  0x1000
101#define FT_VALIDATE_MATH  0x2000
102
103#define FT_VALIDATE_OT  FT_VALIDATE_BASE | \
104                        FT_VALIDATE_GDEF | \
105                        FT_VALIDATE_GPOS | \
106                        FT_VALIDATE_GSUB | \
107                        FT_VALIDATE_JSTF | \
108                        FT_VALIDATE_MATH
109
110  /* */
111
112 /**********************************************************************
113  *
114  * @function:
115  *    FT_OpenType_Validate
116  *
117  * @description:
118  *    Validate various OpenType tables to assure that all offsets and
119  *    indices are valid.  The idea is that a higher-level library that
120  *    actually does the text layout can access those tables without
121  *    error checking (which can be quite time consuming).
122  *
123  * @input:
124  *    face ::
125  *       A handle to the input face.
126  *
127  *    validation_flags ::
128  *       A bit field that specifies the tables to be validated.  See
129  *       @FT_VALIDATE_OTXXX for possible values.
130  *
131  * @output:
132  *    BASE_table ::
133  *       A pointer to the BASE table.
134  *
135  *    GDEF_table ::
136  *       A pointer to the GDEF table.
137  *
138  *    GPOS_table ::
139  *       A pointer to the GPOS table.
140  *
141  *    GSUB_table ::
142  *       A pointer to the GSUB table.
143  *
144  *    JSTF_table ::
145  *       A pointer to the JSTF table.
146  *
147  * @return:
148  *   FreeType error code.  0~means success.
149  *
150  * @note:
151  *   This function only works with OpenType fonts, returning an error
152  *   otherwise.
153  *
154  *   After use, the application should deallocate the five tables with
155  *   @FT_OpenType_Free.  A NULL value indicates that the table either
156  *   doesn't exist in the font, or the application hasn't asked for
157  *   validation.
158  */
159  FT_EXPORT( FT_Error )
160  FT_OpenType_Validate( FT_Face    face,
161                        FT_UInt    validation_flags,
162                        FT_Bytes  *BASE_table,
163                        FT_Bytes  *GDEF_table,
164                        FT_Bytes  *GPOS_table,
165                        FT_Bytes  *GSUB_table,
166                        FT_Bytes  *JSTF_table );
167
168  /* */
169
170 /**********************************************************************
171  *
172  * @function:
173  *    FT_OpenType_Free
174  *
175  * @description:
176  *    Free the buffer allocated by OpenType validator.
177  *
178  * @input:
179  *    face ::
180  *       A handle to the input face.
181  *
182  *    table ::
183  *       The pointer to the buffer that is allocated by
184  *       @FT_OpenType_Validate.
185  *
186  * @note:
187  *   This function must be used to free the buffer allocated by
188  *   @FT_OpenType_Validate only.
189  */
190  FT_EXPORT( void )
191  FT_OpenType_Free( FT_Face   face,
192                    FT_Bytes  table );
193
194
195 /* */
196
197
198FT_END_HEADER
199
200#endif /* __FTOTVAL_H__ */
201
202
203/* END */
204