From 4a7f0b1c7a1ec912911187b8090d197a4b887726 Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Thu, 1 Sep 2005 07:33:03 +0000 Subject: [PATCH] * src/gxvalid/gxvbsln.c (GXV_BSLN_VALUE_EMPTY): Add `U'. * src/gxvalid/gxmort1.c (GXV_MORT_SUBTABLE_TYPE1_HEADER_SIZE), src/gxvalid/gxmort2.c (GXV_MORT_SUBTABLE_TYPE2_HEADER_SIZE): Fix typo. * 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 messages. Decorate constants with `U' and `L' where appropriate. Fix compiler warnings. Formatting. --- ChangeLog | 15 +++++ src/gxvalid/gxvbsln.c | 3 +- src/gxvalid/gxvlcar.c | 3 +- src/gxvalid/gxvmort1.c | 3 +- src/gxvalid/gxvmort2.c | 2 +- src/gxvalid/gxvmorx.c | 37 +++++++---- src/gxvalid/gxvmorx.h | 9 ++- src/gxvalid/gxvmorx0.c | 49 +++++++++----- src/gxvalid/gxvmorx1.c | 120 +++++++++++++++++++++------------- src/gxvalid/gxvmorx2.c | 144 ++++++++++++++++++++++++++--------------- src/gxvalid/gxvmorx4.c | 27 ++++---- src/gxvalid/gxvmorx5.c | 86 ++++++++++++++---------- 12 files changed, 318 insertions(+), 180 deletions(-) diff --git a/ChangeLog b/ChangeLog index da0e47228..dee79adb5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2005-09-01 Werner Lemberg + + * src/gxvalid/gxvbsln.c (GXV_BSLN_VALUE_EMPTY): Add `U'. + + * src/gxvalid/gxmort1.c (GXV_MORT_SUBTABLE_TYPE1_HEADER_SIZE), + src/gxvalid/gxmort2.c (GXV_MORT_SUBTABLE_TYPE2_HEADER_SIZE): Fix + typo. + + * 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 + messages. + Decorate constants with `U' and `L' where appropriate. + Fix compiler warnings. + 2005-08-31 Werner Lemberg * src/truetype/ttgload.c (load_truetype_glyph): Fix typo. diff --git a/src/gxvalid/gxvbsln.c b/src/gxvalid/gxvbsln.c index 468125027..5a6389fef 100644 --- a/src/gxvalid/gxvbsln.c +++ b/src/gxvalid/gxvbsln.c @@ -47,7 +47,7 @@ /*************************************************************************/ #define GXV_BSLN_VALUE_COUNT 32 -#define GXV_BSLN_VALUE_EMPTY 0xFFFF +#define GXV_BSLN_VALUE_EMPTY 0xFFFFU typedef struct GXV_bsln_DataRec_ @@ -57,6 +57,7 @@ } GXV_bsln_DataRec, *GXV_bsln_Data; + #define GXV_BSLN_DATA( field ) GXV_TABLE_DATA( bsln, field ) diff --git a/src/gxvalid/gxvlcar.c b/src/gxvalid/gxvlcar.c index 042457cc6..3888358bc 100644 --- a/src/gxvalid/gxvlcar.c +++ b/src/gxvalid/gxvlcar.c @@ -52,7 +52,8 @@ } GXV_lcar_DataRec, *GXV_lcar_Data; -#define GXV_LCAR_DATA(FIELD) GXV_TABLE_DATA( lcar, FIELD ) + +#define GXV_LCAR_DATA( FIELD ) GXV_TABLE_DATA( lcar, FIELD ) /*************************************************************************/ diff --git a/src/gxvalid/gxvmort1.c b/src/gxvalid/gxvmort1.c index 68e334c4e..5bdf2d3ce 100644 --- a/src/gxvalid/gxvmort1.c +++ b/src/gxvalid/gxvmort1.c @@ -46,7 +46,8 @@ } GXV_mort_subtable_type1_StateOptRec, *GXV_mort_subtable_type1_StateOptRecData; -#define GXV_MORT_SUBTABLE_TYPE1_HEADER_SIZE GXV_STATETABLE_HEADER_SIZE + 2 +#define GXV_MORT_SUBTABLE_TYPE1_HEADER_SIZE \ + ( GXV_STATETABLE_HEADER_SIZE + 2 ) static void diff --git a/src/gxvalid/gxvmort2.c b/src/gxvalid/gxvmort2.c index d63fd3ddb..2d1a838b3 100644 --- a/src/gxvalid/gxvmort2.c +++ b/src/gxvalid/gxvmort2.c @@ -51,7 +51,7 @@ *GXV_mort_subtable_type2_StateOptRecData; #define GXV_MORT_SUBTABLE_TYPE2_HEADER_SIZE \ - GXV_STATETABLE_HEADER_SIZE + 2 + 2 + 2 + ( GXV_STATETABLE_HEADER_SIZE + 2 + 2 + 2 ) static void diff --git a/src/gxvalid/gxvmorx.c b/src/gxvalid/gxvmorx.c index f9ace32e1..8a0ea1a6f 100644 --- a/src/gxvalid/gxvmorx.c +++ b/src/gxvalid/gxvmorx.c @@ -16,14 +16,17 @@ /***************************************************************************/ /***************************************************************************/ +/* */ /* 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 "gxvmorx.h" + /*************************************************************************/ /* */ /* The macro FT_COMPONENT is used in trace mode. It is an implicit */ @@ -40,8 +43,9 @@ FT_UShort nSubtables, GXV_Validator valid ) { - FT_Bytes p = table; - GXV_Validate_Func fmt_funcs_table [] = + FT_Bytes p = table; + + GXV_Validate_Func fmt_funcs_table[] = { gxv_morx_subtable_type0_validate, /* 0 */ gxv_morx_subtable_type1_validate, /* 1 */ @@ -51,11 +55,14 @@ gxv_morx_subtable_type5_validate, /* 5 */ }; - GXV_Validate_Func func; + + GXV_Validate_Func func; + FT_UShort i; - GXV_NAME_ENTER(( "subtables in a chain" )); + GXV_NAME_ENTER( "subtables in a chain" ); + for ( i = 0; i < nSubtables; i++ ) { FT_ULong length; @@ -71,7 +78,7 @@ subFeatureFlags = FT_NEXT_ULONG( p ); GXV_TRACE(( "validate chain subtable %d/%d (%d bytes)\n", - i + 1, nSubtables, length )); + i + 1, nSubtables, length )); type = coverage & 0x0007; rest = length - ( 4 + 4 + 4 ); @@ -92,7 +99,8 @@ p += rest; } - valid->subtable_length = ( p - table ); + valid->subtable_length = p - table; + GXV_EXIT; } @@ -102,11 +110,11 @@ FT_Bytes limit, GXV_Validator valid ) { - FT_Bytes p = table; - FT_ULong defaultFlags; - FT_ULong chainLength; - FT_ULong nFeatureFlags; - FT_ULong nSubtables; + FT_Bytes p = table; + FT_ULong defaultFlags; + FT_ULong chainLength; + FT_ULong nFeatureFlags; + FT_ULong nSubtables; GXV_NAME_ENTER( "morx chain header" ); @@ -126,6 +134,7 @@ GXV_EXIT; } + FT_LOCAL_DEF( void ) gxv_morx_validate( FT_Bytes table, FT_Face face, @@ -150,7 +159,7 @@ version = FT_NEXT_ULONG( p ); nChains = FT_NEXT_ULONG( p ); - if (version != 0x00020000) + if ( version != 0x00020000UL ) FT_INVALID_FORMAT; for ( i = 0; i < nChains; i++ ) diff --git a/src/gxvalid/gxvmorx.h b/src/gxvalid/gxvmorx.h index 51d312676..a5f7bd3a5 100644 --- a/src/gxvalid/gxvmorx.h +++ b/src/gxvalid/gxvmorx.h @@ -16,11 +16,14 @@ /***************************************************************************/ /***************************************************************************/ +/* */ /* 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. */ +/* */ /***************************************************************************/ + #ifndef __GXVMORX_H_ #define __GXVMORX_H_ @@ -58,7 +61,7 @@ GXV_Validator valid ); -#endif /* Not def: __GXVMORX_H__ */ +#endif /* __GXVMORX_H__ */ /* END */ diff --git a/src/gxvalid/gxvmorx0.c b/src/gxvalid/gxvmorx0.c index 1f50142d9..7ad78af74 100644 --- a/src/gxvalid/gxvmorx0.c +++ b/src/gxvalid/gxvmorx0.c @@ -17,13 +17,17 @@ /***************************************************************************/ /***************************************************************************/ +/* */ /* 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 "gxvmorx.h" + /*************************************************************************/ /* */ /* The macro FT_COMPONENT is used in trace mode. It is an implicit */ @@ -35,22 +39,27 @@ static void - gxv_morx_subtable_type0_entry_validate( FT_UShort state, - FT_UShort flags, - GXV_XStateTable_GlyphOffsetDesc - glyphOffset, - FT_Bytes table, - FT_Bytes limit, - GXV_Validator valid ) + gxv_morx_subtable_type0_entry_validate( + FT_UShort state, + FT_UShort flags, + GXV_XStateTable_GlyphOffsetDesc glyphOffset, + FT_Bytes table, + FT_Bytes limit, + GXV_Validator valid ) { - FT_UShort markFirst; - FT_UShort dontAdvance; - FT_UShort markLast; - FT_UShort reserved; - FT_UShort verb; + FT_UShort markFirst; + FT_UShort dontAdvance; + FT_UShort markLast; + FT_UShort reserved; + FT_UShort verb; + + FT_UNUSED( state ); + FT_UNUSED( glyphOffset ); + FT_UNUSED( table ); + FT_UNUSED( limit ); - markFirst = flags / 0x8000; + markFirst = flags / 0x8000U; dontAdvance = ( flags & 0x4000 ) / 0x4000; markLast = ( flags & 0x2000 ) / 0x2000; reserved = flags & 0x1FF0; @@ -63,6 +72,7 @@ } } + static void gxv_morx_subtable_type0_validate( FT_Bytes table, FT_Bytes limit, @@ -70,7 +80,9 @@ { FT_Bytes p = table; - GXV_NAME_ENTER( "morx chain subtable type0 (Indic-Script Rearrangement)" ); + + GXV_NAME_ENTER( + "morx chain subtable type0 (Indic-Script Rearrangement)" ); GXV_LIMIT_CHECK( GXV_STATETABLE_HEADER_SIZE ); @@ -78,8 +90,11 @@ valid->xstatetable.optdata_load_func = NULL; valid->xstatetable.subtable_setup_func = NULL; valid->xstatetable.entry_glyphoffset_fmt = GXV_GLYPHOFFSET_NONE; - valid->xstatetable.entry_validate_func = gxv_morx_subtable_type0_entry_validate; + valid->xstatetable.entry_validate_func = + gxv_morx_subtable_type0_entry_validate; + gxv_XStateTable_validate( p, limit, valid ); + GXV_EXIT; } diff --git a/src/gxvalid/gxvmorx1.c b/src/gxvalid/gxvmorx1.c index e3240aa15..5f6fe4439 100644 --- a/src/gxvalid/gxvmorx1.c +++ b/src/gxvalid/gxvmorx1.c @@ -17,13 +17,17 @@ /***************************************************************************/ /***************************************************************************/ +/* */ /* 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 "gxvmorx.h" + /*************************************************************************/ /* */ /* The macro FT_COMPONENT is used in trace mode. It is an implicit */ @@ -43,15 +47,21 @@ } GXV_morx_subtable_type1_StateOptRec, *GXV_morx_subtable_type1_StateOptRecData; -#define GXV_MORX_SUBTABLE_TYPE1_HEADER_SIZE ( GXV_STATETABLE_HEADER_SIZE + 2 ) + +#define GXV_MORX_SUBTABLE_TYPE1_HEADER_SIZE \ + ( GXV_STATETABLE_HEADER_SIZE + 2 ) + static void gxv_morx_subtable_type1_substitutionTable_load( FT_Bytes table, FT_Bytes limit, GXV_Validator valid ) { - FT_Bytes p = table; - GXV_morx_subtable_type1_StateOptRecData optdata = valid->xstatetable.optdata; + FT_Bytes p = table; + + GXV_morx_subtable_type1_StateOptRecData optdata = + valid->xstatetable.optdata; + GXV_LIMIT_CHECK( 2 ); optdata->substitutionTable = FT_NEXT_USHORT( p ); @@ -71,7 +81,9 @@ FT_ULong o[4]; FT_ULong *l[4]; FT_ULong buff[5]; - GXV_morx_subtable_type1_StateOptRecData optdata = valid->xstatetable.optdata; + + GXV_morx_subtable_type1_StateOptRecData optdata = + valid->xstatetable.optdata; o[0] = classTable; @@ -88,30 +100,37 @@ static void - gxv_morx_subtable_type1_entry_validate( FT_UShort state, - FT_UShort flags, - GXV_StateTable_GlyphOffsetDesc - glyphOffset, - FT_Bytes table, - FT_Bytes limit, - GXV_Validator valid ) + gxv_morx_subtable_type1_entry_validate( + FT_UShort state, + FT_UShort flags, + GXV_StateTable_GlyphOffsetDesc glyphOffset, + FT_Bytes table, + FT_Bytes limit, + GXV_Validator valid ) { - FT_UShort setMark; - FT_UShort dontAdvance; - FT_UShort reserved; - FT_Short markIndex; - FT_Short currentIndex; - GXV_morx_subtable_type1_StateOptRecData optdata = valid->xstatetable.optdata; + FT_UShort setMark; + FT_UShort dontAdvance; + FT_UShort reserved; + FT_Short markIndex; + FT_Short currentIndex; + + GXV_morx_subtable_type1_StateOptRecData optdata = + valid->xstatetable.optdata; + + FT_UNUSED( state ); + FT_UNUSED( table ); + FT_UNUSED( limit ); - setMark = flags / 0x8000; + setMark = flags / 0x8000U; dontAdvance = ( flags & 0x4000 ) / 0x4000; reserved = flags & 0x3FFF; - markIndex = GXV_USHORT_TO_SHORT( glyphOffset.ul / 0x00010000 ); - currentIndex = GXV_USHORT_TO_SHORT( glyphOffset.ul & 0x0000FFFF ); + markIndex = GXV_USHORT_TO_SHORT( glyphOffset.ul / 0x00010000UL ); + currentIndex = GXV_USHORT_TO_SHORT( glyphOffset.ul & 0x0000FFFFUL ); GXV_TRACE(( " setMark=%01d dontAdvance=%01d\n", - setMark, dontAdvance )); + setMark, dontAdvance )); + if ( 0 < reserved ) { GXV_TRACE(( " non-zero bits found in reserved range\n" )); @@ -119,14 +138,14 @@ FT_INVALID_DATA; } - GXV_TRACE(( "markIndex = %d, currentIndex = %d\n", markIndex, currentIndex )); + GXV_TRACE(( "markIndex = %d, currentIndex = %d\n", + markIndex, currentIndex )); if ( optdata->substitutionTable_num_lookupTables < markIndex + 1 ) optdata->substitutionTable_num_lookupTables = markIndex + 1; if ( optdata->substitutionTable_num_lookupTables < currentIndex + 1 ) optdata->substitutionTable_num_lookupTables = currentIndex + 1; - } @@ -142,10 +161,11 @@ static GXV_LookupValueDesc - gxv_morx_subtable_type1_LookupFmt4_transit( FT_UShort relative_gindex, - GXV_LookupValueDesc base_value, - FT_Bytes lookuptbl_limit, - GXV_Validator valid ) + gxv_morx_subtable_type1_LookupFmt4_transit( + FT_UShort relative_gindex, + GXV_LookupValueDesc base_value, + FT_Bytes lookuptbl_limit, + GXV_Validator valid ) { FT_Bytes p; FT_Bytes limit; @@ -153,7 +173,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; @@ -173,10 +193,12 @@ FT_Bytes limit, GXV_Validator valid ) { - FT_Bytes p = table; - GXV_morx_subtable_type1_StateOptRecData optdata = valid->xstatetable.optdata; + FT_Bytes p = table; FT_UShort i; + GXV_morx_subtable_type1_StateOptRecData optdata = + valid->xstatetable.optdata; + /* TODO: calculate offset/length for each lookupTables */ valid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED; @@ -199,9 +221,9 @@ /* - * subtable for Contextual glyph substition is modified StateTable. - * In addition classTable, stateArray, entryTable, "substitutionTable" - * is added. + * subtable for Contextual glyph substition is a modified StateTable. + * In addition to classTable, stateArray, entryTable, the field + * `substitutionTable' is added. */ static void gxv_morx_subtable_type1_validate( FT_Bytes table, @@ -209,6 +231,7 @@ GXV_Validator valid ) { FT_Bytes p = table; + GXV_morx_subtable_type1_StateOptRec st_rec; @@ -218,19 +241,24 @@ st_rec.substitutionTable_num_lookupTables = 0; - valid->xstatetable.optdata = &st_rec; - valid->xstatetable.optdata_load_func = gxv_morx_subtable_type1_substitutionTable_load; - valid->xstatetable.subtable_setup_func = gxv_morx_subtable_type1_subtable_setup; - valid->xstatetable.entry_glyphoffset_fmt = GXV_GLYPHOFFSET_ULONG; - valid->xstatetable.entry_validate_func = gxv_morx_subtable_type1_entry_validate; + valid->xstatetable.optdata = + &st_rec; + valid->xstatetable.optdata_load_func = + gxv_morx_subtable_type1_substitutionTable_load; + valid->xstatetable.subtable_setup_func = + gxv_morx_subtable_type1_subtable_setup; + valid->xstatetable.entry_glyphoffset_fmt = + GXV_GLYPHOFFSET_ULONG; + valid->xstatetable.entry_validate_func = + gxv_morx_subtable_type1_entry_validate; + gxv_XStateTable_validate( p, limit, valid ); - gxv_morx_subtable_type1_substitutionTable_validate( table - + st_rec.substitutionTable, - table - + st_rec.substitutionTable - + st_rec.substitutionTable_length, - valid ); + gxv_morx_subtable_type1_substitutionTable_validate( + table + st_rec.substitutionTable, + table + st_rec.substitutionTable + st_rec.substitutionTable_length, + valid ); + GXV_EXIT; } diff --git a/src/gxvalid/gxvmorx2.c b/src/gxvalid/gxvmorx2.c index 749bbc672..5c4fba601 100644 --- a/src/gxvalid/gxvmorx2.c +++ b/src/gxvalid/gxvmorx2.c @@ -17,13 +17,17 @@ /***************************************************************************/ /***************************************************************************/ +/* */ /* 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 "gxvmorx.h" + /*************************************************************************/ /* */ /* The macro FT_COMPONENT is used in trace mode. It is an implicit */ @@ -46,26 +50,36 @@ } GXV_morx_subtable_type2_StateOptRec, *GXV_morx_subtable_type2_StateOptRecData; -#define GXV_MORX_SUBTABLE_TYPE2_HEADER_SIZE ( GXV_XSTATETABLE_HEADER_SIZE + 4 + 4 + 4 ) + +#define GXV_MORX_SUBTABLE_TYPE2_HEADER_SIZE \ + ( GXV_XSTATETABLE_HEADER_SIZE + 4 + 4 + 4 ) + static void gxv_morx_subtable_type2_opttable_load( FT_Bytes table, FT_Bytes limit, GXV_Validator valid ) { - FT_Bytes p = table; - GXV_morx_subtable_type2_StateOptRecData optdata = valid->xstatetable.optdata; + FT_Bytes p = table; + + GXV_morx_subtable_type2_StateOptRecData optdata = + valid->xstatetable.optdata; + GXV_LIMIT_CHECK( 4 + 4 + 4 ); optdata->ligActionTable = FT_NEXT_ULONG( p ); optdata->componentTable = FT_NEXT_ULONG( p ); optdata->ligatureTable = FT_NEXT_ULONG( p ); - GXV_TRACE(( "offset to ligActionTable=0x%08x\n", optdata->ligActionTable )); - GXV_TRACE(( "offset to componentTable=0x%08x\n", optdata->componentTable )); - GXV_TRACE(( "offset to ligatureTable=0x%08x\n", optdata->ligatureTable )); + GXV_TRACE(( "offset to ligActionTable=0x%08x\n", + optdata->ligActionTable )); + GXV_TRACE(( "offset to componentTable=0x%08x\n", + optdata->componentTable )); + GXV_TRACE(( "offset to ligatureTable=0x%08x\n", + optdata->ligatureTable )); } + static void gxv_morx_subtable_type2_subtable_setup( FT_ULong table_size, FT_ULong classTable, @@ -79,7 +93,9 @@ FT_ULong o[6]; FT_ULong* l[6]; FT_ULong buff[7]; - GXV_morx_subtable_type2_StateOptRecData optdata = valid->xstatetable.optdata; + + GXV_morx_subtable_type2_StateOptRecData optdata = + valid->xstatetable.optdata; GXV_NAME_ENTER( "subtable boundaries setup" ); @@ -100,35 +116,41 @@ gxv_set_length_by_ulong_offset( o, l, buff, 6, table_size, valid ); GXV_TRACE(( "classTable: offset=0x%08x length=0x%08x\n", - classTable, *classTable_length_p)); + classTable, *classTable_length_p )); GXV_TRACE(( "stateArray: offset=0x%08x length=0x%08x\n", - stateArray, *stateArray_length_p)); + stateArray, *stateArray_length_p )); GXV_TRACE(( "entryTable: offset=0x%08x length=0x%08x\n", - entryTable, *entryTable_length_p)); + entryTable, *entryTable_length_p )); GXV_TRACE(( "ligActionTable: offset=0x%08x length=0x%08x\n", - optdata->ligActionTable, - optdata->ligActionTable_length)); + optdata->ligActionTable, + optdata->ligActionTable_length )); GXV_TRACE(( "componentTable: offset=0x%08x length=0x%08x\n", - optdata->componentTable, - optdata->componentTable_length)); + optdata->componentTable, + optdata->componentTable_length )); GXV_TRACE(( "ligatureTable: offset=0x%08x length=0x%08x\n", - optdata->ligatureTable, - optdata->ligatureTable_length)); + optdata->ligatureTable, + optdata->ligatureTable_length )); + GXV_EXIT; } -#define GXV_MORX_LIGACTION_ENTRY_SIZE 4 + +#define GXV_MORX_LIGACTION_ENTRY_SIZE 4 static void - gxv_morx_subtable_type2_ligActionIndex_validate( FT_Bytes table, - FT_UShort ligActionIndex, - GXV_Validator valid ) + gxv_morx_subtable_type2_ligActionIndex_validate( + FT_Bytes table, + FT_UShort ligActionIndex, + GXV_Validator valid ) { /* access ligActionTable */ - GXV_morx_subtable_type2_StateOptRecData optdata = valid->xstatetable.optdata; + GXV_morx_subtable_type2_StateOptRecData optdata = + valid->xstatetable.optdata; + FT_Bytes lat_base = table + optdata->ligActionTable; - FT_Bytes p = lat_base + ligActionIndex * GXV_MORX_LIGACTION_ENTRY_SIZE; + FT_Bytes p = lat_base + + ligActionIndex * GXV_MORX_LIGACTION_ENTRY_SIZE; FT_Bytes lat_limit = lat_base + optdata->ligActionTable; @@ -152,32 +174,35 @@ lig_action = FT_NEXT_ULONG( p ); - last = (lig_action & 0x80000000) / 0x80000000; - store = (lig_action & 0x40000000) / 0x40000000; - offset = lig_action & 0x3FFFFFFF; - + last = (lig_action & 0x80000000UL) / 0x80000000UL; + store = (lig_action & 0x40000000UL) / 0x40000000UL; + offset = lig_action & 0x3FFFFFFFUL; } } static void - gxv_morx_subtable_type2_entry_validate( FT_UShort state, - FT_UShort flags, - GXV_StateTable_GlyphOffsetDesc - glyphOffset, - FT_Bytes table, - FT_Bytes limit, - GXV_Validator valid ) + gxv_morx_subtable_type2_entry_validate( + FT_UShort state, + FT_UShort flags, + GXV_StateTable_GlyphOffsetDesc glyphOffset, + FT_Bytes table, + FT_Bytes limit, + GXV_Validator valid ) { - FT_UShort setComponent; - FT_UShort dontAdvance; - FT_UShort performAction; - FT_UShort reserved; - FT_UShort ligActionIndex; + FT_UShort setComponent; + FT_UShort dontAdvance; + FT_UShort performAction; + FT_UShort reserved; + FT_UShort ligActionIndex; - setComponent = ( flags & 0x8000 ) / 0x8000; - dontAdvance = ( flags & 0x4000 ) / 0x4000; - performAction = ( flags & 0x2000 ) / 0x2000; + FT_UNUSED( state ); + FT_UNUSED( limit ); + + + setComponent = ( flags & 0x8000U ) / 0x8000U; + dontAdvance = ( flags & 0x4000 ) / 0x4000; + performAction = ( flags & 0x2000 ) / 0x2000; reserved = flags & 0x1FFF; ligActionIndex = glyphOffset.u; @@ -185,7 +210,8 @@ GXV_TRACE(( " reserved 14bit is non-zero\n" )); if ( 0 < ligActionIndex ) - gxv_morx_subtable_type2_ligActionIndex_validate( table, ligActionIndex, valid ); + gxv_morx_subtable_type2_ligActionIndex_validate( + table, ligActionIndex, valid ); } @@ -193,23 +219,29 @@ gxv_morx_subtable_type2_ligatureTable_validate( FT_Bytes table, GXV_Validator valid ) { - GXV_morx_subtable_type2_StateOptRecData optdata = valid->xstatetable.optdata; + GXV_morx_subtable_type2_StateOptRecData optdata = + valid->xstatetable.optdata; + FT_Bytes p = table + optdata->ligatureTable; FT_Bytes limit = table + optdata->ligatureTable + optdata->ligatureTable_length; + GXV_NAME_ENTER( "morx chain subtable type2 - substitutionTable" ); + if ( 0 != optdata->ligatureTable ) { /* Apple does not give specification of ligatureTable format */ while ( p < limit ) { - FT_UShort lig_gid; + FT_UShort lig_gid; + GXV_LIMIT_CHECK( 2 ); lig_gid = FT_NEXT_USHORT( p ); } } + GXV_EXIT; } @@ -220,20 +252,30 @@ GXV_Validator valid ) { FT_Bytes p = table; + GXV_morx_subtable_type2_StateOptRec lig_rec; + GXV_NAME_ENTER( "morx chain subtable type2 (Ligature Substitution)" ); GXV_LIMIT_CHECK( GXV_MORT_SUBTABLE_TYPE2_HEADER_SIZE ); - valid->xstatetable.optdata = &lig_rec; - valid->xstatetable.optdata_load_func = gxv_morx_subtable_type2_opttable_load; - valid->xstatetable.subtable_setup_func = gxv_morx_subtable_type2_subtable_setup; - valid->xstatetable.entry_glyphoffset_fmt = GXV_GLYPHOFFSET_USHORT; - valid->xstatetable.entry_validate_func = gxv_morx_subtable_type2_entry_validate; + valid->xstatetable.optdata = + &lig_rec; + valid->xstatetable.optdata_load_func = + gxv_morx_subtable_type2_opttable_load; + valid->xstatetable.subtable_setup_func = + gxv_morx_subtable_type2_subtable_setup; + valid->xstatetable.entry_glyphoffset_fmt = + GXV_GLYPHOFFSET_USHORT; + valid->xstatetable.entry_validate_func = + gxv_morx_subtable_type2_entry_validate; + gxv_XStateTable_validate( p, limit, valid ); + p += valid->subtable_length; gxv_morx_subtable_type2_ligatureTable_validate( table, valid ); + GXV_EXIT; } diff --git a/src/gxvalid/gxvmorx4.c b/src/gxvalid/gxvmorx4.c index 3b43adafd..68ad746ff 100644 --- a/src/gxvalid/gxvmorx4.c +++ b/src/gxvalid/gxvmorx4.c @@ -17,13 +17,17 @@ /***************************************************************************/ /***************************************************************************/ +/* */ /* 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 "gxvmorx.h" + /*************************************************************************/ /* */ /* The macro FT_COMPONENT is used in trace mode. It is an implicit */ @@ -34,17 +38,18 @@ #define FT_COMPONENT trace_gxvmorx - static void - gxv_morx_subtable_type4_validate( FT_Bytes table, - FT_Bytes limit, - GXV_Validator valid ) - { - GXV_NAME_ENTER( "morx chain subtable type4 (Non-Contextual Glyph Substitution)" ); + static void + gxv_morx_subtable_type4_validate( FT_Bytes table, + FT_Bytes limit, + GXV_Validator valid ) + { + GXV_NAME_ENTER( "morx chain subtable type4 " + "(Non-Contextual Glyph Substitution)" ); - gxv_mort_subtable_type4_validate( table, limit, valid ); + gxv_mort_subtable_type4_validate( table, limit, valid ); - GXV_EXIT; - } + GXV_EXIT; + } /* END */ diff --git a/src/gxvalid/gxvmorx5.c b/src/gxvalid/gxvmorx5.c index 43f7fe910..ef5536c2b 100644 --- a/src/gxvalid/gxvmorx5.c +++ b/src/gxvalid/gxvmorx5.c @@ -17,13 +17,17 @@ /***************************************************************************/ /***************************************************************************/ +/* */ /* 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 "gxvmorx.h" + /*************************************************************************/ /* */ /* The macro FT_COMPONENT is used in trace mode. It is an implicit */ @@ -34,14 +38,14 @@ #define FT_COMPONENT trace_gxvmorx -/* - * morx subtable type5 (Contextual Glyph Insertion) - * has format of StateTable with insertion-glyph-list - * without name. however, 32bit offset from the head - * of subtable to the i-g-l is given after "entryTable", - * without variable name specification (the exist of - * offset to the table is different from mort type5). - */ + /* + * `morx' subtable type5 (Contextual Glyph Insertion) + * has format of a StateTable with insertion-glyph-list + * without name. However, the 32bit offset from the head + * of subtable to the i-g-l is given after `entryTable', + * without variable name specification (the existence of + * this offset to the table is different from mort type5). + */ typedef struct GXV_morx_subtable_type5_StateOptRec_ @@ -52,7 +56,10 @@ } GXV_morx_subtable_type5_StateOptRec, *GXV_morx_subtable_type5_StateOptRecData; -#define GXV_MORX_SUBTABLE_TYPE5_HEADER_SIZE ( GXV_STATETABLE_HEADER_SIZE + 4 ) + +#define GXV_MORX_SUBTABLE_TYPE5_HEADER_SIZE \ + ( GXV_STATETABLE_HEADER_SIZE + 4 ) + static void gxv_morx_subtable_type5_insertionGlyphList_load( FT_Bytes table, @@ -60,7 +67,9 @@ GXV_Validator valid ) { FT_Bytes p = table; - GXV_morx_subtable_type5_StateOptRecData optdata = valid->xstatetable.optdata; + + GXV_morx_subtable_type5_StateOptRecData optdata = + valid->xstatetable.optdata; GXV_LIMIT_CHECK( 4 ); @@ -81,7 +90,9 @@ FT_ULong o[4]; FT_ULong* l[4]; FT_ULong buff[5]; - GXV_morx_subtable_type5_StateOptRecData optdata = valid->xstatetable.optdata; + + GXV_morx_subtable_type5_StateOptRecData optdata = + valid->xstatetable.optdata; o[0] = classTable; @@ -104,11 +115,12 @@ FT_Bytes limit, GXV_Validator valid ) { - FT_Bytes p = table + ( index * 2 ); + FT_Bytes p = table + index * 2; - while ( p < table + ( count * 2 ) + ( index * 2 ) ) + + while ( p < table + count * 2 + index * 2 ) { - FT_UShort insert_glyphID; + FT_UShort insert_glyphID; GXV_LIMIT_CHECK( 2 ); @@ -121,13 +133,13 @@ static void - gxv_morx_subtable_type5_entry_validate( FT_UShort state, - FT_UShort flags, - GXV_StateTable_GlyphOffsetDesc - glyphOffset, - FT_Bytes table, - FT_Bytes limit, - GXV_Validator valid ) + gxv_morx_subtable_type5_entry_validate( + FT_UShort state, + FT_UShort flags, + GXV_StateTable_GlyphOffsetDesc glyphOffset, + FT_Bytes table, + FT_Bytes limit, + GXV_Validator valid ) { FT_Bool setMark; FT_Bool dontAdvance; @@ -140,6 +152,8 @@ FT_Byte currentInsertList; FT_UShort markedInsertList; + FT_UNUSED( state ); + setMark = ( flags >> 15 ) & 1; dontAdvance = ( flags >> 14 ) & 1; @@ -149,24 +163,20 @@ markedInsertBefore = ( flags >> 10 ) & 1; currentInsertCount = ( flags & 0x03E0 ) / 0x20; markedInsertCount = ( flags & 0x001F ); - currentInsertList = glyphOffset.ul / 0x00010000; - markedInsertList = glyphOffset.ul & 0x0000FFFF; + currentInsertList = glyphOffset.ul / 0x00010000UL; + markedInsertList = glyphOffset.ul & 0x0000FFFFUL; if ( currentInsertList && 0 != currentInsertCount ) - { gxv_morx_subtable_type5_InsertList_validate( currentInsertList, currentInsertCount, table, limit, valid ); - } if ( markedInsertList && 0 != markedInsertCount ) - { gxv_morx_subtable_type5_InsertList_validate( markedInsertList, markedInsertCount, table, limit, valid ); - } } @@ -176,6 +186,7 @@ GXV_Validator valid ) { FT_Bytes p = table; + GXV_morx_subtable_type5_StateOptRec et_rec; GXV_morx_subtable_type5_StateOptRecData et = &et_rec; @@ -184,12 +195,19 @@ GXV_LIMIT_CHECK( GXV_MORX_SUBTABLE_TYPE5_HEADER_SIZE ); - valid->xstatetable.optdata = et; - valid->xstatetable.optdata_load_func = gxv_morx_subtable_type5_insertionGlyphList_load; - valid->xstatetable.subtable_setup_func = gxv_morx_subtable_type5_subtable_setup; - valid->xstatetable.entry_glyphoffset_fmt = GXV_GLYPHOFFSET_ULONG; - valid->xstatetable.entry_validate_func = gxv_morx_subtable_type5_entry_validate; + valid->xstatetable.optdata = + et; + valid->xstatetable.optdata_load_func = + gxv_morx_subtable_type5_insertionGlyphList_load; + valid->xstatetable.subtable_setup_func = + gxv_morx_subtable_type5_subtable_setup; + valid->xstatetable.entry_glyphoffset_fmt = + GXV_GLYPHOFFSET_ULONG; + valid->xstatetable.entry_validate_func = + gxv_morx_subtable_type5_entry_validate; + gxv_XStateTable_validate( p, limit, valid ); + GXV_EXIT; }