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

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

?? ftxpost.c

?? 字體縮放顯示
?? C
字號:
/******************************************************************* * *  ftxpost.c * *    post table support API extension body * *  Copyright 1996-2002 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. * * *  The post table is not completely loaded by the core engine.  This *  file loads the missing PS glyph names and implements an API to *  access them. * ******************************************************************/#include "ftxpost.h"#include "tttypes.h"#include "ttobjs.h"#include "tttables.h"#include "ttload.h"     /* for the macros */#include "ttfile.h"#include "tttags.h"#include "ttmemory.h"#include "ttextend.h"#define POST_ID  Build_Extension_ID( 'p', 'o', 's', 't' )  /* the 258 default Mac PS glyph names */  String*  TT_Post_Default_Names[258] =  {    /*   0 */    ".notdef", ".null", "CR", "space", "exclam",    "quotedbl", "numbersign", "dollar", "percent", "ampersand",    /*  10 */    "quotesingle", "parenleft", "parenright", "asterisk", "plus",    "comma", "hyphen", "period", "slash", "zero",    /*  20 */    "one", "two", "three", "four", "five",    "six", "seven", "eight", "nine", "colon",    /*  30 */    "semicolon", "less", "equal", "greater", "question",    "at", "A", "B", "C", "D",    /*  40 */    "E", "F", "G", "H", "I",    "J", "K", "L", "M", "N",    /*  50 */    "O", "P", "Q", "R", "S",    "T", "U", "V", "W", "X",    /*  60 */    "Y", "Z", "bracketleft", "backslash", "bracketright",    "asciicircum", "underscore", "grave", "a", "b",    /*  70 */    "c", "d", "e", "f", "g",    "h", "i", "j", "k", "l",    /*  80 */    "m", "n", "o", "p", "q",    "r", "s", "t", "u", "v",    /*  90 */    "w", "x", "y", "z", "braceleft",    "bar", "braceright", "asciitilde", "Adieresis", "Aring",    /* 100 */    "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis",    "aacute", "agrave", "acircumflex", "adieresis", "atilde",    /* 110 */    "aring", "ccedilla", "eacute", "egrave", "ecircumflex",    "edieresis", "iacute", "igrave", "icircumflex", "idieresis",    /* 120 */    "ntilde", "oacute", "ograve", "ocircumflex", "odieresis",    "otilde", "uacute", "ugrave", "ucircumflex", "udieresis",    /* 130 */    "dagger", "degree", "cent", "sterling", "section",    "bullet", "paragraph", "germandbls", "registered", "copyright",    /* 140 */    "trademark", "acute", "dieresis", "notequal", "AE",    "Oslash", "infinity", "plusminus", "lessequal", "greaterequal",    /* 150 */    "yen", "mu", "partialdiff", "summation", "product",    "pi", "integral", "ordfeminine", "ordmasculine", "Omega",    /* 160 */    "ae", "oslash", "questiondown", "exclamdown", "logicalnot",    "radical", "florin", "approxequal", "Delta", "guillemotleft",    /* 170 */    "guillemotright", "ellipsis", "nbspace", "Agrave", "Atilde",    "Otilde", "OE", "oe", "endash", "emdash",    /* 180 */    "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide",    "lozenge", "ydieresis", "Ydieresis", "fraction", "currency",    /* 190 */    "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl",    "periodcentered", "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex",    /* 200 */    "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute",    "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex",    /* 210 */    "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave",    "dotlessi", "circumflex", "tilde", "macron", "breve",    /* 220 */    "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek",    "caron", "Lslash", "lslash", "Scaron", "scaron",    /* 230 */    "Zcaron", "zcaron", "brokenbar", "Eth", "eth",    "Yacute", "yacute", "Thorn", "thorn", "minus",    /* 240 */    "multiply", "onesuperior", "twosuperior", "threesuperior", "onehalf",    "onequarter", "threequarters", "franc", "Gbreve", "gbreve",    /* 250 */    "Idot", "Scedilla", "scedilla", "Cacute", "cacute",    "Ccaron", "ccaron", "dmacron",  };  static TT_Error  Load_Format_20( TT_Post_20*  post20,                                   PFace        input )  {    DEFINE_LOAD_LOCALS( input->stream );    UShort  n, num_glyphs, num_names;    Byte    len;    if ( ACCESS_Frame( 2L ) )      return error;    num_glyphs = GET_UShort();    FORGET_Frame();    /* UNDOCUMENTED!  The number of glyphs in this table can be smaller */    /* than the value in the maxp table (cf. cyberbit.ttf).             */    /* There already exist fonts which have more than 32768 glyph names */    /* in this table, so the test for this threshold has been dropped.  */    if ( num_glyphs > input->numGlyphs )      return TT_Err_Invalid_Post_Table;    post20->numGlyphs = num_glyphs;    /* load the indices */    if ( ALLOC_ARRAY( post20->glyphNameIndex, num_glyphs, TT_UShort ) )      return error;    if ( ACCESS_Frame( num_glyphs * 2L ) )      goto Fail;    for ( n = 0; n < num_glyphs; n++ )    {      post20->glyphNameIndex[n] = GET_UShort();    }    FORGET_Frame();    /* compute number of names stored in table */    num_names = 0;    for ( n = 0; n < num_glyphs; n++ )    {      UShort  idx;      idx = post20->glyphNameIndex[n];      if ( idx >= 258 )      {        idx -= 257;#if 0 /* FIXME This test has been dropped in Freetype 2. Why? */        if ( idx > num_glyphs )        {          error = TT_Err_Invalid_Post_Table;          goto Fail;        }#endif        if ( idx > num_names )          num_names = idx;      }    }    post20->numNames = num_names;    if ( num_names == 0 )                       /* nothing more to do */      return TT_Err_Ok;    /* now load the name strings */    if ( ALLOC_ARRAY( post20->glyphNames, num_names, Char* ) )      goto Fail;    /* We must initialize the glyphNames array for proper */    /* deallocation.                                      */    /* FIXME  is it still really needed?                  */    for ( n = 0; n < num_names; n++ )      post20->glyphNames[n] = NULL;    /* Now we can read the glyph names which are stored in */    /* Pascal string format.                               */    for ( n = 0; n < num_names; n++ )    {      if ( ACCESS_Frame( 1L ) )        goto Fail1;      len = GET_Byte();      FORGET_Frame();      if ( ALLOC_ARRAY( post20->glyphNames[n], len + 1, Char ) ||           FILE_Read( post20->glyphNames[n], len ) )        goto Fail1;      /* we make a C string */      post20->glyphNames[n][len] = '\0';    }    return TT_Err_Ok;  Fail1:    for ( n = 0; n < num_names; n++ )      if ( post20->glyphNames[n] )        FREE( post20->glyphNames[n] );    FREE( post20->glyphNames );  Fail:    FREE( post20->glyphNameIndex );    return error;  }  static TT_Error  Load_Format_25( TT_Post_25*  post25,                                   PFace        input )  {    DEFINE_LOAD_LOCALS( input->stream );    UShort  n, num;    if ( ACCESS_Frame( 2L ) )      return error;    /* UNDOCUMENTED!  This value appears only in the Apple TT specs. */    num = GET_UShort();    FORGET_Frame();    if ( num > input->numGlyphs || num > 258 )      return TT_Err_Invalid_Post_Table;    post25->numGlyphs = num;    if ( ALLOC_ARRAY( post25->offset, num, Char ) )      return error;    if ( ACCESS_Frame( num ) )      goto Fail;    for ( n = 0; n < num; n++ )    {      post25->offset[n] = GET_Char();      /* We add 128 to the tests to avoid problems with negative */      /* values for comparison.                                  */      if ( n + ( post25->offset[n] + 128 ) > num + 128 ||           n + ( post25->offset[n] + 128 ) < 128 )      {        FORGET_Frame();        error = TT_Err_Invalid_Post_Table;        goto Fail;      }    }    FORGET_Frame();    return TT_Err_Ok;  Fail:    FREE( post25->offset );    return error;  }  static TT_Error  Post_Create( void*  ext,                                PFace  face )  {    TT_Post*  post = (TT_Post*)ext;    Long      table;    /* by convention */    if ( !post )      return TT_Err_Ok;    /* we store the start offset and the size of the subtable */    table = TT_LookUp_Table( face, TTAG_post );    post->offset = face->dirTables[table].Offset + 32L;    post->length = face->dirTables[table].Length - 32L;    post->loaded = FALSE;    return TT_Err_Ok;  }  static TT_Error  Post_Destroy( void*  ext,                                 PFace  face )  {    TT_Post*  post = (TT_Post*)ext;    UShort    n;    /* by convention */    if ( !post )      return TT_Err_Ok;    if ( post->loaded )    {      switch ( face->postscript.FormatType )      {      case 0x00010000:          /* nothing to do */        break;      case 0x00020000:        if ( post->p.post20.numNames )        {          for ( n = 0; n < post->p.post20.numNames; n++ )            if ( post->p.post20.glyphNames[n] )              FREE( post->p.post20.glyphNames[n] );          FREE( post->p.post20.glyphNames );        }        FREE( post->p.post20.glyphNameIndex );        break;      case 0x00028000:        FREE( post->p.post25.offset );        break;      case 0x00030000:          /* nothing to do */        break;#if 0      case 0x00040000:        break;#endif      default:        ;                       /* invalid format, do nothing */      }    }    return TT_Err_Ok;  }  FT_EXPORT_FUNC( TT_Error )  TT_Init_Post_Extension( TT_Engine  engine )  {    PEngine_Instance  _engine = HANDLE_Engine( engine );    TT_Error  error;    if ( !_engine )      return TT_Err_Invalid_Engine;    error = TT_Register_Extension( _engine,                                   POST_ID,                                   sizeof ( TT_Post ),                                   Post_Create,                                   Post_Destroy );    return error;  }/******************************************************************* * *  Function    :  TT_Load_PS_Names * *  Description :  Loads the PostScript Glyph Name subtable (if any). * *  Output :  error code * ******************************************************************/  FT_EXPORT_FUNC( TT_Error )  TT_Load_PS_Names( TT_Face   face,                    TT_Post*  ppost )  {    PFace      faze = HANDLE_Face( face );    TT_Error   error;    TT_Stream  stream;    TT_Post*   post;    if ( !faze )      return TT_Err_Invalid_Face_Handle;    error = TT_Extension_Get( faze, POST_ID, (void**)&post );    if ( error )      return error;    if ( USE_Stream( faze->stream, stream ) )      return error;    switch ( faze->postscript.FormatType )    {    case 0x00010000:      error = TT_Err_Ok;            /* nothing to do */      break;    case 0x00020000:      if ( FILE_Seek( post->offset ) )        goto Fail;      error = Load_Format_20( &post->p.post20, faze );      break;    case 0x00028000:                /* 2.5 in 16.16 format */      if ( FILE_Seek( post->offset ) )        goto Fail;      error = Load_Format_25( &post->p.post25, faze );      break;    case 0x00030000:      error = TT_Err_Ok;            /* nothing to do */      break;#if 0    case 0x00040000:      break;#endif    default:      error = TT_Err_Invalid_Post_Table_Format;      break;    }    if ( !error )    {      post->loaded = TRUE;      *ppost = *post;    }  Fail:    DONE_Stream( stream );    return error;  }/******************************************************************* * *  Function    :  TT_Get_PS_Name * *  Description :  Gets the PostScript Glyph Name of a glyph. * *  Input  :  index     glyph index *            PSname    address of a string pointer. *                      Will be NULL in case of error; otherwise it *                      contains a pointer to the glyph name. * *                      You must not modify the returned string! * *  Output :  error code * ******************************************************************/  FT_EXPORT_FUNC( TT_Error )  TT_Get_PS_Name( TT_Face      face,                  TT_UShort    index,                  TT_String**  PSname )  {    PFace     faze = HANDLE_Face( face );    TT_Error  error;    TT_Post*  post;    UShort    nameindex;    if ( !faze )      return TT_Err_Invalid_Face_Handle;    if ( index >= faze->numGlyphs )      return TT_Err_Invalid_Glyph_Index;    error = TT_Extension_Get( faze, POST_ID, (void**)&post );    if ( error )      return error;    *PSname = TT_Post_Default_Names[0];         /* default value */    switch ( faze->postscript.FormatType )    {    case 0x00010000:      if ( index < 258 )                        /* paranoid checking */        *PSname = TT_Post_Default_Names[index];      break;    case 0x00020000:      if ( index < post->p.post20.numGlyphs )        nameindex = post->p.post20.glyphNameIndex[index];      else        break;      if ( nameindex < 258 )        *PSname = TT_Post_Default_Names[nameindex];      else        *PSname = (String*)post->p.post20.glyphNames[nameindex - 258];      break;    case 0x00028000:      if ( index < post->p.post25.numGlyphs )   /* paranoid checking */        *PSname = TT_Post_Default_Names[index + post->p.post25.offset[index]];      break;    case 0x00030000:      break;                                    /* nothing to do */#if 0    case 0x00040000:      break;#endif    default:      ;                                         /* should never happen */    }    return TT_Err_Ok;  }/* END */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久88久久88久久久| 日韩欧美国产一二三区| 91精品国产麻豆国产自产在线 | 欧美激情一区三区| 丝袜诱惑亚洲看片| 色欧美日韩亚洲| 国产精品色噜噜| 精品在线视频一区| 欧美丰满一区二区免费视频| 亚洲免费看黄网站| 国产999精品久久| 26uuu国产在线精品一区二区| 亚洲小说欧美激情另类| 91色九色蝌蚪| 国产精品久久久久永久免费观看| 国内成人免费视频| 日韩女优av电影在线观看| 亚洲大尺度视频在线观看| 97超碰欧美中文字幕| 欧美极品xxx| 成人av在线一区二区| 国产精品无遮挡| 99久久国产综合精品色伊| 日本一区二区成人在线| 成人性生交大片免费看中文| 亚洲国产精品黑人久久久| 国产一区二区美女| 国产日产精品一区| 成人免费看片app下载| 中文字幕乱码日本亚洲一区二区| 成人午夜免费电影| 国产精品青草久久| 91老司机福利 在线| 最新日韩在线视频| 91久久人澡人人添人人爽欧美| 亚洲精品老司机| 久久久久久久久久久99999| 奇米影视一区二区三区| 色综合一区二区| 国产亚洲综合av| 国产伦精品一区二区三区视频青涩 | 国产精品短视频| 国产精品一区三区| 国产日产欧美一区| 91丝袜美腿高跟国产极品老师| 国产视频一区二区在线| 国产a视频精品免费观看| 亚洲国产激情av| 91高清视频免费看| 美国一区二区三区在线播放| 精品国产精品网麻豆系列| 精品亚洲国产成人av制服丝袜| 久久久99久久| 色婷婷国产精品综合在线观看| 日日摸夜夜添夜夜添国产精品| 日韩女优av电影| av在线播放成人| 三级成人在线视频| 久久精品一区蜜桃臀影院| 99这里只有精品| 偷拍亚洲欧洲综合| 久久久久久麻豆| 色国产综合视频| 久久国产精品72免费观看| 国产亚洲一二三区| 欧美日韩二区三区| 高清不卡一区二区在线| 亚洲电影你懂得| 欧美极品少妇xxxxⅹ高跟鞋 | 69堂精品视频| 99热精品一区二区| 日韩av在线发布| 亚洲欧美激情小说另类| 日韩午夜在线播放| 一本一道久久a久久精品综合蜜臀| 美脚の诱脚舐め脚责91 | 99精品国产91久久久久久| 视频一区欧美日韩| 自拍偷拍亚洲欧美日韩| 精品91自产拍在线观看一区| 在线观看亚洲精品| 成人综合婷婷国产精品久久| 日韩国产欧美三级| 亚洲欧美aⅴ...| 久久久久久97三级| 欧美一区在线视频| 日本精品一区二区三区高清 | 国产自产视频一区二区三区| 一级中文字幕一区二区| 国产免费成人在线视频| 51久久夜色精品国产麻豆| 91看片淫黄大片一级在线观看| 精品在线播放免费| 日韩电影在线免费观看| 亚洲一区二区三区自拍| 国产精品久线在线观看| 久久精品免费在线观看| 精品三级在线看| 欧美一区二区三区在线视频| 91国偷自产一区二区三区观看 | 欧美片网站yy| 91国产免费观看| 色综合中文综合网| 久久久一区二区三区捆绑**| 欧美群妇大交群的观看方式| 欧美在线999| 91在线精品一区二区三区| 高清不卡一区二区| 国内精品久久久久影院薰衣草| 麻豆成人av在线| 美女视频黄久久| 蜜桃av一区二区三区电影| 日韩中文字幕1| 日韩精品免费专区| 免费成人你懂的| 久久疯狂做爰流白浆xx| 久色婷婷小香蕉久久| 极品美女销魂一区二区三区| 国产自产2019最新不卡| 国产精品中文欧美| 成人网在线播放| av资源网一区| 91黄色免费看| 在线电影院国产精品| 日韩欧美在线观看一区二区三区| 日韩视频免费观看高清在线视频| 精品国产精品网麻豆系列| 欧美韩日一区二区三区四区| 亚洲丝袜精品丝袜在线| 一区二区在线观看视频在线观看| 一区二区三区四区蜜桃| 日韩国产欧美在线播放| 精品一区二区三区日韩| 成人理论电影网| 一本大道综合伊人精品热热| 欧美日韩一区二区三区免费看| 91麻豆精品91久久久久久清纯 | 亚洲欧洲av在线| 亚洲丝袜精品丝袜在线| 亚洲成在人线免费| 精品无人区卡一卡二卡三乱码免费卡| 国产精品一区二区三区乱码| 91免费观看视频在线| 这里只有精品免费| 国产欧美一区二区精品忘忧草 | 中文字幕一区二区三区视频| 一区二区高清视频在线观看| 久久91精品国产91久久小草| 成人黄色小视频| 91精品国产综合久久久久| 国产欧美日韩激情| 偷拍日韩校园综合在线| 粉嫩一区二区三区在线看| 91成人在线观看喷潮| 精品久久久久久久久久久久包黑料 | 国产日韩欧美激情| 亚洲人成小说网站色在线 | 国产精品日韩成人| 亚洲一区二区成人在线观看| 久久99精品视频| 欧美在线|欧美| 国产精品伦一区二区三级视频| 日本亚洲视频在线| 一本色道久久综合亚洲aⅴ蜜桃 | 欧美一区二区不卡视频| 国产精品久久久久久久第一福利| 日韩精品三区四区| 色综合一区二区| 中文一区二区完整视频在线观看| 日韩不卡一区二区| 色呦呦网站一区| 亚洲国产精品国自产拍av| 美女一区二区视频| 色哟哟一区二区三区| 久久久国产精品麻豆| 久久精品国产一区二区| 欧美日韩国产综合一区二区| ㊣最新国产の精品bt伙计久久| 国产高清不卡一区| 精品免费日韩av| 蜜臀av一区二区在线观看| 欧美日韩国产bt| 一区二区三区在线影院| av电影在线观看完整版一区二区| 久久夜色精品一区| 久久99精品久久久久久久久久久久| 欧美在线看片a免费观看| 亚洲欧美日韩久久| 91在线国内视频| 成人欧美一区二区三区小说| 国产成人免费av在线| 国产日韩综合av| 国产精品77777| 26uuu色噜噜精品一区| 麻豆91精品91久久久的内涵| 欧美成va人片在线观看| 日韩va欧美va亚洲va久久| 欧美一区二区视频网站| 另类调教123区| 精品粉嫩超白一线天av|