1/***************************************************************************/
2/* */
3/* afmparse.h */
4/* */
5/* AFM parser (specification). */
6/* */
7/* Copyright 2006-2018 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_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
84FT_END_HEADER
85
86#endif /* AFMPARSE_H_ */
87
88
89/* END */
90