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

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

?? ftxgdef.c

?? 字體縮放顯示
?? C
?? 第 1 頁 / 共 2 頁
字號:
/******************************************************************* * *  ftxgdef.c * *    TrueType Open GDEF table support. * *  Copyright 1996-2001 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 "tttypes.h"#include "tttags.h"#include "ttload.h"#include "ttextend.h"#include "ttmemory.h"#include "ttfile.h"#include "ftxopen.h"#include "ftxopenf.h"  static TT_Error  Load_AttachList( TTO_AttachList*  al,                                    PFace            input );  static TT_Error  Load_LigCaretList( TTO_LigCaretList*  lcl,                                      PFace              input );  static void  Free_AttachList( TTO_AttachList*  al );  static void  Free_LigCaretList( TTO_LigCaretList*  lcl );  static void  Free_NewGlyphClasses( TTO_GDEFHeader*  gdef );  /**********************   * Extension Functions   **********************/  static TT_Error  GDEF_Create( void*  ext,                                PFace  face )  {    DEFINE_LOAD_LOCALS( face->stream );    TTO_GDEFHeader*  gdef = (TTO_GDEFHeader*)ext;    Long             table;    /* by convention */    if ( !gdef )      return TT_Err_Ok;    /* a null offset indicates that there is no GDEF table */    gdef->offset = 0;    /* we store the start offset and the size of the subtable */    table = TT_LookUp_Table( face, TTAG_GDEF );    if ( table < 0 )      return TT_Err_Ok;             /* The table is optional */    if ( FILE_Seek( face->dirTables[table].Offset ) ||         ACCESS_Frame( 4L ) )      return error;    gdef->offset  = FILE_Pos() - 4L;    /* undo ACCESS_Frame() */    gdef->Version = GET_ULong();    FORGET_Frame();    gdef->loaded = FALSE;    return TT_Err_Ok;  }  static TT_Error  GDEF_Destroy( void*  ext,                                 PFace  face )  {    TTO_GDEFHeader*  gdef = (TTO_GDEFHeader*)ext;    /* by convention */    if ( !gdef )      return TT_Err_Ok;    if ( gdef->loaded )    {      Free_LigCaretList( &gdef->LigCaretList );      Free_AttachList( &gdef->AttachList );      Free_ClassDefinition( &gdef->GlyphClassDef );      Free_ClassDefinition( &gdef->MarkAttachClassDef );      Free_NewGlyphClasses( gdef );    }    return TT_Err_Ok;  }  FT_EXPORT_FUNC( TT_Error )  TT_Init_GDEF_Extension( TT_Engine  engine )  {    PEngine_Instance  _engine = HANDLE_Engine( engine );    if ( !_engine )      return TT_Err_Invalid_Engine;    return  TT_Register_Extension( _engine,                                   GDEF_ID,                                   sizeof ( TTO_GDEFHeader ),                                   GDEF_Create,                                   GDEF_Destroy );  }  FT_EXPORT_FUNC( TT_Error )  TT_Load_GDEF_Table( TT_Face          face,                      TTO_GDEFHeader*  retptr )  {    ULong            cur_offset, new_offset, base_offset;    TTO_GDEFHeader*  gdef;    PFace  faze = HANDLE_Face( face );    DEFINE_ALL_LOCALS;    if ( !retptr )      return TT_Err_Invalid_Argument;    if ( !faze )      return TT_Err_Invalid_Face_Handle;    error = TT_Extension_Get( faze, GDEF_ID, (void**)&gdef );    if ( error )      return error;    if ( gdef->offset == 0 )      return TT_Err_Table_Missing;      /* no GDEF table; nothing to do */    /* now access stream */    if ( USE_Stream( faze->stream, stream ) )      return error;    base_offset = gdef->offset;    /* skip version */    if ( FILE_Seek( base_offset + 4L ) ||         ACCESS_Frame( 2L ) )      return error;    new_offset = GET_UShort();    FORGET_Frame();    /* all GDEF subtables are optional */    if ( new_offset )    {      new_offset += base_offset;      /* only classes 1-4 are allowed here */      cur_offset = FILE_Pos();      if ( FILE_Seek( new_offset ) ||           ( error = Load_ClassDefinition( &gdef->GlyphClassDef, 5,                                           faze ) ) != TT_Err_Ok )        return error;      (void)FILE_Seek( cur_offset );    }    else      gdef->GlyphClassDef.loaded = FALSE;    if ( ACCESS_Frame( 2L ) )      return error;    new_offset = GET_UShort();    FORGET_Frame();    if ( new_offset )    {      new_offset += base_offset;      cur_offset = FILE_Pos();      if ( FILE_Seek( new_offset ) ||           ( error = Load_AttachList( &gdef->AttachList,                                      faze ) ) != TT_Err_Ok )        goto Fail1;      (void)FILE_Seek( cur_offset );    }    else      gdef->AttachList.loaded = FALSE;    if ( ACCESS_Frame( 2L ) )      return error;    new_offset = GET_UShort();    FORGET_Frame();    if ( new_offset )    {      new_offset += base_offset;      cur_offset = FILE_Pos();      if ( FILE_Seek( new_offset ) ||           ( error = Load_LigCaretList( &gdef->LigCaretList,                                        faze ) ) != TT_Err_Ok )        goto Fail2;      (void)FILE_Seek( cur_offset );    }    else      gdef->LigCaretList.loaded = FALSE;    /* OpenType 1.2 has introduced the `MarkAttachClassDef' field.  We       first have to scan the LookupFlag values to find out whether we       must load it or not.  Here we only store the current file offset. */    gdef->MarkAttachClassDef_offset = FILE_Pos();    gdef->MarkAttachClassDef.loaded = FALSE;    gdef->LastGlyph       = 0;    gdef->NewGlyphClasses = NULL;    gdef->loaded          = TRUE;    *retptr = *gdef;    DONE_Stream( stream );    return TT_Err_Ok;  Fail2:    Free_AttachList( &gdef->AttachList );  Fail1:    Free_ClassDefinition( &gdef->GlyphClassDef );    /* release stream */    DONE_Stream( stream );    return error;  }  /*******************************   * AttachList related functions   *******************************/  /* AttachPoint */  static TT_Error  Load_AttachPoint( TTO_AttachPoint*  ap,                                     PFace             input )  {    DEFINE_LOAD_LOCALS( input->stream );    UShort   n, count;    UShort*  pi;    if ( ACCESS_Frame( 2L ) )      return error;    count = ap->PointCount = GET_UShort();    FORGET_Frame();    ap->PointIndex = NULL;    if ( count )    {      if ( ALLOC_ARRAY( ap->PointIndex, count, UShort ) )        return error;      pi = ap->PointIndex;      if ( ACCESS_Frame( count * 2L ) )      {        FREE( pi );        return error;      }      for ( n = 0; n < count; n++ )        pi[n] = GET_UShort();      FORGET_Frame();    }    return TT_Err_Ok;  }  static void  Free_AttachPoint( TTO_AttachPoint*  ap )  {    FREE( ap->PointIndex );  }  /* AttachList */  static TT_Error  Load_AttachList( TTO_AttachList*  al,                                    PFace            input )  {    DEFINE_LOAD_LOCALS( input->stream );    UShort            n, count;    ULong             cur_offset, new_offset, base_offset;    TTO_AttachPoint*  ap;    base_offset = FILE_Pos();    if ( ACCESS_Frame( 2L ) )      return error;    new_offset = GET_UShort() + base_offset;    FORGET_Frame();    cur_offset = FILE_Pos();    if ( FILE_Seek( new_offset ) ||         ( error = Load_Coverage( &al->Coverage, input ) ) != TT_Err_Ok )      return error;    (void)FILE_Seek( cur_offset );    if ( ACCESS_Frame( 2L ) )      goto Fail2;    count = al->GlyphCount = GET_UShort();    FORGET_Frame();    al->AttachPoint = NULL;    if ( ALLOC_ARRAY( al->AttachPoint, count, TTO_AttachPoint ) )      goto Fail2;    ap = al->AttachPoint;    for ( n = 0; n < count; n++ )    {      if ( ACCESS_Frame( 2L ) )        goto Fail1;      new_offset = GET_UShort() + base_offset;      FORGET_Frame();      cur_offset = FILE_Pos();      if ( FILE_Seek( new_offset ) ||           ( error = Load_AttachPoint( &ap[n], input ) ) != TT_Err_Ok )        goto Fail1;      (void)FILE_Seek( cur_offset );    }    al->loaded = TRUE;    return TT_Err_Ok;  Fail1:    for ( n = 0; n < count; n++ )      Free_AttachPoint( &ap[n] );    FREE( ap );  Fail2:    Free_Coverage( &al->Coverage );    return error;  }  static void  Free_AttachList( TTO_AttachList*  al )  {    UShort            n, count;    TTO_AttachPoint*  ap;    if ( !al->loaded )      return;    if ( al->AttachPoint )    {      count = al->GlyphCount;      ap    = al->AttachPoint;      for ( n = 0; n < count; n++ )        Free_AttachPoint( &ap[n] );      FREE( ap );    }    Free_Coverage( &al->Coverage );  }  /*********************************   * LigCaretList related functions   *********************************/  /* CaretValueFormat1 */  /* CaretValueFormat2 */  /* CaretValueFormat3 */  /* CaretValueFormat4 */  static TT_Error  Load_CaretValue( TTO_CaretValue*  cv,                                    PFace            input )  {    DEFINE_LOAD_LOCALS( input->stream );    ULong    cur_offset, new_offset, base_offset;    base_offset = FILE_Pos();    if ( ACCESS_Frame( 2L ) )      return error;    cv->CaretValueFormat = GET_UShort();    FORGET_Frame();    switch ( cv->CaretValueFormat )    {    case 1:      if ( ACCESS_Frame( 2L ) )        return error;      cv->cvf.cvf1.Coordinate = GET_Short();      FORGET_Frame();      break;    case 2:      if ( ACCESS_Frame( 2L ) )        return error;      cv->cvf.cvf2.CaretValuePoint = GET_UShort();      FORGET_Frame();      break;    case 3:      if ( ACCESS_Frame( 4L ) )        return error;      cv->cvf.cvf3.Coordinate = GET_Short();      new_offset = GET_UShort() + base_offset;      FORGET_Frame();      cur_offset = FILE_Pos();      if ( FILE_Seek( new_offset ) ||           ( error = Load_Device( &cv->cvf.cvf3.Device,                                  input ) ) != TT_Err_Ok )        return error;      (void)FILE_Seek( cur_offset );      break;    case 4:      if ( ACCESS_Frame( 2L ) )        return error;      cv->cvf.cvf4.IdCaretValue = GET_UShort();      FORGET_Frame();      break;    default:      return TTO_Err_Invalid_GDEF_SubTable_Format;    }    return TT_Err_Ok;  }  static void  Free_CaretValue( TTO_CaretValue*  cv )  {    if ( cv->CaretValueFormat == 3 )      Free_Device( &cv->cvf.cvf3.Device );  }  /* LigGlyph */  static TT_Error  Load_LigGlyph( TTO_LigGlyph*  lg,                                  PFace          input )  {    DEFINE_LOAD_LOCALS( input->stream );    UShort           n, count;    ULong            cur_offset, new_offset, base_offset;    TTO_CaretValue*  cv;    base_offset = FILE_Pos();    if ( ACCESS_Frame( 2L ) )      return error;    count = lg->CaretCount = GET_UShort();    FORGET_Frame();    lg->CaretValue = NULL;    if ( ALLOC_ARRAY( lg->CaretValue, count, TTO_CaretValue ) )      return error;    cv = lg->CaretValue;    for ( n = 0; n < count; n++ )    {      if ( ACCESS_Frame( 2L ) )        goto Fail;      new_offset = GET_UShort() + base_offset;      FORGET_Frame();      cur_offset = FILE_Pos();      if ( FILE_Seek( new_offset ) ||           ( error = Load_CaretValue( &cv[n], input ) ) != TT_Err_Ok )        goto Fail;      (void)FILE_Seek( cur_offset );    }    return TT_Err_Ok;  Fail:    for ( n = 0; n < count; n++ )      Free_CaretValue( &cv[n] );    FREE( cv );    return error;  }  static void  Free_LigGlyph( TTO_LigGlyph*  lg )  {    UShort           n, count;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91视频免费观看| 99精品视频在线播放观看| 亚洲男女毛片无遮挡| 中文字幕精品综合| 欧美激情一区二区三区四区| 久久先锋影音av| 国产女主播视频一区二区| 欧美激情中文不卡| 亚洲欧洲制服丝袜| 亚洲国产三级在线| 日韩高清中文字幕一区| 美脚の诱脚舐め脚责91 | 狠狠色丁香婷综合久久| 蜜桃av噜噜一区二区三区小说| 日韩电影免费在线看| 久久国产视频网| 成人美女视频在线观看| 色综合天天天天做夜夜夜夜做| 色成人在线视频| 91精选在线观看| 亚洲精品一线二线三线| 中文字幕精品一区| 亚洲电影中文字幕在线观看| 日韩有码一区二区三区| 国产剧情av麻豆香蕉精品| 91在线国产福利| 91精选在线观看| 国产精品国产三级国产普通话三级| 综合久久一区二区三区| 日韩avvvv在线播放| 岛国精品在线观看| 欧美日韩黄色影视| 国产精品无人区| 亚洲国产视频一区| 成人爱爱电影网址| 欧美肥妇毛茸茸| 国产精品免费久久| 久久99精品国产91久久来源| 99国产欧美另类久久久精品| 日韩欧美国产电影| 一区二区三区日韩精品视频| 国产专区欧美精品| 欧美精品久久久久久久多人混战| 国产欧美一区二区精品仙草咪| 亚洲最色的网站| 国产不卡视频一区二区三区| 欧美剧情电影在线观看完整版免费励志电影 | 亚洲品质自拍视频网站| 精品在线免费视频| 欧美三级中文字| 国产精品高清亚洲| 国产一区二区在线观看视频| 欧美日韩高清在线播放| 日韩理论片中文av| 成人动漫av在线| 久久久久久夜精品精品免费| 日韩电影在线观看网站| 欧美色综合天天久久综合精品| 国产午夜久久久久| 极品少妇xxxx精品少妇| 911精品产国品一二三产区| 亚洲视频中文字幕| 99综合电影在线视频| 久久久不卡网国产精品一区| 免费日本视频一区| 精品视频1区2区| 一区二区三区四区五区视频在线观看 | 久久国产综合精品| 日韩一区二区三区免费观看| 亚洲五码中文字幕| 在线观看免费一区| 亚洲欧美日韩国产另类专区| 国产a精品视频| 日本一区二区成人在线| 国产99久久久国产精品潘金| 久久亚洲精品国产精品紫薇| 精品在线视频一区| 国产亚洲欧美一区在线观看| 国产.欧美.日韩| 中文av字幕一区| 91丨九色丨蝌蚪丨老版| 亚洲乱码一区二区三区在线观看| 91蜜桃在线免费视频| 亚洲精品五月天| 欧美手机在线视频| 免费观看成人鲁鲁鲁鲁鲁视频| 91精品国产综合久久久蜜臀图片| 久久国产生活片100| 久久久久久黄色| 91亚洲精品久久久蜜桃| 亚洲一线二线三线久久久| 69堂国产成人免费视频| 黄色资源网久久资源365| 国产欧美日韩在线观看| 日本丶国产丶欧美色综合| 日韩成人午夜电影| 国产精品天天看| 欧美色视频一区| 国产综合色视频| 亚洲精品综合在线| 欧美一区二区黄| 成人av在线电影| 亚洲国产成人porn| 久久影视一区二区| 欧美色视频一区| 国产精品夜夜嗨| 亚洲午夜成aⅴ人片| 久久久国产精华| 678五月天丁香亚洲综合网| 国产一区 二区| 亚洲国产精品尤物yw在线观看| 精品国产乱码久久久久久夜甘婷婷| jlzzjlzz亚洲女人18| 美国一区二区三区在线播放| 中文字幕亚洲区| 亚洲精品一区二区三区在线观看 | 欧美日韩中文精品| 国产乱人伦精品一区二区在线观看| 亚洲毛片av在线| 国产欧美日韩三级| 欧美电影免费观看高清完整版在线 | 91免费版在线看| 国产乱色国产精品免费视频| 一区二区三区四区中文字幕| 久久久久久免费毛片精品| 欧美肥妇毛茸茸| 欧美主播一区二区三区| 成人综合婷婷国产精品久久蜜臀 | 色狠狠av一区二区三区| 国产真实乱对白精彩久久| 亚洲国产综合色| 国产精品免费丝袜| 久久日一线二线三线suv| 欧美乱妇15p| 欧美午夜精品久久久久久孕妇| 国产寡妇亲子伦一区二区| 男女性色大片免费观看一区二区| 亚洲精品视频一区二区| 中文字幕一区二区三| 中文字幕成人在线观看| 久久精品一区蜜桃臀影院| 精品美女一区二区| 日韩一区二区三区观看| 欧美精品免费视频| 欧美日韩精品电影| 欧美日韩小视频| 欧美日韩精品免费| 欧美日韩一区久久| 欧美丰满一区二区免费视频 | 成人免费毛片片v| 国产精品一二一区| 懂色中文一区二区在线播放| 激情伊人五月天久久综合| 麻豆精品视频在线观看免费| 日韩国产高清在线| 久久精品国产免费看久久精品| 免费国产亚洲视频| 美女国产一区二区三区| 国产一区二区三区在线观看免费 | 玉足女爽爽91| 亚洲第一福利视频在线| 亚洲国产成人av网| 美女高潮久久久| 岛国av在线一区| 色吊一区二区三区| 欧美一区二区在线看| 精品国产伦理网| 国产精品电影一区二区三区| 一区二区三区蜜桃| 秋霞国产午夜精品免费视频| 久久精品国产第一区二区三区| 国产精品一品二品| 91久久国产综合久久| 91麻豆精品91久久久久久清纯| www一区二区| 中文字幕一区二区三| 无码av免费一区二区三区试看| 久久成人精品无人区| voyeur盗摄精品| 正在播放一区二区| 欧美国产一区二区| 亚洲18色成人| 国产激情一区二区三区| 日本韩国欧美一区二区三区| 欧美剧情电影在线观看完整版免费励志电影| 日韩一区二区三区电影在线观看| 2021国产精品久久精品| 亚洲欧洲精品一区二区三区不卡| 亚洲主播在线播放| 国产一区二区精品久久99| 色综合夜色一区| 精品88久久久久88久久久| 亚洲免费观看高清完整| 麻豆精品在线播放| 在线观看免费成人| 欧美国产日本韩| 美国十次综合导航| 欧美性高清videossexo| 欧美国产欧美亚州国产日韩mv天天看完整| 国产精品福利av|