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 
  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 */