1/***************************************************************************/
2/*                                                                         */
3/*  afmparse.h                                                             */
4/*                                                                         */
5/*    AFM parser (specification).                                          */
6/*                                                                         */
7/*  Copyright 2006 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
27FT_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_Bool   b;
65
66    } u;
67
68  } AFM_ValueRec, *AFM_Value;
69
70#define  AFM_MAX_ARGUMENTS  5
71
72  FT_LOCAL( FT_Int )
73  afm_parser_read_vals( AFM_Parser  parser,
74                        AFM_Value   vals,
75                        FT_UInt     n );
76
77  /* read the next key from the next line or column */
78  FT_LOCAL( char* )
79  afm_parser_next_key( AFM_Parser  parser,
80                       FT_Bool     line,
81                       FT_Offset*  len );
82
83FT_END_HEADER
84
85#endif /* __AFMPARSE_H__ */
86
87
88/* END */
89