⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gxvjust.c

📁 奇趣公司比较新的qt/emd版本
💻 C
📖 第 1 页 / 共 2 页
字号:
    valid->subtable_length = p - table;    GXV_EXIT;  }  static void  gxv_just_pcTable_LookupValue_entry_validate( FT_UShort            glyph,                                               GXV_LookupValueDesc  value,                                               GXV_Validator        valid )  {    FT_UNUSED( glyph );    if ( value.u > GXV_JUST_DATA( pc_offset_max ) )      GXV_JUST_DATA( pc_offset_max ) = value.u;    if ( value.u < GXV_JUST_DATA( pc_offset_max ) )      GXV_JUST_DATA( pc_offset_min ) = value.u;  }  static void  gxv_just_pcLookupTable_validate( FT_Bytes       table,                                   FT_Bytes       limit,                                   GXV_Validator  valid )  {    FT_Bytes p = table;    GXV_NAME_ENTER( "just pcLookupTable" );    GXV_JUST_DATA( pc_offset_max ) = 0x0000;    GXV_JUST_DATA( pc_offset_min ) = 0xFFFFU;    valid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED;    valid->lookupval_func = gxv_just_pcTable_LookupValue_entry_validate;    gxv_LookupTable_validate( p, limit, valid );    /* subtable_length is set by gxv_LookupTable_validate() */    GXV_EXIT;  }  static void  gxv_just_postcompTable_validate( FT_Bytes       table,                                   FT_Bytes       limit,                                   GXV_Validator  valid )  {    FT_Bytes  p = table;    GXV_NAME_ENTER( "just postcompTable" );    gxv_just_pcLookupTable_validate( p, limit, valid );    p += valid->subtable_length;    gxv_just_pcActionRecord_validate( p, limit, valid );    p += valid->subtable_length;    valid->subtable_length = p - table;    GXV_EXIT;  }  static void  gxv_just_classTable_entry_validate(    FT_Byte                         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  markClass;    FT_UShort  currentClass;    FT_UNUSED( state );    FT_UNUSED( glyphOffset );    FT_UNUSED( table );    FT_UNUSED( limit );    FT_UNUSED( valid );    setMark      = (FT_UShort)( ( flags >> 15 ) & 1    );    dontAdvance  = (FT_UShort)( ( flags >> 14 ) & 1    );    markClass    = (FT_UShort)( ( flags >> 7  ) & 0x7F );    currentClass = (FT_UShort)(   flags         & 0x7F );    /* TODO: validate markClass & currentClass */  }  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_just_wdcTable_LookupValue_validate( FT_UShort            glyph,                                          GXV_LookupValueDesc  value,                                          GXV_Validator        valid )  {    FT_UNUSED( glyph );    if ( value.u > GXV_JUST_DATA( wdc_offset_max ) )      GXV_JUST_DATA( wdc_offset_max ) = value.u;    if ( value.u < GXV_JUST_DATA( wdc_offset_min ) )      GXV_JUST_DATA( wdc_offset_min ) = value.u;  }  static void  gxv_just_justData_lookuptable_validate( FT_Bytes       table,                                          FT_Bytes       limit,                                          GXV_Validator  valid )  {    FT_Bytes  p = table;    GXV_JUST_DATA( wdc_offset_max ) = 0x0000;    GXV_JUST_DATA( wdc_offset_min ) = 0xFFFFU;    valid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED;    valid->lookupval_func = gxv_just_wdcTable_LookupValue_validate;    gxv_LookupTable_validate( p, limit, valid );    /* subtable_length is set by gxv_LookupTable_validate() */    GXV_EXIT;  }  /*   * gxv_just_justData_validate() parses and validates horizData, vertData.   */  static void  gxv_just_justData_validate( FT_Bytes       table,                              FT_Bytes       limit,                              GXV_Validator  valid )  {    /*     * following 3 offsets are measured from the start of `just'     * (which table points to), not justData     */    FT_UShort  justClassTableOffset;    FT_UShort  wdcTableOffset;    FT_UShort  pcTableOffset;    FT_Bytes   p = table;    GXV_ODTECT( 4, odtect );    GXV_NAME_ENTER( "just justData" );    GXV_ODTECT_INIT( odtect );    GXV_LIMIT_CHECK( 2 + 2 + 2 );    justClassTableOffset = FT_NEXT_USHORT( p );    wdcTableOffset       = FT_NEXT_USHORT( p );    pcTableOffset        = FT_NEXT_USHORT( p );    GXV_TRACE(( " (justClassTableOffset = 0x%04x)\n", justClassTableOffset ));    GXV_TRACE(( " (wdcTableOffset = 0x%04x)\n", wdcTableOffset ));    GXV_TRACE(( " (pcTableOffset = 0x%04x)\n", pcTableOffset ));    gxv_just_justData_lookuptable_validate( p, limit, valid );    gxv_odtect_add_range( p, valid->subtable_length,                          "just_LookupTable", odtect );    if ( wdcTableOffset )    {      gxv_just_widthDeltaClusters_validate(        valid->root->base + wdcTableOffset, limit, valid );      gxv_odtect_add_range( valid->root->base + wdcTableOffset,                            valid->subtable_length, "just_wdcTable", odtect );    }    if ( pcTableOffset )    {      gxv_just_postcompTable_validate( valid->root->base + pcTableOffset,                                       limit, valid );      gxv_odtect_add_range( valid->root->base + pcTableOffset,                            valid->subtable_length, "just_pcTable", odtect );    }    if ( justClassTableOffset )    {      gxv_just_justClassTable_validate(        valid->root->base + justClassTableOffset, limit, valid );      gxv_odtect_add_range( valid->root->base + justClassTableOffset,                            valid->subtable_length, "just_justClassTable",                            odtect );    }    gxv_odtect_validate( odtect, valid );    GXV_EXIT;  }  FT_LOCAL_DEF( void )  gxv_just_validate( FT_Bytes      table,                     FT_Face       face,                     FT_Validator  ftvalid )  {    FT_Bytes           p     = table;    FT_Bytes           limit = 0;    FT_UInt            table_size;    GXV_ValidatorRec   validrec;    GXV_Validator      valid = &validrec;    GXV_just_DataRec   justrec;    GXV_just_Data      just = &justrec;    FT_ULong           version;    FT_UShort          format;    FT_UShort          horizOffset;    FT_UShort          vertOffset;    GXV_ODTECT( 3, odtect );    GXV_ODTECT_INIT( odtect );    valid->root       = ftvalid;    valid->table_data = just;    valid->face       = face;    FT_TRACE3(( "validating `just' table\n" ));    GXV_INIT;    limit      = valid->root->limit;    table_size = limit - table;    GXV_LIMIT_CHECK( 4 + 2 + 2 + 2 );    version     = FT_NEXT_ULONG( p );    format      = FT_NEXT_USHORT( p );    horizOffset = FT_NEXT_USHORT( p );    vertOffset  = FT_NEXT_USHORT( p );    gxv_odtect_add_range( table, p - table, "just header", odtect );    /* Version 1.0 (always:2000) */    GXV_TRACE(( " (version = 0x%08x)\n", version ));    if ( version != 0x00010000UL )      FT_INVALID_FORMAT;    /* format 0 (always:2000) */    GXV_TRACE(( " (format = 0x%04x)\n", format ));    if ( format != 0x0000 )        FT_INVALID_FORMAT;    GXV_TRACE(( " (horizOffset = %d)\n", horizOffset  ));    GXV_TRACE(( " (vertOffset = %d)\n", vertOffset  ));    /* validate justData */    if ( 0 < horizOffset )    {      gxv_just_justData_validate( table + horizOffset, limit, valid );      gxv_odtect_add_range( table + horizOffset, valid->subtable_length,                            "horizJustData", odtect );    }    if ( 0 < vertOffset )    {      gxv_just_justData_validate( table + vertOffset, limit, valid );      gxv_odtect_add_range( table + vertOffset, valid->subtable_length,                            "vertJustData", odtect );    }    gxv_odtect_validate( odtect, valid );    FT_TRACE4(( "\n" ));  }/* END */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -