1 /***************************************************************************/
5 /* OpenType Glyph Loader (specification). */
7 /* Copyright 1996-2001, 2002 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 /***************************************************************************/
19 #ifndef __CFFGLOAD_H__
20 #define __CFFGLOAD_H__
24 #include FT_FREETYPE_H
31 #define CFF_MAX_OPERANDS 48
32 #define CFF_MAX_SUBRS_CALLS 32
35 /*************************************************************************/
41 /* A structure used during glyph loading to store its outline. */
44 /* memory :: The current memory object. */
46 /* face :: The current face object. */
48 /* glyph :: The current glyph slot. */
50 /* loader :: The current glyph loader. */
52 /* base :: The base glyph outline. */
54 /* current :: The current glyph outline. */
56 /* last :: The last point position. */
58 /* scale_x :: The horizontal scale (FUnits to sub-pixels). */
60 /* scale_y :: The vertical scale (FUnits to sub-pixels). */
62 /* pos_x :: The horizontal translation (if composite glyph). */
64 /* pos_y :: The vertical translation (if composite glyph). */
66 /* left_bearing :: The left side bearing point. */
68 /* advance :: The horizontal advance vector. */
72 /* path_begun :: A flag which indicates that a new path has begun. */
74 /* load_points :: If this flag is not set, no points are loaded. */
76 /* no_recurse :: Set but not used. */
78 /* error :: An error code that is only used to report memory */
79 /* allocation problems. */
81 /* metrics_only :: A boolean indicating that we only want to compute */
82 /* the metrics of a given glyph, not load all of its */
85 /* hints_funcs :: Auxiliary pointer for hinting. */
87 /* hints_globals :: Auxiliary pointer for hinting. */
89 typedef struct CFF_Builder_
94 FT_GlyphLoader loader;
106 FT_Vector left_bearing;
109 FT_BBox bbox; /* bounding box */
114 FT_Error error; /* only used for memory errors */
115 FT_Bool metrics_only;
117 FT_UInt32 hint_flags;
119 void* hints_funcs; /* hinter-specific */
120 void* hints_globals; /* hinter-specific */
125 /* execution context charstring zone */
127 typedef struct CFF_Decoder_Zone_
136 typedef struct CFF_Decoder_
141 FT_Fixed stack[CFF_MAX_OPERANDS + 1];
144 CFF_Decoder_Zone zones[CFF_MAX_SUBRS_CALLS + 1];
145 CFF_Decoder_Zone* zone;
148 FT_Int num_flex_vectors;
149 FT_Vector flex_vectors[7];
152 FT_Pos nominal_width;
157 FT_Int len_buildchar;
168 FT_Byte** glyph_names; /* for pure CFF fonts only */
169 FT_UInt num_glyphs; /* number of glyphs in font */
171 FT_Render_Mode hint_mode;
177 cff_decoder_init( CFF_Decoder* decoder,
182 FT_Render_Mode hint_mode );
185 cff_decoder_prepare( CFF_Decoder* decoder,
186 FT_UInt glyph_index );
188 #if 0 /* unused until we support pure CFF fonts */
190 /* Compute the maximum advance width of a font through quick parsing */
192 cff_compute_max_advance( TT_Face face,
193 FT_Int* max_advance );
198 cff_decoder_parse_charstrings( CFF_Decoder* decoder,
199 FT_Byte* charstring_base,
200 FT_ULong charstring_len );
203 cff_slot_load( CFF_GlyphSlot glyph,
206 FT_Int32 load_flags );
211 #endif /* __CFFGLOAD_H__ */