static void gxv_just_justClassTable_validate ( FT_Bytes table, FT_Bytes limit, GXV_Validator valid ) { FT_Bytes p = table; FT_UShort length; FT_UShort coverage; FT_ULong subFeatureFlags; GXV_NAME_ENTER( "just justClassTable" ); GXV_LIMIT_CHECK( 2 + 2 + 4 ); length = FT_NEXT_USHORT( p ); coverage = FT_NEXT_USHORT( p ); subFeatureFlags = FT_NEXT_ULONG( p ); GXV_TRACE(( " justClassTable: coverage = 0x%04x (%s)", coverage, ( 0x4000 & coverage ) == 0 ? "ascending" : "descending" )); valid->statetable.optdata = NULL; valid->statetable.optdata_load_func = NULL; valid->statetable.subtable_setup_func = NULL; valid->statetable.entry_glyphoffset_fmt = GXV_GLYPHOFFSET_NONE; valid->statetable.entry_validate_func = gxv_just_classTable_entry_validate; gxv_StateTable_validate( p, table + length, valid ); /* subtable_length is set by gxv_LookupTable_validate() */ GXV_EXIT; }
static void gxv_kern_subtable_fmt1_validate( FT_Bytes table, FT_Bytes limit, GXV_Validator gxvalid ) { FT_Bytes p = table; GXV_kern_fmt1_StateOptRec vt_rec; GXV_NAME_ENTER( "kern subtable format 1" ); gxvalid->statetable.optdata = &vt_rec; gxvalid->statetable.optdata_load_func = gxv_kern_subtable_fmt1_valueTable_load; gxvalid->statetable.subtable_setup_func = gxv_kern_subtable_fmt1_subtable_setup; gxvalid->statetable.entry_glyphoffset_fmt = GXV_GLYPHOFFSET_NONE; gxvalid->statetable.entry_validate_func = gxv_kern_subtable_fmt1_entry_validate; gxv_StateTable_validate( p, limit, gxvalid ); GXV_EXIT; }
gxv_mort_subtable_type2_validate(FT_Bytes table, FT_Bytes limit, GXV_Validator gxvalid) { FT_Bytes p = table; GXV_mort_subtable_type2_StateOptRec lig_rec; GXV_NAME_ENTER("mort chain subtable type2 (Ligature Substitution)"); GXV_LIMIT_CHECK(GXV_MORT_SUBTABLE_TYPE2_HEADER_SIZE); gxvalid->statetable.optdata = &lig_rec; gxvalid->statetable.optdata_load_func = gxv_mort_subtable_type2_opttable_load; gxvalid->statetable.subtable_setup_func = gxv_mort_subtable_type2_subtable_setup; gxvalid->statetable.entry_glyphoffset_fmt = GXV_GLYPHOFFSET_NONE; gxvalid->statetable.entry_validate_func = gxv_mort_subtable_type2_entry_validate; gxv_StateTable_validate(p, limit, gxvalid); p += gxvalid->subtable_length; gxv_mort_subtable_type2_ligatureTable_validate(table, gxvalid); gxvalid->subtable_length = (FT_ULong)(p - table); GXV_EXIT; }
gxv_mort_subtable_type5_validate( FT_Bytes table, FT_Bytes limit, GXV_Validator gxvalid ) { FT_Bytes p = table; GXV_mort_subtable_type5_StateOptRec et_rec; GXV_mort_subtable_type5_StateOptRecData et = &et_rec; GXV_NAME_ENTER( "mort chain subtable type5 (Glyph Insertion)" ); GXV_LIMIT_CHECK( GXV_MORT_SUBTABLE_TYPE5_HEADER_SIZE ); gxvalid->statetable.optdata = et; gxvalid->statetable.optdata_load_func = NULL; gxvalid->statetable.subtable_setup_func = gxv_mort_subtable_type5_subtable_setup; gxvalid->statetable.entry_glyphoffset_fmt = GXV_GLYPHOFFSET_ULONG; gxvalid->statetable.entry_validate_func = gxv_mort_subtable_type5_entry_validate; gxv_StateTable_validate( p, limit, gxvalid ); GXV_EXIT; }
gxv_mort_subtable_type1_validate( FT_Bytes table, FT_Bytes limit, GXV_Validator valid ) { FT_Bytes p = table; GXV_mort_subtable_type1_StateOptRec st_rec; GXV_NAME_ENTER( "mort chain subtable type1 (Contextual Glyph Subst)" ); GXV_LIMIT_CHECK( GXV_MORT_SUBTABLE_TYPE1_HEADER_SIZE ); valid->statetable.optdata = &st_rec; valid->statetable.optdata_load_func = gxv_mort_subtable_type1_substitutionTable_load; valid->statetable.subtable_setup_func = gxv_mort_subtable_type1_subtable_setup; valid->statetable.entry_glyphoffset_fmt = GXV_GLYPHOFFSET_ULONG; valid->statetable.entry_validate_func = gxv_mort_subtable_type1_entry_validate; gxv_StateTable_validate( p, limit, valid ); gxv_mort_subtable_type1_substTable_validate( table + st_rec.substitutionTable, table + st_rec.substitutionTable + st_rec.substitutionTable_length, valid ); GXV_EXIT; }
static void gxv_just_justClassTable_validate ( FT_Bytes table, FT_Bytes limit, GXV_Validator gxvalid ) { FT_Bytes p = table; FT_UShort length; FT_UShort coverage; FT_ULong subFeatureFlags; GXV_NAME_ENTER( "just justClassTable" ); GXV_LIMIT_CHECK( 2 + 2 + 4 ); length = FT_NEXT_USHORT( p ); coverage = FT_NEXT_USHORT( p ); subFeatureFlags = FT_NEXT_ULONG( p ); GXV_TRACE(( " justClassTable: coverage = 0x%04x (%s) ", coverage )); if ( ( coverage & 0x4000 ) == 0 ) GXV_TRACE(( "ascending\n" )); else GXV_TRACE(( "descending\n" )); if ( subFeatureFlags ) GXV_TRACE(( " justClassTable: nonzero value (0x%08x)" " in unused subFeatureFlags\n", subFeatureFlags )); gxvalid->statetable.optdata = NULL; gxvalid->statetable.optdata_load_func = NULL; gxvalid->statetable.subtable_setup_func = NULL; gxvalid->statetable.entry_glyphoffset_fmt = GXV_GLYPHOFFSET_NONE; gxvalid->statetable.entry_validate_func = gxv_just_classTable_entry_validate; gxv_StateTable_validate( p, table + length, gxvalid ); /* subtable_length is set by gxv_LookupTable_validate() */ GXV_EXIT; }
gxv_mort_subtable_type0_validate( FT_Bytes table, FT_Bytes limit, GXV_Validator valid ) { FT_Bytes p = table; GXV_NAME_ENTER( "mort chain subtable type0 (Indic-Script Rearrangement)" ); GXV_LIMIT_CHECK( GXV_STATETABLE_HEADER_SIZE ); valid->statetable.optdata = NULL; valid->statetable.optdata_load_func = NULL; valid->statetable.subtable_setup_func = NULL; valid->statetable.entry_glyphoffset_fmt = GXV_GLYPHOFFSET_NONE; valid->statetable.entry_validate_func = gxv_mort_subtable_type0_entry_validate; gxv_StateTable_validate( p, limit, valid ); GXV_EXIT; }