亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? otvgsub.c

?? 智能設備中PDF閱讀器的源碼!用于windows mobile2003或者WM5以上
?? C
?? 第 1 頁 / 共 2 頁
字號:
    switch ( SubstFormat )
    {
    case 1:
      /* no need to check glyph indices/classes used as input for these */
      /* context rules since even invalid glyph indices/classes return  */
      /* meaningful results                                             */

      valid->extra1 = valid->lookup_count;
      OTV_NEST3( ContextSubstFormat1, SubRuleSet, SubRule );
      OTV_RUN( table, valid );
      break;

    case 2:
      /* no need to check glyph indices/classes used as input for these */
      /* context rules since even invalid glyph indices/classes return  */
      /* meaningful results                                             */

      OTV_NEST3( ContextSubstFormat2, SubClassSet, SubClassRule );
      OTV_RUN( table, valid );
      break;

    case 3:
      OTV_NEST1( ContextSubstFormat3 );
      OTV_RUN( table, valid );
      break;

    default:
      FT_INVALID_DATA;
    }

    OTV_EXIT;
  }


  /*************************************************************************/
  /*************************************************************************/
  /*****                                                               *****/
  /*****                    GSUB LOOKUP TYPE 6                         *****/
  /*****                                                               *****/
  /*************************************************************************/
  /*************************************************************************/

  /* sets valid->extra1 (lookup count)            */

  static void
  otv_ChainContextSubst_validate( FT_Bytes       table,
                                  OTV_Validator  valid )
  {
    FT_Bytes  p = table;
    FT_UInt   SubstFormat;


    OTV_NAME_ENTER( "ChainContextSubst" );

    OTV_LIMIT_CHECK( 2 );
    SubstFormat = FT_NEXT_USHORT( p );

    OTV_TRACE(( " (format %d)\n", SubstFormat ));

    switch ( SubstFormat )
    {
    case 1:
      /* no need to check glyph indices/classes used as input for these */
      /* context rules since even invalid glyph indices/classes return  */
      /* meaningful results                                             */

      valid->extra1 = valid->lookup_count;
      OTV_NEST3( ChainContextSubstFormat1,
                 ChainSubRuleSet, ChainSubRule );
      OTV_RUN( table, valid );
      break;

    case 2:
      /* no need to check glyph indices/classes used as input for these */
      /* context rules since even invalid glyph indices/classes return  */
      /* meaningful results                                             */

      OTV_NEST3( ChainContextSubstFormat2,
                 ChainSubClassSet, ChainSubClassRule );
      OTV_RUN( table, valid );
      break;

    case 3:
      OTV_NEST1( ChainContextSubstFormat3 );
      OTV_RUN( table, valid );
      break;

    default:
      FT_INVALID_DATA;
    }

    OTV_EXIT;
  }


  /*************************************************************************/
  /*************************************************************************/
  /*****                                                               *****/
  /*****                    GSUB LOOKUP TYPE 7                         *****/
  /*****                                                               *****/
  /*************************************************************************/
  /*************************************************************************/

  /* uses valid->type_funcs */

  static void
  otv_ExtensionSubst_validate( FT_Bytes       table,
                               OTV_Validator  valid )
  {
    FT_Bytes  p = table;
    FT_UInt   SubstFormat;


    OTV_NAME_ENTER( "ExtensionSubst" );

    OTV_LIMIT_CHECK( 2 );
    SubstFormat = FT_NEXT_USHORT( p );

    OTV_TRACE(( " (format %d)\n", SubstFormat ));

    switch ( SubstFormat )
    {
    case 1:     /* ExtensionSubstFormat1 */
      {
        FT_UInt            ExtensionLookupType, ExtensionOffset;
        OTV_Validate_Func  validate;


        OTV_LIMIT_CHECK( 6 );
        ExtensionLookupType = FT_NEXT_USHORT( p );
        ExtensionOffset     = FT_NEXT_ULONG( p );

        if ( ExtensionLookupType == 0 ||
             ExtensionLookupType == 7 ||
             ExtensionLookupType > 8  )
          FT_INVALID_DATA;

        validate = valid->type_funcs[ExtensionLookupType - 1];
        validate( table + ExtensionOffset, valid );
      }
      break;

    default:
      FT_INVALID_DATA;
    }

    OTV_EXIT;
  }


  /*************************************************************************/
  /*************************************************************************/
  /*****                                                               *****/
  /*****                    GSUB LOOKUP TYPE 8                         *****/
  /*****                                                               *****/
  /*************************************************************************/
  /*************************************************************************/

  /* uses valid->glyph_count */

  static void
  otv_ReverseChainSingleSubst_validate( FT_Bytes       table,
                                        OTV_Validator  valid )
  {
    FT_Bytes  p = table, Coverage;
    FT_UInt   SubstFormat;
    FT_UInt   BacktrackGlyphCount, LookaheadGlyphCount, GlyphCount;


    OTV_NAME_ENTER( "ReverseChainSingleSubst" );

    OTV_LIMIT_CHECK( 2 );
    SubstFormat = FT_NEXT_USHORT( p );

    OTV_TRACE(( " (format %d)\n", SubstFormat ));

    switch ( SubstFormat )
    {
    case 1:     /* ReverseChainSingleSubstFormat1 */
      OTV_LIMIT_CHECK( 4 );
      Coverage            = table + FT_NEXT_USHORT( p );
      BacktrackGlyphCount = FT_NEXT_USHORT( p );

      OTV_TRACE(( " (BacktrackGlyphCount = %d)\n", BacktrackGlyphCount ));

      otv_Coverage_validate( Coverage, valid );

      OTV_LIMIT_CHECK( BacktrackGlyphCount * 2 + 2 );

      for ( ; BacktrackGlyphCount > 0; BacktrackGlyphCount-- )
        otv_Coverage_validate( table + FT_NEXT_USHORT( p ), valid );

      LookaheadGlyphCount = FT_NEXT_USHORT( p );

      OTV_TRACE(( " (LookaheadGlyphCount = %d)\n", LookaheadGlyphCount ));

      OTV_LIMIT_CHECK( LookaheadGlyphCount * 2 + 2 );

      for ( ; LookaheadGlyphCount > 0; LookaheadGlyphCount-- )
        otv_Coverage_validate( table + FT_NEXT_USHORT( p ), valid );

      GlyphCount = FT_NEXT_USHORT( p );

      OTV_TRACE(( " (GlyphCount = %d)\n", GlyphCount ));

      if ( GlyphCount != otv_Coverage_get_count( Coverage ) )
        FT_INVALID_DATA;

      OTV_LIMIT_CHECK( GlyphCount * 2 );

      /* Substitute */
      for ( ; GlyphCount > 0; GlyphCount-- )
        if ( FT_NEXT_USHORT( p ) >= valid->glyph_count )
          FT_INVALID_DATA;

      break;

    default:
      FT_INVALID_DATA;
    }

    OTV_EXIT;
  }


  static const OTV_Validate_Func  otv_gsub_validate_funcs[8] =
  {
    otv_SingleSubst_validate,
    otv_MultipleSubst_validate,
    otv_AlternateSubst_validate,
    otv_LigatureSubst_validate,
    otv_ContextSubst_validate,
    otv_ChainContextSubst_validate,
    otv_ExtensionSubst_validate,
    otv_ReverseChainSingleSubst_validate
  };


  /*************************************************************************/
  /*************************************************************************/
  /*****                                                               *****/
  /*****                          GSUB TABLE                           *****/
  /*****                                                               *****/
  /*************************************************************************/
  /*************************************************************************/

  /* sets valid->type_count  */
  /* sets valid->type_funcs  */
  /* sets valid->glyph_count */

  FT_LOCAL_DEF( void )
  otv_GSUB_validate( FT_Bytes      table,
                     FT_UInt       glyph_count,
                     FT_Validator  ftvalid )
  {
    OTV_ValidatorRec  validrec;
    OTV_Validator     valid = &validrec;
    FT_Bytes          p     = table;
    FT_UInt           ScriptList, FeatureList, LookupList;


    valid->root = ftvalid;

    FT_TRACE3(( "validating GSUB table\n" ));
    OTV_INIT;

    OTV_LIMIT_CHECK( 10 );

    if ( FT_NEXT_ULONG( p ) != 0x10000UL )      /* Version */
      FT_INVALID_DATA;

    ScriptList  = FT_NEXT_USHORT( p );
    FeatureList = FT_NEXT_USHORT( p );
    LookupList  = FT_NEXT_USHORT( p );

    valid->type_count  = 8;
    valid->type_funcs  = (OTV_Validate_Func*)otv_gsub_validate_funcs;
    valid->glyph_count = glyph_count;

    otv_LookupList_validate( table + LookupList,
                             valid );
    otv_FeatureList_validate( table + FeatureList, table + LookupList,
                              valid );
    otv_ScriptList_validate( table + ScriptList, table + FeatureList,
                             valid );

    FT_TRACE4(( "\n" ));
  }


/* END */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人免费视频精品含羞草妖精| 久久av中文字幕片| 国产精品一区在线| 欧美在线制服丝袜| 欧美国产激情二区三区| 日韩专区一卡二卡| 色综合久久99| 国产亚洲欧洲997久久综合| 日韩激情视频在线观看| 在线视频国内自拍亚洲视频| 中文字幕精品在线不卡| 免费成人美女在线观看.| 欧美写真视频网站| 一区在线播放视频| 国产传媒欧美日韩成人| 日韩你懂的在线播放| 亚洲成人av福利| 色婷婷亚洲综合| 亚洲丝袜精品丝袜在线| 成人免费视频视频在线观看免费 | 裸体健美xxxx欧美裸体表演| 在线观看成人小视频| 国产精品久久一级| 国产suv一区二区三区88区| 亚洲精品一线二线三线无人区| 偷窥少妇高潮呻吟av久久免费| 91高清视频免费看| 一区二区三区四区亚洲| 91在线播放网址| 99热这里都是精品| 国产精品全国免费观看高清| 国产成人福利片| 久久久久久久久久久久久夜| 国产一区二区三区黄视频 | 亚洲精品欧美激情| 99久久婷婷国产综合精品| 中文字幕国产一区| 国产精品996| 国产欧美精品区一区二区三区| 国产一区二区三区香蕉| 久久久久97国产精华液好用吗| 激情久久久久久久久久久久久久久久| 337p亚洲精品色噜噜| 日韩精品成人一区二区三区| 7777精品伊人久久久大香线蕉的| 亚洲va欧美va国产va天堂影院| 欧美日韩高清在线播放| 日日骚欧美日韩| 日韩一区二区高清| 美女网站色91| 久久久午夜电影| 国产精品18久久久久久久久| 国产欧美一区二区精品性色超碰| 成人性视频免费网站| 亚洲人妖av一区二区| 欧美亚洲国产bt| 日韩主播视频在线| 2023国产精品| 大美女一区二区三区| 国产精品毛片久久久久久久| 91天堂素人约啪| 亚洲国产中文字幕| 欧美sm美女调教| 毛片av一区二区| 欧美激情一区二区三区蜜桃视频 | www.日韩在线| 一区二区三区在线免费观看 | zzijzzij亚洲日本少妇熟睡| 亚洲三级免费电影| 精品视频一区二区不卡| 久久国产精品一区二区| 国产日韩成人精品| 色噜噜夜夜夜综合网| 天天av天天翘天天综合网色鬼国产| 欧美电影免费观看高清完整版在线| 国产精品2024| 一区二区三区四区高清精品免费观看 | 欧美一区二区黄| 黑人巨大精品欧美一区| 亚洲欧洲三级电影| 欧美日韩和欧美的一区二区| 蜜桃视频一区二区| 国产精品美女久久福利网站| 91在线视频在线| 日本少妇一区二区| 国产精品麻豆99久久久久久| 欧美喷水一区二区| 国产激情一区二区三区四区 | 亚洲高清免费一级二级三级| 日韩一区二区三区电影在线观看 | 在线观看视频欧美| 精品一区二区免费| 亚洲欧美区自拍先锋| 日韩视频免费观看高清在线视频| 成年人网站91| 蜜桃在线一区二区三区| **性色生活片久久毛片| 欧美一区二区视频观看视频| 懂色av中文字幕一区二区三区| 亚洲一区自拍偷拍| 久久久99久久| 欧美精品第1页| www.视频一区| 国产一区二区三区免费看 | 国产精品久久久久一区| 欧美一区二区在线播放| 91网站在线观看视频| 精品制服美女丁香| 亚洲一级二级三级在线免费观看| 久久日韩粉嫩一区二区三区| 欧美日韩国产一区二区三区地区| 成人三级伦理片| 蜜臀av一区二区三区| 亚洲一区欧美一区| 国产精品视频观看| 精品少妇一区二区三区在线播放| 欧美性色黄大片| av电影天堂一区二区在线观看| 久久激情五月激情| 亚洲h动漫在线| 亚洲三级电影全部在线观看高清| 久久蜜桃av一区二区天堂| 在线综合视频播放| 91小视频免费观看| 成人免费看视频| 国产毛片精品一区| 精品在线播放免费| 日韩中文字幕亚洲一区二区va在线 | 免费精品99久久国产综合精品| 国产精品视频yy9299一区| 亚洲精品一区二区三区在线观看 | 成人夜色视频网站在线观看| 久久国产精品99精品国产| 天堂影院一区二区| 亚洲成a人片综合在线| 亚洲精品欧美激情| 亚洲女爱视频在线| 亚洲视频狠狠干| 国产精品人成在线观看免费| 日本一区二区在线不卡| 久久久久久久久蜜桃| 精品第一国产综合精品aⅴ| 欧美一级高清片在线观看| 欧美日本国产一区| 欧美性xxxxxxxx| 欧美图区在线视频| 欧美视频一区二区在线观看| 色天使久久综合网天天| 91在线码无精品| 色婷婷久久久综合中文字幕| 91啦中文在线观看| 一本高清dvd不卡在线观看| 91亚洲精品久久久蜜桃网站| 99精品视频在线免费观看| proumb性欧美在线观看| 99精品国产视频| 91蝌蚪porny成人天涯| 色诱视频网站一区| 欧美性猛交xxxxxx富婆| 欧美日韩二区三区| 欧美一区二区三区日韩视频| 欧美一级高清片在线观看| 精品日韩一区二区三区| 久久综合色天天久久综合图片| 亚洲精品在线观看网站| 欧美激情在线一区二区| 欧美国产1区2区| 亚洲欧美一区二区在线观看| 亚洲伦理在线免费看| 一个色在线综合| 水蜜桃久久夜色精品一区的特点| 日韩av在线发布| 激情欧美日韩一区二区| 国产成人av电影免费在线观看| 国产不卡高清在线观看视频| 白白色 亚洲乱淫| 欧美午夜在线一二页| 欧美一区二区性放荡片| 久久久久国产精品人| 国产精品美女久久久久久久网站| 亚洲欧洲精品一区二区三区不卡| 一区二区在线电影| 日本午夜一本久久久综合| 精品写真视频在线观看| 成人性生交大片免费看视频在线 | 欧美老肥妇做.爰bbww视频| 日韩精品一区在线| 国产日产欧美一区二区视频| 亚洲女同一区二区| 日韩中文字幕麻豆| 高清av一区二区| 91黄色在线观看| 欧美tickling挠脚心丨vk| 国产精品免费av| 亚洲成人免费看| 精品亚洲成a人在线观看| av亚洲精华国产精华精华| 欧美日韩大陆在线| 精品国产一区二区三区忘忧草 | 久久久久高清精品|