PageRenderTime 54ms CodeModel.GetById 15ms app.highlight 33ms RepoModel.GetById 1ms app.codeStats 0ms

/modules/freetype2/src/otvalid/otvcommn.h

http://github.com/zpao/v8monkey
C Header | 437 lines | 252 code | 99 blank | 86 comment | 11 complexity | 0897d4e7765fbf2c8b23e4e43b5b61ea MD5 | raw file
  1/***************************************************************************/
  2/*                                                                         */
  3/*  otvcommn.h                                                             */
  4/*                                                                         */
  5/*    OpenType common tables validation (specification).                   */
  6/*                                                                         */
  7/*  Copyright 2004, 2005, 2007, 2009 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 __OTVCOMMN_H__
 20#define __OTVCOMMN_H__
 21
 22
 23#include <ft2build.h>
 24#include "otvalid.h"
 25#include FT_INTERNAL_DEBUG_H
 26
 27
 28FT_BEGIN_HEADER
 29
 30
 31  /*************************************************************************/
 32  /*************************************************************************/
 33  /*****                                                               *****/
 34  /*****                         VALIDATION                            *****/
 35  /*****                                                               *****/
 36  /*************************************************************************/
 37  /*************************************************************************/
 38
 39  typedef struct OTV_ValidatorRec_*  OTV_Validator;
 40
 41  typedef void  (*OTV_Validate_Func)( FT_Bytes       table,
 42                                      OTV_Validator  valid );
 43
 44  typedef struct  OTV_ValidatorRec_
 45  {
 46    FT_Validator        root;
 47    FT_UInt             type_count;
 48    OTV_Validate_Func*  type_funcs;
 49
 50    FT_UInt             lookup_count;
 51    FT_UInt             glyph_count;
 52
 53    FT_UInt             nesting_level;
 54
 55    OTV_Validate_Func   func[3];
 56
 57    FT_UInt             extra1;     /* for passing parameters */
 58    FT_UInt             extra2;
 59    FT_Bytes            extra3;
 60
 61#ifdef FT_DEBUG_LEVEL_TRACE
 62    FT_UInt             debug_indent;
 63    const FT_String*    debug_function_name[3];
 64#endif
 65
 66  } OTV_ValidatorRec;
 67
 68
 69#undef  FT_INVALID_
 70#define FT_INVALID_( _prefix, _error )                         \
 71          ft_validator_error( valid->root, _prefix ## _error )
 72
 73#define OTV_OPTIONAL_TABLE( _table )  FT_UShort  _table;      \
 74                                      FT_Bytes   _table ## _p
 75
 76#define OTV_OPTIONAL_OFFSET( _offset )           \
 77          FT_BEGIN_STMNT                         \
 78            _offset ## _p = p;                   \
 79            _offset       = FT_NEXT_USHORT( p ); \
 80          FT_END_STMNT
 81
 82#define OTV_LIMIT_CHECK( _count )                    \
 83          FT_BEGIN_STMNT                             \
 84            if ( p + (_count) > valid->root->limit ) \
 85              FT_INVALID_TOO_SHORT;                  \
 86          FT_END_STMNT
 87
 88#define OTV_SIZE_CHECK( _size )                                     \
 89          FT_BEGIN_STMNT                                            \
 90            if ( _size > 0 && _size < table_size )                  \
 91            {                                                       \
 92              if ( valid->root->level == FT_VALIDATE_PARANOID )     \
 93                FT_INVALID_OFFSET;                                  \
 94              else                                                  \
 95              {                                                     \
 96                /* strip off `const' */                             \
 97                FT_Byte*  pp = (FT_Byte*)_size ## _p;               \
 98                                                                    \
 99                                                                    \
100                FT_TRACE3(( "\n"                                    \
101                            "Invalid offset to optional table `%s'" \
102                            " set to zero.\n"                       \
103                            "\n", #_size ));                        \
104                                                                    \
105                /* always assume 16bit entities */                  \
106                _size = pp[0] = pp[1] = 0;                          \
107              }                                                     \
108            }                                                       \
109          FT_END_STMNT
110
111
112#define  OTV_NAME_(x)  #x
113#define  OTV_NAME(x)   OTV_NAME_(x)
114
115#define  OTV_FUNC_(x)  x##Func
116#define  OTV_FUNC(x)   OTV_FUNC_(x)
117
118#ifdef FT_DEBUG_LEVEL_TRACE
119
120#define OTV_NEST1( x )                                     \
121          FT_BEGIN_STMNT                                   \
122            valid->nesting_level          = 0;             \
123            valid->func[0]                = OTV_FUNC( x ); \
124            valid->debug_function_name[0] = OTV_NAME( x ); \
125          FT_END_STMNT
126
127#define OTV_NEST2( x, y )                                  \
128          FT_BEGIN_STMNT                                   \
129            valid->nesting_level          = 0;             \
130            valid->func[0]                = OTV_FUNC( x ); \
131            valid->func[1]                = OTV_FUNC( y ); \
132            valid->debug_function_name[0] = OTV_NAME( x ); \
133            valid->debug_function_name[1] = OTV_NAME( y ); \
134          FT_END_STMNT
135
136#define OTV_NEST3( x, y, z )                               \
137          FT_BEGIN_STMNT                                   \
138            valid->nesting_level          = 0;             \
139            valid->func[0]                = OTV_FUNC( x ); \
140            valid->func[1]                = OTV_FUNC( y ); \
141            valid->func[2]                = OTV_FUNC( z ); \
142            valid->debug_function_name[0] = OTV_NAME( x ); \
143            valid->debug_function_name[1] = OTV_NAME( y ); \
144            valid->debug_function_name[2] = OTV_NAME( z ); \
145          FT_END_STMNT
146
147#define OTV_INIT  valid->debug_indent = 0
148
149#define OTV_ENTER                                                            \
150          FT_BEGIN_STMNT                                                     \
151            valid->debug_indent += 2;                                        \
152            FT_TRACE4(( "%*.s", valid->debug_indent, 0 ));                   \
153            FT_TRACE4(( "%s table\n",                                        \
154                        valid->debug_function_name[valid->nesting_level] )); \
155          FT_END_STMNT
156
157#define OTV_NAME_ENTER( name )                             \
158          FT_BEGIN_STMNT                                   \
159            valid->debug_indent += 2;                      \
160            FT_TRACE4(( "%*.s", valid->debug_indent, 0 )); \
161            FT_TRACE4(( "%s table\n", name ));             \
162          FT_END_STMNT
163
164#define OTV_EXIT  valid->debug_indent -= 2
165
166#define OTV_TRACE( s )                                     \
167          FT_BEGIN_STMNT                                   \
168            FT_TRACE4(( "%*.s", valid->debug_indent, 0 )); \
169            FT_TRACE4( s );                                \
170          FT_END_STMNT
171
172#else   /* !FT_DEBUG_LEVEL_TRACE */
173
174#define OTV_NEST1( x )                            \
175          FT_BEGIN_STMNT                          \
176            valid->nesting_level = 0;             \
177            valid->func[0]       = OTV_FUNC( x ); \
178          FT_END_STMNT
179
180#define OTV_NEST2( x, y )                         \
181          FT_BEGIN_STMNT                          \
182            valid->nesting_level = 0;             \
183            valid->func[0]       = OTV_FUNC( x ); \
184            valid->func[1]       = OTV_FUNC( y ); \
185          FT_END_STMNT
186
187#define OTV_NEST3( x, y, z )                      \
188          FT_BEGIN_STMNT                          \
189            valid->nesting_level = 0;             \
190            valid->func[0]       = OTV_FUNC( x ); \
191            valid->func[1]       = OTV_FUNC( y ); \
192            valid->func[2]       = OTV_FUNC( z ); \
193          FT_END_STMNT
194
195#define OTV_INIT                do { } while ( 0 )
196#define OTV_ENTER               do { } while ( 0 )
197#define OTV_NAME_ENTER( name )  do { } while ( 0 )
198#define OTV_EXIT                do { } while ( 0 )
199
200#define OTV_TRACE( s )          do { } while ( 0 )
201
202#endif  /* !FT_DEBUG_LEVEL_TRACE */
203
204
205#define OTV_RUN  valid->func[0]
206
207
208  /*************************************************************************/
209  /*************************************************************************/
210  /*****                                                               *****/
211  /*****                       COVERAGE TABLE                          *****/
212  /*****                                                               *****/
213  /*************************************************************************/
214  /*************************************************************************/
215
216  FT_LOCAL( void )
217  otv_Coverage_validate( FT_Bytes       table,
218                         OTV_Validator  valid,
219                         FT_Int         expected_count );
220
221  /* return first covered glyph */
222  FT_LOCAL( FT_UInt )
223  otv_Coverage_get_first( FT_Bytes  table );
224
225  /* return last covered glyph */
226  FT_LOCAL( FT_UInt )
227  otv_Coverage_get_last( FT_Bytes  table );
228
229  /* return number of covered glyphs */
230  FT_LOCAL( FT_UInt )
231  otv_Coverage_get_count( FT_Bytes  table );
232
233
234  /*************************************************************************/
235  /*************************************************************************/
236  /*****                                                               *****/
237  /*****                  CLASS DEFINITION TABLE                       *****/
238  /*****                                                               *****/
239  /*************************************************************************/
240  /*************************************************************************/
241
242  FT_LOCAL( void )
243  otv_ClassDef_validate( FT_Bytes       table,
244                         OTV_Validator  valid );
245
246
247  /*************************************************************************/
248  /*************************************************************************/
249  /*****                                                               *****/
250  /*****                      DEVICE TABLE                             *****/
251  /*****                                                               *****/
252  /*************************************************************************/
253  /*************************************************************************/
254
255  FT_LOCAL( void )
256  otv_Device_validate( FT_Bytes       table,
257                       OTV_Validator  valid );
258
259
260  /*************************************************************************/
261  /*************************************************************************/
262  /*****                                                               *****/
263  /*****                           LOOKUPS                             *****/
264  /*****                                                               *****/
265  /*************************************************************************/
266  /*************************************************************************/
267
268  FT_LOCAL( void )
269  otv_Lookup_validate( FT_Bytes       table,
270                       OTV_Validator  valid );
271
272  FT_LOCAL( void )
273  otv_LookupList_validate( FT_Bytes       table,
274                           OTV_Validator  valid );
275
276
277  /*************************************************************************/
278  /*************************************************************************/
279  /*****                                                               *****/
280  /*****                        FEATURES                               *****/
281  /*****                                                               *****/
282  /*************************************************************************/
283  /*************************************************************************/
284
285  FT_LOCAL( void )
286  otv_Feature_validate( FT_Bytes       table,
287                        OTV_Validator  valid );
288
289  /* lookups must already be validated */
290  FT_LOCAL( void )
291  otv_FeatureList_validate( FT_Bytes       table,
292                            FT_Bytes       lookups,
293                            OTV_Validator  valid );
294
295
296  /*************************************************************************/
297  /*************************************************************************/
298  /*****                                                               *****/
299  /*****                       LANGUAGE SYSTEM                         *****/
300  /*****                                                               *****/
301  /*************************************************************************/
302  /*************************************************************************/
303
304  FT_LOCAL( void )
305  otv_LangSys_validate( FT_Bytes       table,
306                        OTV_Validator  valid );
307
308
309  /*************************************************************************/
310  /*************************************************************************/
311  /*****                                                               *****/
312  /*****                           SCRIPTS                             *****/
313  /*****                                                               *****/
314  /*************************************************************************/
315  /*************************************************************************/
316
317  FT_LOCAL( void )
318  otv_Script_validate( FT_Bytes       table,
319                       OTV_Validator  valid );
320
321  /* features must already be validated */
322  FT_LOCAL( void )
323  otv_ScriptList_validate( FT_Bytes       table,
324                           FT_Bytes       features,
325                           OTV_Validator  valid );
326
327
328  /*************************************************************************/
329  /*************************************************************************/
330  /*****                                                               *****/
331  /*****                      UTILITY FUNCTIONS                        *****/
332  /*****                                                               *****/
333  /*************************************************************************/
334  /*************************************************************************/
335
336#define ChainPosClassSetFunc  otv_x_Ox
337#define ChainPosRuleSetFunc   otv_x_Ox
338#define ChainSubClassSetFunc  otv_x_Ox
339#define ChainSubRuleSetFunc   otv_x_Ox
340#define JstfLangSysFunc       otv_x_Ox
341#define JstfMaxFunc           otv_x_Ox
342#define LigGlyphFunc          otv_x_Ox
343#define LigatureArrayFunc     otv_x_Ox
344#define LigatureSetFunc       otv_x_Ox
345#define PosClassSetFunc       otv_x_Ox
346#define PosRuleSetFunc        otv_x_Ox
347#define SubClassSetFunc       otv_x_Ox
348#define SubRuleSetFunc        otv_x_Ox
349
350  FT_LOCAL( void )
351  otv_x_Ox ( FT_Bytes       table,
352             OTV_Validator  valid );
353
354#define AlternateSubstFormat1Func     otv_u_C_x_Ox
355#define ChainContextPosFormat1Func    otv_u_C_x_Ox
356#define ChainContextSubstFormat1Func  otv_u_C_x_Ox
357#define ContextPosFormat1Func         otv_u_C_x_Ox
358#define ContextSubstFormat1Func       otv_u_C_x_Ox
359#define LigatureSubstFormat1Func      otv_u_C_x_Ox
360#define MultipleSubstFormat1Func      otv_u_C_x_Ox
361
362  FT_LOCAL( void )
363  otv_u_C_x_Ox( FT_Bytes       table,
364                OTV_Validator  valid );
365
366#define AlternateSetFunc     otv_x_ux
367#define AttachPointFunc      otv_x_ux
368#define ExtenderGlyphFunc    otv_x_ux
369#define JstfGPOSModListFunc  otv_x_ux
370#define JstfGSUBModListFunc  otv_x_ux
371#define SequenceFunc         otv_x_ux
372
373  FT_LOCAL( void )
374  otv_x_ux( FT_Bytes       table,
375            OTV_Validator  valid );
376
377#define PosClassRuleFunc  otv_x_y_ux_sy
378#define PosRuleFunc       otv_x_y_ux_sy
379#define SubClassRuleFunc  otv_x_y_ux_sy
380#define SubRuleFunc       otv_x_y_ux_sy
381
382  FT_LOCAL( void )
383  otv_x_y_ux_sy( FT_Bytes       table,
384                 OTV_Validator  valid );
385
386#define ChainPosClassRuleFunc  otv_x_ux_y_uy_z_uz_p_sp
387#define ChainPosRuleFunc       otv_x_ux_y_uy_z_uz_p_sp
388#define ChainSubClassRuleFunc  otv_x_ux_y_uy_z_uz_p_sp
389#define ChainSubRuleFunc       otv_x_ux_y_uy_z_uz_p_sp
390
391  FT_LOCAL( void )
392  otv_x_ux_y_uy_z_uz_p_sp( FT_Bytes       table,
393                           OTV_Validator  valid );
394
395#define ContextPosFormat2Func    otv_u_O_O_x_Onx
396#define ContextSubstFormat2Func  otv_u_O_O_x_Onx
397
398  FT_LOCAL( void )
399  otv_u_O_O_x_Onx( FT_Bytes       table,
400                   OTV_Validator  valid );
401
402#define ContextPosFormat3Func    otv_u_x_y_Ox_sy
403#define ContextSubstFormat3Func  otv_u_x_y_Ox_sy
404
405  FT_LOCAL( void )
406  otv_u_x_y_Ox_sy( FT_Bytes       table,
407                   OTV_Validator  valid );
408
409#define ChainContextPosFormat2Func    otv_u_O_O_O_O_x_Onx
410#define ChainContextSubstFormat2Func  otv_u_O_O_O_O_x_Onx
411
412  FT_LOCAL( void )
413  otv_u_O_O_O_O_x_Onx( FT_Bytes       table,
414                       OTV_Validator  valid );
415
416#define ChainContextPosFormat3Func    otv_u_x_Ox_y_Oy_z_Oz_p_sp
417#define ChainContextSubstFormat3Func  otv_u_x_Ox_y_Oy_z_Oz_p_sp
418
419  FT_LOCAL( void )
420  otv_u_x_Ox_y_Oy_z_Oz_p_sp( FT_Bytes       table,
421                             OTV_Validator  valid );
422
423
424  FT_LOCAL( FT_UInt )
425  otv_GSUBGPOS_get_Lookup_count( FT_Bytes  table );
426
427  FT_LOCAL( FT_UInt )
428  otv_GSUBGPOS_have_MarkAttachmentType_flag( FT_Bytes  table );
429
430 /* */
431
432FT_END_HEADER
433
434#endif /* __OTVCOMMN_H__ */
435
436
437/* END */