Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4680 | right-hear | 1 | /***************************************************************************/ |
2 | /* */ |
||
3 | /* ftgxval.h */ |
||
4 | /* */ |
||
5 | /* FreeType API for validating TrueTypeGX/AAT tables (specification). */ |
||
6 | /* */ |
||
7 | /* Copyright 2004, 2005, 2006 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 |
||
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 | /* |
||
47 | /* gx_validation */ |
||
48 | /* */ |
||
49 | /* |
||
50 | /* TrueTypeGX/AAT Validation */ |
||
51 | /* */ |
||
52 | /* |
||
53 | /* An API to validate TrueTypeGX/AAT tables. */ |
||
54 | /* */ |
||
55 | /* |
||
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 which |
||
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 which 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 which |
||
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 which 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 */><>><>><> |