1 /***************************************************************************/
   2 /*                                                                         */
   3 /*  cidparse.h                                                             */
   4 /*                                                                         */
   5 /*    CID-keyed Type1 parser (specification).                              */
   6 /*                                                                         */
   7 /*  Copyright 1996-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 CIDPARSE_H_
  20 #define CIDPARSE_H_
  21 
  22 
  23 #include <ft2build.h>
  24 #include FT_INTERNAL_TYPE1_TYPES_H
  25 #include FT_INTERNAL_STREAM_H
  26 #include FT_INTERNAL_POSTSCRIPT_AUX_H
  27 
  28 
  29 FT_BEGIN_HEADER
  30 
  31 
  32   /*************************************************************************/
  33   /*                                                                       */
  34   /* <Struct>                                                              */
  35   /*    CID_Parser                                                         */
  36   /*                                                                       */
  37   /* <Description>                                                         */
  38   /*    A CID_Parser is an object used to parse a Type 1 fonts very        */
  39   /*    quickly.                                                           */
  40   /*                                                                       */
  41   /* <Fields>                                                              */
  42   /*    root           :: The root PS_ParserRec fields.                    */
  43   /*                                                                       */
  44   /*    stream         :: The current input stream.                        */
  45   /*                                                                       */
  46   /*    postscript     :: A pointer to the data to be parsed.              */
  47   /*                                                                       */
  48   /*    postscript_len :: The length of the data to be parsed.             */
  49   /*                                                                       */
  50   /*    data_offset    :: The start position of the binary data (i.e., the */
  51   /*                      end of the data to be parsed.                    */
  52   /*                                                                       */
  53   /*    binary_length  :: The length of the data after the `StartData'     */
  54   /*                      command if the data format is hexadecimal.       */
  55   /*                                                                       */
  56   /*    cid            :: A structure which holds the information about    */
  57   /*                      the current font.                                */
  58   /*                                                                       */
  59   /*    num_dict       :: The number of font dictionaries.                 */
  60   /*                                                                       */
  61   typedef struct  CID_Parser_
  62   {
  63     PS_ParserRec  root;
  64     FT_Stream     stream;
  65 
  66     FT_Byte*      postscript;
  67     FT_ULong      postscript_len;
  68 
  69     FT_ULong      data_offset;
  70 
  71     FT_ULong      binary_length;
  72 
  73     CID_FaceInfo  cid;
  74     FT_Int        num_dict;
  75 
  76   } CID_Parser;
  77 
  78 
  79   FT_LOCAL( FT_Error )
  80   cid_parser_new( CID_Parser*    parser,
  81                   FT_Stream      stream,
  82                   FT_Memory      memory,
  83                   PSAux_Service  psaux );
  84 
  85   FT_LOCAL( void )
  86   cid_parser_done( CID_Parser*  parser );
  87 
  88 
  89   /*************************************************************************/
  90   /*                                                                       */
  91   /*                            PARSING ROUTINES                           */
  92   /*                                                                       */
  93   /*************************************************************************/
  94 
  95 #define cid_parser_skip_spaces( p )                 \
  96           (p)->root.funcs.skip_spaces( &(p)->root )
  97 #define cid_parser_skip_PS_token( p )                 \
  98           (p)->root.funcs.skip_PS_token( &(p)->root )
  99 
 100 #define cid_parser_to_int( p )       (p)->root.funcs.to_int( &(p)->root )
 101 #define cid_parser_to_fixed( p, t )  (p)->root.funcs.to_fixed( &(p)->root, t )
 102 
 103 #define cid_parser_to_coord_array( p, m, c )                 \
 104           (p)->root.funcs.to_coord_array( &(p)->root, m, c )
 105 #define cid_parser_to_fixed_array( p, m, f, t )                 \
 106           (p)->root.funcs.to_fixed_array( &(p)->root, m, f, t )
 107 #define cid_parser_to_token( p, t )                 \
 108           (p)->root.funcs.to_token( &(p)->root, t )
 109 #define cid_parser_to_token_array( p, t, m, c )                 \
 110           (p)->root.funcs.to_token_array( &(p)->root, t, m, c )
 111 
 112 #define cid_parser_load_field( p, f, o )                       \
 113           (p)->root.funcs.load_field( &(p)->root, f, o, 0, 0 )
 114 #define cid_parser_load_field_table( p, f, o )                       \
 115           (p)->root.funcs.load_field_table( &(p)->root, f, o, 0, 0 )
 116 
 117 
 118 FT_END_HEADER
 119 
 120 #endif /* CIDPARSE_H_ */
 121 
 122 
 123 /* END */