1 /***************************************************************************/
5 /* Type 1 Glyph Loader (specification). */
7 /* Copyright 1996-2000 by */
8 /* David Turner, Robert Wilhelm, and Werner Lemberg. */
10 /* This file is part of the FreeType project, and may only be used, */
11 /* modified, and distributed under the terms of the FreeType project */
12 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */
13 /* this file you indicate that you have read the license and */
14 /* understand and accept it fully. */
16 /***************************************************************************/
23 #ifdef FT_FLAT_COMPILE
29 #include <freetype/src/type1/t1objs.h>
39 typedef struct T1_Builder_ T1_Builder;
41 typedef FT_Error (*T1_Builder_EndChar)( T1_Builder* loader );
43 typedef FT_Error (*T1_Builder_Sbw)( T1_Builder* loader,
49 typedef FT_Error (*T1_Builder_ClosePath)( T1_Builder* loader );
51 typedef FT_Error (*T1_Builder_RLineTo)( T1_Builder* loader,
55 typedef FT_Error (*T1_Builder_RMoveTo)( T1_Builder* loader,
59 typedef FT_Error (*T1_Builder_RCurveTo)( T1_Builder* loader,
68 /*************************************************************************/
71 /* T1_Builder_Funcs */
74 /* A structure to store the address of various functions used by a */
75 /* glyph builder to implement the outline's `path construction'. */
77 typedef struct T1_Builder_Funcs_
79 T1_Builder_EndChar end_char;
80 T1_Builder_Sbw set_bearing_point;
81 T1_Builder_ClosePath close_path;
82 T1_Builder_RLineTo rline_to;
83 T1_Builder_RMoveTo rmove_to;
84 T1_Builder_RCurveTo rcurve_to;
89 /*************************************************************************/
95 /* A structure used during glyph loading to store its outline. */
98 /* memory :: The current memory object. */
100 /* face :: The current face object. */
102 /* size :: The current size object. */
104 /* glyph :: The current glyph slot. */
106 /* loader :: The current glyph loader. */
108 /* current :: The current glyph outline. */
110 /* base :: The base glyph outline. */
112 /* last :: The last point position. */
114 /* scale_x :: The horizontal scale (FUnits to sub-pixels). */
116 /* scale_y :: The vertical scale (FUnits to sub-pixels). */
118 /* pos_x :: The horizontal translation (for composite glyphs). */
120 /* pos_y :: The vertical translation (for composite glyphs). */
122 /* left_bearing :: The left side bearing point. */
124 /* advance :: The horizontal advance vector. */
128 /* bbox :: The glyph's bounding box. */
130 /* path_begun :: A flag which indicates that a new path has begun. */
132 /* load_points :: A flag which indicates, if not set, that no points */
135 /* pass :: The pass number for multi-pass hinters. */
137 /* hint_point :: The index of the next point to hint. */
139 /* funcs :: A table of builder functions used to perform the */
140 /* outline's path construction. */
148 FT_GlyphLoader* loader;
150 FT_Outline* current; /* the current glyph outline */
151 FT_Outline* base; /* the composite glyph outline */
161 FT_Vector left_bearing;
165 FT_BBox bbox; /* bounding box */
172 /* path construction function interface */
173 T1_Builder_Funcs funcs;
177 typedef FT_Error (*T1_Hinter_ChangeHints)( T1_Builder* builder );
179 typedef FT_Error (*T1_Hinter_DotSection)( T1_Builder* builder );
181 typedef FT_Error (*T1_Hinter_Stem)( T1_Builder* builder,
186 typedef FT_Error (*T1_Hinter_Stem3)( T1_Builder* builder,
196 /*************************************************************************/
199 /* T1_Hinter_Funcs */
202 /* A structure to store the address of various functions used by a */
203 /* Type 1 hinter to perform outline hinting. */
205 typedef struct T1_Hinter_Func_
207 T1_Hinter_ChangeHints change_hints;
208 T1_Hinter_DotSection dot_section;
210 T1_Hinter_Stem3 stem3;
215 typedef enum T1_Operator_
244 op_max /* never remove this one */
249 /* execution context charstring zone */
250 typedef struct T1_Decoder_Zone_
259 typedef struct T1_Decoder_
262 T1_Hinter_Funcs hinter;
264 FT_Int stack[T1_MAX_CHARSTRINGS_OPERANDS];
267 T1_Decoder_Zone zones[T1_MAX_SUBRS_CALLS + 1];
268 T1_Decoder_Zone* zone;
271 FT_Int num_flex_vectors;
272 FT_Vector flex_vectors[7];
278 void T1_Init_Builder( T1_Builder* builder,
282 const T1_Builder_Funcs* funcs );
285 void T1_Done_Builder( T1_Builder* builder );
288 void T1_Init_Decoder( T1_Decoder* decoder,
289 const T1_Hinter_Funcs* funcs );
292 FT_Error T1_Compute_Max_Advance( T1_Face face,
293 FT_Int* max_advance );
296 FT_Error T1_Parse_CharStrings( T1_Decoder* decoder,
297 FT_Byte* charstring_base,
298 FT_Int charstring_len,
300 FT_Byte** subrs_base,
304 FT_Error T1_Add_Points( T1_Builder* builder,
308 FT_Error T1_Add_Contours( T1_Builder* builder,
309 FT_Int num_contours );
312 FT_Error T1_Load_Glyph( T1_GlyphSlot glyph,
323 #endif /* T1GLOAD_H */