?? otvcommn.h
字號(hào):
/***************************************************************************//* *//* otvcommn.h *//* *//* OpenType common tables validation (specification). *//* *//* Copyright 2004, 2005 by *//* David Turner, Robert Wilhelm, and Werner Lemberg. *//* *//* This file is part of the FreeType project, and may only be used, *//* modified, and distributed under the terms of the FreeType project *//* license, LICENSE.TXT. By continuing to use, modify, or distribute *//* this file you indicate that you have read the license and *//* understand and accept it fully. *//* *//***************************************************************************/#ifndef __OTVCOMMN_H__#define __OTVCOMMN_H__#include <ft2build.h>#include "otvalid.h"#include FT_INTERNAL_DEBUG_HFT_BEGIN_HEADER /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** VALIDATION *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ typedef struct OTV_ValidatorRec_* OTV_Validator; typedef void (*OTV_Validate_Func)( FT_Bytes table, OTV_Validator valid ); typedef struct OTV_ValidatorRec_ { FT_Validator root; FT_UInt type_count; OTV_Validate_Func* type_funcs; FT_UInt lookup_count; FT_UInt glyph_count; FT_UInt nesting_level; OTV_Validate_Func func[3]; FT_UInt extra1; /* for passing parameters */ FT_UInt extra2; FT_Bytes extra3;#ifdef FT_DEBUG_LEVEL_TRACE FT_UInt debug_indent; const FT_String* debug_function_name[3];#endif } OTV_ValidatorRec;#undef FT_INVALID_#define FT_INVALID_( _prefix, _error ) \ ft_validator_error( valid->root, _prefix ## _error )#define OTV_OPTIONAL_TABLE( _table ) FT_UShort _table; \ FT_Bytes _table ## _p#define OTV_OPTIONAL_OFFSET( _offset ) \ FT_BEGIN_STMNT \ _offset ## _p = p; \ _offset = FT_NEXT_USHORT( p ); \ FT_END_STMNT#define OTV_LIMIT_CHECK( _count ) \ FT_BEGIN_STMNT \ if ( p + (_count) > valid->root->limit ) \ FT_INVALID_TOO_SHORT; \ FT_END_STMNT#define OTV_SIZE_CHECK( _size ) \ FT_BEGIN_STMNT \ if ( _size > 0 && _size < table_size ) \ { \ if ( valid->root->level == FT_VALIDATE_PARANOID ) \ FT_INVALID_OFFSET; \ else \ { \ /* strip off `const' */ \ FT_Byte* pp = (FT_Byte*)_size ## _p; \ \ \ FT_TRACE3(( "\n" \ "Invalid offset to optional table `%s'!\n" \ "Set to zero.\n" \ "\n", #_size )); \ \ /* always assume 16bit entities */ \ _size = pp[0] = pp[1] = 0; \ } \ } \ FT_END_STMNT#define OTV_NAME_(x) #x#define OTV_NAME(x) OTV_NAME_(x)#define OTV_FUNC_(x) x##Func#define OTV_FUNC(x) OTV_FUNC_(x)#ifdef FT_DEBUG_LEVEL_TRACE#define OTV_NEST1( x ) \ FT_BEGIN_STMNT \ valid->nesting_level = 0; \ valid->func[0] = OTV_FUNC( x ); \ valid->debug_function_name[0] = OTV_NAME( x ); \ FT_END_STMNT#define OTV_NEST2( x, y ) \ FT_BEGIN_STMNT \ valid->nesting_level = 0; \ valid->func[0] = OTV_FUNC( x ); \ valid->func[1] = OTV_FUNC( y ); \ valid->debug_function_name[0] = OTV_NAME( x ); \ valid->debug_function_name[1] = OTV_NAME( y ); \ FT_END_STMNT#define OTV_NEST3( x, y, z ) \ FT_BEGIN_STMNT \ valid->nesting_level = 0; \ valid->func[0] = OTV_FUNC( x ); \ valid->func[1] = OTV_FUNC( y ); \ valid->func[2] = OTV_FUNC( z ); \ valid->debug_function_name[0] = OTV_NAME( x ); \ valid->debug_function_name[1] = OTV_NAME( y ); \ valid->debug_function_name[2] = OTV_NAME( z ); \ FT_END_STMNT#define OTV_INIT valid->debug_indent = 0#define OTV_ENTER \ FT_BEGIN_STMNT \ valid->debug_indent += 2; \ FT_TRACE4(( "%*.s", valid->debug_indent, 0 )); \ FT_TRACE4(( "%s table\n", \ valid->debug_function_name[valid->nesting_level] )); \ FT_END_STMNT#define OTV_NAME_ENTER( name ) \ FT_BEGIN_STMNT \ valid->debug_indent += 2; \ FT_TRACE4(( "%*.s", valid->debug_indent, 0 )); \ FT_TRACE4(( "%s table\n", name )); \ FT_END_STMNT#define OTV_EXIT valid->debug_indent -= 2#define OTV_TRACE( s ) \ FT_BEGIN_STMNT \ FT_TRACE4(( "%*.s", valid->debug_indent, 0 )); \ FT_TRACE4( s ); \ FT_END_STMNT#else /* !FT_DEBUG_LEVEL_TRACE */#define OTV_NEST1( x ) \ FT_BEGIN_STMNT \ valid->nesting_level = 0; \ valid->func[0] = OTV_FUNC( x ); \ FT_END_STMNT#define OTV_NEST2( x, y ) \ FT_BEGIN_STMNT \ valid->nesting_level = 0; \ valid->func[0] = OTV_FUNC( x ); \ valid->func[1] = OTV_FUNC( y ); \ FT_END_STMNT#define OTV_NEST3( x, y, z ) \ FT_BEGIN_STMNT \ valid->nesting_level = 0; \ valid->func[0] = OTV_FUNC( x ); \ valid->func[1] = OTV_FUNC( y ); \ valid->func[2] = OTV_FUNC( z ); \ FT_END_STMNT#define OTV_INIT do ; while ( 0 )#define OTV_ENTER do ; while ( 0 )#define OTV_NAME_ENTER( name ) do ; while ( 0 )#define OTV_EXIT do ; while ( 0 )#define OTV_TRACE( s ) do ; while ( 0 )#endif /* !FT_DEBUG_LEVEL_TRACE */#define OTV_RUN valid->func[0] /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** COVERAGE TABLE *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ FT_LOCAL( void ) otv_Coverage_validate( FT_Bytes table, OTV_Validator valid );
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -