| 1 | /**************************************************************************** | 
|---|
| 2 | * | 
|---|
| 3 | * t1parse.h | 
|---|
| 4 | * | 
|---|
| 5 | *   Type 1 parser (specification). | 
|---|
| 6 | * | 
|---|
| 7 | * Copyright (C) 1996-2019 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 T1PARSE_H_ | 
|---|
| 20 | #define T1PARSE_H_ | 
|---|
| 21 |  | 
|---|
| 22 |  | 
|---|
| 23 | #include <ft2build.h> | 
|---|
| 24 | #include FT_INTERNAL_TYPE1_TYPES_H | 
|---|
| 25 | #include FT_INTERNAL_STREAM_H | 
|---|
| 26 |  | 
|---|
| 27 |  | 
|---|
| 28 | FT_BEGIN_HEADER | 
|---|
| 29 |  | 
|---|
| 30 |  | 
|---|
| 31 | /************************************************************************** | 
|---|
| 32 | * | 
|---|
| 33 | * @Struct: | 
|---|
| 34 | *   T1_ParserRec | 
|---|
| 35 | * | 
|---|
| 36 | * @Description: | 
|---|
| 37 | *   A PS_ParserRec is an object used to parse a Type 1 fonts very | 
|---|
| 38 | *   quickly. | 
|---|
| 39 | * | 
|---|
| 40 | * @Fields: | 
|---|
| 41 | *   root :: | 
|---|
| 42 | *     The root parser. | 
|---|
| 43 | * | 
|---|
| 44 | *   stream :: | 
|---|
| 45 | *     The current input stream. | 
|---|
| 46 | * | 
|---|
| 47 | *   base_dict :: | 
|---|
| 48 | *     A pointer to the top-level dictionary. | 
|---|
| 49 | * | 
|---|
| 50 | *   base_len :: | 
|---|
| 51 | *     The length in bytes of the top dictionary. | 
|---|
| 52 | * | 
|---|
| 53 | *   private_dict :: | 
|---|
| 54 | *     A pointer to the private dictionary. | 
|---|
| 55 | * | 
|---|
| 56 | *   private_len :: | 
|---|
| 57 | *     The length in bytes of the private dictionary. | 
|---|
| 58 | * | 
|---|
| 59 | *   in_pfb :: | 
|---|
| 60 | *     A boolean.  Indicates that we are handling a PFB | 
|---|
| 61 | *     file. | 
|---|
| 62 | * | 
|---|
| 63 | *   in_memory :: | 
|---|
| 64 | *     A boolean.  Indicates a memory-based stream. | 
|---|
| 65 | * | 
|---|
| 66 | *   single_block :: | 
|---|
| 67 | *     A boolean.  Indicates that the private dictionary | 
|---|
| 68 | *     is stored in lieu of the base dictionary. | 
|---|
| 69 | */ | 
|---|
| 70 | typedef struct  T1_ParserRec_ | 
|---|
| 71 | { | 
|---|
| 72 | PS_ParserRec  root; | 
|---|
| 73 | FT_Stream     stream; | 
|---|
| 74 |  | 
|---|
| 75 | FT_Byte*      base_dict; | 
|---|
| 76 | FT_ULong      base_len; | 
|---|
| 77 |  | 
|---|
| 78 | FT_Byte*      private_dict; | 
|---|
| 79 | FT_ULong      private_len; | 
|---|
| 80 |  | 
|---|
| 81 | FT_Bool       in_pfb; | 
|---|
| 82 | FT_Bool       in_memory; | 
|---|
| 83 | FT_Bool       single_block; | 
|---|
| 84 |  | 
|---|
| 85 | } T1_ParserRec, *T1_Parser; | 
|---|
| 86 |  | 
|---|
| 87 |  | 
|---|
| 88 | #define T1_Add_Table( p, i, o, l )  (p)->funcs.add( (p), i, o, l ) | 
|---|
| 89 | #define T1_Release_Table( p )          \ | 
|---|
| 90 | do                           \ | 
|---|
| 91 | {                            \ | 
|---|
| 92 | if ( (p)->funcs.release )  \ | 
|---|
| 93 | (p)->funcs.release( p ); \ | 
|---|
| 94 | } while ( 0 ) | 
|---|
| 95 |  | 
|---|
| 96 |  | 
|---|
| 97 | #define T1_Skip_Spaces( p )    (p)->root.funcs.skip_spaces( &(p)->root ) | 
|---|
| 98 | #define T1_Skip_PS_Token( p )  (p)->root.funcs.skip_PS_token( &(p)->root ) | 
|---|
| 99 |  | 
|---|
| 100 | #define T1_ToInt( p )       (p)->root.funcs.to_int( &(p)->root ) | 
|---|
| 101 | #define T1_ToFixed( p, t )  (p)->root.funcs.to_fixed( &(p)->root, t ) | 
|---|
| 102 |  | 
|---|
| 103 | #define T1_ToCoordArray( p, m, c )                           \ | 
|---|
| 104 | (p)->root.funcs.to_coord_array( &(p)->root, m, c ) | 
|---|
| 105 | #define T1_ToFixedArray( p, m, f, t )                           \ | 
|---|
| 106 | (p)->root.funcs.to_fixed_array( &(p)->root, m, f, t ) | 
|---|
| 107 | #define T1_ToToken( p, t )                          \ | 
|---|
| 108 | (p)->root.funcs.to_token( &(p)->root, t ) | 
|---|
| 109 | #define T1_ToTokenArray( p, t, m, c )                           \ | 
|---|
| 110 | (p)->root.funcs.to_token_array( &(p)->root, t, m, c ) | 
|---|
| 111 |  | 
|---|
| 112 | #define T1_Load_Field( p, f, o, m, pf )                         \ | 
|---|
| 113 | (p)->root.funcs.load_field( &(p)->root, f, o, m, pf ) | 
|---|
| 114 |  | 
|---|
| 115 | #define T1_Load_Field_Table( p, f, o, m, pf )                         \ | 
|---|
| 116 | (p)->root.funcs.load_field_table( &(p)->root, f, o, m, pf ) | 
|---|
| 117 |  | 
|---|
| 118 |  | 
|---|
| 119 | FT_LOCAL( FT_Error ) | 
|---|
| 120 | T1_New_Parser( T1_Parser      parser, | 
|---|
| 121 | FT_Stream      stream, | 
|---|
| 122 | FT_Memory      memory, | 
|---|
| 123 | PSAux_Service  psaux ); | 
|---|
| 124 |  | 
|---|
| 125 | FT_LOCAL( FT_Error ) | 
|---|
| 126 | T1_Get_Private_Dict( T1_Parser      parser, | 
|---|
| 127 | PSAux_Service  psaux ); | 
|---|
| 128 |  | 
|---|
| 129 | FT_LOCAL( void ) | 
|---|
| 130 | T1_Finalize_Parser( T1_Parser  parser ); | 
|---|
| 131 |  | 
|---|
| 132 |  | 
|---|
| 133 | FT_END_HEADER | 
|---|
| 134 |  | 
|---|
| 135 | #endif /* T1PARSE_H_ */ | 
|---|
| 136 |  | 
|---|
| 137 |  | 
|---|
| 138 | /* END */ | 
|---|
| 139 |  | 
|---|