1 /***************************************************************************/
2 /*                                                                         */
3 /*  afmparse.h                                                             */
4 /*                                                                         */
5 /*    AFM parser (specification).                                          */
6 /*                                                                         */
7 /*  Copyright 2006-2015 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 __AFMPARSE_H__
20 #define __AFMPARSE_H__
21 
22 
23 #include <ft2build.h>
24 #include FT_INTERNAL_POSTSCRIPT_AUX_H
25 
26 
27 FT_BEGIN_HEADER
28 
29 
30   FT_LOCAL( FT_Error )
31   afm_parser_init( AFM_Parser  parser,
32                    FT_Memory   memory,
33                    FT_Byte*    base,
34                    FT_Byte*    limit );
35 
36 
37   FT_LOCAL( void )
38   afm_parser_done( AFM_Parser  parser );
39 
40 
41   FT_LOCAL( FT_Error )
42   afm_parser_parse( AFM_Parser  parser );
43 
44 
45   enum  AFM_ValueType_
46   {
47     AFM_VALUE_TYPE_STRING,
48     AFM_VALUE_TYPE_NAME,
49     AFM_VALUE_TYPE_FIXED,   /* real number */
50     AFM_VALUE_TYPE_INTEGER,
51     AFM_VALUE_TYPE_BOOL,
52     AFM_VALUE_TYPE_INDEX    /* glyph index */
53   };
54 
55 
56   typedef struct  AFM_ValueRec_
57   {
58     enum AFM_ValueType_  type;
59     union
60     {
61       char*     s;
62       FT_Fixed  f;
63       FT_Int    i;
64       FT_UInt   u;
65       FT_Bool   b;
66 
67     } u;
68 
69   } AFM_ValueRec, *AFM_Value;
70 
71 #define  AFM_MAX_ARGUMENTS  5
72 
73   FT_LOCAL( FT_Int )
74   afm_parser_read_vals( AFM_Parser  parser,
75                         AFM_Value   vals,
76                         FT_Int      n );
77 
78   /* read the next key from the next line or column */
79   FT_LOCAL( char* )
80   afm_parser_next_key( AFM_Parser  parser,
81                        FT_Bool     line,
82                        FT_Offset*  len );
83 
84 FT_END_HEADER
85 
86 #endif /* __AFMPARSE_H__ */
87 
88 
89 /* END */
90