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 
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   /*************************************************************************/
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 
198 FT_END_HEADER
199 
200 #endif /* __FTOTVAL_H__ */
201 
202 
203 /* END */
204