📄 gxvcommn.h
字号:
#define GXV_TRACE( s ) do ; while ( 0 )#endif /* !FT_DEBUG_LEVEL_TRACE */ /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** 32bit alignment checking *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/#define GXV_32BIT_ALIGNMENT_VALIDATE( a ) \ FT_BEGIN_STMNT \ { \ if ( 0 != ( (a) % 4 ) ) \ FT_INVALID_OFFSET ; \ } \ FT_END_STMNT /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** Dumping Binary Data *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/#define GXV_TRACE_HEXDUMP( p, len ) \ FT_BEGIN_STMNT \ { \ FT_Bytes b; \ \ \ for ( b = p; b < (FT_Bytes)p + len; b++ ) \ FT_TRACE1(("\\x%02x", *b)) ; \ } \ FT_END_STMNT#define GXV_TRACE_HEXDUMP_C( p, len ) \ FT_BEGIN_STMNT \ { \ FT_Bytes b; \ \ \ for ( b = p; b < (FT_Bytes)p + len; b++ ) \ if ( 0x40 < *b && *b < 0x7e ) \ FT_TRACE1(("%c", *b)) ; \ else \ FT_TRACE1(("\\x%02x", *b)) ; \ } \ FT_END_STMNT#define GXV_TRACE_HEXDUMP_SFNTNAME( n ) \ GXV_TRACE_HEXDUMP( n.string, n.string_len ) /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** LOOKUP TABLE *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ FT_LOCAL( void ) gxv_BinSrchHeader_validate( FT_Bytes p, FT_Bytes limit, FT_UShort* unitSize_p, FT_UShort* nUnits_p, GXV_Validator valid ); FT_LOCAL( void ) gxv_LookupTable_validate( FT_Bytes table, FT_Bytes limit, GXV_Validator valid ); /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** Glyph ID *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ FT_LOCAL( FT_Int ) gxv_glyphid_validate( FT_UShort gid, GXV_Validator valid ); /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** CONTROL POINT *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ FT_LOCAL( void ) gxv_ctlPoint_validate( FT_UShort gid, FT_Short ctl_point, GXV_Validator valid ); /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** SFNT NAME *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ FT_LOCAL( void ) gxv_sfntName_validate( FT_UShort name_index, FT_UShort min_index, FT_UShort max_index, GXV_Validator valid ); /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** STATE TABLE *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ FT_LOCAL( void ) gxv_StateTable_subtable_setup( FT_UShort table_size, FT_UShort classTable, FT_UShort stateArray, FT_UShort entryTable, FT_UShort* classTable_length_p, FT_UShort* stateArray_length_p, FT_UShort* entryTable_length_p, GXV_Validator valid ); FT_LOCAL( void ) gxv_XStateTable_subtable_setup( FT_ULong table_size, FT_ULong classTable, FT_ULong stateArray, FT_ULong entryTable, FT_ULong* classTable_length_p, FT_ULong* stateArray_length_p, FT_ULong* entryTable_length_p, GXV_Validator valid ); FT_LOCAL( void ) gxv_StateTable_validate( FT_Bytes table, FT_Bytes limit, GXV_Validator valid ); FT_LOCAL( void ) gxv_XStateTable_validate( FT_Bytes table, FT_Bytes limit, GXV_Validator valid ); /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** UTILITY MACROS AND FUNCTIONS *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ FT_LOCAL( void ) gxv_array_getlimits_byte( FT_Bytes table, FT_Bytes limit, FT_Byte* min, FT_Byte* max, GXV_Validator valid ); FT_LOCAL( void ) gxv_array_getlimits_ushort( FT_Bytes table, FT_Bytes limit, FT_UShort* min, FT_UShort* max, GXV_Validator valid ); FT_LOCAL( void ) gxv_set_length_by_ushort_offset( FT_UShort* offset, FT_UShort** length, FT_UShort* buff, FT_UInt nmemb, FT_UShort limit, GXV_Validator valid ); FT_LOCAL( void ) gxv_set_length_by_ulong_offset( FT_ULong* offset, FT_ULong** length, FT_ULong* buff, FT_UInt nmemb, FT_ULong limit, GXV_Validator valid);#define GXV_SUBTABLE_OFFSET_CHECK( _offset ) \ FT_BEGIN_STMNT \ if ( (_offset) > valid->subtable_length ) \ FT_INVALID_OFFSET; \ FT_END_STMNT#define GXV_SUBTABLE_LIMIT_CHECK( _count ) \ FT_BEGIN_STMNT \ if ( ( p + (_count) - valid->subtable_start ) > \ valid->subtable_length ) \ FT_INVALID_TOO_SHORT; \ FT_END_STMNT#define GXV_USHORT_TO_SHORT( _us ) \ ( ( 0x8000U < ( _us ) ) ? ( ( _us ) - 0x8000U ) : ( _us ) )#define GXV_STATETABLE_HEADER_SIZE ( 2 + 2 + 2 + 2 )#define GXV_STATEHEADER_SIZE GXV_STATETABLE_HEADER_SIZE#define GXV_XSTATETABLE_HEADER_SIZE ( 4 + 4 + 4 + 4 )#define GXV_XSTATEHEADER_SIZE GXV_XSTATETABLE_HEADER_SIZE /*************************************************************************/ /*************************************************************************/ /***** *****/ /***** Table overlapping *****/ /***** *****/ /*************************************************************************/ /*************************************************************************/ typedef struct GXV_odtect_DataRec_ { FT_Bytes start; FT_ULong length; FT_String* name; } GXV_odtect_DataRec, *GXV_odtect_Data; typedef struct GXV_odtect_RangeRec_ { FT_UInt nRanges; GXV_odtect_Data range; } GXV_odtect_RangeRec, *GXV_odtect_Range; FT_LOCAL( void ) gxv_odtect_add_range( FT_Bytes start, FT_ULong length, const FT_String* name, GXV_odtect_Range odtect ); FT_LOCAL( void ) gxv_odtect_validate( GXV_odtect_Range odtect, GXV_Validator valid );#define GXV_ODTECT( n, odtect ) \ GXV_odtect_DataRec odtect ## _range[n]; \ GXV_odtect_RangeRec odtect ## _rec = { 0, NULL }; \ GXV_odtect_Range odtect = NULL#define GXV_ODTECT_INIT( odtect ) \ FT_BEGIN_STMNT \ odtect ## _rec.nRanges = 0; \ odtect ## _rec.range = odtect ## _range; \ odtect = & odtect ## _rec; \ FT_END_STMNT /* */FT_END_HEADER#endif /* __GXVCOMMN_H__ *//* END */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -