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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? otvgsub.c

?? 智能設(shè)備中PDF閱讀器的源碼!用于windows mobile2003或者WM5以上
?? C
?? 第 1 頁 / 共 2 頁
字號:
/***************************************************************************/
/*                                                                         */
/*  otvgsub.c                                                              */
/*                                                                         */
/*    OpenType GSUB table validation (body).                               */
/*                                                                         */
/*  Copyright 2004, 2005 by                                                */
/*  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.                                        */
/*                                                                         */
/***************************************************************************/


#include "otvalid.h"
#include "otvcommn.h"


  /*************************************************************************/
  /*                                                                       */
  /* The macro FT_COMPONENT is used in trace mode.  It is an implicit      */
  /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log  */
  /* messages during execution.                                            */
  /*                                                                       */
#undef  FT_COMPONENT
#define FT_COMPONENT  trace_otvgsub


  /*************************************************************************/
  /*************************************************************************/
  /*****                                                               *****/
  /*****                  GSUB LOOKUP TYPE 1                           *****/
  /*****                                                               *****/
  /*************************************************************************/
  /*************************************************************************/

  /* uses valid->glyph_count */

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


    OTV_NAME_ENTER( "SingleSubst" );

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

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

    switch ( SubstFormat )
    {
    case 1:     /* SingleSubstFormat1 */
      {
        FT_Bytes  Coverage;
        FT_Int    DeltaGlyphID;
        FT_Long   idx;


        OTV_LIMIT_CHECK( 4 );
        Coverage     = table + FT_NEXT_USHORT( p );
        DeltaGlyphID = FT_NEXT_SHORT( p );

        otv_Coverage_validate( Coverage, valid );

        idx = otv_Coverage_get_first( Coverage ) + DeltaGlyphID;
        if ( idx < 0 )
          FT_INVALID_DATA;

        idx = otv_Coverage_get_last( Coverage ) + DeltaGlyphID;
        if ( (FT_UInt)idx >= valid->glyph_count )
          FT_INVALID_DATA;
      }
      break;

    case 2:     /* SingleSubstFormat2 */
      {
        FT_UInt  Coverage, GlyphCount;


        OTV_LIMIT_CHECK( 4 );
        Coverage   = FT_NEXT_USHORT( p );
        GlyphCount = FT_NEXT_USHORT( p );

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

        otv_Coverage_validate( table + Coverage, valid );

        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;
  }


  /*************************************************************************/
  /*************************************************************************/
  /*****                                                               *****/
  /*****                  GSUB LOOKUP TYPE 2                           *****/
  /*****                                                               *****/
  /*************************************************************************/
  /*************************************************************************/

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

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


    OTV_NAME_ENTER( "MultipleSubst" );

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

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

    switch ( SubstFormat )
    {
    case 1:
      valid->extra1 = valid->glyph_count;
      OTV_NEST2( MultipleSubstFormat1, Sequence );
      OTV_RUN( table, valid );
      break;

    default:
      FT_INVALID_DATA;
    }

    OTV_EXIT;
  }


  /*************************************************************************/
  /*************************************************************************/
  /*****                                                               *****/
  /*****                    GSUB LOOKUP TYPE 3                         *****/
  /*****                                                               *****/
  /*************************************************************************/
  /*************************************************************************/

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

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


    OTV_NAME_ENTER( "AlternateSubst" );

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

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

    switch ( SubstFormat )
    {
    case 1:
      valid->extra1 = valid->glyph_count;
      OTV_NEST2( AlternateSubstFormat1, AlternateSet );
      OTV_RUN( table, valid );
      break;

    default:
      FT_INVALID_DATA;
    }

    OTV_EXIT;
  }


  /*************************************************************************/
  /*************************************************************************/
  /*****                                                               *****/
  /*****                    GSUB LOOKUP TYPE 4                         *****/
  /*****                                                               *****/
  /*************************************************************************/
  /*************************************************************************/

#define LigatureFunc  otv_Ligature_validate

  /* uses valid->glyph_count */

  static void
  otv_Ligature_validate( FT_Bytes       table,
                         OTV_Validator  valid )
  {
    FT_Bytes  p = table;
    FT_UInt   LigatureGlyph, CompCount;


    OTV_ENTER;

    OTV_LIMIT_CHECK( 4 );
    LigatureGlyph = FT_NEXT_USHORT( p );
    if ( LigatureGlyph >= valid->glyph_count )
      FT_INVALID_DATA;

    CompCount = FT_NEXT_USHORT( p );

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

    if ( CompCount == 0 )
      FT_INVALID_DATA;

    CompCount--;

    OTV_LIMIT_CHECK( CompCount * 2 );     /* Component */

    /* no need to check the Component glyph indices */

    OTV_EXIT;
  }


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


    OTV_NAME_ENTER( "LigatureSubst" );

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

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

    switch ( SubstFormat )
    {
    case 1:
      OTV_NEST3( LigatureSubstFormat1, LigatureSet, Ligature );
      OTV_RUN( table, valid );
      break;

    default:
      FT_INVALID_DATA;
    }

    OTV_EXIT;
  }


  /*************************************************************************/
  /*************************************************************************/
  /*****                                                               *****/
  /*****                  GSUB LOOKUP TYPE 5                           *****/
  /*****                                                               *****/
  /*************************************************************************/
  /*************************************************************************/

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

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


    OTV_NAME_ENTER( "ContextSubst" );

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

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

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99精品国产麻豆不卡| 亚洲第一成人在线| 欧美一区二区三区播放老司机| 91伊人久久大香线蕉| 成人av先锋影音| 97国产一区二区| 成人动漫在线一区| 91一区二区在线| 91九色最新地址| 欧美日韩和欧美的一区二区| 欧美电影一区二区| 欧美成人女星排名| 欧美国产一区在线| 亚洲三级免费观看| 午夜欧美大尺度福利影院在线看| 亚洲电影在线免费观看| 麻豆专区一区二区三区四区五区| 欧美a一区二区| 久久精品国产99国产| 国产一区在线精品| a4yy欧美一区二区三区| 欧美美女一区二区| 久久久一区二区三区捆绑**| 国产精品久久久久久久蜜臀| 一级特黄大欧美久久久| 日本va欧美va瓶| 成人免费看视频| 欧美日韩精品一区二区三区蜜桃 | 国产成人免费网站| 不卡视频一二三| 欧美高清视频不卡网| 久久综合色婷婷| 亚洲综合色丁香婷婷六月图片| 亚欧色一区w666天堂| 国产精品综合久久| 欧美少妇一区二区| 亚洲国产精华液网站w| 天天影视色香欲综合网老头| 国产精品白丝av| 欧美性生活影院| 欧美激情资源网| 日本最新不卡在线| 91九色最新地址| 国产精品视频麻豆| 青青草原综合久久大伊人精品优势| 丰满少妇在线播放bd日韩电影| 欧美视频你懂的| 国产精品久久久久久久久免费丝袜| 午夜一区二区三区视频| 成人免费视频视频| 久久奇米777| 日本少妇一区二区| 欧美日韩视频在线观看一区二区三区| 国产日韩欧美电影| 久久99精品视频| 91精品国产全国免费观看 | 在线观看91视频| 国产精品午夜免费| 国产乱人伦偷精品视频不卡 | 久久久久高清精品| 精品一区二区三区免费观看 | 日本伦理一区二区| 国产精品国模大尺度视频| 精久久久久久久久久久| 91超碰这里只有精品国产| 亚洲最快最全在线视频| 91美女片黄在线| 最近中文字幕一区二区三区| 成人午夜在线视频| 国产日韩视频一区二区三区| 国产在线视频一区二区三区| 精品毛片乱码1区2区3区| 狠狠色2019综合网| 久久中文娱乐网| 国产激情一区二区三区四区| 久久综合成人精品亚洲另类欧美 | 欧美一级二级在线观看| 亚洲v精品v日韩v欧美v专区| 欧美性猛交xxxx乱大交退制版 | 一个色在线综合| 欧美调教femdomvk| 三级久久三级久久| 日韩欧美激情一区| 国产真实乱对白精彩久久| 欧美国产一区二区在线观看| av在线这里只有精品| 亚洲免费观看高清完整版在线| 色欧美片视频在线观看 | 国产老妇另类xxxxx| 中文字幕免费观看一区| 色综合欧美在线| 五月激情六月综合| 日韩欧美色综合| av成人老司机| 偷窥国产亚洲免费视频| 欧美精品一区二区三区视频| 国产成人精品www牛牛影视| 中文字幕综合网| 欧美日韩高清在线| 国产成人在线视频网址| 亚洲精品国产成人久久av盗摄 | 久久精品一区二区三区不卡牛牛| 国产成人av影院| 亚洲欧美日韩国产综合在线| 欧美日韩精品免费观看视频| 久久99国产精品久久| 亚洲天天做日日做天天谢日日欢| 正在播放一区二区| 粉嫩av一区二区三区在线播放 | 欧美日韩一区成人| 青娱乐精品视频在线| 国产日韩欧美制服另类| 欧美日韩亚洲综合在线| 国产精品18久久久久久久久| 亚洲综合一区在线| 久久精品人人做| 欧美日韩一二区| 99视频一区二区三区| 久久99国内精品| 亚洲国产一区视频| 国产精品网站在线播放| 欧美一区二区性放荡片| 92国产精品观看| 国产一区二区三区电影在线观看| 一区二区三区高清在线| 国产肉丝袜一区二区| 欧美精品久久久久久久多人混战 | 一区二区三区四区高清精品免费观看| 欧美日本韩国一区二区三区视频 | av毛片久久久久**hd| 日韩av一区二区在线影视| 中文字幕综合网| 久久综合色综合88| 欧美tk—视频vk| 欧美肥胖老妇做爰| 欧美午夜精品一区| 91美女视频网站| 99精品视频中文字幕| 国产一本一道久久香蕉| 久久成人麻豆午夜电影| 午夜精品久久久久| 亚洲成av人片在www色猫咪| 国产精品久久久久aaaa樱花| 久久精品一区二区三区不卡| 26uuu亚洲综合色| 精品国产在天天线2019| 欧美一区二区三区喷汁尤物| 欧美日韩国产区一| 欧美精品久久一区| 日韩情涩欧美日韩视频| 欧美一级日韩免费不卡| 91麻豆精品国产91久久久更新时间 | 91精品国产乱码久久蜜臀| 欧美日韩视频第一区| 欧美精品三级在线观看| 欧美日韩国产综合久久| 欧美丰满美乳xxx高潮www| 日韩一区二区在线观看| 日韩精品中文字幕一区二区三区| 欧美一级黄色大片| 久久夜色精品国产欧美乱极品| 精品国内二区三区| 国产精品久久久久久久久搜平片 | 成人激情免费视频| av电影在线观看一区| 色国产精品一区在线观看| 欧美视频自拍偷拍| 日韩一级视频免费观看在线| 久久综合五月天婷婷伊人| 中文字幕av一区二区三区免费看| 中文字幕在线不卡一区二区三区| 亚洲欧美另类综合偷拍| 亚洲午夜av在线| 激情综合色综合久久综合| 成人小视频在线| 欧美另类videos死尸| 久久久久久亚洲综合| 亚洲精品亚洲人成人网| 青青草97国产精品免费观看 | 国产自产高清不卡| 99国产一区二区三精品乱码| 欧美性生活影院| 精品免费一区二区三区| 亚洲人成网站色在线观看| 日韩1区2区3区| 成人av在线一区二区三区| 欧美男生操女生| 国产精品国产三级国产三级人妇 | 日韩精品一区国产麻豆| 国产蜜臀97一区二区三区| 亚洲主播在线播放| 国产精品一区2区| 欧美美女网站色| 18涩涩午夜精品.www| 久久精品72免费观看| 日本道色综合久久| 久久久国产精华| 日韩va欧美va亚洲va久久| 91免费国产在线| 久久新电视剧免费观看|