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

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

?? otvjstf.c

?? 智能設備中PDF閱讀器的源碼!用于windows mobile2003或者WM5以上
?? C
字號:
/***************************************************************************/
/*                                                                         */
/*  otvjstf.c                                                              */
/*                                                                         */
/*    OpenType JSTF table validation (body).                               */
/*                                                                         */
/*  Copyright 2004 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"
#include "otvgpos.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_otvjstf


#define JstfPriorityFunc  otv_JstfPriority_validate
#define JstfLookupFunc    otv_GPOS_subtable_validate

  /* uses valid->extra1 (GSUB lookup count) */
  /* uses valid->extra2 (GPOS lookup count) */
  /* sets valid->extra1 (counter)           */

  static void
  otv_JstfPriority_validate( FT_Bytes       table,
                             OTV_Validator  valid )
  {
    FT_Bytes  p = table;
    FT_UInt   table_size;
    FT_UInt   gsub_lookup_count, gpos_lookup_count;

    OTV_OPTIONAL_TABLE( ShrinkageEnableGSUB  );
    OTV_OPTIONAL_TABLE( ShrinkageDisableGSUB );
    OTV_OPTIONAL_TABLE( ShrinkageEnableGPOS  );
    OTV_OPTIONAL_TABLE( ShrinkageDisableGPOS );
    OTV_OPTIONAL_TABLE( ExtensionEnableGSUB  );
    OTV_OPTIONAL_TABLE( ExtensionDisableGSUB );
    OTV_OPTIONAL_TABLE( ExtensionEnableGPOS  );
    OTV_OPTIONAL_TABLE( ExtensionDisableGPOS );
    OTV_OPTIONAL_TABLE( ShrinkageJstfMax );
    OTV_OPTIONAL_TABLE( ExtensionJstfMax );


    OTV_ENTER;
    OTV_TRACE(( "JstfPriority table\n" ));

    OTV_LIMIT_CHECK( 20 );

    gsub_lookup_count = valid->extra1;
    gpos_lookup_count = valid->extra2;

    table_size = 20;

    valid->extra1 = gsub_lookup_count;

    OTV_OPTIONAL_OFFSET( ShrinkageEnableGSUB );
    OTV_SIZE_CHECK( ShrinkageEnableGSUB );
    if ( ShrinkageEnableGSUB )
      otv_x_ux( table + ShrinkageEnableGSUB, valid );

    OTV_OPTIONAL_OFFSET( ShrinkageDisableGSUB );
    OTV_SIZE_CHECK( ShrinkageDisableGSUB );
    if ( ShrinkageDisableGSUB )
      otv_x_ux( table + ShrinkageDisableGSUB, valid );

    valid->extra1 = gpos_lookup_count;

    OTV_OPTIONAL_OFFSET( ShrinkageEnableGPOS );
    OTV_SIZE_CHECK( ShrinkageEnableGPOS );
    if ( ShrinkageEnableGPOS )
      otv_x_ux( table + ShrinkageEnableGPOS, valid );

    OTV_OPTIONAL_OFFSET( ShrinkageDisableGPOS );
    OTV_SIZE_CHECK( ShrinkageDisableGPOS );
    if ( ShrinkageDisableGPOS )
      otv_x_ux( table + ShrinkageDisableGPOS, valid );

    OTV_OPTIONAL_OFFSET( ShrinkageJstfMax );
    OTV_SIZE_CHECK( ShrinkageJstfMax );
    if ( ShrinkageJstfMax )
    {
      /* XXX: check lookup types? */
      OTV_NEST2( JstfMax, JstfLookup );
      OTV_RUN( table + ShrinkageJstfMax, valid );
    }

    valid->extra1 = gsub_lookup_count;

    OTV_OPTIONAL_OFFSET( ExtensionEnableGSUB );
    OTV_SIZE_CHECK( ExtensionEnableGSUB );
    if ( ExtensionEnableGSUB )
      otv_x_ux( table + ExtensionEnableGSUB, valid );

    OTV_OPTIONAL_OFFSET( ExtensionDisableGSUB );
    OTV_SIZE_CHECK( ExtensionDisableGSUB );
    if ( ExtensionDisableGSUB )
      otv_x_ux( table + ExtensionDisableGSUB, valid );

    valid->extra1 = gpos_lookup_count;

    OTV_OPTIONAL_OFFSET( ExtensionEnableGPOS );
    OTV_SIZE_CHECK( ExtensionEnableGPOS );
    if ( ExtensionEnableGPOS )
      otv_x_ux( table + ExtensionEnableGPOS, valid );

    OTV_OPTIONAL_OFFSET( ExtensionDisableGPOS );
    OTV_SIZE_CHECK( ExtensionDisableGPOS );
    if ( ExtensionDisableGPOS )
      otv_x_ux( table + ExtensionDisableGPOS, valid );

    OTV_OPTIONAL_OFFSET( ExtensionJstfMax );
    OTV_SIZE_CHECK( ExtensionJstfMax );
    if ( ExtensionJstfMax )
    {
      /* XXX: check lookup types? */
      OTV_NEST2( JstfMax, JstfLookup );
      OTV_RUN( table + ExtensionJstfMax, valid );
    }

    valid->extra1 = gsub_lookup_count;
    valid->extra2 = gpos_lookup_count;

    OTV_EXIT;
  }


  /* sets valid->extra (glyph count)               */
  /* sets valid->func1 (otv_JstfPriority_validate) */

  static void
  otv_JstfScript_validate( FT_Bytes       table,
                           OTV_Validator  valid )
  {
    FT_Bytes  p = table;
    FT_UInt   table_size;
    FT_UInt   JstfLangSysCount;

    OTV_OPTIONAL_TABLE( ExtGlyph );
    OTV_OPTIONAL_TABLE( DefJstfLangSys );


    OTV_NAME_ENTER( "JstfScript" );

    OTV_LIMIT_CHECK( 6 );
    OTV_OPTIONAL_OFFSET( ExtGlyph );
    OTV_OPTIONAL_OFFSET( DefJstfLangSys );
    JstfLangSysCount = FT_NEXT_USHORT( p );

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

    table_size = JstfLangSysCount * 6 + 6;

    OTV_SIZE_CHECK( ExtGlyph );
    if ( ExtGlyph )
    {
      valid->extra1 = valid->glyph_count;
      OTV_NEST1( ExtenderGlyph );
      OTV_RUN( table + ExtGlyph, valid );
    }

    OTV_SIZE_CHECK( DefJstfLangSys );
    if ( DefJstfLangSys )
    {
      OTV_NEST2( JstfLangSys, JstfPriority );
      OTV_RUN( table + DefJstfLangSys, valid );
    }

    OTV_LIMIT_CHECK( 6 * JstfLangSysCount );

    /* JstfLangSysRecord */
    OTV_NEST2( JstfLangSys, JstfPriority );
    for ( ; JstfLangSysCount > 0; JstfLangSysCount-- )
    {
      p += 4;       /* skip JstfLangSysTag */

      OTV_RUN( table + FT_NEXT_USHORT( p ), valid );
    }

    OTV_EXIT;
  }


  /* sets valid->extra1 (GSUB lookup count) */
  /* sets valid->extra2 (GPOS lookup count) */
  /* sets valid->glyph_count                */

  FT_LOCAL_DEF( void )
  otv_JSTF_validate( FT_Bytes      table,
                     FT_Bytes      gsub,
                     FT_Bytes      gpos,
                     FT_UInt       glyph_count,
                     FT_Validator  ftvalid )
  {
    OTV_ValidatorRec  validrec;
    OTV_Validator     valid = &validrec;
    FT_Bytes          p     = table;
    FT_UInt           JstfScriptCount;


    valid->root = ftvalid;

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

    OTV_LIMIT_CHECK( 6 );

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

    JstfScriptCount = FT_NEXT_USHORT( p );

    FT_TRACE3(( " (JstfScriptCount = %d)\n", JstfScriptCount ));

    OTV_LIMIT_CHECK( JstfScriptCount * 6 );

    if ( gsub )
      valid->extra1 = otv_GSUBGPOS_get_Lookup_count( gsub );
    else
      valid->extra1 = 0;

    if ( gpos )
      valid->extra2 = otv_GSUBGPOS_get_Lookup_count( gpos );
    else
      valid->extra2 = 0;

    valid->glyph_count = glyph_count;

    /* JstfScriptRecord */
    for ( ; JstfScriptCount > 0; JstfScriptCount-- )
    {
      p += 4;       /* skip JstfScriptTag */

      /* JstfScript */
      otv_JstfScript_validate( table + FT_NEXT_USHORT( p ), valid );
    }

    FT_TRACE4(( "\n" ));
  }


/* END */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
婷婷激情综合网| 亚洲日韩欧美一区二区在线| 91视频你懂的| 成人h动漫精品一区二区| 韩国av一区二区三区四区| 免费人成精品欧美精品| 日本欧美肥老太交大片| 久久精品国产亚洲5555| 精品一区二区在线免费观看| 黄色日韩三级电影| 国产99久久久精品| 91麻豆免费观看| 91电影在线观看| 欧美一区二区三区日韩视频| 精品国产99国产精品| 亚洲国产成人在线| 亚洲精品视频在线看| 日韩**一区毛片| 国产传媒日韩欧美成人| 色综合天天综合色综合av| 欧美在线影院一区二区| 日韩免费电影一区| 国产精品素人一区二区| 亚洲乱码国产乱码精品精可以看| 亚洲国产精品精华液网站| 日韩va欧美va亚洲va久久| 国产成人av一区二区三区在线观看| 高清久久久久久| 欧美亚洲国产一区二区三区 | 香港成人在线视频| 日韩精品欧美成人高清一区二区| 韩国中文字幕2020精品| 91视频精品在这里| 日韩美女一区二区三区四区| 国产精品久久久久久久久图文区| 午夜精品在线看| www.亚洲激情.com| 欧美一区二区三区系列电影| 国产精品私房写真福利视频| 青青草原综合久久大伊人精品优势| 韩国毛片一区二区三区| 91成人在线免费观看| 国产女人水真多18毛片18精品视频 | 久久国产剧场电影| 91理论电影在线观看| 久久久天堂av| 亚洲第一福利一区| 99久久99久久综合| 欧美精品一区二区三区四区 | 欧美日本在线一区| 中文字幕免费观看一区| 久久9热精品视频| 欧美人xxxx| 亚洲激情图片qvod| 懂色一区二区三区免费观看| 欧美一级在线视频| 亚洲综合男人的天堂| 成人午夜av电影| 久久久亚洲高清| 久久激情五月激情| 制服丝袜在线91| 亚洲国产成人精品视频| 欧洲一区二区av| 亚洲人成亚洲人成在线观看图片| 国产99久久久国产精品潘金| 欧美va亚洲va香蕉在线| 婷婷六月综合网| 欧美日韩一区二区三区四区五区 | 美女性感视频久久| 日韩三级在线观看| 美女尤物国产一区| 精品国产不卡一区二区三区| 免费在线看一区| 日韩免费观看高清完整版在线观看| 日韩国产精品久久久| 欧美一区二区三区免费| 日韩电影一区二区三区| 欧美精品丝袜中出| 日韩av高清在线观看| 日韩视频一区二区三区在线播放| 美女精品一区二区| 久久亚洲综合色一区二区三区| 久久99最新地址| 国产日产欧美一区| av资源网一区| 亚洲精品欧美专区| 欧美精品粉嫩高潮一区二区| 蜜桃精品视频在线观看| 欧美日韩国产成人在线91| 日av在线不卡| 国产日韩精品视频一区| 99天天综合性| 亚洲国产精品精华液网站| 日韩一区二区三区高清免费看看| 久久99国产精品久久99| 国产欧美日韩久久| 色欲综合视频天天天| 日韩成人精品视频| 久久精品亚洲麻豆av一区二区| 不卡视频在线看| 亚洲成人av电影| 国产亚洲欧美日韩在线一区| 91免费视频观看| 免费观看日韩av| 国产精品国产三级国产普通话蜜臀 | 精品国产三级电影在线观看| 成人网在线播放| 日韩av电影免费观看高清完整版 | 欧美写真视频网站| 美国av一区二区| ...xxx性欧美| 日韩视频免费观看高清完整版 | 国产在线视视频有精品| 亚洲精品高清在线| 久久婷婷国产综合国色天香| 99精品一区二区| 精品一区二区三区香蕉蜜桃| 亚洲视频在线一区二区| 91精品国产色综合久久不卡蜜臀 | 欧美精品aⅴ在线视频| 国产成人综合亚洲91猫咪| 午夜亚洲福利老司机| 欧美国产欧美综合| 欧美大胆一级视频| 欧美性猛交xxxx乱大交退制版| 韩国午夜理伦三级不卡影院| 亚洲一卡二卡三卡四卡| 国产精品水嫩水嫩| 精品国产乱码久久久久久图片 | 国产农村妇女毛片精品久久麻豆| 91精品免费观看| 欧美中文字幕一区二区三区亚洲| 国产精一区二区三区| 美国毛片一区二区| 日韩精品欧美精品| 亚洲国产日韩在线一区模特| 国产日韩精品一区二区三区在线| 日韩一区二区三区免费看 | 丁香六月久久综合狠狠色| 日本麻豆一区二区三区视频| 一级中文字幕一区二区| 国产精品视频九色porn| 久久久国产综合精品女国产盗摄| 91麻豆精品国产91久久久 | 人妖欧美一区二区| 亚洲免费av在线| 国产精品传媒视频| 国产免费成人在线视频| 国产欧美日韩不卡免费| 久久久久久久一区| 中文字幕高清不卡| 国产精品素人一区二区| 中文字幕巨乱亚洲| 国产精品成人一区二区艾草 | 国产伦精品一区二区三区免费| 免费精品99久久国产综合精品| 日日夜夜免费精品视频| 亚洲第四色夜色| 日本欧美大码aⅴ在线播放| 免费久久99精品国产| 狠狠色伊人亚洲综合成人| 蜜桃久久久久久| 国产成人av一区二区三区在线观看| 国产精品一区二区三区四区| 国产成人午夜高潮毛片| av电影天堂一区二区在线观看| 99久久久国产精品免费蜜臀| 色综合久久六月婷婷中文字幕| 色欧美日韩亚洲| 7777精品伊人久久久大香线蕉| 欧美成人三级在线| 国产日产欧美一区| 18欧美乱大交hd1984| 午夜一区二区三区视频| 日韩黄色小视频| 国产一区二区美女诱惑| 91蜜桃网址入口| 欧美一区二区视频在线观看2020 | 香蕉加勒比综合久久| 久久不见久久见中文字幕免费| 国产精品123| 色偷偷成人一区二区三区91| 欧美福利视频一区| 国产视频一区二区在线观看| 一区二区三区在线影院| 免费成人在线影院| 色综合久久九月婷婷色综合| 精品久久久久久久久久久久久久久久久| 久久婷婷国产综合精品青草| 一区二区三区四区国产精品| 激情六月婷婷综合| 一本久久综合亚洲鲁鲁五月天| 精品日韩欧美在线| 亚洲国产成人porn| 粉嫩av一区二区三区在线播放 | 成人精品亚洲人成在线| 91精品国产美女浴室洗澡无遮挡| 中文字幕不卡在线| 黄网站免费久久| 欧美顶级少妇做爰|