update for HEAD-2003021201
[reactos.git] / subsys / win32k / freetype / src / type1 / t1parse.h
1 /***************************************************************************/
2 /*                                                                         */
3 /*  t1parse.h                                                              */
4 /*                                                                         */
5 /*    Type 1 parser (specification).                                       */
6 /*                                                                         */
7 /*  Copyright 1996-2000 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   /*************************************************************************/
20   /*                                                                       */
21   /* The Type1 parser component is in charge of simply parsing the font    */
22   /* input stream and convert simple tokens and elements into integers,    */
23   /* floats, matrices, strings, etc.                                       */
24   /*                                                                       */
25   /* It is used by the Type1 loader.                                       */
26   /*                                                                       */
27   /*************************************************************************/
28
29
30 #ifndef T1PARSE_H
31 #define T1PARSE_H
32
33 #include <freetype/internal/ftstream.h>
34
35
36 #ifdef FT_FLAT_COMPILE
37
38 #include "t1tokens.h"
39
40 #else
41
42 #include <freetype/src/type1/t1tokens.h>
43
44 #endif
45
46
47 #ifdef __cplusplus
48   extern "C" {
49 #endif
50
51
52   /*************************************************************************/
53   /*                                                                       */
54   /* <Enum>                                                                */
55   /*    T1_DictState                                                       */
56   /*                                                                       */
57   /* <Description>                                                         */
58   /*    An enumeration used to describe the Type 1 parser's state, i.e.    */
59   /*    which dictionary (or array) it is scanning and processing at the   */
60   /*    current moment.                                                    */
61   /*                                                                       */
62   typedef enum  T1_DictState_
63   {
64     dict_none = 0,
65     dict_font,          /* parsing the font dictionary              */
66     dict_fontinfo,      /* parsing the font info dictionary         */
67     dict_none2,         /* beginning to parse the encrypted section */
68     dict_private,       /* parsing the private dictionary           */
69     dict_encoding,      /* parsing the encoding array               */
70     dict_subrs,         /* parsing the subrs array                  */
71     dict_othersubrs,    /* parsing the othersubrs array (?)         */
72     dict_charstrings,   /* parsing the charstrings dictionary       */
73     dict_unknown_array, /* parsing/ignoring an unknown array        */
74     dict_unknown_dict,  /* parsing/ignoring an unknown dictionary   */
75
76     dict_max    /* do not remove from list */
77
78   } T1_DictState;
79
80
81   /*************************************************************************/
82   /*                                                                       */
83   /* <Struct>                                                              */
84   /*    T1_Table                                                           */
85   /*                                                                       */
86   /* <Description>                                                         */
87   /*    A T1_Table is a simple object used to store an array of objects in */
88   /*    a single memory block.                                             */
89   /*                                                                       */
90   /* <Fields>                                                              */
91   /*    block     :: The address in memory of the growheap's block.  This  */
92   /*                 can change between two object adds, due to            */
93   /*                 reallocation.                                         */
94   /*                                                                       */
95   /*    cursor    :: The current top of the grow heap within its block.    */
96   /*                                                                       */
97   /*    capacity  :: The current size of the heap block.  Increments by    */
98   /*                 1kByte chunks.                                        */
99   /*                                                                       */
100   /*    max_elems :: The maximum number of elements in table.              */
101   /*                                                                       */
102   /*    num_elems :: The current number of elements in table.              */
103   /*                                                                       */
104   /*    elements  :: A table of element addresses within the block.        */
105   /*                                                                       */
106   /*    lengths   :: A table of element sizes within the block.            */
107   /*                                                                       */
108   /*    memory    :: The object used for memory operations                 */
109   /*                 (alloc/realloc).                                      */
110   /*                                                                       */
111   typedef struct  T1_Table_
112   {
113     FT_Byte*   block;          /* current memory block           */
114     FT_Int     cursor;         /* current cursor in memory block */
115     FT_Int     capacity;       /* current size of memory block   */
116
117     FT_Int     max_elems;
118     FT_Int     num_elems;
119     FT_Byte**  elements;       /* addresses of table elements */
120     FT_Int*    lengths;        /* lengths of table elements   */
121
122     FT_Memory  memory;
123
124   } T1_Table;
125
126
127   /*************************************************************************/
128   /*                                                                       */
129   /* <Struct>                                                              */
130   /*    T1_Parser                                                          */
131   /*                                                                       */
132   /* <Description>                                                         */
133   /*    A Type 1 parser.  This object is in charge of parsing Type 1 ASCII */
134   /*    streams and builds dictionaries for a T1_Face object.              */
135   /*                                                                       */
136   /* <Fields>                                                              */
137   /*    error            :: The current error code.  0 means success.      */
138   /*                                                                       */
139   /*    face             :: The target T1_Face object being built.         */
140   /*                                                                       */
141   /*    tokenizer        :: The tokenizer (lexical analyser) used for      */
142   /*                        processing the input stream.                   */
143   /*                                                                       */
144   /*    dump_tokens      :: XXX                                            */
145   /*                                                                       */
146   /*    stack            :: The current token stack.  Note that we don't   */
147   /*                        use intermediate Postscript objects here!      */
148   /*                                                                       */
149   /*    top              :: The current top of token stack.                */
150   /*                                                                       */
151   /*    limit            :: The current upper bound of the token stack.    */
152   /*                        Used for overflow checks.                      */
153   /*                                                                       */
154   /*    args             :: The arguments of a given operator.  Used and   */
155   /*                        increased by the various CopyXXX() functions.  */
156   /*                                                                       */
157   /*    state_index      :: The index of the top of the dictionary state   */
158   /*                        stack.                                         */
159   /*                                                                       */
160   /*    state_stack      :: The dictionary states stack.                   */
161   /*                                                                       */
162   /*    table            :: A T1_Table object used to record various kinds */
163   /*                        of dictionaries or arrays (like `/Encoding',   */
164   /*                        `/Subrs', `/CharStrings').                     */
165   /*                                                                       */
166   /*    cur_name         :: XXX                                            */
167   /*                                                                       */
168   /*    encoding_type    :: XXX                                            */
169   /*                                                                       */
170   /*    encoding_names   :: XXX                                            */
171   /*                                                                       */
172   /*    encoding_lengths :: XXX                                            */
173   /*                                                                       */
174   /*    encoding_offsets :: XXX                                            */
175   /*                                                                       */
176   /*    subrs            :: XXX                                            */
177   /*                                                                       */
178   /*    charstrings      :: XXX                                            */
179   /*                                                                       */
180   typedef  struct  T1_Parser_
181   {
182     FT_Error         error;
183     T1_Face          face;
184
185     T1_Tokenizer     tokenizer;
186     FT_Bool          dump_tokens;
187
188     T1_Token         stack[T1_MAX_STACK_DEPTH];
189     T1_Token*        top;
190     T1_Token*        limit;
191     T1_Token*        args;
192
193     FT_Int           state_index;
194     T1_DictState     state_stack[T1_MAX_DICT_DEPTH];
195
196         T1_Table         table;
197
198         FT_Int           cur_name;
199
200         T1_EncodingType  encoding_type;
201     FT_Byte*         encoding_names;
202     FT_Int*          encoding_lengths;
203     FT_Byte**        encoding_offsets;
204
205     FT_Byte*         subrs;
206     FT_Byte*         charstrings;
207
208   } T1_Parser;
209
210
211   LOCAL_DEF
212   FT_Error  T1_New_Table( T1_Table*  table,
213                           FT_Int     count,
214                           FT_Memory  memory );
215
216   LOCAL_DEF
217   FT_Error  T1_Add_Table( T1_Table*  table,
218                           FT_Int     index,
219                           void*      object,
220                           FT_Int     length );
221
222   LOCAL_DEF
223   void  T1_Done_Table( T1_Table*  table );
224
225
226   LOCAL_DEF
227   FT_String*  CopyString( T1_Parser*  parser );
228
229   LOCAL_DEF
230   FT_Long  CopyInteger( T1_Parser*  parser );
231
232   LOCAL_DEF
233   FT_Bool  CopyBoolean( T1_Parser*  parser );
234
235   LOCAL_DEF
236   FT_Long  CopyFloat( T1_Parser*  parser,
237                       FT_Int      scale );
238
239   LOCAL_DEF
240   void  CopyBBox( T1_Parser*  parser,
241                   FT_BBox*    bbox );
242
243   LOCAL_DEF
244   void  CopyMatrix( T1_Parser*  parser,
245                     FT_Matrix*  matrix );
246
247   LOCAL_DEF
248   void  CopyArray( T1_Parser*  parser,
249                    FT_Byte*    num_elements,
250                    FT_Short*   elements,
251                    FT_Int      max_elements );
252
253
254 #ifdef __cplusplus
255   }
256 #endif
257
258 #endif /* T1PARSE_H */
259
260
261 /* END */