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

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

?? ftxgdef.c

?? 字體縮放顯示
?? C
?? 第 1 頁 / 共 2 頁
字號:
    TTO_CaretValue*  cv;    if ( lg->CaretValue )    {      count = lg->CaretCount;      cv    = lg->CaretValue;      for ( n = 0; n < count; n++ )        Free_CaretValue( &cv[n] );      FREE( cv );    }  }  /* LigCaretList */  static TT_Error  Load_LigCaretList( TTO_LigCaretList*  lcl,                                      PFace              input )  {    DEFINE_LOAD_LOCALS( input->stream );    UShort         n, count;    ULong          cur_offset, new_offset, base_offset;    TTO_LigGlyph*  lg;    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( &lcl->Coverage, input ) ) != TT_Err_Ok )      return error;    (void)FILE_Seek( cur_offset );    if ( ACCESS_Frame( 2L ) )      goto Fail2;    count = lcl->LigGlyphCount = GET_UShort();    FORGET_Frame();    lcl->LigGlyph = NULL;    if ( ALLOC_ARRAY( lcl->LigGlyph, count, TTO_LigGlyph ) )      goto Fail2;    lg = lcl->LigGlyph;    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_LigGlyph( &lg[n], input ) ) != TT_Err_Ok )        goto Fail1;      (void)FILE_Seek( cur_offset );    }    lcl->loaded = TRUE;    return TT_Err_Ok;  Fail1:    for ( n = 0; n < count; n++ )      Free_LigGlyph( &lg[n] );    FREE( lg );  Fail2:    Free_Coverage( &lcl->Coverage );    return error;  }  static void  Free_LigCaretList( TTO_LigCaretList*  lcl )  {    UShort         n, count;    TTO_LigGlyph*  lg;    if ( !lcl->loaded )      return;    if ( lcl->LigGlyph )    {      count = lcl->LigGlyphCount;      lg    = lcl->LigGlyph;      for ( n = 0; n < count; n++ )        Free_LigGlyph( &lg[n] );      FREE( lg );    }    Free_Coverage( &lcl->Coverage );  }  /***********   * GDEF API   ***********/  static UShort  Get_New_Class( TTO_GDEFHeader*  gdef,                                UShort           glyphID,                                UShort           index )  {    UShort                 glyph_index, array_index;    UShort                 byte, bits;    TTO_ClassRangeRecord*  gcrr;    UShort**               ngc;    if ( glyphID >= gdef->LastGlyph )      return 0;    gcrr = gdef->GlyphClassDef.cd.cd2.ClassRangeRecord;    ngc  = gdef->NewGlyphClasses;    if ( glyphID < gcrr[index].Start )    {      array_index = 0;      if ( index == 0 )        glyph_index = glyphID;      else        glyph_index = glyphID - gcrr[index - 1].End - 1;    }    else    {      array_index = index + 1;      glyph_index = glyphID - gcrr[index].End - 1;    }    byte = ngc[array_index][glyph_index / 4 + 1];    bits = byte >> ( 16 - ( glyph_index % 4 + 1 ) * 4 );    return bits & 0x000F;  }  FT_EXPORT_FUNC( TT_Error )  TT_GDEF_Get_Glyph_Property( TTO_GDEFHeader*  gdef,                              TT_UShort        glyphID,                              TT_UShort*       property )  {    UShort    class, index;    TT_Error  error;    if ( !gdef || !property )      return TT_Err_Invalid_Argument;    /* first, we check for mark attach classes */    if ( gdef->MarkAttachClassDef.loaded )    {      error = Get_Class( &gdef->MarkAttachClassDef, glyphID, &class, &index );      if ( error && error != TTO_Err_Not_Covered )        return error;      if ( !error )      {        *property = class << 8;        return TT_Err_Ok;      }    }    error = Get_Class( &gdef->GlyphClassDef, glyphID, &class, &index );    if ( error && error != TTO_Err_Not_Covered )      return error;    /* if we have a constructed class table, check whether additional       values have been assigned                                      */    if ( error == TTO_Err_Not_Covered && gdef->NewGlyphClasses )      class = Get_New_Class( gdef, glyphID, index );    switch ( class )    {    case UNCLASSIFIED_GLYPH:      *property = 0;      break;    case SIMPLE_GLYPH:      *property = TTO_BASE_GLYPH;      break;    case LIGATURE_GLYPH:      *property = TTO_LIGATURE;      break;    case MARK_GLYPH:      *property = TTO_MARK;      break;    case COMPONENT_GLYPH:      *property = TTO_COMPONENT;      break;    }    return TT_Err_Ok;  }  static TT_Error  Make_ClassRange( TTO_ClassDefinition*  cd,                                    UShort                start,                                    UShort                end,                                    UShort                class )  {    TT_Error               error;    UShort                 index;    TTO_ClassDefFormat2*   cdf2;    TTO_ClassRangeRecord*  crr;    cdf2 = &cd->cd.cd2;    cdf2->ClassRangeCount++;    if ( REALLOC_ARRAY( cdf2->ClassRangeRecord, cdf2->ClassRangeCount,                        TTO_ClassRangeRecord ) )      return error;    crr   = cdf2->ClassRangeRecord;    index = cdf2->ClassRangeCount - 1;    crr[index].Start = start;    crr[index].End   = end;    crr[index].Class = class;    cd->Defined[class] = TRUE;    return TT_Err_Ok;  }  FT_EXPORT_FUNC( TT_Error )  TT_GDEF_Build_ClassDefinition( TTO_GDEFHeader*  gdef,                                 TT_UShort        num_glyphs,                                 TT_UShort        glyph_count,                                 TT_UShort*       glyph_array,                                 TT_UShort*       class_array )  {    UShort                 start, curr_glyph, curr_class;    UShort                 n, count;    TT_Error               error;    TTO_ClassDefinition*   gcd;    TTO_ClassRangeRecord*  gcrr;    UShort**               ngc;    if ( !gdef || !glyph_array || !class_array )      return TT_Err_Invalid_Argument;    gcd = &gdef->GlyphClassDef;    /* We build a format 2 table */    gcd->ClassFormat = 2;    /* A GlyphClassDef table contains at most 5 different class values */    if ( ALLOC_ARRAY( gcd->Defined, 5, Bool ) )      return error;    gcd->cd.cd2.ClassRangeCount  = 0;    gcd->cd.cd2.ClassRangeRecord = NULL;    start      = glyph_array[0];    curr_class = class_array[0];    curr_glyph = start;    if ( curr_class >= 5 )    {      error = TT_Err_Invalid_Argument;      goto Fail4;    }    glyph_count--;    for ( n = 0; n <= glyph_count; n++ )    {      if ( curr_glyph == glyph_array[n] && curr_class == class_array[n] )      {        if ( n == glyph_count )        {          if ( ( error = Make_ClassRange( gcd, start,                                          curr_glyph,                                          curr_class ) ) != TT_Err_Ok )            goto Fail3;        }        else        {          if ( curr_glyph == 0xFFFF )          {            error = TT_Err_Invalid_Argument;            goto Fail3;          }          else            curr_glyph++;        }      }      else      {        if ( ( error = Make_ClassRange( gcd, start,                                        curr_glyph - 1,                                        curr_class ) ) != TT_Err_Ok )          goto Fail3;        if ( curr_glyph > glyph_array[n] )        {          error = TT_Err_Invalid_Argument;          goto Fail3;        }        start      = glyph_array[n];        curr_class = class_array[n];        curr_glyph = start;        if ( curr_class >= 5 )        {          error = TT_Err_Invalid_Argument;          goto Fail3;        }        if ( n == glyph_count )        {          if ( ( error = Make_ClassRange( gcd, start,                                          curr_glyph,                                          curr_class ) ) != TT_Err_Ok )            goto Fail3;        }        else        {          if ( curr_glyph == 0xFFFF )          {            error = TT_Err_Invalid_Argument;            goto Fail3;          }          else            curr_glyph++;        }      }    }    /* now prepare the arrays for class values assigned during the lookup       process                                                            */    if ( ALLOC_ARRAY( gdef->NewGlyphClasses,                      gcd->cd.cd2.ClassRangeCount + 1, UShort* ) )      goto Fail2;    count = gcd->cd.cd2.ClassRangeCount;    gcrr  = gcd->cd.cd2.ClassRangeRecord;    ngc   = gdef->NewGlyphClasses;    /* We allocate arrays for all glyphs not covered by the class range       records.  Each element holds four class values.                  */    if ( gcrr[0].Start )    {      if ( ALLOC_ARRAY( ngc[0], gcrr[0].Start / 4 + 1, UShort ) )        goto Fail1;    }    for ( n = 1; n < count; n++ )    {      if ( gcrr[n].Start - gcrr[n - 1].End > 1 )        if ( ALLOC_ARRAY( ngc[n],                          ( gcrr[n].Start - gcrr[n - 1].End - 1 ) / 4 + 1,                          UShort ) )          goto Fail1;    }    if ( gcrr[count - 1].End != num_glyphs - 1 )    {      if ( ALLOC_ARRAY( ngc[count],                        ( num_glyphs - gcrr[count - 1].End - 1 ) / 4 + 1,                        UShort ) )        goto Fail1;    }    gdef->LastGlyph = num_glyphs - 1;    gdef->MarkAttachClassDef_offset = 0L;    gdef->MarkAttachClassDef.loaded = FALSE;    return TT_Err_Ok;  Fail1:    for ( n = 0; n < count; n++ )      FREE( ngc[n] );  Fail2:    FREE( gdef->NewGlyphClasses );  Fail3:    FREE( gcd->cd.cd2.ClassRangeRecord );  Fail4:    FREE( gcd->Defined );    return error;  }  static void  Free_NewGlyphClasses( TTO_GDEFHeader*  gdef )  {    UShort**  ngc;    UShort    n, count;    if ( gdef->NewGlyphClasses )    {      count = gdef->GlyphClassDef.cd.cd2.ClassRangeCount + 1;      ngc   = gdef->NewGlyphClasses;      for ( n = 0; n < count; n++ )        FREE( ngc[n] );      FREE( ngc );    }  }  TT_Error  Add_Glyph_Property( TTO_GDEFHeader*  gdef,                                UShort           glyphID,                                UShort           property )  {    TT_Error               error;    UShort                 class, new_class, index;    UShort                 byte, bits, mask;    UShort                 array_index, glyph_index;    TTO_ClassRangeRecord*  gcrr;    UShort**               ngc;    error = Get_Class( &gdef->GlyphClassDef, glyphID, &class, &index );    if ( error && error != TTO_Err_Not_Covered )      return error;    /* we don't accept glyphs covered in `GlyphClassDef' */    if ( !error )      return TTO_Err_Not_Covered;    switch ( property )    {    case 0:      new_class = UNCLASSIFIED_GLYPH;      break;    case TTO_BASE_GLYPH:      new_class = SIMPLE_GLYPH;      break;    case TTO_LIGATURE:      new_class = LIGATURE_GLYPH;      break;    case TTO_MARK:      new_class = MARK_GLYPH;      break;    case TTO_COMPONENT:      new_class = COMPONENT_GLYPH;      break;    default:      return TT_Err_Invalid_Argument;    }    gcrr = gdef->GlyphClassDef.cd.cd2.ClassRangeRecord;    ngc  = gdef->NewGlyphClasses;    if ( glyphID < gcrr[index].Start )    {      array_index = 0;      if ( index == 0 )        glyph_index = glyphID;      else        glyph_index = glyphID - gcrr[index - 1].End - 1;    }    else    {      array_index = index + 1;      glyph_index = glyphID - gcrr[index].End - 1;    }    byte  = ngc[array_index][glyph_index / 4 + 1];    bits  = byte >> ( 16 - ( glyph_index % 4 + 1 ) * 4 );    class = bits & 0x000F;    /* we don't overwrite existing entries */    if ( !class )    {      bits = new_class << ( 16 - ( glyph_index % 4 + 1 ) * 4 );      mask = ~( 0x000F << ( 16 - ( glyph_index % 4 + 1 ) * 4 ) );      ngc[array_index][glyph_index / 4 + 1] &= mask;      ngc[array_index][glyph_index / 4 + 1] |= bits;    }    return TT_Err_Ok;  }  TT_Error  Check_Property( TTO_GDEFHeader*  gdef,                            UShort           index,                            UShort           flags,                            UShort*          property )  {    TT_Error  error;    if ( gdef )    {      error = TT_GDEF_Get_Glyph_Property( gdef, index, property );      if ( error )        return error;      if ( flags & IGNORE_SPECIAL_MARKS )      {        /* This is OpenType 1.2 */        if ( (flags & 0xFF00) != *property )          return TTO_Err_Not_Covered;      }      else {        if ( flags & *property )          return TTO_Err_Not_Covered;      }    }    return TT_Err_Ok;  }/* END */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲宅男天堂在线观看无病毒| 欧美日韩国产精品自在自线| 国产亚洲精品中文字幕| 韩国av一区二区三区在线观看| 日韩欧美自拍偷拍| 国产自产视频一区二区三区| 国产拍欧美日韩视频二区| 成人精品电影在线观看| 一区二区免费视频| 欧美一区二区视频在线观看| 看片网站欧美日韩| 久久久久9999亚洲精品| 91香蕉视频在线| 三级亚洲高清视频| 久久久久九九视频| 91色综合久久久久婷婷| 日本欧美一区二区| 国产精品免费看片| 欧美视频中文一区二区三区在线观看| 日韩一区欧美二区| 欧美激情艳妇裸体舞| 欧美亚洲国产一卡| 国产精品99久久久久久似苏梦涵| 亚洲精选一二三| 精品三级在线看| 99久久99久久免费精品蜜臀| 日本视频免费一区| **欧美大码日韩| 91精品欧美久久久久久动漫 | 国产一区二区日韩精品| 亚洲欧美偷拍三级| 欧美zozozo| 欧美无砖砖区免费| 国产精品综合久久| 石原莉奈一区二区三区在线观看| 精品成人一区二区三区四区| 91小视频在线| 国产精品123区| 婷婷激情综合网| 亚洲少妇中出一区| 久久尤物电影视频在线观看| 在线观看中文字幕不卡| 成人激情av网| 精品亚洲成av人在线观看| 亚洲线精品一区二区三区| www欧美成人18+| 91精品久久久久久蜜臀| 欧美午夜在线观看| av不卡免费在线观看| 国产资源在线一区| 日韩成人一级片| 亚洲777理论| 日韩码欧中文字| 国产午夜精品理论片a级大结局| 欧美日韩黄色一区二区| 91美女蜜桃在线| 99v久久综合狠狠综合久久| 国产风韵犹存在线视精品| 日韩电影在线一区| 亚洲国产三级在线| 亚洲激情图片小说视频| 国产精品理伦片| 日本一区二区视频在线观看| 精品国产精品一区二区夜夜嗨| 欧美日韩dvd在线观看| 在线观看日韩国产| 在线观看免费成人| 欧美三级日本三级少妇99| 色综合久久久久综合99| 色综合色狠狠综合色| 91免费小视频| 91蜜桃在线观看| 91在线视频观看| 97se亚洲国产综合在线| 97精品视频在线观看自产线路二| 成人黄色网址在线观看| 成人av资源站| 91在线观看视频| 91丨九色丨国产丨porny| 91一区二区三区在线观看| 91美女精品福利| 色激情天天射综合网| 在线免费观看日本一区| 欧美亚洲动漫精品| 在线播放/欧美激情| 欧美一级黄色片| www久久久久| 国产精品女人毛片| 亚洲免费观看高清完整版在线| 亚洲欧美另类小说视频| 亚洲国产美女搞黄色| 三级亚洲高清视频| 国产乱码精品一区二区三区av| 床上的激情91.| 色女孩综合影院| 欧美肥大bbwbbw高潮| 欧美精品一区二区久久久| 中文字幕精品三区| 亚洲国产一区二区视频| 青娱乐精品视频| 国产成人在线网站| 日本久久电影网| 日韩欧美国产一区二区在线播放| 国产清纯在线一区二区www| 亚洲欧美一区二区三区国产精品| 亚洲大型综合色站| 精品无人码麻豆乱码1区2区| 成人久久视频在线观看| 欧美影视一区在线| 精品毛片乱码1区2区3区| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 夜夜精品浪潮av一区二区三区| 久久超碰97人人做人人爱| av网站一区二区三区| 欧美另类z0zxhd电影| 中文字幕精品—区二区四季| 亚洲一区精品在线| 国产白丝精品91爽爽久久| 欧美日韩视频在线观看一区二区三区| 精品国产乱码久久久久久浪潮| 亚洲同性gay激情无套| 人人精品人人爱| 91行情网站电视在线观看高清版| 精品久久久影院| 亚洲成人一区二区| 成人av综合一区| 精品久久人人做人人爽| 一区二区三区四区亚洲| 国产福利一区二区| 日韩欧美色电影| 依依成人精品视频| 国产成人精品亚洲日本在线桃色| 精品视频在线看| 亚洲日本在线视频观看| 国产精品一区免费视频| 欧美一级片免费看| 亚洲永久免费视频| 成人免费视频播放| 久久夜色精品一区| 麻豆一区二区在线| 欧美精品少妇一区二区三区| 伊人婷婷欧美激情| 成人av影院在线| 久久精品亚洲精品国产欧美 | 国产精品一区久久久久| 欧美丰满高潮xxxx喷水动漫| 怡红院av一区二区三区| 97久久人人超碰| 国产日韩v精品一区二区| 精品一区二区影视| 日韩三级高清在线| 免费看欧美美女黄的网站| 欧美日韩综合一区| 夜夜精品视频一区二区 | 国产精品人成在线观看免费| 激情综合色综合久久| 91精品国产免费| 日韩精品亚洲专区| 91精品国产综合久久国产大片| 亚洲专区一二三| 欧美色综合网站| 亚洲.国产.中文慕字在线| 欧美日韩另类国产亚洲欧美一级| 亚洲最色的网站| 欧美在线免费观看亚洲| 亚洲一区二区三区爽爽爽爽爽| 在线观看视频一区二区欧美日韩| 亚洲男人电影天堂| 91成人在线免费观看| 亚洲国产sm捆绑调教视频| 欧洲日韩一区二区三区| 亚洲在线视频网站| 欧美日本国产一区| 蜜臀av性久久久久蜜臀av麻豆| 日韩欧美一区二区免费| 国产一区美女在线| 亚洲国产精品高清| 91热门视频在线观看| 亚洲午夜在线观看视频在线| 宅男噜噜噜66一区二区66| 久久97超碰国产精品超碰| 久久久久久久久久久久久久久99| 国产成人h网站| 国产精品成人免费| 欧美午夜视频网站| 久久精品国内一区二区三区| 精品国产电影一区二区| 成人理论电影网| 亚洲一线二线三线视频| 91精品国产综合久久精品图片| 韩日av一区二区| 中文字幕一区免费在线观看 | 偷拍与自拍一区| 精品国精品自拍自在线| 成人高清免费观看| 亚洲国产精品久久艾草纯爱| 精品国产乱码久久久久久影片| 99久久久久免费精品国产| 亚洲成a人v欧美综合天堂下载| 久久综合久久综合久久综合|