• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /****************************************************************************
2  *
3  * ftgxval.h
4  *
5  *   FreeType API for validating TrueTypeGX/AAT tables (specification).
6  *
7  * Copyright 2004-2018 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