1 /***************************************************************************/
2 /*                                                                         */
3 /*  ftgxval.h                                                              */
4 /*                                                                         */
5 /*    FreeType API for validating TrueTypeGX/AAT tables (specification).   */
6 /*                                                                         */
7 /*  Copyright 2004-2015 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   /* <Order>                                                               */
61   /*    FT_TrueTypeGX_Validate                                             */
62   /*    FT_TrueTypeGX_Free                                                 */
63   /*                                                                       */
64   /*    FT_ClassicKern_Validate                                            */
65   /*    FT_ClassicKern_Free                                                */
66   /*                                                                       */
67   /*    FT_VALIDATE_GX_LENGTH                                              */
68   /*    FT_VALIDATE_GXXXX                                                  */
69   /*    FT_VALIDATE_CKERNXXX                                               */
70   /*                                                                       */
71   /*************************************************************************/
72 
73   /*************************************************************************/
74   /*                                                                       */
75   /*                                                                       */
76   /* Warning: Use FT_VALIDATE_XXX to validate a table.                     */
77   /*          Following definitions are for gxvalid developers.            */
78   /*                                                                       */
79   /*                                                                       */
80   /*************************************************************************/
81 
82 #define FT_VALIDATE_feat_INDEX     0
83 #define FT_VALIDATE_mort_INDEX     1
84 #define FT_VALIDATE_morx_INDEX     2
85 #define FT_VALIDATE_bsln_INDEX     3
86 #define FT_VALIDATE_just_INDEX     4
87 #define FT_VALIDATE_kern_INDEX     5
88 #define FT_VALIDATE_opbd_INDEX     6
89 #define FT_VALIDATE_trak_INDEX     7
90 #define FT_VALIDATE_prop_INDEX     8
91 #define FT_VALIDATE_lcar_INDEX     9
92 #define FT_VALIDATE_GX_LAST_INDEX  FT_VALIDATE_lcar_INDEX
93 
94 
95   /*************************************************************************
96    *
97    * @macro:
98    *   FT_VALIDATE_GX_LENGTH
99    *
100    * @description:
101    *   The number of tables checked in this module.  Use it as a parameter
102    *   for the `table-length' argument of function @FT_TrueTypeGX_Validate.
103    */
104 #define FT_VALIDATE_GX_LENGTH     (FT_VALIDATE_GX_LAST_INDEX + 1)
105 
106   /* */
107 
108   /* Up to 0x1000 is used by otvalid.
109      Ox2xxx is reserved for feature OT extension. */
110 #define FT_VALIDATE_GX_START 0x4000
111 #define FT_VALIDATE_GX_BITFIELD( tag )                  \
112   ( FT_VALIDATE_GX_START << FT_VALIDATE_##tag##_INDEX )
113 
114 
115  /**********************************************************************
116   *
117   * @enum:
118   *    FT_VALIDATE_GXXXX
119   *
120   * @description:
121   *    A list of bit-field constants used with @FT_TrueTypeGX_Validate to
122   *    indicate which TrueTypeGX/AAT Type tables should be validated.
123   *
124   * @values:
125   *    FT_VALIDATE_feat ::
126   *      Validate `feat' table.
127   *
128   *    FT_VALIDATE_mort ::
129   *      Validate `mort' table.
130   *
131   *    FT_VALIDATE_morx ::
132   *      Validate `morx' table.
133   *
134   *    FT_VALIDATE_bsln ::
135   *      Validate `bsln' table.
136   *
137   *    FT_VALIDATE_just ::
138   *      Validate `just' table.
139   *
140   *    FT_VALIDATE_kern ::
141   *      Validate `kern' table.
142   *
143   *    FT_VALIDATE_opbd ::
144   *      Validate `opbd' table.
145   *
146   *    FT_VALIDATE_trak ::
147   *      Validate `trak' table.
148   *
149   *    FT_VALIDATE_prop ::
150   *      Validate `prop' table.
151   *
152   *    FT_VALIDATE_lcar ::
153   *      Validate `lcar' table.
154   *
155   *    FT_VALIDATE_GX ::
156   *      Validate all TrueTypeGX tables (feat, mort, morx, bsln, just, kern,
157   *      opbd, trak, prop and lcar).
158   *
159   */
160 
161 #define FT_VALIDATE_feat  FT_VALIDATE_GX_BITFIELD( feat )
162 #define FT_VALIDATE_mort  FT_VALIDATE_GX_BITFIELD( mort )
163 #define FT_VALIDATE_morx  FT_VALIDATE_GX_BITFIELD( morx )
164 #define FT_VALIDATE_bsln  FT_VALIDATE_GX_BITFIELD( bsln )
165 #define FT_VALIDATE_just  FT_VALIDATE_GX_BITFIELD( just )
166 #define FT_VALIDATE_kern  FT_VALIDATE_GX_BITFIELD( kern )
167 #define FT_VALIDATE_opbd  FT_VALIDATE_GX_BITFIELD( opbd )
168 #define FT_VALIDATE_trak  FT_VALIDATE_GX_BITFIELD( trak )
169 #define FT_VALIDATE_prop  FT_VALIDATE_GX_BITFIELD( prop )
170 #define FT_VALIDATE_lcar  FT_VALIDATE_GX_BITFIELD( lcar )
171 
172 #define FT_VALIDATE_GX  ( FT_VALIDATE_feat | \
173                           FT_VALIDATE_mort | \
174                           FT_VALIDATE_morx | \
175                           FT_VALIDATE_bsln | \
176                           FT_VALIDATE_just | \
177                           FT_VALIDATE_kern | \
178                           FT_VALIDATE_opbd | \
179                           FT_VALIDATE_trak | \
180                           FT_VALIDATE_prop | \
181                           FT_VALIDATE_lcar )
182 
183 
184  /**********************************************************************
185   *
186   * @function:
187   *    FT_TrueTypeGX_Validate
188   *
189   * @description:
190   *    Validate various TrueTypeGX tables to assure that all offsets and
191   *    indices are valid.  The idea is that a higher-level library that
192   *    actually does the text layout can access those tables without
193   *    error checking (which can be quite time consuming).
194   *
195   * @input:
196   *    face ::
197   *       A handle to the input face.
198   *
199   *    validation_flags ::
200   *       A bit field that specifies the tables to be validated.  See
201   *       @FT_VALIDATE_GXXXX for possible values.
202   *
203   *    table_length ::
204   *       The size of the `tables' array.  Normally, @FT_VALIDATE_GX_LENGTH
205   *       should be passed.
206   *
207   * @output:
208   *    tables ::
209   *       The array where all validated sfnt tables are stored.
210   *       The array itself must be allocated by a client.
211   *
212   * @return:
213   *   FreeType error code.  0~means success.
214   *
215   * @note:
216   *   This function only works with TrueTypeGX fonts, returning an error
217   *   otherwise.
218   *
219   *   After use, the application should deallocate the buffers pointed to by
220   *   each `tables' element, by calling @FT_TrueTypeGX_Free.  A NULL value
221   *   indicates that the table either doesn't exist in the font, the
222   *   application hasn't asked for validation, or the validator doesn't have
223   *   the ability to validate the sfnt table.
224   */
225   FT_EXPORT( FT_Error )
226   FT_TrueTypeGX_Validate( FT_Face   face,
227                           FT_UInt   validation_flags,
228                           FT_Bytes  tables[FT_VALIDATE_GX_LENGTH],
229                           FT_UInt   table_length );
230 
231 
232  /**********************************************************************
233   *
234   * @function:
235   *    FT_TrueTypeGX_Free
236   *
237   * @description:
238   *    Free the buffer allocated by TrueTypeGX validator.
239   *
240   * @input:
241   *    face ::
242   *       A handle to the input face.
243   *
244   *    table ::
245   *       The pointer to the buffer allocated by
246   *       @FT_TrueTypeGX_Validate.
247   *
248   * @note:
249   *   This function must be used to free the buffer allocated by
250   *   @FT_TrueTypeGX_Validate only.
251   */
252   FT_EXPORT( void )
253   FT_TrueTypeGX_Free( FT_Face   face,
254                       FT_Bytes  table );
255 
256 
257  /**********************************************************************
258   *
259   * @enum:
260   *    FT_VALIDATE_CKERNXXX
261   *
262   * @description:
263   *    A list of bit-field constants used with @FT_ClassicKern_Validate
264   *    to indicate the classic kern dialect or dialects.  If the selected
265   *    type doesn't fit, @FT_ClassicKern_Validate regards the table as
266   *    invalid.
267   *
268   * @values:
269   *    FT_VALIDATE_MS ::
270   *      Handle the `kern' table as a classic Microsoft kern table.
271   *
272   *    FT_VALIDATE_APPLE ::
273   *      Handle the `kern' table as a classic Apple kern table.
274   *
275   *    FT_VALIDATE_CKERN ::
276   *      Handle the `kern' as either classic Apple or Microsoft kern table.
277   */
278 #define FT_VALIDATE_MS     ( FT_VALIDATE_GX_START << 0 )
279 #define FT_VALIDATE_APPLE  ( FT_VALIDATE_GX_START << 1 )
280 
281 #define FT_VALIDATE_CKERN  ( FT_VALIDATE_MS | FT_VALIDATE_APPLE )
282 
283 
284  /**********************************************************************
285   *
286   * @function:
287   *    FT_ClassicKern_Validate
288   *
289   * @description:
290   *    Validate classic (16-bit format) kern table to assure that the offsets
291   *    and indices are valid.  The idea is that a higher-level library that
292   *    actually does the text layout can access those tables without error
293   *    checking (which can be quite time consuming).
294   *
295   *    The `kern' table validator in @FT_TrueTypeGX_Validate deals with both
296   *    the new 32-bit format and the classic 16-bit format, while
297   *    FT_ClassicKern_Validate only supports the classic 16-bit format.
298   *
299   * @input:
300   *    face ::
301   *       A handle to the input face.
302   *
303   *    validation_flags ::
304   *       A bit field that specifies the dialect to be validated.  See
305   *       @FT_VALIDATE_CKERNXXX for possible values.
306   *
307   * @output:
308   *    ckern_table ::
309   *       A pointer to the kern table.
310   *
311   * @return:
312   *   FreeType error code.  0~means success.
313   *
314   * @note:
315   *   After use, the application should deallocate the buffers pointed to by
316   *   `ckern_table', by calling @FT_ClassicKern_Free.  A NULL value
317   *   indicates that the table doesn't exist in the font.
318   */
319   FT_EXPORT( FT_Error )
320   FT_ClassicKern_Validate( FT_Face    face,
321                            FT_UInt    validation_flags,
322                            FT_Bytes  *ckern_table );
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 FT_END_HEADER
353 
354 #endif /* __FTGXVAL_H__ */
355 
356 
357 /* END */
358