зеркало из https://github.com/stride3d/freetype.git
Fixes for `make multi' and using C++ compiler.
* gxvalid/gxvcommn.c (gxv_set_length_by_ushort_offset, gxv_set_length_by_ulong_offset, gxv_array_getlimits_byte, gxv_array_getlimits_ushort): Declare with FT_LOCAL_DEF. (gxv_compare_ranges): Make it static. (gxv_LookupTable_fmt0_validate, gxv_LookupTable_fmt2_validate, gxv_LookupTable_fmt4_validate, gxv_LookupTable_fmt6_validate, gxv_LookupTable_fmt8_validate, gxv_LookupTable_validate): Improve trace messages. (gxv_StateArray_validate, gxv_XStateArray_validate): s/class/clazz/. (GXV_STATETABLE_HEADER_SIZE, GXV_STATEHEADER_SIZE, GXV_XSTATETABLE_HEADER_SIZE, GXV_XSTATEHEADER_SIZE): Move to gxvcommn.h. * gxvalid/gxvcommn.h: Add prototypes for gxv_StateTable_subtable_setup, gxv_XStateTable_subtable_setup, gxv_XStateTable_validate, gxv_array_getlimits_byte, gxv_array_getlimits_ushort, gxv_set_length_by_ushort_offset, gxv_set_length_by_ulong_offset, gxv_odtect_add_range, gxv_odtect_validate. (GXV_STATETABLE_HEADER_SIZE, GXV_STATEHEADER_SIZE, GXV_XSTATETABLE_HEADER_SIZE, GXV_XSTATEHEADER_SIZE): Moved from gxvcommn.c. * src/gxvalid/gxvbsln.c (gxv_bsln_LookupValue_validate, gxv_bsln_parts_fmt1_validate): Improve trace messages. * gxvalid/gxvfeat.c: Split off predefined registry stuff to... * gxvalid/gxvfeat.h: New file. * gxvalid/gxvjust.c (gxv_just_wdc_entry_validate): Improve trace message. * gxvalid/gxvkern.c (GXV_kern_Dialect): Add KERN_DIALECT_UNKNOWN. (gxv_kern_subtable_fmt1_valueTable_load, gxv_kern_subtable_fmt1_subtable_setup, gxv_kern_subtable_fmt1_entry_validate): Fix C++ compiler errors. (gxv_kern_coverage_validate): Use KERN_DIALECT_UNKWOWN. Improve trace message. (gxv_kern_validate_generic): Fix C++ compiler error. Improve trace message. (gxv_kern_validate_classic): Fix C++ compiler error. * gxvalid/gxvmort0.c (gxv_mort_subtable_type0_validate): Declare with FT_LOCAL_DEF. * gxvalid/gxvmort1.c (gxv_mort_subtable_type1_substitutionTable_load, gxv_mort_subtable_type1_subtable_setup): Fix C++ compiler errors. (gxv_mort_subtable_type1_substTable_validate): Improve trace message. (gxv_mort_subtable_type1_validate): Declare with FT_LOCAL_DEF. * gxvalid/gxvmort2.c (gxv_mort_subtable_type2_opttable_load, gxv_mort_subtable_type2_subtable_setup, gxv_mort_subtable_type2_ligActionOffset_validate, gxv_mort_subtable_type2_ligatureTable_validate): Fix C++ compiler errors. (gxv_mort_subtable_type2_validate): Declare with FT_LOCAL_DEF. * gxvalid/gxvmort4.c (gxv_mort_subtable_type4_validate): Declare with FT_LOCAL_DEF. * gxvalid/gxvmort5.c (gxv_mort_subtable_type5_subtable_setup, gxv_mort_subtable_type5_InsertList_validate): Fix C++ compiler errors. (gxv_mort_subtable_type5_validate): Declare with FT_LOCAL_DEF. * gxvalid/gxvmort.c: Include gxvfeat.h. (gxv_mort_featurearray_validate, gxv_mort_coverage_validate): Declare with FT_LOCAL_DEF. (gxv_mort_subtables_validate, gxv_mort_validate): Improve trace messages. * gxvalid/gxvmort.h (gxv_mort_feature_validate): Remove. * gxvalid/gxvmorx0.c (gxv_morx_subtable_type0_validate): Declare with FT_LOCAL_DEF. * gxvalid/gxvmorx1.c (gxv_morx_subtable_type1_substitutionTable_load, gxv_morx_subtable_type1_subtable_setup, gxv_morx_subtable_type1_entry_validate, gxv_morx_subtable_type1_substitutionTable_validate): Fix C++ compiler errors. (gxv_morx_subtable_type1_validate): Declare with FT_LOCAL_DEF. * gxvalid/gxvmorx2.c (gxv_morx_subtable_type2_opttable_load, gxv_morx_subtable_type2_subtable_setup, gxv_morx_subtable_type2_ligActionIndex_validate, gxv_morx_subtable_type2_ligatureTable_validate): Fix C++ compiler errors. (gxv_morx_subtable_type2_validate): Declare with FT_LOCAL_DEF. Fix typo. * gxvalid/gxvmorx4.c (gxv_morx_subtable_type4_validate): Declare with FT_LOCAL_DEF. * gxvalid/gxvmorx5.c (gxv_morx_subtable_type5_insertionGlyph_load, gxv_morx_subtable_type5_subtable_setup): Fix C++ compiler error. (gxv_morx_subtable_type5_validate): Declare with FT_LOCAL_DEF. * gxvalid/gxvmorx.c (gxv_morx_subtables_validate, gxv_morx_validate): Improve trace message. * gxvalid/gxvopbd.c (gxv_opbd_LookupFmt4_transit): Fix compiler warnings. (gxv_opbd_validate): Improve trace message. * gxvalid/gxvprop.c: Decorate constants with `U' and `L' where appropriate. (gxv_prop_zero_advance_validate, gxv_prop_validate): Improve trace message. * gxvalid/gxvtrak.c (gxv_trak_trackTable_validate): Remove unused parameter. Update all callers. (gxv_trak_validate): Improve trace message. * rules.mk (GXV_DRV_H): Add gxvfeat.h.
This commit is contained in:
Родитель
4a7f0b1c7a
Коммит
99aa14c226
131
ChangeLog
131
ChangeLog
|
@ -1,3 +1,126 @@
|
|||
2005-09-05 Werner Lemberg <wl@gnu.org>
|
||||
|
||||
Fixes for `make multi' and using C++ compiler.
|
||||
|
||||
* gxvalid/gxvcommn.c (gxv_set_length_by_ushort_offset,
|
||||
gxv_set_length_by_ulong_offset, gxv_array_getlimits_byte,
|
||||
gxv_array_getlimits_ushort): Declare with FT_LOCAL_DEF.
|
||||
(gxv_compare_ranges): Make it static.
|
||||
(gxv_LookupTable_fmt0_validate, gxv_LookupTable_fmt2_validate,
|
||||
gxv_LookupTable_fmt4_validate, gxv_LookupTable_fmt6_validate,
|
||||
gxv_LookupTable_fmt8_validate, gxv_LookupTable_validate): Improve
|
||||
trace messages.
|
||||
(gxv_StateArray_validate, gxv_XStateArray_validate): s/class/clazz/.
|
||||
(GXV_STATETABLE_HEADER_SIZE, GXV_STATEHEADER_SIZE,
|
||||
GXV_XSTATETABLE_HEADER_SIZE, GXV_XSTATEHEADER_SIZE): Move to
|
||||
gxvcommn.h.
|
||||
|
||||
* gxvalid/gxvcommn.h: Add prototypes for
|
||||
gxv_StateTable_subtable_setup, gxv_XStateTable_subtable_setup,
|
||||
gxv_XStateTable_validate, gxv_array_getlimits_byte,
|
||||
gxv_array_getlimits_ushort, gxv_set_length_by_ushort_offset,
|
||||
gxv_set_length_by_ulong_offset, gxv_odtect_add_range,
|
||||
gxv_odtect_validate.
|
||||
(GXV_STATETABLE_HEADER_SIZE, GXV_STATEHEADER_SIZE,
|
||||
GXV_XSTATETABLE_HEADER_SIZE, GXV_XSTATEHEADER_SIZE): Moved from
|
||||
gxvcommn.c.
|
||||
|
||||
* src/gxvalid/gxvbsln.c (gxv_bsln_LookupValue_validate,
|
||||
gxv_bsln_parts_fmt1_validate): Improve trace messages.
|
||||
|
||||
* gxvalid/gxvfeat.c: Split off predefined registry stuff to...
|
||||
* gxvalid/gxvfeat.h: New file.
|
||||
|
||||
* gxvalid/gxvjust.c (gxv_just_wdc_entry_validate): Improve trace
|
||||
message.
|
||||
|
||||
* gxvalid/gxvkern.c (GXV_kern_Dialect): Add KERN_DIALECT_UNKNOWN.
|
||||
(gxv_kern_subtable_fmt1_valueTable_load,
|
||||
gxv_kern_subtable_fmt1_subtable_setup,
|
||||
gxv_kern_subtable_fmt1_entry_validate): Fix C++ compiler errors.
|
||||
(gxv_kern_coverage_validate): Use KERN_DIALECT_UNKWOWN.
|
||||
Improve trace message.
|
||||
(gxv_kern_validate_generic): Fix C++ compiler error.
|
||||
Improve trace message.
|
||||
(gxv_kern_validate_classic): Fix C++ compiler error.
|
||||
|
||||
* gxvalid/gxvmort0.c (gxv_mort_subtable_type0_validate): Declare
|
||||
with FT_LOCAL_DEF.
|
||||
|
||||
* gxvalid/gxvmort1.c
|
||||
(gxv_mort_subtable_type1_substitutionTable_load,
|
||||
gxv_mort_subtable_type1_subtable_setup): Fix C++ compiler errors.
|
||||
(gxv_mort_subtable_type1_substTable_validate): Improve trace
|
||||
message.
|
||||
(gxv_mort_subtable_type1_validate): Declare with FT_LOCAL_DEF.
|
||||
|
||||
* gxvalid/gxvmort2.c (gxv_mort_subtable_type2_opttable_load,
|
||||
gxv_mort_subtable_type2_subtable_setup,
|
||||
gxv_mort_subtable_type2_ligActionOffset_validate,
|
||||
gxv_mort_subtable_type2_ligatureTable_validate): Fix C++ compiler
|
||||
errors.
|
||||
(gxv_mort_subtable_type2_validate): Declare with FT_LOCAL_DEF.
|
||||
|
||||
* gxvalid/gxvmort4.c (gxv_mort_subtable_type4_validate): Declare
|
||||
with FT_LOCAL_DEF.
|
||||
|
||||
* gxvalid/gxvmort5.c (gxv_mort_subtable_type5_subtable_setup,
|
||||
gxv_mort_subtable_type5_InsertList_validate): Fix C++ compiler
|
||||
errors.
|
||||
(gxv_mort_subtable_type5_validate): Declare with FT_LOCAL_DEF.
|
||||
|
||||
* gxvalid/gxvmort.c: Include gxvfeat.h.
|
||||
(gxv_mort_featurearray_validate, gxv_mort_coverage_validate):
|
||||
Declare with FT_LOCAL_DEF.
|
||||
(gxv_mort_subtables_validate, gxv_mort_validate): Improve trace
|
||||
messages.
|
||||
|
||||
* gxvalid/gxvmort.h (gxv_mort_feature_validate): Remove.
|
||||
|
||||
* gxvalid/gxvmorx0.c (gxv_morx_subtable_type0_validate): Declare
|
||||
with FT_LOCAL_DEF.
|
||||
|
||||
* gxvalid/gxvmorx1.c
|
||||
(gxv_morx_subtable_type1_substitutionTable_load,
|
||||
gxv_morx_subtable_type1_subtable_setup,
|
||||
gxv_morx_subtable_type1_entry_validate,
|
||||
gxv_morx_subtable_type1_substitutionTable_validate): Fix C++
|
||||
compiler errors.
|
||||
(gxv_morx_subtable_type1_validate): Declare with FT_LOCAL_DEF.
|
||||
|
||||
* gxvalid/gxvmorx2.c (gxv_morx_subtable_type2_opttable_load,
|
||||
gxv_morx_subtable_type2_subtable_setup,
|
||||
gxv_morx_subtable_type2_ligActionIndex_validate,
|
||||
gxv_morx_subtable_type2_ligatureTable_validate): Fix C++ compiler
|
||||
errors.
|
||||
(gxv_morx_subtable_type2_validate): Declare with FT_LOCAL_DEF.
|
||||
Fix typo.
|
||||
|
||||
* gxvalid/gxvmorx4.c (gxv_morx_subtable_type4_validate): Declare
|
||||
with FT_LOCAL_DEF.
|
||||
|
||||
* gxvalid/gxvmorx5.c (gxv_morx_subtable_type5_insertionGlyph_load,
|
||||
gxv_morx_subtable_type5_subtable_setup): Fix C++ compiler error.
|
||||
(gxv_morx_subtable_type5_validate): Declare with FT_LOCAL_DEF.
|
||||
|
||||
* gxvalid/gxvmorx.c (gxv_morx_subtables_validate,
|
||||
gxv_morx_validate): Improve trace message.
|
||||
|
||||
* gxvalid/gxvopbd.c (gxv_opbd_LookupFmt4_transit): Fix compiler
|
||||
warnings.
|
||||
(gxv_opbd_validate): Improve trace message.
|
||||
|
||||
* gxvalid/gxvprop.c: Decorate constants with `U' and `L' where
|
||||
appropriate.
|
||||
(gxv_prop_zero_advance_validate, gxv_prop_validate): Improve trace
|
||||
message.
|
||||
|
||||
* gxvalid/gxvtrak.c (gxv_trak_trackTable_validate): Remove unused
|
||||
parameter. Update all callers.
|
||||
(gxv_trak_validate): Improve trace message.
|
||||
|
||||
* rules.mk (GXV_DRV_H): Add gxvfeat.h.
|
||||
|
||||
2005-09-01 Werner Lemberg <wl@gnu.org>
|
||||
|
||||
* src/gxvalid/gxvbsln.c (GXV_BSLN_VALUE_EMPTY): Add `U'.
|
||||
|
@ -8,7 +131,7 @@
|
|||
|
||||
* src/gxvalid/gxvmorx0.c, src/gxvalid/gxvmorx1.c,
|
||||
src/gxvalid/gxvmorx2.c, src/gxvalid/gxvmorx4.c,
|
||||
src/gxvalid/gxvmorx5.c, src/gxvalid/gxvmort.c: Improve tracing
|
||||
src/gxvalid/gxvmorx5.c, src/gxvalid/gxvmort.c: Improve trace
|
||||
messages.
|
||||
Decorate constants with `U' and `L' where appropriate.
|
||||
Fix compiler warnings.
|
||||
|
@ -17,7 +140,7 @@
|
|||
|
||||
* src/truetype/ttgload.c (load_truetype_glyph): Fix typo.
|
||||
|
||||
* src/gxvalid/gxvbsln.c (gxv_bsln_validate): Fix tracing message.
|
||||
* src/gxvalid/gxvbsln.c (gxv_bsln_validate): Fix trace message.
|
||||
|
||||
* src/gxvalid/gxvcommn.c (gxv_odtect_add_range): Use `const'.
|
||||
|
||||
|
@ -25,7 +148,7 @@
|
|||
src/gxvalid/gxvkern.c, src/gxvalid/gxvlcar.c, src/gxvalid/gxvmod.c,
|
||||
src/gxvalid/gxvmort0.c, src/gxvalid/gxvmort1.c,
|
||||
src/gxvalid/gxvmort2.c, src/gxvalid/gxvmort4.c,
|
||||
src/gxvalid/gxvmort5.c, src/gxvalid/gxvmort.c: Improve tracing
|
||||
src/gxvalid/gxvmort5.c, src/gxvalid/gxvmort.c: Improve trace
|
||||
messages.
|
||||
Decorate constants with `U' and `L' where appropriate.
|
||||
Fix compiler warnings.
|
||||
|
@ -37,7 +160,7 @@
|
|||
* src/gxvalid/gxvcommn.c: Fix compiler warnings.
|
||||
(gxv_XEntryTable_validate, gxv_compare_ranges): Remove unused
|
||||
parameter. Update all callers.
|
||||
Improve tracing messages.
|
||||
Improve trace messages.
|
||||
Some formatting.
|
||||
|
||||
2005-08-29 Werner Lemberg <wl@gnu.org>
|
||||
|
|
|
@ -80,7 +80,7 @@
|
|||
FT_UNUSED( glyph );
|
||||
|
||||
|
||||
GXV_NAME_ENTER( " lookup value" );
|
||||
GXV_NAME_ENTER( "lookup value" );
|
||||
|
||||
if ( v >= GXV_BSLN_VALUE_COUNT )
|
||||
FT_INVALID_DATA;
|
||||
|
@ -171,7 +171,7 @@
|
|||
FT_Bytes p = tables;
|
||||
|
||||
|
||||
GXV_NAME_ENTER( " parts format 1" );
|
||||
GXV_NAME_ENTER( "parts format 1" );
|
||||
|
||||
/* deltas */
|
||||
gxv_bsln_parts_fmt0_validate( p, limit, valid );
|
||||
|
|
|
@ -58,13 +58,13 @@
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
FT_LOCAL_DEF( 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)
|
||||
GXV_Validator valid )
|
||||
{
|
||||
FT_UInt i;
|
||||
|
||||
|
@ -123,7 +123,7 @@
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
FT_LOCAL_DEF( void )
|
||||
gxv_set_length_by_ulong_offset( FT_ULong* offset,
|
||||
FT_ULong** length,
|
||||
FT_ULong* buff,
|
||||
|
@ -176,7 +176,7 @@
|
|||
/*************************************************************************/
|
||||
|
||||
|
||||
static void
|
||||
FT_LOCAL_DEF( void )
|
||||
gxv_array_getlimits_byte( FT_Bytes table,
|
||||
FT_Bytes limit,
|
||||
FT_Byte* min,
|
||||
|
@ -205,7 +205,7 @@
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
FT_LOCAL_DEF( void )
|
||||
gxv_array_getlimits_ushort( FT_Bytes table,
|
||||
FT_Bytes limit,
|
||||
FT_UShort* min,
|
||||
|
@ -430,7 +430,7 @@
|
|||
GXV_LookupValueDesc value;
|
||||
|
||||
|
||||
GXV_NAME_ENTER( " LookupTable format 0" );
|
||||
GXV_NAME_ENTER( "LookupTable format 0" );
|
||||
|
||||
GXV_LIMIT_CHECK( 2 * valid->face->num_glyphs );
|
||||
|
||||
|
@ -507,7 +507,7 @@
|
|||
GXV_LookupValueDesc value;
|
||||
|
||||
|
||||
GXV_NAME_ENTER( " LookupTable format 2" );
|
||||
GXV_NAME_ENTER( "LookupTable format 2" );
|
||||
|
||||
unitSize = nUnits = 0;
|
||||
gxv_BinSrchHeader_validate( p, limit, &unitSize, &nUnits, valid );
|
||||
|
@ -581,7 +581,7 @@
|
|||
GXV_LookupValueDesc value;
|
||||
|
||||
|
||||
GXV_NAME_ENTER( " LookupTable format 4" );
|
||||
GXV_NAME_ENTER( "LookupTable format 4" );
|
||||
|
||||
unitSize = nUnits = 0;
|
||||
gxv_BinSrchHeader_validate( p, limit, &unitSize, &nUnits, valid );
|
||||
|
@ -678,7 +678,7 @@
|
|||
GXV_LookupValueDesc value;
|
||||
|
||||
|
||||
GXV_NAME_ENTER( " LookupTable format 6" );
|
||||
GXV_NAME_ENTER( "LookupTable format 6" );
|
||||
|
||||
unitSize = nUnits = 0;
|
||||
gxv_BinSrchHeader_validate( p, limit, &unitSize, &nUnits, valid );
|
||||
|
@ -731,7 +731,7 @@
|
|||
FT_UShort glyphCount;
|
||||
|
||||
|
||||
GXV_NAME_ENTER( " LookupTable format 8" );
|
||||
GXV_NAME_ENTER( "LookupTable format 8" );
|
||||
|
||||
/* firstGlyph + glyphCount */
|
||||
GXV_LIMIT_CHECK( 2 + 2 );
|
||||
|
@ -778,7 +778,7 @@
|
|||
GXV_Validate_Func func;
|
||||
|
||||
|
||||
GXV_NAME_ENTER(" LookupTable" );
|
||||
GXV_NAME_ENTER( "LookupTable" );
|
||||
|
||||
/* lookuptbl_head may be used in fmt4 transit function. */
|
||||
valid->lookuptbl_head = table;
|
||||
|
@ -1028,7 +1028,7 @@
|
|||
{
|
||||
FT_Bytes p = table;
|
||||
FT_Bytes limit = table + *length_p;
|
||||
FT_Byte class;
|
||||
FT_Byte clazz;
|
||||
FT_Byte entry;
|
||||
|
||||
|
||||
|
@ -1050,7 +1050,7 @@
|
|||
while ( p + ( 1 + maxClassID ) <= limit )
|
||||
{
|
||||
(*maxState_p)++;
|
||||
for ( class = 0; class <= maxClassID; class++ )
|
||||
for ( clazz = 0; clazz <= maxClassID; clazz++ )
|
||||
{
|
||||
entry = FT_NEXT_BYTE( p );
|
||||
*maxEntry_p = FT_MAX( *maxEntry_p, entry );
|
||||
|
@ -1220,9 +1220,6 @@
|
|||
FT_UShort stateArray; /* offset to StateArray */
|
||||
FT_UShort entryTable; /* offset to EntryTable */
|
||||
|
||||
#define GXV_STATETABLE_HEADER_SIZE ( 2 + 2 + 2 + 2 )
|
||||
#define GXV_STATEHEADER_SIZE GXV_STATETABLE_HEADER_SIZE
|
||||
|
||||
FT_UShort classTable_length;
|
||||
FT_UShort stateArray_length;
|
||||
FT_UShort entryTable_length;
|
||||
|
@ -1416,7 +1413,7 @@
|
|||
{
|
||||
FT_Bytes p = table;
|
||||
FT_Bytes limit = table + *length_p;
|
||||
FT_UShort class;
|
||||
FT_UShort clazz;
|
||||
FT_UShort entry;
|
||||
|
||||
|
||||
|
@ -1438,7 +1435,7 @@
|
|||
while ( p + ( ( 1 + maxClassID ) * 2 ) <= limit )
|
||||
{
|
||||
(*maxState_p)++;
|
||||
for ( class = 0; class <= maxClassID; class++ )
|
||||
for ( clazz = 0; clazz <= maxClassID; clazz++ )
|
||||
{
|
||||
entry = FT_NEXT_USHORT( p );
|
||||
*maxEntry_p = FT_MAX( *maxEntry_p, entry );
|
||||
|
@ -1564,9 +1561,6 @@
|
|||
FT_ULong stateArray; /* offset to StateArray */
|
||||
FT_ULong entryTable; /* offset to EntryTable */
|
||||
|
||||
#define GXV_XSTATETABLE_HEADER_SIZE ( 4 + 4 + 4 + 4 )
|
||||
#define GXV_XSTATEHEADER_SIZE GXV_XSTATETABLE_HEADER_SIZE
|
||||
|
||||
FT_ULong classTable_length;
|
||||
FT_ULong stateArray_length;
|
||||
FT_ULong entryTable_length;
|
||||
|
@ -1669,7 +1663,7 @@
|
|||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
||||
FT_LOCAL_DEF( int )
|
||||
static int
|
||||
gxv_compare_ranges( FT_Bytes table1_start,
|
||||
FT_ULong table1_length,
|
||||
FT_Bytes table2_start,
|
||||
|
@ -1712,7 +1706,7 @@
|
|||
|
||||
FT_LOCAL_DEF( void )
|
||||
gxv_odtect_validate( GXV_odtect_Range odtect,
|
||||
GXV_Validator valid )
|
||||
GXV_Validator valid )
|
||||
{
|
||||
FT_UInt i, j;
|
||||
|
||||
|
|
|
@ -409,20 +409,76 @@ FT_BEGIN_HEADER
|
|||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
||||
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 MACRO *****/
|
||||
/***** 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 ) \
|
||||
|
@ -439,6 +495,12 @@ FT_BEGIN_HEADER
|
|||
#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
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
@ -464,6 +526,17 @@ FT_BEGIN_HEADER
|
|||
} 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 }; \
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
|
||||
#include "gxvalid.h"
|
||||
#include "gxvcommn.h"
|
||||
#include "gxvfeat.h"
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
|
@ -38,140 +39,6 @@
|
|||
#define FT_COMPONENT trace_gxvfeat
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/***** *****/
|
||||
/***** Registry predefined by Apple *****/
|
||||
/***** *****/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
||||
/* TODO: More compact format */
|
||||
typedef struct GXV_Feature_RegistryRec_
|
||||
{
|
||||
FT_Bool existence;
|
||||
FT_Bool apple_reserved;
|
||||
FT_Bool exclusive;
|
||||
FT_Byte nSettings;
|
||||
|
||||
} GX_Feature_RegistryRec;
|
||||
|
||||
|
||||
#define gxv_feat_registry_length \
|
||||
( sizeof ( gxv_feat_registry ) / \
|
||||
sizeof ( GX_Feature_RegistryRec ) )
|
||||
|
||||
|
||||
static GX_Feature_RegistryRec gxv_feat_registry[] =
|
||||
{
|
||||
/* Generated from gxvfgen.c */
|
||||
{1, 0, 0, 1}, /* All Typographic Features */
|
||||
{1, 0, 0, 8}, /* Ligatures */
|
||||
{1, 0, 1, 3}, /* Cursive Connection */
|
||||
{1, 0, 1, 6}, /* Letter Case */
|
||||
{1, 0, 0, 1}, /* Vertical Substitution */
|
||||
{1, 0, 0, 1}, /* Linguistic Rearrangement */
|
||||
{1, 0, 1, 2}, /* Number Spacing */
|
||||
{1, 1, 0, 0}, /* Apple Reserved 1 */
|
||||
{1, 0, 0, 5}, /* Smart Swashes */
|
||||
{1, 0, 1, 3}, /* Diacritics */
|
||||
{1, 0, 1, 4}, /* Vertical Position */
|
||||
{1, 0, 1, 3}, /* Fractions */
|
||||
{1, 1, 0, 0}, /* Apple Reserved 2 */
|
||||
{1, 0, 0, 1}, /* Overlapping Characters */
|
||||
{1, 0, 0, 6}, /* Typographic Extras */
|
||||
{1, 0, 0, 5}, /* Mathematical Extras */
|
||||
{1, 0, 1, 7}, /* Ornament Sets */
|
||||
{1, 0, 1, 1}, /* Character Alternatives */
|
||||
{1, 0, 1, 5}, /* Design Complexity */
|
||||
{1, 0, 1, 6}, /* Style Options */
|
||||
{1, 0, 1, 11}, /* Character Shape */
|
||||
{1, 0, 1, 2}, /* Number Case */
|
||||
{1, 0, 1, 4}, /* Text Spacing */
|
||||
{1, 0, 1, 10}, /* Transliteration */
|
||||
{1, 0, 1, 9}, /* Annotation */
|
||||
{1, 0, 1, 2}, /* Kana Spacing */
|
||||
{1, 0, 1, 2}, /* Ideographic Spacing */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{1, 0, 1, 4}, /* Text Spacing */
|
||||
{1, 0, 1, 2}, /* Kana Spacing */
|
||||
{1, 0, 1, 2}, /* Ideographic Spacing */
|
||||
{1, 0, 1, 4}, /* CJK Roman Spacing */
|
||||
};
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/***** *****/
|
||||
|
|
|
@ -0,0 +1,172 @@
|
|||
/***************************************************************************/
|
||||
/* */
|
||||
/* gxvfeat.h */
|
||||
/* */
|
||||
/* TrueTypeGX/AAT feat table validation (specification). */
|
||||
/* */
|
||||
/* Copyright 2004, 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
|
||||
/* 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. */
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
/***************************************************************************/
|
||||
/* */
|
||||
/* gxvalid is derived from both gxlayout module and otvalid module. */
|
||||
/* Development of gxlayout is supported by the Information-technology */
|
||||
/* Promotion Agency(IPA), Japan. */
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
|
||||
#ifndef __GXVFEAT_H__
|
||||
#define __GXVFEAT_H__
|
||||
|
||||
|
||||
#include "gxvalid.h"
|
||||
#include "gxvcommn.h"
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/***** *****/
|
||||
/***** Registry predefined by Apple *****/
|
||||
/***** *****/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
||||
/* TODO: More compact format */
|
||||
typedef struct GXV_Feature_RegistryRec_
|
||||
{
|
||||
FT_Bool existence;
|
||||
FT_Bool apple_reserved;
|
||||
FT_Bool exclusive;
|
||||
FT_Byte nSettings;
|
||||
|
||||
} GX_Feature_RegistryRec;
|
||||
|
||||
|
||||
#define gxv_feat_registry_length \
|
||||
( sizeof ( gxv_feat_registry ) / \
|
||||
sizeof ( GX_Feature_RegistryRec ) )
|
||||
|
||||
|
||||
static GX_Feature_RegistryRec gxv_feat_registry[] =
|
||||
{
|
||||
/* Generated from gxvfgen.c */
|
||||
{1, 0, 0, 1}, /* All Typographic Features */
|
||||
{1, 0, 0, 8}, /* Ligatures */
|
||||
{1, 0, 1, 3}, /* Cursive Connection */
|
||||
{1, 0, 1, 6}, /* Letter Case */
|
||||
{1, 0, 0, 1}, /* Vertical Substitution */
|
||||
{1, 0, 0, 1}, /* Linguistic Rearrangement */
|
||||
{1, 0, 1, 2}, /* Number Spacing */
|
||||
{1, 1, 0, 0}, /* Apple Reserved 1 */
|
||||
{1, 0, 0, 5}, /* Smart Swashes */
|
||||
{1, 0, 1, 3}, /* Diacritics */
|
||||
{1, 0, 1, 4}, /* Vertical Position */
|
||||
{1, 0, 1, 3}, /* Fractions */
|
||||
{1, 1, 0, 0}, /* Apple Reserved 2 */
|
||||
{1, 0, 0, 1}, /* Overlapping Characters */
|
||||
{1, 0, 0, 6}, /* Typographic Extras */
|
||||
{1, 0, 0, 5}, /* Mathematical Extras */
|
||||
{1, 0, 1, 7}, /* Ornament Sets */
|
||||
{1, 0, 1, 1}, /* Character Alternatives */
|
||||
{1, 0, 1, 5}, /* Design Complexity */
|
||||
{1, 0, 1, 6}, /* Style Options */
|
||||
{1, 0, 1, 11}, /* Character Shape */
|
||||
{1, 0, 1, 2}, /* Number Case */
|
||||
{1, 0, 1, 4}, /* Text Spacing */
|
||||
{1, 0, 1, 10}, /* Transliteration */
|
||||
{1, 0, 1, 9}, /* Annotation */
|
||||
{1, 0, 1, 2}, /* Kana Spacing */
|
||||
{1, 0, 1, 2}, /* Ideographic Spacing */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{0, 0, 0, 0}, /* __EMPTY__ */
|
||||
{1, 0, 1, 4}, /* Text Spacing */
|
||||
{1, 0, 1, 2}, /* Kana Spacing */
|
||||
{1, 0, 1, 2}, /* Ideographic Spacing */
|
||||
{1, 0, 1, 4}, /* CJK Roman Spacing */
|
||||
};
|
||||
|
||||
|
||||
#endif /* __GXVFEAT_H__ */
|
||||
|
||||
|
||||
/* END */
|
|
@ -108,7 +108,7 @@
|
|||
count = FT_NEXT_ULONG( p );
|
||||
for ( i = 0; i < count; i++ )
|
||||
{
|
||||
GXV_TRACE(( "validate wdc pair %d/%d\n", i + 1, count ));
|
||||
GXV_TRACE(( "validating wdc pair %d/%d\n", i + 1, count ));
|
||||
gxv_just_wdp_entry_validate( p, limit, valid );
|
||||
p += valid->subtable_length;
|
||||
}
|
||||
|
|
|
@ -59,9 +59,10 @@
|
|||
|
||||
typedef enum GXV_kern_Dialect_
|
||||
{
|
||||
KERN_DIALECT_MS = FT_VALIDATE_MS,
|
||||
KERN_DIALECT_APPLE = FT_VALIDATE_APPLE,
|
||||
KERN_DIALECT_ANY = FT_VALIDATE_CKERN
|
||||
KERN_DIALECT_UNKNOWN = 0,
|
||||
KERN_DIALECT_MS = FT_VALIDATE_MS,
|
||||
KERN_DIALECT_APPLE = FT_VALIDATE_APPLE,
|
||||
KERN_DIALECT_ANY = FT_VALIDATE_CKERN
|
||||
|
||||
} GXV_kern_Dialect;
|
||||
|
||||
|
@ -168,7 +169,8 @@
|
|||
GXV_Validator valid )
|
||||
{
|
||||
FT_Bytes p = table;
|
||||
GXV_kern_fmt1_StateOptRecData optdata = valid->statetable.optdata;
|
||||
GXV_kern_fmt1_StateOptRecData optdata =
|
||||
(GXV_kern_fmt1_StateOptRecData)valid->statetable.optdata;
|
||||
|
||||
|
||||
GXV_LIMIT_CHECK( 2 );
|
||||
|
@ -193,7 +195,8 @@
|
|||
FT_UShort *l[4];
|
||||
FT_UShort buff[5];
|
||||
|
||||
GXV_kern_fmt1_StateOptRecData optdata = valid->statetable.optdata;
|
||||
GXV_kern_fmt1_StateOptRecData optdata =
|
||||
(GXV_kern_fmt1_StateOptRecData)valid->statetable.optdata;
|
||||
|
||||
|
||||
o[0] = classTable;
|
||||
|
@ -236,7 +239,8 @@
|
|||
valueOffset = flags & 0x3FFF;
|
||||
|
||||
{
|
||||
GXV_kern_fmt1_StateOptRecData vt_rec = valid->statetable.optdata;
|
||||
GXV_kern_fmt1_StateOptRecData vt_rec =
|
||||
(GXV_kern_fmt1_StateOptRecData)valid->statetable.optdata;
|
||||
FT_Bytes p;
|
||||
|
||||
|
||||
|
@ -612,10 +616,10 @@
|
|||
FT_UShort* format,
|
||||
GXV_Validator valid )
|
||||
{
|
||||
FT_Int result = 0;
|
||||
GXV_kern_Dialect result = KERN_DIALECT_UNKNOWN;
|
||||
|
||||
|
||||
GXV_NAME_ENTER( "validate coverage" );
|
||||
GXV_NAME_ENTER( "validating coverage" );
|
||||
|
||||
GXV_TRACE(( "interprete coverage 0x%04x by Apple style\n", coverage ));
|
||||
|
||||
|
@ -767,7 +771,7 @@
|
|||
KERN_DIALECT( valid ) = dialect_request;
|
||||
|
||||
GXV_LIMIT_CHECK( 2 );
|
||||
GXV_KERN_DATA( version ) = FT_NEXT_USHORT( p );
|
||||
GXV_KERN_DATA( version ) = (GXV_kern_Version)FT_NEXT_USHORT( p );
|
||||
GXV_TRACE(( "version 0x%04x (higher 16bit)\n",
|
||||
GXV_KERN_DATA( version ) ));
|
||||
|
||||
|
@ -792,7 +796,7 @@
|
|||
|
||||
for ( i = 0; i < nTables; i++ )
|
||||
{
|
||||
GXV_TRACE(( "validate subtable %d/%d\n", i, nTables ));
|
||||
GXV_TRACE(( "validating subtable %d/%d\n", i, nTables ));
|
||||
/* p should be 32bit-aligned? */
|
||||
gxv_kern_subtable_validate( p, 0, valid );
|
||||
p += valid->subtable_length;
|
||||
|
@ -820,7 +824,7 @@
|
|||
GXV_kern_Dialect dialect_request;
|
||||
|
||||
|
||||
dialect_request = dialect_flags;
|
||||
dialect_request = (GXV_kern_Dialect)dialect_flags;
|
||||
gxv_kern_validate_generic( table, face, 1, dialect_request, ftvalid );
|
||||
}
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
|
||||
|
||||
#include "gxvmort.h"
|
||||
#include "gxvfeat.h"
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
|
@ -88,7 +89,7 @@
|
|||
* nFeatureFlags is typed to FT_UInt to accept that in
|
||||
* mort (typed FT_UShort) and morx (typed FT_ULong).
|
||||
*/
|
||||
static void
|
||||
FT_LOCAL_DEF( void )
|
||||
gxv_mort_featurearray_validate( FT_Bytes table,
|
||||
FT_Bytes limit,
|
||||
FT_UInt nFeatureFlags,
|
||||
|
@ -120,7 +121,7 @@
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
FT_LOCAL_DEF( void )
|
||||
gxv_mort_coverage_validate( FT_UShort coverage,
|
||||
GXV_Validator valid )
|
||||
{
|
||||
|
@ -184,7 +185,7 @@
|
|||
coverage = FT_NEXT_USHORT( p );
|
||||
subFeatureFlags = FT_NEXT_ULONG( p );
|
||||
|
||||
GXV_TRACE(( "validate chain subtable %d/%d (%d bytes)\n",
|
||||
GXV_TRACE(( "validating chain subtable %d/%d (%d bytes)\n",
|
||||
i + 1, nSubtables, length ));
|
||||
type = coverage & 0x0007;
|
||||
rest = length - ( 2 + 2 + 4 );
|
||||
|
@ -258,7 +259,7 @@
|
|||
valid->face = face;
|
||||
limit = valid->root->limit;
|
||||
|
||||
FT_TRACE3(( "validation mort table\n" ));
|
||||
FT_TRACE3(( "validating `mort' table\n" ));
|
||||
GXV_INIT;
|
||||
|
||||
GXV_LIMIT_CHECK( 4 + 4 );
|
||||
|
@ -270,7 +271,7 @@
|
|||
|
||||
for ( i = 0; i < nChains; i++ )
|
||||
{
|
||||
GXV_TRACE(( "validate chain %d/%d\n", i + 1, nChains ));
|
||||
GXV_TRACE(( "validating chain %d/%d\n", i + 1, nChains ));
|
||||
GXV_32BIT_ALIGNMENT_VALIDATE( p - table );
|
||||
gxv_mort_chain_validate( p, limit, valid );
|
||||
p += valid->subtable_length;
|
||||
|
|
|
@ -51,10 +51,6 @@
|
|||
(f).disableFlags == 0x00000000UL )
|
||||
|
||||
|
||||
FT_LOCAL( void )
|
||||
gxv_mort_feature_validate( GXV_mort_feature f,
|
||||
GXV_Validator valid );
|
||||
|
||||
FT_LOCAL( void )
|
||||
gxv_mort_featurearray_validate( FT_Bytes table,
|
||||
FT_Bytes limit,
|
||||
|
|
|
@ -106,7 +106,7 @@
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
FT_LOCAL_DEF( void )
|
||||
gxv_mort_subtable_type0_validate( FT_Bytes table,
|
||||
FT_Bytes limit,
|
||||
GXV_Validator valid )
|
||||
|
|
|
@ -58,7 +58,7 @@
|
|||
FT_Bytes p = table;
|
||||
|
||||
GXV_mort_subtable_type1_StateOptRecData optdata =
|
||||
valid->statetable.optdata;
|
||||
(GXV_mort_subtable_type1_StateOptRecData)valid->statetable.optdata;
|
||||
|
||||
|
||||
GXV_LIMIT_CHECK( 2 );
|
||||
|
@ -81,7 +81,7 @@
|
|||
FT_UShort buff[5];
|
||||
|
||||
GXV_mort_subtable_type1_StateOptRecData optdata =
|
||||
valid->statetable.optdata;
|
||||
(GXV_mort_subtable_type1_StateOptRecData)valid->statetable.optdata;
|
||||
|
||||
|
||||
o[0] = classTable;
|
||||
|
@ -183,7 +183,7 @@
|
|||
FT_UShort i;
|
||||
|
||||
|
||||
GXV_NAME_ENTER( "validate contents in substitionTable" );
|
||||
GXV_NAME_ENTER( "validating contents of substitionTable" );
|
||||
for ( i = 0; i < num_gids ; i ++ )
|
||||
{
|
||||
FT_UShort dst_gid;
|
||||
|
@ -214,7 +214,7 @@
|
|||
* In addition to classTable, stateArray, and entryTable, the field
|
||||
* `substitutionTable' is added.
|
||||
*/
|
||||
static void
|
||||
FT_LOCAL_DEF( void )
|
||||
gxv_mort_subtable_type1_validate( FT_Bytes table,
|
||||
FT_Bytes limit,
|
||||
GXV_Validator valid )
|
||||
|
|
|
@ -61,7 +61,7 @@
|
|||
{
|
||||
FT_Bytes p = table;
|
||||
GXV_mort_subtable_type2_StateOptRecData optdata =
|
||||
valid->statetable.optdata;
|
||||
(GXV_mort_subtable_type2_StateOptRecData)valid->statetable.optdata;
|
||||
|
||||
|
||||
GXV_LIMIT_CHECK( 2 + 2 + 2 );
|
||||
|
@ -93,7 +93,7 @@
|
|||
FT_UShort buff[7];
|
||||
|
||||
GXV_mort_subtable_type2_StateOptRecData optdata =
|
||||
valid->statetable.optdata;
|
||||
(GXV_mort_subtable_type2_StateOptRecData)valid->statetable.optdata;
|
||||
|
||||
|
||||
GXV_NAME_ENTER( "subtable boundaries setup" );
|
||||
|
@ -141,7 +141,7 @@
|
|||
{
|
||||
/* access ligActionTable */
|
||||
GXV_mort_subtable_type2_StateOptRecData optdata =
|
||||
valid->statetable.optdata;
|
||||
(GXV_mort_subtable_type2_StateOptRecData)valid->statetable.optdata;
|
||||
|
||||
FT_Bytes lat_base = table + optdata->ligActionTable;
|
||||
FT_Bytes p = table + ligActionOffset;
|
||||
|
@ -217,7 +217,7 @@
|
|||
GXV_Validator valid )
|
||||
{
|
||||
GXV_mort_subtable_type2_StateOptRecData optdata =
|
||||
valid->statetable.optdata;
|
||||
(GXV_mort_subtable_type2_StateOptRecData)valid->statetable.optdata;
|
||||
|
||||
FT_Bytes p = table + optdata->ligatureTable;
|
||||
FT_Bytes limit = table + optdata->ligatureTable
|
||||
|
@ -241,7 +241,7 @@
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
FT_LOCAL_DEF( void )
|
||||
gxv_mort_subtable_type2_validate( FT_Bytes table,
|
||||
FT_Bytes limit,
|
||||
GXV_Validator valid )
|
||||
|
|
|
@ -100,7 +100,7 @@
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
FT_LOCAL_DEF( void )
|
||||
gxv_mort_subtable_type4_validate( FT_Bytes table,
|
||||
FT_Bytes limit,
|
||||
GXV_Validator valid )
|
||||
|
|
|
@ -73,7 +73,7 @@
|
|||
GXV_Validator valid )
|
||||
{
|
||||
GXV_mort_subtable_type5_StateOptRecData optdata =
|
||||
valid->statetable.optdata;
|
||||
(GXV_mort_subtable_type5_StateOptRecData)valid->statetable.optdata;
|
||||
|
||||
|
||||
gxv_StateTable_subtable_setup( table_size,
|
||||
|
@ -109,7 +109,7 @@
|
|||
FT_Bytes p = table + offset;
|
||||
|
||||
GXV_mort_subtable_type5_StateOptRecData optdata =
|
||||
valid->statetable.optdata;
|
||||
(GXV_mort_subtable_type5_StateOptRecData)valid->statetable.optdata;
|
||||
|
||||
if ( optdata->classTable < offset &&
|
||||
offset < optdata->classTable + *(optdata->classTable_length_p) )
|
||||
|
@ -189,7 +189,7 @@
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
FT_LOCAL_DEF( void )
|
||||
gxv_mort_subtable_type5_validate( FT_Bytes table,
|
||||
FT_Bytes limit,
|
||||
GXV_Validator valid )
|
||||
|
|
|
@ -77,7 +77,7 @@
|
|||
coverage = FT_NEXT_ULONG( p );
|
||||
subFeatureFlags = FT_NEXT_ULONG( p );
|
||||
|
||||
GXV_TRACE(( "validate chain subtable %d/%d (%d bytes)\n",
|
||||
GXV_TRACE(( "validating chain subtable %d/%d (%d bytes)\n",
|
||||
i + 1, nSubtables, length ));
|
||||
|
||||
type = coverage & 0x0007;
|
||||
|
@ -152,7 +152,7 @@
|
|||
valid->root = ftvalid;
|
||||
valid->face = face;
|
||||
|
||||
FT_TRACE3(( "validation morx table\n" ));
|
||||
FT_TRACE3(( "validating `morx' table\n" ));
|
||||
GXV_INIT;
|
||||
|
||||
GXV_LIMIT_CHECK( 4 + 4 );
|
||||
|
@ -164,7 +164,7 @@
|
|||
|
||||
for ( i = 0; i < nChains; i++ )
|
||||
{
|
||||
GXV_TRACE(( "validate chain %d/%d\n", i + 1, nChains ));
|
||||
GXV_TRACE(( "validating chain %d/%d\n", i + 1, nChains ));
|
||||
GXV_32BIT_ALIGNMENT_VALIDATE( p - table );
|
||||
gxv_morx_chain_validate( p, limit, valid );
|
||||
p += valid->subtable_length;
|
||||
|
|
|
@ -24,8 +24,8 @@
|
|||
/***************************************************************************/
|
||||
|
||||
|
||||
#ifndef __GXVMORX_H_
|
||||
#define __GXVMORX_H_
|
||||
#ifndef __GXVMORX_H__
|
||||
#define __GXVMORX_H__
|
||||
|
||||
|
||||
#include "gxvalid.h"
|
||||
|
|
|
@ -73,7 +73,7 @@
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
FT_LOCAL_DEF( void )
|
||||
gxv_morx_subtable_type0_validate( FT_Bytes table,
|
||||
FT_Bytes limit,
|
||||
GXV_Validator valid )
|
||||
|
|
|
@ -60,7 +60,7 @@
|
|||
FT_Bytes p = table;
|
||||
|
||||
GXV_morx_subtable_type1_StateOptRecData optdata =
|
||||
valid->xstatetable.optdata;
|
||||
(GXV_morx_subtable_type1_StateOptRecData)valid->xstatetable.optdata;
|
||||
|
||||
|
||||
GXV_LIMIT_CHECK( 2 );
|
||||
|
@ -83,7 +83,7 @@
|
|||
FT_ULong buff[5];
|
||||
|
||||
GXV_morx_subtable_type1_StateOptRecData optdata =
|
||||
valid->xstatetable.optdata;
|
||||
(GXV_morx_subtable_type1_StateOptRecData)valid->xstatetable.optdata;
|
||||
|
||||
|
||||
o[0] = classTable;
|
||||
|
@ -115,7 +115,7 @@
|
|||
FT_Short currentIndex;
|
||||
|
||||
GXV_morx_subtable_type1_StateOptRecData optdata =
|
||||
valid->xstatetable.optdata;
|
||||
(GXV_morx_subtable_type1_StateOptRecData)valid->xstatetable.optdata;
|
||||
|
||||
FT_UNUSED( state );
|
||||
FT_UNUSED( table );
|
||||
|
@ -197,7 +197,7 @@
|
|||
FT_UShort i;
|
||||
|
||||
GXV_morx_subtable_type1_StateOptRecData optdata =
|
||||
valid->xstatetable.optdata;
|
||||
(GXV_morx_subtable_type1_StateOptRecData)valid->xstatetable.optdata;
|
||||
|
||||
|
||||
/* TODO: calculate offset/length for each lookupTables */
|
||||
|
@ -225,7 +225,7 @@
|
|||
* In addition to classTable, stateArray, entryTable, the field
|
||||
* `substitutionTable' is added.
|
||||
*/
|
||||
static void
|
||||
FT_LOCAL_DEF( void )
|
||||
gxv_morx_subtable_type1_validate( FT_Bytes table,
|
||||
FT_Bytes limit,
|
||||
GXV_Validator valid )
|
||||
|
|
|
@ -63,7 +63,7 @@
|
|||
FT_Bytes p = table;
|
||||
|
||||
GXV_morx_subtable_type2_StateOptRecData optdata =
|
||||
valid->xstatetable.optdata;
|
||||
(GXV_morx_subtable_type2_StateOptRecData)valid->xstatetable.optdata;
|
||||
|
||||
|
||||
GXV_LIMIT_CHECK( 4 + 4 + 4 );
|
||||
|
@ -95,7 +95,7 @@
|
|||
FT_ULong buff[7];
|
||||
|
||||
GXV_morx_subtable_type2_StateOptRecData optdata =
|
||||
valid->xstatetable.optdata;
|
||||
(GXV_morx_subtable_type2_StateOptRecData)valid->xstatetable.optdata;
|
||||
|
||||
|
||||
GXV_NAME_ENTER( "subtable boundaries setup" );
|
||||
|
@ -146,7 +146,7 @@
|
|||
{
|
||||
/* access ligActionTable */
|
||||
GXV_morx_subtable_type2_StateOptRecData optdata =
|
||||
valid->xstatetable.optdata;
|
||||
(GXV_morx_subtable_type2_StateOptRecData)valid->xstatetable.optdata;
|
||||
|
||||
FT_Bytes lat_base = table + optdata->ligActionTable;
|
||||
FT_Bytes p = lat_base +
|
||||
|
@ -220,7 +220,7 @@
|
|||
GXV_Validator valid )
|
||||
{
|
||||
GXV_morx_subtable_type2_StateOptRecData optdata =
|
||||
valid->xstatetable.optdata;
|
||||
(GXV_morx_subtable_type2_StateOptRecData)valid->xstatetable.optdata;
|
||||
|
||||
FT_Bytes p = table + optdata->ligatureTable;
|
||||
FT_Bytes limit = table + optdata->ligatureTable
|
||||
|
@ -246,7 +246,7 @@
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
FT_LOCAL_DEF( void )
|
||||
gxv_morx_subtable_type2_validate( FT_Bytes table,
|
||||
FT_Bytes limit,
|
||||
GXV_Validator valid )
|
||||
|
@ -258,7 +258,7 @@
|
|||
|
||||
GXV_NAME_ENTER( "morx chain subtable type2 (Ligature Substitution)" );
|
||||
|
||||
GXV_LIMIT_CHECK( GXV_MORT_SUBTABLE_TYPE2_HEADER_SIZE );
|
||||
GXV_LIMIT_CHECK( GXV_MORX_SUBTABLE_TYPE2_HEADER_SIZE );
|
||||
|
||||
valid->xstatetable.optdata =
|
||||
&lig_rec;
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
#define FT_COMPONENT trace_gxvmorx
|
||||
|
||||
|
||||
static void
|
||||
FT_LOCAL_DEF( void )
|
||||
gxv_morx_subtable_type4_validate( FT_Bytes table,
|
||||
FT_Bytes limit,
|
||||
GXV_Validator valid )
|
||||
|
|
|
@ -69,7 +69,7 @@
|
|||
FT_Bytes p = table;
|
||||
|
||||
GXV_morx_subtable_type5_StateOptRecData optdata =
|
||||
valid->xstatetable.optdata;
|
||||
(GXV_morx_subtable_type5_StateOptRecData)valid->xstatetable.optdata;
|
||||
|
||||
|
||||
GXV_LIMIT_CHECK( 4 );
|
||||
|
@ -92,7 +92,7 @@
|
|||
FT_ULong buff[5];
|
||||
|
||||
GXV_morx_subtable_type5_StateOptRecData optdata =
|
||||
valid->xstatetable.optdata;
|
||||
(GXV_morx_subtable_type5_StateOptRecData)valid->xstatetable.optdata;
|
||||
|
||||
|
||||
o[0] = classTable;
|
||||
|
@ -180,7 +180,7 @@
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
FT_LOCAL_DEF( void )
|
||||
gxv_morx_subtable_type5_validate( FT_Bytes table,
|
||||
FT_Bytes limit,
|
||||
GXV_Validator valid )
|
||||
|
|
|
@ -15,6 +15,15 @@
|
|||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
/***************************************************************************/
|
||||
/* */
|
||||
/* gxvalid is derived from both gxlayout module and otvalid module. */
|
||||
/* Development of gxlayout is supported by the Information-technology */
|
||||
/* Promotion Agency(IPA), Japan. */
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
|
||||
#include "gxvalid.h"
|
||||
#include "gxvcommn.h"
|
||||
|
||||
|
@ -29,7 +38,6 @@
|
|||
#define FT_COMPONENT trace_gxvopbd
|
||||
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/***** *****/
|
||||
|
@ -45,7 +53,8 @@
|
|||
|
||||
} GXV_opbd_DataRec, *GXV_opbd_Data;
|
||||
|
||||
#define GXV_OPBD_DATA(FIELD) GXV_TABLE_DATA( opbd, FIELD )
|
||||
|
||||
#define GXV_OPBD_DATA( FIELD ) GXV_TABLE_DATA( opbd, FIELD )
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
|
@ -71,20 +80,19 @@
|
|||
if ( value.u < GXV_OPBD_DATA( valueOffset_min ) )
|
||||
GXV_OPBD_DATA( valueOffset_min ) = value.u;
|
||||
|
||||
|
||||
for ( i = 0; i < 4; i++ )
|
||||
{
|
||||
GXV_LIMIT_CHECK( 2 );
|
||||
delta_value = FT_NEXT_SHORT( p );
|
||||
|
||||
if ( GXV_OPBD_DATA( format ) ) /* format 1, value is ctrl pt. */
|
||||
if ( GXV_OPBD_DATA( format ) ) /* format 1, value is ctrl pt. */
|
||||
{
|
||||
if ( delta_value == -1 )
|
||||
continue;
|
||||
|
||||
gxv_ctlPoint_validate( glyph, delta_value, valid );
|
||||
}
|
||||
else /* format 0, value is distance */
|
||||
else /* format 0, value is distance */
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
@ -130,12 +138,16 @@
|
|||
{
|
||||
GXV_LookupValueDesc value;
|
||||
|
||||
FT_UNUSED( lookuptbl_limit );
|
||||
FT_UNUSED( valid );
|
||||
|
||||
value.u = base_value.u + ( relative_gindex * 4 * sizeof ( FT_Short ) );
|
||||
|
||||
value.u = base_value.u + relative_gindex * 4 * sizeof ( FT_Short );
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/***** *****/
|
||||
|
@ -163,9 +175,9 @@
|
|||
valid->table_data = opbd;
|
||||
valid->face = face;
|
||||
|
||||
FT_TRACE3(( "validation opbd table\n" ));
|
||||
FT_TRACE3(( "validating `opbd' table\n" ));
|
||||
GXV_INIT;
|
||||
GXV_OPBD_DATA( valueOffset_min ) = 0xFFFF;
|
||||
GXV_OPBD_DATA( valueOffset_min ) = 0xFFFFU;
|
||||
|
||||
|
||||
GXV_LIMIT_CHECK( 4 + 2 );
|
||||
|
@ -173,31 +185,30 @@
|
|||
GXV_OPBD_DATA( format ) = FT_NEXT_USHORT( p );
|
||||
|
||||
|
||||
/* 0x00010000 is only defined (1996) */
|
||||
/* only 0x00010000 is defined (1996) */
|
||||
GXV_TRACE(( "(version=0x%08x)\n", version ));
|
||||
if ( 0x00010000UL != version )
|
||||
FT_INVALID_FORMAT;
|
||||
|
||||
/* 0, 1 are only defined (1996) */
|
||||
/* only values 0 and 1 are defined (1996) */
|
||||
GXV_TRACE(( "(format=0x%04x)\n", GXV_OPBD_DATA( format ) ));
|
||||
if ( 0x0001 < GXV_OPBD_DATA( format ) )
|
||||
FT_INVALID_FORMAT;
|
||||
|
||||
|
||||
valid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED;
|
||||
valid->lookupval_func = gxv_opbd_LookupValue_validate;
|
||||
valid->lookupfmt4_trans = gxv_opbd_LookupFmt4_transit;
|
||||
|
||||
gxv_LookupTable_validate( p, limit, valid );
|
||||
p += valid->subtable_length;
|
||||
|
||||
|
||||
if ( p > table + GXV_OPBD_DATA( valueOffset_min ) )
|
||||
{
|
||||
GXV_TRACE(( "found overlap between LookupTable and opbd_value array\n" ));
|
||||
GXV_TRACE((
|
||||
"found overlap between LookupTable and opbd_value array\n" ));
|
||||
FT_INVALID_OFFSET;
|
||||
}
|
||||
|
||||
|
||||
FT_TRACE4(( "\n" ));
|
||||
}
|
||||
|
||||
|
|
|
@ -16,15 +16,18 @@
|
|||
/***************************************************************************/
|
||||
|
||||
/***************************************************************************/
|
||||
/* */
|
||||
/* gxvalid is derived from both gxlayout module and otvalid module. */
|
||||
/* Development of gxlayout was support of Information-technology Promotion */
|
||||
/* Agency(IPA), Japan. */
|
||||
/* Development of gxlayout is supported by the Information-technology */
|
||||
/* Promotion Agency(IPA), Japan. */
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
|
||||
#include "gxvalid.h"
|
||||
#include "gxvcommn.h"
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* The macro FT_COMPONENT is used in trace mode. It is an implicit */
|
||||
|
@ -35,7 +38,6 @@
|
|||
#define FT_COMPONENT trace_gxvprop
|
||||
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/***** *****/
|
||||
|
@ -52,14 +54,15 @@
|
|||
FT_Fixed version;
|
||||
|
||||
} GXV_prop_DataRec, *GXV_prop_Data;
|
||||
#define GXV_PROP_DATA(field) GXV_TABLE_DATA( prop, field )
|
||||
|
||||
#define GXV_PROP_FLOATER 0x8000
|
||||
#define GXV_PROP_USE_COMPLEMENTARY_BRACKET 0x1000
|
||||
#define GXV_PROP_COMPLEMENTARY_BRACKET_OFFSET 0x0F00
|
||||
#define GXV_PROP_ATTACHING_TO_RIGHT 0x0080
|
||||
#define GXV_PROP_RESERVED 0x0060
|
||||
#define GXV_PROP_DIRECTIONALITY_CLASS 0x001F
|
||||
#define GXV_PROP_DATA( field ) GXV_TABLE_DATA( prop, field )
|
||||
|
||||
#define GXV_PROP_FLOATER 0x8000U
|
||||
#define GXV_PROP_USE_COMPLEMENTARY_BRACKET 0x1000U
|
||||
#define GXV_PROP_COMPLEMENTARY_BRACKET_OFFSET 0x0F00U
|
||||
#define GXV_PROP_ATTACHING_TO_RIGHT 0x0080U
|
||||
#define GXV_PROP_RESERVED 0x0060U
|
||||
#define GXV_PROP_DIRECTIONALITY_CLASS 0x001FU
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
|
@ -79,7 +82,7 @@
|
|||
FT_GlyphSlot glyph;
|
||||
|
||||
|
||||
GXV_NAME_ENTER(" zero advance " );
|
||||
GXV_NAME_ENTER( "zero advance" );
|
||||
|
||||
face = valid->face;
|
||||
|
||||
|
@ -98,6 +101,7 @@
|
|||
GXV_EXIT;
|
||||
}
|
||||
|
||||
|
||||
/* Pass 0 as GLYPH to check the default property */
|
||||
static void
|
||||
gxv_prop_property_validate( FT_UShort property,
|
||||
|
@ -105,15 +109,13 @@
|
|||
GXV_Validator valid )
|
||||
{
|
||||
if ( glyph != 0 && ( property & GXV_PROP_FLOATER ) )
|
||||
{
|
||||
gxv_prop_zero_advance_validate( glyph, valid );
|
||||
}
|
||||
|
||||
|
||||
if ( property & GXV_PROP_USE_COMPLEMENTARY_BRACKET )
|
||||
{
|
||||
FT_UShort offset;
|
||||
char complement;
|
||||
FT_UShort offset;
|
||||
char complement;
|
||||
|
||||
|
||||
offset = property & GXV_PROP_COMPLEMENTARY_BRACKET_OFFSET;
|
||||
if ( offset == 0 )
|
||||
|
@ -122,9 +124,9 @@
|
|||
complement = offset >> 8;
|
||||
if ( complement & 0x08 )
|
||||
{
|
||||
/* Top bit is set: nagative */
|
||||
/* Top bit is set: negative */
|
||||
|
||||
/* Calculated the absolute offset */
|
||||
/* Calculate the absolute offset */
|
||||
complement = ( complement & 0x07 ) + 1;
|
||||
|
||||
/* The gid for complement must be greater than 0 */
|
||||
|
@ -136,38 +138,34 @@
|
|||
/* The gid for complement must be the face. */
|
||||
gxv_glyphid_validate( glyph + complement, valid );
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( ( property & GXV_PROP_COMPLEMENTARY_BRACKET_OFFSET ) )
|
||||
if ( property & GXV_PROP_COMPLEMENTARY_BRACKET_OFFSET )
|
||||
GXV_TRACE(( "glyph %d cannot have complementary bracketing\n",
|
||||
glyph ));
|
||||
glyph ));
|
||||
}
|
||||
|
||||
|
||||
/* this is introduced in ver 2.0 */
|
||||
/* this is introduced in version 2.0 */
|
||||
if ( property & GXV_PROP_ATTACHING_TO_RIGHT )
|
||||
{
|
||||
if ( GXV_PROP_DATA( version ) == 0x00010000 )
|
||||
if ( GXV_PROP_DATA( version ) == 0x00010000UL )
|
||||
FT_INVALID_DATA;
|
||||
}
|
||||
|
||||
|
||||
if ( property & GXV_PROP_RESERVED )
|
||||
{
|
||||
FT_INVALID_DATA;
|
||||
}
|
||||
|
||||
if ( ( property & GXV_PROP_DIRECTIONALITY_CLASS ) > 11 )
|
||||
{
|
||||
/* TODO: Too restricted. Use the validation level. */
|
||||
if ( GXV_PROP_DATA( version ) == 0x00010000 ||
|
||||
GXV_PROP_DATA( version ) == 0x00020000 )
|
||||
if ( GXV_PROP_DATA( version ) == 0x00010000UL ||
|
||||
GXV_PROP_DATA( version ) == 0x00020000UL )
|
||||
FT_INVALID_DATA;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
gxv_prop_LookupValue_validate( FT_UShort glyph,
|
||||
GXV_LookupValueDesc value,
|
||||
|
@ -216,7 +214,7 @@
|
|||
GXV_LookupValueDesc value;
|
||||
|
||||
|
||||
offset = base_value.u + ( relative_gindex * sizeof( FT_UShort ) );
|
||||
offset = base_value.u + relative_gindex * sizeof( FT_UShort );
|
||||
p = valid->lookuptbl_head + offset;
|
||||
limit = lookuptbl_limit;
|
||||
|
||||
|
@ -253,11 +251,11 @@
|
|||
FT_UShort defaultProp;
|
||||
|
||||
|
||||
valid->root = ftvalid;
|
||||
valid->root = ftvalid;
|
||||
valid->table_data = prop;
|
||||
valid->face = face;
|
||||
valid->face = face;
|
||||
|
||||
FT_TRACE3(( "validation prop table\n" ));
|
||||
FT_TRACE3(( "validating `prop' table\n" ));
|
||||
GXV_INIT;
|
||||
|
||||
GXV_LIMIT_CHECK( 4 + 2 + 2 );
|
||||
|
@ -265,15 +263,14 @@
|
|||
format = FT_NEXT_USHORT( p );
|
||||
defaultProp = FT_NEXT_USHORT( p );
|
||||
|
||||
|
||||
/* version 1.0, 2.0, 3.0 are only defined (1996) */
|
||||
if ( version != 0x00010000 &&
|
||||
version != 0x00020000 &&
|
||||
version != 0x00030000 )
|
||||
/* only versions 1.0, 2.0, 3.0 are defined (1996) */
|
||||
if ( version != 0x00010000UL &&
|
||||
version != 0x00020000UL &&
|
||||
version != 0x00030000UL )
|
||||
FT_INVALID_FORMAT;
|
||||
|
||||
|
||||
/* format 0x0000, 0x0001 are only defined (1996) */
|
||||
/* only formats 0x0000, 0x0001 are defined (1996) */
|
||||
if ( format > 1 )
|
||||
FT_INVALID_FORMAT;
|
||||
|
||||
|
@ -282,7 +279,7 @@
|
|||
if ( format == 0 )
|
||||
{
|
||||
FT_TRACE3(( "(format 0, no per-glyph properties, "
|
||||
"rest %d bytes are skipped)", limit - p ));
|
||||
"remaining %d bytes are skipped)", limit - p ));
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
|
@ -292,6 +289,7 @@
|
|||
valid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED;
|
||||
valid->lookupval_func = gxv_prop_LookupValue_validate;
|
||||
valid->lookupfmt4_trans = gxv_prop_LookupFmt4_transit;
|
||||
|
||||
gxv_LookupTable_validate( p, limit, valid );
|
||||
|
||||
Exit:
|
||||
|
|
|
@ -16,9 +16,11 @@
|
|||
/***************************************************************************/
|
||||
|
||||
/***************************************************************************/
|
||||
/* */
|
||||
/* gxvalid is derived from both gxlayout module and otvalid module. */
|
||||
/* Development of gxlayout was support of Information-technology Promotion */
|
||||
/* Agency(IPA), Japan. */
|
||||
/* Development of gxlayout is supported by the Information-technology */
|
||||
/* Promotion Agency(IPA), Japan. */
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
|
||||
|
@ -45,9 +47,9 @@
|
|||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* refered track table format specification:
|
||||
* referred track table format specification:
|
||||
* http://developer.apple.com/fonts/TTRefMan/RM06/Chap6trak.html
|
||||
* last update is 1996.
|
||||
* last update was 1996.
|
||||
* ----------------------------------------------
|
||||
* [MINIMUM HEADER]: GXV_TRAK_SIZE_MIN
|
||||
* version (fixed: 32bit) = 0x00010000
|
||||
|
@ -75,7 +77,9 @@
|
|||
|
||||
} GXV_trak_DataRec, *GXV_trak_Data;
|
||||
|
||||
#define GXV_TRAK_DATA(FIELD) GXV_TABLE_DATA( trak, FIELD )
|
||||
|
||||
#define GXV_TRAK_DATA( FIELD ) GXV_TABLE_DATA( trak, FIELD )
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
@ -89,7 +93,6 @@
|
|||
gxv_trak_trackTable_validate( FT_Bytes table,
|
||||
FT_Bytes limit,
|
||||
FT_UShort nTracks,
|
||||
FT_UShort nSizes,
|
||||
GXV_Validator valid )
|
||||
{
|
||||
FT_Bytes p = table;
|
||||
|
@ -102,7 +105,7 @@
|
|||
|
||||
GXV_NAME_ENTER( "trackTable" );
|
||||
|
||||
GXV_TRAK_DATA( trackValueOffset_min ) = 0xFFFF;
|
||||
GXV_TRAK_DATA( trackValueOffset_min ) = 0xFFFFU;
|
||||
GXV_TRAK_DATA( trackValueOffset_max ) = 0x0000;
|
||||
|
||||
for ( i = 0; i < nTracks; i ++ )
|
||||
|
@ -120,7 +123,7 @@
|
|||
gxv_sfntName_validate( nameIndex, 256, 32767, valid );
|
||||
}
|
||||
|
||||
valid->subtable_length = ( p - table );
|
||||
valid->subtable_length = p - table;
|
||||
GXV_EXIT;
|
||||
}
|
||||
|
||||
|
@ -149,22 +152,19 @@
|
|||
|
||||
gxv_odtect_add_range( table, p - table, "trackData header", odtect );
|
||||
|
||||
|
||||
/* validate trackTable */
|
||||
gxv_trak_trackTable_validate( p, limit, nTracks, nSizes, valid );
|
||||
gxv_trak_trackTable_validate( p, limit, nTracks, valid );
|
||||
gxv_odtect_add_range( p, valid->subtable_length,
|
||||
"trackTable", odtect );
|
||||
|
||||
|
||||
/* sizeTable is array of FT_Fixed, don't check contents */
|
||||
p = valid->root->base + sizeTableOffset;
|
||||
GXV_LIMIT_CHECK( nSizes * 4 );
|
||||
gxv_odtect_add_range( p, ( nSizes * 4 ), "sizeTable", odtect );
|
||||
|
||||
gxv_odtect_add_range( p, nSizes * 4, "sizeTable", odtect );
|
||||
|
||||
/* validate trackValueOffet */
|
||||
p = valid->root->base + GXV_TRAK_DATA( trackValueOffset_min );
|
||||
if ( ( limit - p ) < ( nTracks * nSizes * 2 ) )
|
||||
if ( limit - p < nTracks * nSizes * 2 )
|
||||
GXV_TRACE(( "too short trackValue array\n" ));
|
||||
|
||||
p = valid->root->base + GXV_TRAK_DATA( trackValueOffset_max );
|
||||
|
@ -174,10 +174,9 @@
|
|||
+ GXV_TRAK_DATA( trackValueOffset_min ),
|
||||
GXV_TRAK_DATA( trackValueOffset_max )
|
||||
- GXV_TRAK_DATA( trackValueOffset_min )
|
||||
+ ( nSizes * 2 ),
|
||||
+ nSizes * 2,
|
||||
"trackValue array", odtect );
|
||||
|
||||
|
||||
gxv_odtect_validate( odtect, valid );
|
||||
|
||||
GXV_EXIT;
|
||||
|
@ -215,17 +214,15 @@
|
|||
|
||||
GXV_ODTECT( 3, odtect );
|
||||
|
||||
|
||||
GXV_ODTECT_INIT( odtect );
|
||||
valid->root = ftvalid;
|
||||
valid->table_data = trak;
|
||||
valid->face = face;
|
||||
|
||||
|
||||
limit = valid->root->limit;
|
||||
table_size = limit - table;
|
||||
|
||||
FT_TRACE3(( "validation trak table\n" ));
|
||||
FT_TRACE3(( "validating `trak' table\n" ));
|
||||
GXV_INIT;
|
||||
|
||||
GXV_LIMIT_CHECK( 4 + 2 + 2 + 2 + 2 );
|
||||
|
@ -256,7 +253,6 @@
|
|||
if ( reserved != 0x0000 )
|
||||
FT_INVALID_DATA;
|
||||
|
||||
|
||||
/* validate trackData */
|
||||
if ( 0 < horizOffset )
|
||||
{
|
||||
|
@ -274,7 +270,6 @@
|
|||
|
||||
gxv_odtect_validate( odtect, valid );
|
||||
|
||||
|
||||
FT_TRACE4(( "\n" ));
|
||||
}
|
||||
|
||||
|
|
|
@ -33,28 +33,29 @@ GXV_DRV_SRC := $(GXV_DIR)/gxvcommn.c \
|
|||
$(GXV_DIR)/gxvprop.c \
|
||||
$(GXV_DIR)/gxvjust.c \
|
||||
$(GXV_DIR)/gxvmort.c \
|
||||
$(GXV_DIR)/gxvmort0.c \
|
||||
$(GXV_DIR)/gxvmort1.c \
|
||||
$(GXV_DIR)/gxvmort2.c \
|
||||
$(GXV_DIR)/gxvmort4.c \
|
||||
$(GXV_DIR)/gxvmort5.c \
|
||||
$(GXV_DIR)/gxvmort0.c \
|
||||
$(GXV_DIR)/gxvmort1.c \
|
||||
$(GXV_DIR)/gxvmort2.c \
|
||||
$(GXV_DIR)/gxvmort4.c \
|
||||
$(GXV_DIR)/gxvmort5.c \
|
||||
$(GXV_DIR)/gxvmorx.c \
|
||||
$(GXV_DIR)/gxvmorx0.c \
|
||||
$(GXV_DIR)/gxvmorx1.c \
|
||||
$(GXV_DIR)/gxvmorx2.c \
|
||||
$(GXV_DIR)/gxvmorx4.c \
|
||||
$(GXV_DIR)/gxvmorx5.c \
|
||||
$(GXV_DIR)/gxvmorx0.c \
|
||||
$(GXV_DIR)/gxvmorx1.c \
|
||||
$(GXV_DIR)/gxvmorx2.c \
|
||||
$(GXV_DIR)/gxvmorx4.c \
|
||||
$(GXV_DIR)/gxvmorx5.c \
|
||||
$(GXV_DIR)/gxvlcar.c \
|
||||
$(GXV_DIR)/gxvkern.c \
|
||||
$(GXV_DIR)/gxvmod.c
|
||||
|
||||
# GXV driver headers
|
||||
#
|
||||
GXV_DRV_H := $(GXV_DIR)/gxvalid.h \
|
||||
$(GXV_DIR)/gxverror.h \
|
||||
GXV_DRV_H := $(GXV_DIR)/gxvalid.h \
|
||||
$(GXV_DIR)/gxverror.h \
|
||||
$(GXV_DIR)/gxvcommn.h \
|
||||
$(GXV_DIR)/gxvmod.h \
|
||||
$(GXV_DIR)/gxvmort.h \
|
||||
$(GXV_DIR)/gxvfeat.h \
|
||||
$(GXV_DIR)/gxvmod.h \
|
||||
$(GXV_DIR)/gxvmort.h \
|
||||
$(GXV_DIR)/gxvmorx.h
|
||||
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче