4 * Copyright (C) 2011-2012 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.
22 #include FT_FREETYPE_H
23 #include FT_TRUETYPE_TABLES_H
24 #include FT_TRUETYPE_TAGS_H
30 #include <ttfautohint.h>
33 /* these macros convert 16bit and 32bit numbers into single bytes */
34 /* using the byte order needed within SFNT files */
36 #define HIGH(x) (FT_Byte)(((x) & 0xFF00) >> 8)
37 #define LOW(x) ((x) & 0x00FF)
39 #define BYTE1(x) (FT_Byte)(((x) & 0xFF000000UL) >> 24);
40 #define BYTE2(x) (FT_Byte)(((x) & 0x00FF0000UL) >> 16);
41 #define BYTE3(x) (FT_Byte)(((x) & 0x0000FF00UL) >> 8);
42 #define BYTE4(x) ((x) & 0x000000FFUL);
45 /* the length of a dummy `DSIG' table */
48 /* the length of our `gasp' table */
51 /* an empty slot in the table info array */
52 #define MISSING (FT_ULong)~0
54 /* the offset to the loca table format in the `head' table */
55 #define LOCA_FORMAT_OFFSET 51
57 /* various offsets within the `maxp' table */
58 #define MAXP_NUM_GLYPHS 4
59 #define MAXP_MAX_COMPOSITE_POINTS 10
60 #define MAXP_MAX_COMPOSITE_CONTOURS 12
61 #define MAXP_MAX_ZONES_OFFSET 14
62 #define MAXP_MAX_TWILIGHT_POINTS_OFFSET 16
63 #define MAXP_MAX_STORAGE_OFFSET 18
64 #define MAXP_MAX_FUNCTION_DEFS_OFFSET 20
65 #define MAXP_MAX_INSTRUCTION_DEFS_OFFSET 22
66 #define MAXP_MAX_STACK_ELEMENTS_OFFSET 24
67 #define MAXP_MAX_INSTRUCTIONS_OFFSET 26
68 #define MAXP_MAX_COMPONENTS_OFFSET 28
72 /* the offset of the type flags field in the `OS/2' table */
73 #define OS2_FSTYPE_OFFSET 8
76 /* flags in composite glyph records */
77 #define ARGS_ARE_WORDS 0x0001
78 #define ARGS_ARE_XY_VALUES 0x0002
79 #define WE_HAVE_A_SCALE 0x0008
80 #define MORE_COMPONENTS 0x0020
81 #define WE_HAVE_AN_XY_SCALE 0x0040
82 #define WE_HAVE_A_2X2 0x0080
83 #define WE_HAVE_INSTR 0x0100
85 /* flags in simple glyph records */
87 #define X_SHORT_VECTOR 0x02
88 #define Y_SHORT_VECTOR 0x04
97 FT_ULong len1
; /* number of bytes before instruction related data */
98 FT_ULong len2
; /* number of bytes after instruction related data; */
99 /* if zero, this indicates a composite glyph */
100 FT_Byte
* buf
; /* extracted glyph data (without instruction related data) */
101 FT_ULong flags_offset
; /* offset to last flag in a composite glyph */
103 FT_ULong ins_len
; /* number of new instructions */
104 FT_Byte
* ins_buf
; /* new instruction data */
106 FT_Short num_contours
; /* >= 0 for simple glyphs */
107 FT_UShort num_points
; /* number of points in a simple glyph */
109 FT_UShort num_components
;
110 FT_UShort
* components
; /* the subglyph indices of a composite glyph */
112 FT_UShort num_pointsums
;
113 FT_UShort
* pointsums
; /* the pointsums of all composite elements */
114 /* (after walking recursively over all subglyphs) */
116 FT_UShort num_composite_contours
; /* after recursion */
119 /* a representation of the data in the `glyf' table */
120 typedef struct glyf_Data_
122 FT_UShort num_glyphs
;
127 typedef struct SFNT_Table_
{
130 FT_Byte
* buf
; /* the table data */
131 FT_ULong offset
; /* from beginning of file */
133 void* data
; /* used e.g. for `glyf' table data */
137 /* we use indices into the SFNT table array to */
138 /* represent table info records of the TTF header */
139 typedef FT_ULong SFNT_Table_Info
;
141 /* this structure is used to model a TTF or a subfont within a TTC */
142 typedef struct SFNT_
{
145 SFNT_Table_Info
* table_infos
;
146 FT_ULong num_table_infos
;
148 /* various SFNT table indices */
158 /* values necessary to update the `maxp' table */
159 FT_UShort max_composite_points
;
160 FT_UShort max_composite_contours
;
161 FT_UShort max_storage
;
162 FT_UShort max_stack_elements
;
163 FT_UShort max_twilight_points
;
164 FT_UShort max_instructions
;
165 FT_UShort max_components
;
168 /* our font object */
169 typedef struct FONT_
{
186 TA_LoaderRec loader
[1]; /* the interface to the autohinter */
188 /* configuration options */
189 TA_Progress_Func progress
;
191 FT_UInt hinting_range_min
;
192 FT_UInt hinting_range_max
;
194 FT_Bool no_x_height_snapping
;
195 FT_Byte
* x_height_snapping_exceptions
;
196 FT_Bool ignore_permissions
;
197 FT_UInt fallback_script
;
201 #include "tatables.h"
202 #include "tabytecode.h"
206 TA_get_error_message(FT_Error error
);
209 TA_get_current_time(FT_ULong
*high
,
213 TA_font_init(FONT
* font
);
215 TA_font_unload(FONT
* font
,
220 TA_font_file_read(FONT
* font
,
223 TA_font_file_write(FONT
* font
,
227 TA_sfnt_build_glyph_instructions(SFNT
* sfnt
,
232 TA_sfnt_split_into_SFNT_tables(SFNT
* sfnt
,
236 TA_sfnt_build_cvt_table(SFNT
* sfnt
,
240 TA_table_build_DSIG(FT_Byte
** DSIG
);
243 TA_sfnt_build_fpgm_table(SFNT
* sfnt
,
247 TA_sfnt_build_gasp_table(SFNT
* sfnt
,
251 TA_sfnt_build_glyf_hints(SFNT
* sfnt
,
254 TA_sfnt_split_glyf_table(SFNT
* sfnt
,
257 TA_sfnt_build_glyf_table(SFNT
* sfnt
,
260 TA_sfnt_create_glyf_data(SFNT
* sfnt
,
264 TA_sfnt_update_GPOS_table(SFNT
* sfnt
,
268 TA_sfnt_update_hmtx_table(SFNT
* sfnt
,
272 TA_sfnt_build_loca_table(SFNT
* sfnt
,
276 TA_sfnt_update_maxp_table(SFNT
* sfnt
,
280 TA_sfnt_update_post_table(SFNT
* sfnt
,
284 TA_sfnt_build_prep_table(SFNT
* sfnt
,
288 TA_sfnt_build_TTF_header(SFNT
* sfnt
,
290 FT_Byte
** header_buf
,
291 FT_ULong
* header_len
,
294 TA_font_build_TTF(FONT
* font
);
297 TA_font_build_TTC(FONT
* font
);
299 #endif /* __TA_H__ */