1 /***************************************************************************/ 2 /* */ 3 /* cffparse.h */ 4 /* */ 5 /* CFF token stream parser (specification) */ 6 /* */ 7 /* Copyright 1996-2001, 2002, 2003 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 __CFF_PARSE_H__ 20 #define __CFF_PARSE_H__ 21 22 23 #include <ft2build.h> 24 #include "cfftypes.h" 25 #include FT_INTERNAL_OBJECTS_H 26 27 28 FT_BEGIN_HEADER 29 30 31 #define CFF_MAX_STACK_DEPTH 96 32 33 #define CFF_CODE_TOPDICT 0x1000 34 #define CFF_CODE_PRIVATE 0x2000 35 36 37 typedef struct CFF_ParserRec_ 38 { 39 FT_Library library; 40 FT_Byte* start; 41 FT_Byte* limit; 42 FT_Byte* cursor; 43 44 FT_Byte* stack[CFF_MAX_STACK_DEPTH + 1]; 45 FT_Byte** top; 46 47 FT_UInt object_code; 48 void* object; 49 50 } CFF_ParserRec, *CFF_Parser; 51 52 53 FT_LOCAL( void ) 54 cff_parser_init( CFF_Parser parser, 55 FT_UInt code, 56 void* object, 57 FT_Library library); 58 59 FT_LOCAL( FT_Error ) 60 cff_parser_run( CFF_Parser parser, 61 FT_Byte* start, 62 FT_Byte* limit ); 63 64 65 enum 66 { 67 cff_kind_none = 0, 68 cff_kind_num, 69 cff_kind_fixed, 70 cff_kind_fixed_thousand, 71 cff_kind_string, 72 cff_kind_bool, 73 cff_kind_delta, 74 cff_kind_callback, 75 76 cff_kind_max /* do not remove */ 77 }; 78 79 80 /* now generate handlers for the most simple fields */ 81 typedef FT_Error (*CFF_Field_Reader)( CFF_Parser parser ); 82 83 typedef struct CFF_Field_Handler_ 84 { 85 int kind; 86 int code; 87 FT_UInt offset; 88 FT_Byte size; 89 CFF_Field_Reader reader; 90 FT_UInt array_max; 91 FT_UInt count_offset; 92 93 } CFF_Field_Handler; 94 95 96 FT_END_HEADER 97 98 99 #endif /* __CFF_PARSE_H__ */ 100 101 102 /* END */ 103