cffparse.h revision bff90fb5ec88ad7fdfb6d1d2f5a5719c20a2c5dc
1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/***************************************************************************/ 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* */ 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* cffparse.h */ 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* */ 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* CFF token stream parser (specification) */ 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* */ 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* Copyright 1996-2003, 2011 by */ 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* David Turner, Robert Wilhelm, and Werner Lemberg. */ 97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)/* */ 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* This file is part of the FreeType project, and may only be used, */ 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* modified, and distributed under the terms of the FreeType project */ 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* this file you indicate that you have read the license and */ 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* understand and accept it fully. */ 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* */ 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/***************************************************************************/ 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#ifndef __CFF_PARSE_H__ 20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define __CFF_PARSE_H__ 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <ft2build.h> 24558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "cfftypes.h" 25558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include FT_INTERNAL_OBJECTS_H 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)FT_BEGIN_HEADER 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define CFF_MAX_STACK_DEPTH 96 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define CFF_CODE_TOPDICT 0x1000 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define CFF_CODE_PRIVATE 0x2000 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) typedef struct CFF_ParserRec_ 38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FT_Library library; 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FT_Byte* start; 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FT_Byte* limit; 42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FT_Byte* cursor; 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FT_Byte* stack[CFF_MAX_STACK_DEPTH + 1]; 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FT_Byte** top; 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FT_UInt object_code; 48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void* object; 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } CFF_ParserRec, *CFF_Parser; 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FT_LOCAL( void ) 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cff_parser_init( CFF_Parser parser, 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FT_UInt code, 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void* object, 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FT_Library library); 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FT_LOCAL( FT_Error ) 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cff_parser_run( CFF_Parser parser, 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FT_Byte* start, 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FT_Byte* limit ); 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) enum 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cff_kind_none = 0, 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cff_kind_num, 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cff_kind_fixed, 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cff_kind_fixed_thousand, 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cff_kind_string, 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cff_kind_bool, 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cff_kind_delta, 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cff_kind_callback, 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cff_kind_max /* do not remove */ 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /* now generate handlers for the most simple fields */ 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typedef FT_Error (*CFF_Field_Reader)( CFF_Parser parser ); 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typedef struct CFF_Field_Handler_ 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int kind; 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int code; 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FT_UInt offset; 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FT_Byte size; 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CFF_Field_Reader reader; 901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) FT_UInt array_max; 911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) FT_UInt count_offset; 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#ifdef FT_DEBUG_LEVEL_TRACE 94a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const char* id; 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } CFF_Field_Handler; 98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)FT_END_HEADER 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 102a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif /* __CFF_PARSE_H__ */ 104a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 105a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 106a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)/* END */ 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)