1 /**************************************************************************** 2 * 3 * t1parse.h 4 * 5 * Type 1 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 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