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