Werner Lemberg | 7fa51b5 | 2000-07-08 19:51:42 +0000 | [diff] [blame] | 1 | /***************************************************************************/ |
| 2 | /* */ |
Werner Lemberg | b5084e1 | 2000-10-28 17:10:06 +0000 | [diff] [blame] | 3 | /* t1parse.h */ |
Werner Lemberg | 7fa51b5 | 2000-07-08 19:51:42 +0000 | [diff] [blame] | 4 | /* */ |
Werner Lemberg | b5084e1 | 2000-10-28 17:10:06 +0000 | [diff] [blame] | 5 | /* Type 1 parser (specification). */ |
Werner Lemberg | 7fa51b5 | 2000-07-08 19:51:42 +0000 | [diff] [blame] | 6 | /* */ |
Werner Lemberg | 52f911a | 2003-10-07 05:49:41 +0000 | [diff] [blame] | 7 | /* Copyright 1996-2001, 2002, 2003 by */ |
Werner Lemberg | 7fa51b5 | 2000-07-08 19:51:42 +0000 | [diff] [blame] | 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 | |
David Turner | 2dfb5ac | 2000-01-27 14:02:04 +0000 | [diff] [blame] | 18 | |
Werner Lemberg | 90d9964 | 2000-12-09 00:45:38 +0000 | [diff] [blame] | 19 | #ifndef __T1PARSE_H__ |
| 20 | #define __T1PARSE_H__ |
David Turner | 2dfb5ac | 2000-01-27 14:02:04 +0000 | [diff] [blame] | 21 | |
Werner Lemberg | cc069be | 2000-12-08 16:17:16 +0000 | [diff] [blame] | 22 | |
David Turner | 19ed8af | 2000-12-08 02:42:29 +0000 | [diff] [blame] | 23 | #include <ft2build.h> |
| 24 | #include FT_INTERNAL_TYPE1_TYPES_H |
| 25 | #include FT_INTERNAL_STREAM_H |
David Turner | 2dfb5ac | 2000-01-27 14:02:04 +0000 | [diff] [blame] | 26 | |
Werner Lemberg | cc069be | 2000-12-08 16:17:16 +0000 | [diff] [blame] | 27 | |
David Turner | 19ed8af | 2000-12-08 02:42:29 +0000 | [diff] [blame] | 28 | FT_BEGIN_HEADER |
David Turner | f5dcdd5 | 2000-05-23 22:16:27 +0000 | [diff] [blame] | 29 | |
Werner Lemberg | cc069be | 2000-12-08 16:17:16 +0000 | [diff] [blame] | 30 | |
Werner Lemberg | 7fa51b5 | 2000-07-08 19:51:42 +0000 | [diff] [blame] | 31 | /*************************************************************************/ |
| 32 | /* */ |
| 33 | /* <Struct> */ |
Werner Lemberg | b5084e1 | 2000-10-28 17:10:06 +0000 | [diff] [blame] | 34 | /* T1_ParserRec */ |
Werner Lemberg | 7fa51b5 | 2000-07-08 19:51:42 +0000 | [diff] [blame] | 35 | /* */ |
| 36 | /* <Description> */ |
David Turner | 4e7eeee | 2002-02-28 16:10:29 +0000 | [diff] [blame] | 37 | /* A PS_ParserRec is an object used to parse a Type 1 fonts very */ |
Werner Lemberg | 7fa51b5 | 2000-07-08 19:51:42 +0000 | [diff] [blame] | 38 | /* quickly. */ |
| 39 | /* */ |
| 40 | /* <Fields> */ |
Werner Lemberg | 8728f29 | 2000-08-23 17:32:42 +0000 | [diff] [blame] | 41 | /* root :: The root parser. */ |
Werner Lemberg | 7fa51b5 | 2000-07-08 19:51:42 +0000 | [diff] [blame] | 42 | /* */ |
Werner Lemberg | 8728f29 | 2000-08-23 17:32:42 +0000 | [diff] [blame] | 43 | /* stream :: The current input stream. */ |
Werner Lemberg | 7fa51b5 | 2000-07-08 19:51:42 +0000 | [diff] [blame] | 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 | /* */ |
Werner Lemberg | b5084e1 | 2000-10-28 17:10:06 +0000 | [diff] [blame] | 61 | typedef struct T1_ParserRec_ |
David Turner | 2dfb5ac | 2000-01-27 14:02:04 +0000 | [diff] [blame] | 62 | { |
David Turner | 4e7eeee | 2002-02-28 16:10:29 +0000 | [diff] [blame] | 63 | PS_ParserRec root; |
| 64 | FT_Stream stream; |
David Turner | e49ab25 | 2000-05-16 23:44:38 +0000 | [diff] [blame] | 65 | |
David Turner | 4e7eeee | 2002-02-28 16:10:29 +0000 | [diff] [blame] | 66 | FT_Byte* base_dict; |
Werner Lemberg | 7a99b50 | 2002-09-17 07:31:17 +0000 | [diff] [blame] | 67 | FT_Long base_len; |
David Turner | e49ab25 | 2000-05-16 23:44:38 +0000 | [diff] [blame] | 68 | |
David Turner | 4e7eeee | 2002-02-28 16:10:29 +0000 | [diff] [blame] | 69 | FT_Byte* private_dict; |
Werner Lemberg | 7a99b50 | 2002-09-17 07:31:17 +0000 | [diff] [blame] | 70 | FT_Long private_len; |
David Turner | e49ab25 | 2000-05-16 23:44:38 +0000 | [diff] [blame] | 71 | |
Werner Lemberg | 52f911a | 2003-10-07 05:49:41 +0000 | [diff] [blame] | 72 | FT_Bool in_pfb; |
| 73 | FT_Bool in_memory; |
| 74 | FT_Bool single_block; |
David Turner | 2dfb5ac | 2000-01-27 14:02:04 +0000 | [diff] [blame] | 75 | |
David Turner | 4e7eeee | 2002-02-28 16:10:29 +0000 | [diff] [blame] | 76 | } T1_ParserRec, *T1_Parser; |
David Turner | 2dfb5ac | 2000-01-27 14:02:04 +0000 | [diff] [blame] | 77 | |
| 78 | |
Werner Lemberg | b5084e1 | 2000-10-28 17:10:06 +0000 | [diff] [blame] | 79 | #define T1_Add_Table( p, i, o, l ) (p)->funcs.add( (p), i, o, l ) |
| 80 | #define T1_Done_Table( p ) \ |
Werner Lemberg | 8728f29 | 2000-08-23 17:32:42 +0000 | [diff] [blame] | 81 | do \ |
| 82 | { \ |
| 83 | if ( (p)->funcs.done ) \ |
| 84 | (p)->funcs.done( p ); \ |
| 85 | } while ( 0 ) |
Werner Lemberg | b5084e1 | 2000-10-28 17:10:06 +0000 | [diff] [blame] | 86 | #define T1_Release_Table( p ) \ |
Werner Lemberg | 8728f29 | 2000-08-23 17:32:42 +0000 | [diff] [blame] | 87 | do \ |
| 88 | { \ |
| 89 | if ( (p)->funcs.release ) \ |
| 90 | (p)->funcs.release( p ); \ |
| 91 | } while ( 0 ) |
David Turner | 2dfb5ac | 2000-01-27 14:02:04 +0000 | [diff] [blame] | 92 | |
| 93 | |
Werner Lemberg | 52f911a | 2003-10-07 05:49:41 +0000 | [diff] [blame] | 94 | #define T1_Skip_Spaces( p ) (p)->root.funcs.skip_spaces( &(p)->root ) |
| 95 | #define T1_Skip_PS_Token( p ) (p)->root.funcs.skip_PS_token( &(p)->root ) |
David Turner | a39acf5 | 2000-08-23 02:47:57 +0000 | [diff] [blame] | 96 | |
Werner Lemberg | b5084e1 | 2000-10-28 17:10:06 +0000 | [diff] [blame] | 97 | #define T1_ToInt( p ) (p)->root.funcs.to_int( &(p)->root ) |
| 98 | #define T1_ToFixed( p, t ) (p)->root.funcs.to_fixed( &(p)->root, t ) |
David Turner | a39acf5 | 2000-08-23 02:47:57 +0000 | [diff] [blame] | 99 | |
Werner Lemberg | efa9961 | 2002-04-01 22:01:46 +0000 | [diff] [blame] | 100 | #define T1_ToCoordArray( p, m, c ) \ |
Werner Lemberg | 8728f29 | 2000-08-23 17:32:42 +0000 | [diff] [blame] | 101 | (p)->root.funcs.to_coord_array( &(p)->root, m, c ) |
Werner Lemberg | efa9961 | 2002-04-01 22:01:46 +0000 | [diff] [blame] | 102 | #define T1_ToFixedArray( p, m, f, t ) \ |
Werner Lemberg | 8728f29 | 2000-08-23 17:32:42 +0000 | [diff] [blame] | 103 | (p)->root.funcs.to_fixed_array( &(p)->root, m, f, t ) |
Werner Lemberg | efa9961 | 2002-04-01 22:01:46 +0000 | [diff] [blame] | 104 | #define T1_ToToken( p, t ) \ |
Werner Lemberg | 8728f29 | 2000-08-23 17:32:42 +0000 | [diff] [blame] | 105 | (p)->root.funcs.to_token( &(p)->root, t ) |
Werner Lemberg | efa9961 | 2002-04-01 22:01:46 +0000 | [diff] [blame] | 106 | #define T1_ToTokenArray( p, t, m, c ) \ |
Werner Lemberg | 8728f29 | 2000-08-23 17:32:42 +0000 | [diff] [blame] | 107 | (p)->root.funcs.to_token_array( &(p)->root, t, m, c ) |
David Turner | a39acf5 | 2000-08-23 02:47:57 +0000 | [diff] [blame] | 108 | |
Werner Lemberg | efa9961 | 2002-04-01 22:01:46 +0000 | [diff] [blame] | 109 | #define T1_Load_Field( p, f, o, m, pf ) \ |
Werner Lemberg | 8728f29 | 2000-08-23 17:32:42 +0000 | [diff] [blame] | 110 | (p)->root.funcs.load_field( &(p)->root, f, o, m, pf ) |
David Turner | 4e7eeee | 2002-02-28 16:10:29 +0000 | [diff] [blame] | 111 | |
Werner Lemberg | efa9961 | 2002-04-01 22:01:46 +0000 | [diff] [blame] | 112 | #define T1_Load_Field_Table( p, f, o, m, pf ) \ |
Werner Lemberg | 8728f29 | 2000-08-23 17:32:42 +0000 | [diff] [blame] | 113 | (p)->root.funcs.load_field_table( &(p)->root, f, o, m, pf ) |
| 114 | |
David Turner | a39acf5 | 2000-08-23 02:47:57 +0000 | [diff] [blame] | 115 | |
David Turner | bc82f1b | 2002-03-01 02:26:22 +0000 | [diff] [blame] | 116 | FT_LOCAL( FT_Error ) |
David Turner | 4e7eeee | 2002-02-28 16:10:29 +0000 | [diff] [blame] | 117 | T1_New_Parser( T1_Parser parser, |
| 118 | FT_Stream stream, |
| 119 | FT_Memory memory, |
| 120 | PSAux_Service psaux ); |
David Turner | 2dfb5ac | 2000-01-27 14:02:04 +0000 | [diff] [blame] | 121 | |
David Turner | bc82f1b | 2002-03-01 02:26:22 +0000 | [diff] [blame] | 122 | FT_LOCAL( FT_Error ) |
David Turner | 4e7eeee | 2002-02-28 16:10:29 +0000 | [diff] [blame] | 123 | T1_Get_Private_Dict( T1_Parser parser, |
| 124 | PSAux_Service psaux ); |
David Turner | 2dfb5ac | 2000-01-27 14:02:04 +0000 | [diff] [blame] | 125 | |
David Turner | bc82f1b | 2002-03-01 02:26:22 +0000 | [diff] [blame] | 126 | FT_LOCAL( void ) |
David Turner | 4e7eeee | 2002-02-28 16:10:29 +0000 | [diff] [blame] | 127 | T1_Finalize_Parser( T1_Parser parser ); |
Just van Rossum | 5ae477c | 2000-03-17 11:51:33 +0000 | [diff] [blame] | 128 | |
Werner Lemberg | 8728f29 | 2000-08-23 17:32:42 +0000 | [diff] [blame] | 129 | |
David Turner | 19ed8af | 2000-12-08 02:42:29 +0000 | [diff] [blame] | 130 | FT_END_HEADER |
Werner Lemberg | 8728f29 | 2000-08-23 17:32:42 +0000 | [diff] [blame] | 131 | |
Werner Lemberg | 90d9964 | 2000-12-09 00:45:38 +0000 | [diff] [blame] | 132 | #endif /* __T1PARSE_H__ */ |
David Turner | 2dfb5ac | 2000-01-27 14:02:04 +0000 | [diff] [blame] | 133 | |
| 134 | |
| 135 | /* END */ |