The BIG graph update
[rrdtool.git] / libraries / freetype-2.0.5 / include / cffgload.h
1 /***************************************************************************/
2 /*                                                                         */
3 /*  cffgload.h                                                             */
4 /*                                                                         */
5 /*    OpenType Glyph Loader (specification).                               */
6 /*                                                                         */
7 /*  Copyright 1996-2001 by                                                 */
8 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
9 /*                                                                         */
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.                                        */
15 /*                                                                         */
16 /***************************************************************************/
17
18
19 #ifndef __CFFGLOAD_H__
20 #define __CFFGLOAD_H__
21
22
23 #include <ft2build.h>
24 #include FT_FREETYPE_H
25 #include "cffobjs.h"
26
27
28 FT_BEGIN_HEADER
29
30
31 #define CFF_MAX_OPERANDS     48
32 #define CFF_MAX_SUBRS_CALLS  32
33
34
35   /*************************************************************************/
36   /*                                                                       */
37   /* <Structure>                                                           */
38   /*    CFF_Builder                                                        */
39   /*                                                                       */
40   /* <Description>                                                         */
41   /*     A structure used during glyph loading to store its outline.       */
42   /*                                                                       */
43   /* <Fields>                                                              */
44   /*    memory       :: The current memory object.                         */
45   /*                                                                       */
46   /*    face         :: The current face object.                           */
47   /*                                                                       */
48   /*    glyph        :: The current glyph slot.                            */
49   /*                                                                       */
50   /*    current      :: The current glyph outline.                         */
51   /*                                                                       */
52   /*    base         :: The base glyph outline.                            */
53   /*                                                                       */
54   /*    max_points   :: maximum points in builder outline                  */
55   /*                                                                       */
56   /*    max_contours :: Maximal number of contours in builder outline.     */
57   /*                                                                       */
58   /*    last         :: The last point position.                           */
59   /*                                                                       */
60   /*    scale_x      :: The horizontal scale (FUnits to sub-pixels).       */
61   /*                                                                       */
62   /*    scale_y      :: The vertical scale (FUnits to sub-pixels).         */
63   /*                                                                       */
64   /*    pos_x        :: The horizontal translation (if composite glyph).   */
65   /*                                                                       */
66   /*    pos_y        :: The vertical translation (if composite glyph).     */
67   /*                                                                       */
68   /*    left_bearing :: The left side bearing point.                       */
69   /*                                                                       */
70   /*    advance      :: The horizontal advance vector.                     */
71   /*                                                                       */
72   /*    bbox         :: Unused.                                            */
73   /*                                                                       */
74   /*    path_begun   :: A flag which indicates that a new path has begun.  */
75   /*                                                                       */
76   /*    load_points  :: If this flag is not set, no points are loaded.     */
77   /*                                                                       */
78   /*    no_recurse   :: Set but not used.                                  */
79   /*                                                                       */
80   /*    error        :: An error code that is only used to report memory   */
81   /*                    allocation problems.                               */
82   /*                                                                       */
83   /*    metrics_only :: A boolean indicating that we only want to compute  */
84   /*                    the metrics of a given glyph, not load all of its  */
85   /*                    points.                                            */
86   /*                                                                       */
87   typedef struct  CFF_Builder_
88   {
89     FT_Memory         memory;
90     TT_Face           face;
91     CFF_GlyphSlot     glyph;
92     FT_GlyphLoader*   loader;
93     FT_Outline*       base;
94     FT_Outline*       current;
95
96     FT_Vector         last;
97
98     FT_Fixed          scale_x;
99     FT_Fixed          scale_y;
100
101     FT_Pos            pos_x;
102     FT_Pos            pos_y;
103
104     FT_Vector         left_bearing;
105     FT_Vector         advance;
106
107     FT_BBox           bbox;          /* bounding box */
108     FT_Bool           path_begun;
109     FT_Bool           load_points;
110     FT_Bool           no_recurse;
111
112     FT_Error          error;         /* only used for memory errors */
113     FT_Bool           metrics_only;
114
115   } CFF_Builder;
116
117
118   /* execution context charstring zone */
119
120   typedef struct  CFF_Decoder_Zone_
121   {
122     FT_Byte*  base;
123     FT_Byte*  limit;
124     FT_Byte*  cursor;
125
126   } CFF_Decoder_Zone;
127
128
129   typedef struct  CFF_Decoder_
130   {
131     CFF_Builder        builder;
132     CFF_Font*          cff;
133
134     FT_Fixed           stack[CFF_MAX_OPERANDS + 1];
135     FT_Fixed*          top;
136
137     CFF_Decoder_Zone   zones[CFF_MAX_SUBRS_CALLS + 1];
138     CFF_Decoder_Zone*  zone;
139
140     FT_Int             flex_state;
141     FT_Int             num_flex_vectors;
142     FT_Vector          flex_vectors[7];
143
144     FT_Pos             glyph_width;
145     FT_Pos             nominal_width;
146
147     FT_Bool            read_width;
148     FT_Int             num_hints;
149     FT_Fixed*          buildchar;
150     FT_Int             len_buildchar;
151
152     FT_UInt            num_locals;
153     FT_UInt            num_globals;
154
155     FT_Int             locals_bias;
156     FT_Int             globals_bias;
157
158     FT_Byte**          locals;
159     FT_Byte**          globals;
160
161     FT_Byte**          glyph_names;   /* for pure CFF fonts only  */
162     FT_UInt            num_glyphs;    /* number of glyphs in font */
163
164   } CFF_Decoder;
165
166
167   FT_LOCAL void
168   CFF_Init_Decoder( CFF_Decoder*   decoder,
169                     TT_Face        face,
170                     CFF_Size       size,
171                     CFF_GlyphSlot  slot );
172
173   FT_LOCAL void
174   CFF_Prepare_Decoder( CFF_Decoder*  decoder,
175                        FT_UInt       glyph_index );
176
177 #if 0  /* unused until we support pure CFF fonts */
178
179   /* Compute the maximum advance width of a font through quick parsing */
180   FT_LOCAL FT_Error
181   CFF_Compute_Max_Advance( TT_Face  face,
182                            FT_Int*  max_advance );
183
184 #endif /* 0 */
185
186   FT_LOCAL FT_Error
187   CFF_Parse_CharStrings( CFF_Decoder*  decoder,
188                          FT_Byte*      charstring_base,
189                          FT_Int        charstring_len );
190
191   FT_LOCAL FT_Error
192   CFF_Load_Glyph( CFF_GlyphSlot  glyph,
193                   CFF_Size       size,
194                   FT_Int         glyph_index,
195                   FT_Int         load_flags );
196
197
198 FT_END_HEADER
199
200 #endif /* __CFFGLOAD_H__ */
201
202
203 /* END */