1 /****************************************************************************
   2  *
   3  * afmparse.h
   4  *
   5  *   AFM parser (specification).
   6  *
   7  * Copyright (C) 2006-2020 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 */