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)