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

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

?? otvgpos.c

?? QT 開發環境里面一個很重要的文件
?? C
?? 第 1 頁 / 共 2 頁
字號:
/***************************************************************************//*                                                                         *//*  otvgpos.c                                                              *//*                                                                         *//*    OpenType GPOS table validation (body).                               *//*                                                                         *//*  Copyright 2002, 2004, 2005, 2006 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_otvgpos  static void  otv_Anchor_validate( FT_Bytes       table,                       OTV_Validator  valid );  static void  otv_MarkArray_validate( FT_Bytes       table,                          OTV_Validator  valid );  /*************************************************************************/  /*************************************************************************/  /*****                                                               *****/  /*****                      UTILITY FUNCTIONS                        *****/  /*****                                                               *****/  /*************************************************************************/  /*************************************************************************/#define BaseArrayFunc       otv_x_sxy#define LigatureAttachFunc  otv_x_sxy#define Mark2ArrayFunc      otv_x_sxy  /* uses valid->extra1 (counter)                             */  /* uses valid->extra2 (boolean to handle NULL anchor field) */  static void  otv_x_sxy( FT_Bytes       table,             OTV_Validator  valid )  {    FT_Bytes  p = table;    FT_UInt   Count, count1, table_size;    OTV_ENTER;    OTV_LIMIT_CHECK( 2 );    Count = FT_NEXT_USHORT( p );    OTV_TRACE(( " (Count = %d)\n", Count ));    OTV_LIMIT_CHECK( Count * valid->extra1 * 2 );    table_size = Count * valid->extra1 * 2 + 2;    for ( ; Count > 0; Count-- )      for ( count1 = valid->extra1; count1 > 0; count1-- )      {        OTV_OPTIONAL_TABLE( anchor_offset );        OTV_OPTIONAL_OFFSET( anchor_offset );        if ( valid->extra2 )        {          OTV_SIZE_CHECK( anchor_offset );          if ( anchor_offset )            otv_Anchor_validate( table + anchor_offset, valid );        }        else          otv_Anchor_validate( table + anchor_offset, valid );      }    OTV_EXIT;  }#define MarkBasePosFormat1Func  otv_u_O_O_u_O_O#define MarkLigPosFormat1Func   otv_u_O_O_u_O_O#define MarkMarkPosFormat1Func  otv_u_O_O_u_O_O  /* sets valid->extra1 (class count) */  static void  otv_u_O_O_u_O_O( FT_Bytes       table,                   OTV_Validator  valid )  {    FT_Bytes           p = table;    FT_UInt            Coverage1, Coverage2, ClassCount;    FT_UInt            Array1, Array2;    OTV_Validate_Func  func;    OTV_ENTER;    p += 2;     /* skip PosFormat */    OTV_LIMIT_CHECK( 10 );    Coverage1  = FT_NEXT_USHORT( p );    Coverage2  = FT_NEXT_USHORT( p );    ClassCount = FT_NEXT_USHORT( p );    Array1     = FT_NEXT_USHORT( p );    Array2     = FT_NEXT_USHORT( p );    otv_Coverage_validate( table + Coverage1, valid );    otv_Coverage_validate( table + Coverage2, valid );    otv_MarkArray_validate( table + Array1, valid );    valid->nesting_level++;    func          = valid->func[valid->nesting_level];    valid->extra1 = ClassCount;    func( table + Array2, valid );    valid->nesting_level--;    OTV_EXIT;  }  /*************************************************************************/  /*************************************************************************/  /*****                                                               *****/  /*****                        VALUE RECORDS                          *****/  /*****                                                               *****/  /*************************************************************************/  /*************************************************************************/  static FT_UInt  otv_value_length( FT_UInt  format )  {    FT_UInt  count;    count = ( ( format & 0xAA ) >> 1 ) + ( format & 0x55 );    count = ( ( count  & 0xCC ) >> 2 ) + ( count  & 0x33 );    count = ( ( count  & 0xF0 ) >> 4 ) + ( count  & 0x0F );    return count * 2;  }  /* uses valid->extra3 (pointer to base table) */  static void  otv_ValueRecord_validate( FT_Bytes       table,                            FT_UInt        format,                            OTV_Validator  valid )  {    FT_Bytes  p = table;    FT_UInt   count;#ifdef FT_DEBUG_LEVEL_TRACE    FT_Int    loop;    FT_ULong  res = 0;    OTV_NAME_ENTER( "ValueRecord" );    /* display `format' in dual representation */    for ( loop = 7; loop >= 0; loop-- )    {      res <<= 4;      res  += ( format >> loop ) & 1;    }    OTV_TRACE(( " (format 0b%08lx)\n", res ));#endif    if ( format >= 0x100 )      FT_INVALID_DATA;    for ( count = 4; count > 0; count-- )    {      if ( format & 1 )      {        /* XPlacement, YPlacement, XAdvance, YAdvance */        OTV_LIMIT_CHECK( 2 );        p += 2;      }      format >>= 1;    }    for ( count = 4; count > 0; count-- )    {      if ( format & 1 )      {        FT_UInt   table_size;        OTV_OPTIONAL_TABLE( device );        /* XPlaDevice, YPlaDevice, XAdvDevice, YAdvDevice */        OTV_LIMIT_CHECK( 2 );        OTV_OPTIONAL_OFFSET( device );        /* XXX: this value is usually too small, especially if the current */        /* ValueRecord is part of an array -- getting the correct table    */        /* size is probably not worth the trouble                          */        table_size = p - valid->extra3;        OTV_SIZE_CHECK( device );        if ( device )          otv_Device_validate( valid->extra3 + device, valid );      }      format >>= 1;    }    OTV_EXIT;  }  /*************************************************************************/  /*************************************************************************/  /*****                                                               *****/  /*****                           ANCHORS                             *****/  /*****                                                               *****/  /*************************************************************************/  /*************************************************************************/  static void  otv_Anchor_validate( FT_Bytes       table,                       OTV_Validator  valid )  {    FT_Bytes  p = table;    FT_UInt   AnchorFormat;    OTV_NAME_ENTER( "Anchor");    OTV_LIMIT_CHECK( 6 );    AnchorFormat = FT_NEXT_USHORT( p );    OTV_TRACE(( " (format %d)\n", AnchorFormat ));    p += 4;     /* skip XCoordinate and YCoordinate */    switch ( AnchorFormat )    {    case 1:      break;    case 2:      OTV_LIMIT_CHECK( 2 );  /* AnchorPoint */      break;    case 3:      {        FT_UInt   table_size;        OTV_OPTIONAL_TABLE( XDeviceTable );        OTV_OPTIONAL_TABLE( YDeviceTable );        OTV_LIMIT_CHECK( 4 );        OTV_OPTIONAL_OFFSET( XDeviceTable );        OTV_OPTIONAL_OFFSET( YDeviceTable );        table_size = 6 + 4;        OTV_SIZE_CHECK( XDeviceTable );        if ( XDeviceTable )          otv_Device_validate( table + XDeviceTable, valid );        OTV_SIZE_CHECK( YDeviceTable );        if ( YDeviceTable )          otv_Device_validate( table + YDeviceTable, valid );      }      break;    default:      FT_INVALID_DATA;    }    OTV_EXIT;  }  /*************************************************************************/  /*************************************************************************/  /*****                                                               *****/  /*****                         MARK ARRAYS                           *****/  /*****                                                               *****/  /*************************************************************************/  /*************************************************************************/  static void  otv_MarkArray_validate( FT_Bytes       table,                          OTV_Validator  valid )  {    FT_Bytes  p = table;    FT_UInt   MarkCount;    OTV_NAME_ENTER( "MarkArray" );    OTV_LIMIT_CHECK( 2 );    MarkCount = FT_NEXT_USHORT( p );    OTV_TRACE(( " (MarkCount = %d)\n", MarkCount ));    OTV_LIMIT_CHECK( MarkCount * 4 );    /* MarkRecord */    for ( ; MarkCount > 0; MarkCount-- )    {      p += 2;   /* skip Class */      /* MarkAnchor */      otv_Anchor_validate( table + FT_NEXT_USHORT( p ), valid );    }    OTV_EXIT;  }  /*************************************************************************/  /*************************************************************************/  /*****                                                               *****/  /*****                     GPOS LOOKUP TYPE 1                        *****/  /*****                                                               *****/  /*************************************************************************/  /*************************************************************************/  /* sets valid->extra3 (pointer to base table) */  static void  otv_SinglePos_validate( FT_Bytes       table,                          OTV_Validator  valid )  {    FT_Bytes  p = table;    FT_UInt   PosFormat;    OTV_NAME_ENTER( "SinglePos" );    OTV_LIMIT_CHECK( 2 );    PosFormat = FT_NEXT_USHORT( p );    OTV_TRACE(( " (format %d)\n", PosFormat ));    valid->extra3 = table;    switch ( PosFormat )    {    case 1:     /* SinglePosFormat1 */      {        FT_UInt  Coverage, ValueFormat;        OTV_LIMIT_CHECK( 4 );        Coverage    = FT_NEXT_USHORT( p );        ValueFormat = FT_NEXT_USHORT( p );        otv_Coverage_validate( table + Coverage, valid );        otv_ValueRecord_validate( p, ValueFormat, valid ); /* Value */      }      break;    case 2:     /* SinglePosFormat2 */      {        FT_UInt  Coverage, ValueFormat, ValueCount, len_value;        OTV_LIMIT_CHECK( 6 );        Coverage    = FT_NEXT_USHORT( p );        ValueFormat = FT_NEXT_USHORT( p );        ValueCount  = FT_NEXT_USHORT( p );        OTV_TRACE(( " (ValueCount = %d)\n", ValueCount ));        len_value = otv_value_length( ValueFormat );        otv_Coverage_validate( table + Coverage, valid );        OTV_LIMIT_CHECK( ValueCount * len_value );        /* Value */        for ( ; ValueCount > 0; ValueCount-- )        {          otv_ValueRecord_validate( p, ValueFormat, valid );          p += len_value;        }      }      break;    default:      FT_INVALID_DATA;    }    OTV_EXIT;  }  /*************************************************************************/  /*************************************************************************/  /*****                                                               *****/  /*****                     GPOS LOOKUP TYPE 2                        *****/  /*****                                                               *****/  /*************************************************************************/  /*************************************************************************/  static void  otv_PairSet_validate( FT_Bytes       table,                        FT_UInt        format1,                        FT_UInt        format2,                        OTV_Validator  valid )  {    FT_Bytes  p = table;    FT_UInt   value_len1, value_len2, PairValueCount;    OTV_NAME_ENTER( "PairSet" );    OTV_LIMIT_CHECK( 2 );    PairValueCount = FT_NEXT_USHORT( p );    OTV_TRACE(( " (PairValueCount = %d)\n", PairValueCount ));    value_len1 = otv_value_length( format1 );    value_len2 = otv_value_length( format2 );    OTV_LIMIT_CHECK( PairValueCount * ( value_len1 + value_len2 + 2 ) );    /* PairValueRecord */    for ( ; PairValueCount > 0; PairValueCount-- )    {      p += 2;       /* skip SecondGlyph */      if ( format1 )        otv_ValueRecord_validate( p, format1, valid ); /* Value1 */      p += value_len1;      if ( format2 )        otv_ValueRecord_validate( p, format2, valid ); /* Value2 */      p += value_len2;    }    OTV_EXIT;  }  /* sets valid->extra3 (pointer to base table) */  static void  otv_PairPos_validate( FT_Bytes       table,                        OTV_Validator  valid )  {    FT_Bytes  p = table;    FT_UInt   PosFormat;    OTV_NAME_ENTER( "PairPos" );    OTV_LIMIT_CHECK( 2 );    PosFormat = FT_NEXT_USHORT( p );    OTV_TRACE(( " (format %d)\n", PosFormat ));    valid->extra3 = table;    switch ( PosFormat )    {    case 1:     /* PairPosFormat1 */      {        FT_UInt  Coverage, ValueFormat1, ValueFormat2, PairSetCount;        OTV_LIMIT_CHECK( 8 );        Coverage     = FT_NEXT_USHORT( p );        ValueFormat1 = FT_NEXT_USHORT( p );        ValueFormat2 = FT_NEXT_USHORT( p );        PairSetCount = FT_NEXT_USHORT( p );        OTV_TRACE(( " (PairSetCount = %d)\n", PairSetCount ));        otv_Coverage_validate( table + Coverage, valid );        OTV_LIMIT_CHECK( PairSetCount * 2 );        /* PairSetOffset */        for ( ; PairSetCount > 0; PairSetCount-- )          otv_PairSet_validate( table + FT_NEXT_USHORT( p ),

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产日产精品1区| 国产精品1024| 91豆麻精品91久久久久久| 激情欧美日韩一区二区| 精品影视av免费| 国产一区二区三区高清播放| 国内精品写真在线观看| 欧美网站大全在线观看| 国产精品久久久久影院亚瑟| 久久久久九九视频| 中文字幕中文字幕一区| 精品午夜一区二区三区在线观看| 91黄色小视频| 国产精品亲子乱子伦xxxx裸| 自拍偷拍欧美精品| 婷婷中文字幕综合| 国内一区二区视频| 欧美高清激情brazzers| 亚洲精品在线免费观看视频| 国产午夜精品一区二区三区嫩草 | 日韩激情在线观看| 蜜臀a∨国产成人精品| 成人精品国产免费网站| 色8久久人人97超碰香蕉987| 中文天堂在线一区| 国产精品一区三区| 欧美午夜一区二区三区 | 成人福利视频网站| 久久精品一二三| 国产综合久久久久久久久久久久| 91精品一区二区三区久久久久久| 精品国产欧美一区二区| 麻豆91精品91久久久的内涵| 欧美女孩性生活视频| 国产欧美中文在线| 国产福利91精品一区| 久久精品视频网| 国产91丝袜在线播放0| 欧美剧情电影在线观看完整版免费励志电影| 中文字幕欧美日本乱码一线二线| 午夜电影网一区| 欧美日韩在线三级| 国产精品国产三级国产aⅴ原创| 国产福利精品一区| 国产精品激情偷乱一区二区∴| 成人听书哪个软件好| 欧美大片在线观看| 亚洲成人av在线电影| 国产电影精品久久禁18| 国产精品丝袜久久久久久app| 国产成人丝袜美腿| 亚洲精品一二三四区| 丁香婷婷深情五月亚洲| 亚洲三级免费观看| 欧美亚洲综合久久| 麻豆视频观看网址久久| 国产欧美精品在线观看| 国产精品久久久久婷婷| 欧美日本国产一区| 久久99精品久久久久久动态图| 久久久综合网站| 色综合久久中文综合久久97| 久久久久久99久久久精品网站| 不卡区在线中文字幕| 亚洲国产欧美在线人成| 在线视频国产一区| 亚洲日穴在线视频| 91精品国产综合久久香蕉麻豆| 精品无人区卡一卡二卡三乱码免费卡| 精品国产亚洲在线| 91麻豆123| 亚洲人成网站精品片在线观看| 懂色av一区二区三区免费观看| 亚洲一区二区三区中文字幕| 欧美在线影院一区二区| 九九**精品视频免费播放| 亚洲视频免费在线观看| 日韩一区二区三区四区| 九九精品视频在线看| 亚洲美女屁股眼交| 久久久久久一二三区| 欧美挠脚心视频网站| av网站一区二区三区| 日韩美女精品在线| 欧美不卡123| 成人免费视频网站在线观看| 天天影视涩香欲综合网| 国产精品国产馆在线真实露脸 | 亚洲乱码国产乱码精品精的特点| 欧美一级搡bbbb搡bbbb| 老鸭窝一区二区久久精品| 日韩免费电影一区| 在线一区二区观看| 成人av免费在线| 久久99在线观看| 天使萌一区二区三区免费观看| 国产精品丝袜久久久久久app| 欧美一区二区精品久久911| 色呦呦网站一区| 成人一区在线看| 国模一区二区三区白浆| 毛片av一区二区| 日本麻豆一区二区三区视频| 久久久久国产精品人| 日韩欧美电影一二三| 69久久99精品久久久久婷婷| 在线观看亚洲成人| 色婷婷av一区二区三区gif| 成人高清免费观看| 成人av在线资源网站| 丁香另类激情小说| 国产精品18久久久久| 激情综合网天天干| 激情综合网激情| 美女网站一区二区| 六月丁香综合在线视频| 蜜臀99久久精品久久久久久软件| 日韩高清一级片| 免费成人在线影院| 自拍偷在线精品自拍偷无码专区| 国产精品欧美极品| 中文字幕一区在线观看| 26uuu欧美| 8v天堂国产在线一区二区| 欧美视频一区二区三区四区| 精品婷婷伊人一区三区三| 欧美性猛交xxxx乱大交退制版 | 久久精品夜色噜噜亚洲a∨| 久久婷婷成人综合色| 久久看人人爽人人| 国产精品天天摸av网| 一区二区三区四区蜜桃| www国产成人| 久久日韩粉嫩一区二区三区| 国产精品视频第一区| 亚洲综合色在线| 日韩av在线发布| 国产一区二区三区黄视频| 成人激情免费电影网址| 欧美怡红院视频| 日韩欧美中文字幕精品| 欧美国产精品一区二区三区| 亚洲欧美日韩人成在线播放| 亚洲国产毛片aaaaa无费看| 免费的国产精品| 99热精品国产| 日韩一二在线观看| 中文字幕第一区综合| 午夜精品一区在线观看| 国产一区在线观看视频| 91视频在线观看| 欧美一区二区高清| 国产精品午夜电影| 午夜激情综合网| 国产传媒日韩欧美成人| 欧美三级电影网站| 久久久精品蜜桃| 亚洲高清不卡在线观看| 国产精品一线二线三线| 欧美亚男人的天堂| 久久久精品一品道一区| 亚洲成人免费av| 成人福利视频网站| 日韩精品一区二区三区在线播放| 中文字幕欧美区| 激情久久五月天| 欧美三级欧美一级| 日本一区二区免费在线| 日韩精品免费视频人成| av在线综合网| 久久精品日韩一区二区三区| 亚洲国产精品嫩草影院| 成人国产精品免费网站| 精品国产露脸精彩对白| 亚洲成人久久影院| 99在线视频精品| 国产亚洲成年网址在线观看| 视频一区国产视频| 91国偷自产一区二区三区观看| 久久久久久综合| 精品影视av免费| 欧美一区二区三区精品| 亚洲国产一区二区视频| 99re这里都是精品| 欧美丰满少妇xxxxx高潮对白| 亚洲丝袜美腿综合| 国产ts人妖一区二区| 久久久久久久综合| 精品亚洲成a人在线观看| 日韩一区二区三区观看| 亚洲成a人v欧美综合天堂| 色狠狠一区二区三区香蕉| 国产精品国产三级国产普通话99| 国产成人av一区二区三区在线 | 99视频一区二区| 日韩理论片中文av| av高清不卡在线| 国产精品久久久爽爽爽麻豆色哟哟| 国产黑丝在线一区二区三区| 国产亚洲短视频|