Make `TA_font_dump_parameters' print into a string instead of a stream.
[ttfautohint.git] / lib / ta.h
blobcfc2945f038cdae8d1c249262fdcc461038f8a8d
1 /* ta.h */
3 /*
4 * Copyright (C) 2011-2014 by Werner Lemberg.
6 * This file is part of the ttfautohint library, and may only be used,
7 * modified, and distributed under the terms given in `COPYING'. By
8 * continuing to use, modify, or distribute this file you indicate that you
9 * have read `COPYING' and understand and accept it fully.
11 * The file `COPYING' mentioned in the previous paragraph is distributed
12 * with the ttfautohint library.
16 #ifndef __TA_H__
17 #define __TA_H__
19 #include <config.h>
21 #include <ft2build.h>
22 #include FT_FREETYPE_H
23 #include FT_TRUETYPE_TABLES_H
24 #include FT_TRUETYPE_TAGS_H
26 #include <ttfautohint.h>
27 #include <numberset.h>
29 #include "taloader.h"
30 #include "taglobal.h"
31 #include "tadummy.h"
32 #include "talatin.h"
35 #define TTFAUTOHINT_GLYPH ".ttfautohint"
36 #define TTFAUTOHINT_GLYPH_FIRST_BYTE "\x0C" /* first byte is string length */
37 #define TTFAUTOHINT_GLYPH_LEN 13
39 /* these macros convert 16bit and 32bit numbers into single bytes */
40 /* using the byte order needed within SFNT files */
42 #define HIGH(x) (FT_Byte)(((x) & 0xFF00) >> 8)
43 #define LOW(x) ((x) & 0x00FF)
45 #define BYTE1(x) (FT_Byte)(((x) & 0xFF000000UL) >> 24);
46 #define BYTE2(x) (FT_Byte)(((x) & 0x00FF0000UL) >> 16);
47 #define BYTE3(x) (FT_Byte)(((x) & 0x0000FF00UL) >> 8);
48 #define BYTE4(x) ((x) & 0x000000FFUL);
51 /* the length of a dummy `DSIG' table */
52 #define DSIG_LEN 8
54 /* the length of our `gasp' table */
55 #define GASP_LEN 8
57 /* an empty slot in the table info array */
58 #define MISSING (FT_ULong)~0
60 /* the offset to the loca table format in the `head' table */
61 #define LOCA_FORMAT_OFFSET 51
63 /* various offsets within the `maxp' table */
64 #define MAXP_NUM_GLYPHS 4
65 #define MAXP_MAX_COMPOSITE_POINTS 10
66 #define MAXP_MAX_COMPOSITE_CONTOURS 12
67 #define MAXP_MAX_ZONES_OFFSET 14
68 #define MAXP_MAX_TWILIGHT_POINTS_OFFSET 16
69 #define MAXP_MAX_STORAGE_OFFSET 18
70 #define MAXP_MAX_FUNCTION_DEFS_OFFSET 20
71 #define MAXP_MAX_INSTRUCTION_DEFS_OFFSET 22
72 #define MAXP_MAX_STACK_ELEMENTS_OFFSET 24
73 #define MAXP_MAX_INSTRUCTIONS_OFFSET 26
74 #define MAXP_MAX_COMPONENTS_OFFSET 28
76 #define MAXP_LEN 32
78 /* the offset of the type flags field in the `OS/2' table */
79 #define OS2_FSTYPE_OFFSET 8
82 /* flags in composite glyph records */
83 #define ARGS_ARE_WORDS 0x0001
84 #define ARGS_ARE_XY_VALUES 0x0002
85 #define WE_HAVE_A_SCALE 0x0008
86 #define MORE_COMPONENTS 0x0020
87 #define WE_HAVE_AN_XY_SCALE 0x0040
88 #define WE_HAVE_A_2X2 0x0080
89 #define WE_HAVE_INSTR 0x0100
91 /* flags in simple glyph records */
92 #define ON_CURVE 0x01
93 #define X_SHORT_VECTOR 0x02
94 #define Y_SHORT_VECTOR 0x04
95 #define REPEAT 0x08
96 #define SAME_X 0x10
97 #define SAME_Y 0x20
100 /* a single glyph */
101 typedef struct GLYPH_
103 FT_ULong len1; /* number of bytes before instruction related data */
104 FT_ULong len2; /* number of bytes after instruction related data; */
105 /* if zero, this indicates a composite glyph */
106 FT_Byte* buf; /* extracted glyph data (without instruction related data) */
107 FT_ULong flags_offset; /* offset to last flag in a composite glyph */
109 FT_ULong ins_len; /* number of new instructions */
110 FT_Byte* ins_buf; /* new instruction data */
112 FT_Short num_contours; /* >= 0 for simple glyphs */
113 FT_UShort num_points; /* number of points in a simple glyph */
115 FT_UShort num_components;
116 FT_UShort* components; /* the subglyph indices of a composite glyph */
118 FT_UShort num_pointsums;
119 FT_UShort* pointsums; /* the pointsums of all composite elements */
120 /* (after walking recursively over all subglyphs) */
122 FT_UShort num_composite_contours; /* after recursion */
123 } GLYPH;
125 /* a representation of the data in the `glyf' table */
126 typedef struct glyf_Data_
128 FT_UShort num_glyphs;
129 GLYPH* glyphs;
131 /* this field gives the `master' globals for a `glyf' table; */
132 /* see function `TA_sfnt_handle_coverage' */
133 TA_FaceGlobals master_globals;
134 /* for coverage bookkeeping */
135 FT_Bool adjusted;
137 /* if a `glyf' table gets used in more than one subfont, */
138 /* so do `cvt', `fpgm', and `prep' tables: */
139 /* these four tables are always handled in parallel */
140 FT_ULong cvt_idx;
141 FT_ULong fpgm_idx;
142 FT_ULong prep_idx;
144 /* styles present in a font get a running number */
145 FT_UInt style_ids[TA_STYLE_MAX];
146 FT_UInt num_used_styles;
148 /* we have separate CVT data for each style */
149 FT_UInt cvt_offsets[TA_STYLE_MAX];
150 FT_UInt cvt_horz_width_sizes[TA_STYLE_MAX];
151 FT_UInt cvt_vert_width_sizes[TA_STYLE_MAX];
152 FT_UInt cvt_blue_zone_sizes[TA_STYLE_MAX];
153 FT_UInt cvt_blue_adjustment_offsets[TA_STYLE_MAX];
154 } glyf_Data;
156 /* an SFNT table */
157 typedef struct SFNT_Table_
159 FT_ULong tag;
160 FT_ULong len;
161 FT_Byte* buf; /* the table data */
162 FT_ULong offset; /* from beginning of file */
163 FT_ULong checksum;
164 void* data; /* used e.g. for `glyf' table data */
165 FT_Bool processed;
166 } SFNT_Table;
168 /* we use indices into the SFNT table array to */
169 /* represent table info records of the TTF header */
170 typedef FT_ULong SFNT_Table_Info;
172 /* this structure is used to model a TTF or a subfont within a TTC */
173 typedef struct SFNT_
175 FT_Face face;
177 SFNT_Table_Info* table_infos;
178 FT_ULong num_table_infos;
180 /* various SFNT table indices */
181 FT_ULong glyf_idx;
182 FT_ULong loca_idx;
183 FT_ULong head_idx;
184 FT_ULong hmtx_idx;
185 FT_ULong maxp_idx;
186 FT_ULong name_idx;
187 FT_ULong post_idx;
188 FT_ULong OS2_idx;
189 FT_ULong GPOS_idx;
191 /* values necessary to update the `maxp' table */
192 FT_UShort max_composite_points;
193 FT_UShort max_composite_contours;
194 FT_UShort max_storage;
195 FT_UShort max_stack_elements;
196 FT_UShort max_twilight_points;
197 FT_UShort max_instructions;
198 FT_UShort max_components;
199 } SFNT;
201 /* our font object */
202 struct FONT_
204 FT_Library lib;
206 FT_Byte* in_buf;
207 size_t in_len;
209 FT_Byte* out_buf;
210 size_t out_len;
212 char* deltas_buf;
213 size_t deltas_len;
215 SFNT* sfnts;
216 FT_Long num_sfnts;
218 SFNT_Table* tables;
219 FT_ULong num_tables;
221 FT_Bool have_DSIG;
223 /* we have a single `gasp' table for all subfonts */
224 FT_ULong gasp_idx;
226 /* two generic pointers into the the delta exceptions tree */
227 void* deltas_data_head;
228 void* deltas_data_cur;
230 TA_LoaderRec loader[1]; /* the interface to the autohinter */
232 /* configuration options */
233 TA_Progress_Func progress;
234 void* progress_data;
235 TA_Info_Func info;
236 void* info_data;
237 FT_UInt hinting_range_min;
238 FT_UInt hinting_range_max;
239 FT_UInt hinting_limit;
240 FT_UInt increase_x_height;
241 number_range* x_height_snapping_exceptions;
242 FT_UInt fallback_stem_width;
243 FT_Bool gray_strong_stem_width;
244 FT_Bool gdi_cleartype_strong_stem_width;
245 FT_Bool dw_cleartype_strong_stem_width;
246 FT_Bool windows_compatibility;
247 FT_Bool adjust_subglyphs;
248 FT_Bool hint_composites;
249 FT_Bool ignore_restrictions;
250 TA_Style fallback_style;
251 TA_Script default_script;
252 FT_Bool symbol;
253 FT_Bool dehint;
254 FT_Bool debug;
258 #include "tatables.h"
259 #include "tabytecode.h"
260 #include "tadeltas.h"
263 /* in file `tascript.c' */
264 extern const char* script_names[];
267 const char*
268 TA_get_error_message(FT_Error error);
270 char*
271 TA_font_dump_parameters(FONT* font,
272 Deltas* deltas,
273 FT_Bool dehint,
274 FT_Bool format);
276 void
277 TA_get_current_time(FT_ULong* high,
278 FT_ULong* low);
280 FT_Byte*
281 TA_build_push(FT_Byte* bufp,
282 FT_UInt* args,
283 FT_UInt num_args,
284 FT_Bool need_words,
285 FT_Bool optimize);
287 FT_Error
288 TA_font_init(FONT* font);
289 void
290 TA_font_unload(FONT* font,
291 const char* in_buf,
292 char** out_bufp,
293 const char* deltas_buf);
295 FT_Error
296 TA_font_file_read(FONT* font,
297 FILE* in_file);
298 FT_Error
299 TA_font_file_write(FONT* font,
300 FILE* out_file);
301 FT_Error
302 TA_deltas_file_read(FONT* font,
303 FILE* deltas_file);
305 FT_Error
306 TA_sfnt_build_glyph_instructions(SFNT* sfnt,
307 FONT* font,
308 FT_Long idx);
310 FT_Error
311 TA_sfnt_split_into_SFNT_tables(SFNT* sfnt,
312 FONT* font);
314 FT_Error
315 TA_sfnt_build_cvt_table(SFNT* sfnt,
316 FONT* font);
318 FT_Error
319 TA_table_build_DSIG(FT_Byte** DSIG);
321 FT_Error
322 TA_sfnt_build_fpgm_table(SFNT* sfnt,
323 FONT* font);
325 FT_Error
326 TA_sfnt_build_gasp_table(SFNT* sfnt,
327 FONT* font);
329 FT_Error
330 TA_sfnt_split_glyf_table(SFNT* sfnt,
331 FONT* font);
332 FT_Error
333 TA_sfnt_build_glyf_table(SFNT* sfnt,
334 FONT* font);
335 FT_Error
336 TA_sfnt_create_glyf_data(SFNT* sfnt,
337 FONT* font);
338 FT_Error
339 TA_sfnt_handle_coverage(SFNT* sfnt,
340 FONT* font);
341 void
342 TA_sfnt_adjust_coverage(SFNT* sfnt,
343 FONT* font);
344 #if 0
345 void
346 TA_sfnt_copy_master_coverage(SFNT* sfnt,
347 FONT* font);
348 #endif
350 FT_Error
351 TA_sfnt_update_GPOS_table(SFNT* sfnt,
352 FONT* font);
354 FT_Error
355 TA_sfnt_update_hmtx_table(SFNT* sfnt,
356 FONT* font);
358 FT_Error
359 TA_sfnt_build_loca_table(SFNT* sfnt,
360 FONT* font);
362 FT_Error
363 TA_sfnt_update_maxp_table(SFNT* sfnt,
364 FONT* font);
366 FT_Error
367 TA_sfnt_update_post_table(SFNT* sfnt,
368 FONT* font);
370 FT_Error
371 TA_sfnt_update_name_table(SFNT* sfnt,
372 FONT* font);
374 FT_Error
375 TA_sfnt_build_prep_table(SFNT* sfnt,
376 FONT* font);
378 FT_Error
379 TA_sfnt_build_TTF_header(SFNT* sfnt,
380 FONT* font,
381 FT_Byte** header_buf,
382 FT_ULong* header_len,
383 FT_Int do_complete);
384 FT_Error
385 TA_font_build_TTF(FONT* font);
387 FT_Error
388 TA_font_build_TTC(FONT* font);
390 #endif /* __TA_H__ */
392 /* end of ta.h */