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