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

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

?? t1load.c

?? a very goog book
?? C
?? 第 1 頁 / 共 4 頁
字號:
          error = T1_Add_Table( code_table, n, base, size );        if ( error )          goto Fail;        n++;        if ( n >= loader->num_glyphs )          break;      }    }    loader->num_glyphs = n;    /* if /.notdef is found but does not occupy index 0, do our magic.      */    if ( ft_strcmp( (const char*)".notdef",                    (const char*)name_table->elements[0] ) &&         notdef_found                                      )    {      /* Swap glyph in index 0 with /.notdef glyph.  First, add index 0    */      /* name and code entries to swap_table. Then place notdef_index name */      /* and code entries into swap_table.  Then swap name and code        */      /* entries at indices notdef_index and 0 using values stored in      */      /* swap_table.                                                       */      /* Index 0 name */      error = T1_Add_Table( swap_table, 0,                            name_table->elements[0],                            name_table->lengths [0] );      if ( error )        goto Fail;      /* Index 0 code */      error = T1_Add_Table( swap_table, 1,                            code_table->elements[0],                            code_table->lengths [0] );      if ( error )        goto Fail;      /* Index notdef_index name */      error = T1_Add_Table( swap_table, 2,                            name_table->elements[notdef_index],                            name_table->lengths [notdef_index] );      if ( error )        goto Fail;      /* Index notdef_index code */      error = T1_Add_Table( swap_table, 3,                            code_table->elements[notdef_index],                            code_table->lengths [notdef_index] );      if ( error )        goto Fail;      error = T1_Add_Table( name_table, notdef_index,                            swap_table->elements[0],                            swap_table->lengths [0] );      if ( error )        goto Fail;      error = T1_Add_Table( code_table, notdef_index,                            swap_table->elements[1],                            swap_table->lengths [1] );      if ( error )        goto Fail;      error = T1_Add_Table( name_table, 0,                            swap_table->elements[2],                            swap_table->lengths [2] );      if ( error )        goto Fail;      error = T1_Add_Table( code_table, 0,                            swap_table->elements[3],                            swap_table->lengths [3] );      if ( error )        goto Fail;    }    else if ( !notdef_found )    {      /* notdef_index is already 0, or /.notdef is undefined in   */      /* charstrings dictionary.  Worry about /.notdef undefined. */      /* We take index 0 and add it to the end of the table(s)    */      /* and add our own /.notdef glyph to index 0.               */      /* 0 333 hsbw endchar                                      */      FT_Byte  notdef_glyph[] = {0x8B, 0xF7, 0xE1, 0x0D, 0x0E};      char*    notdef_name    = (char *)".notdef";      error = T1_Add_Table( swap_table, 0,                            name_table->elements[0],                            name_table->lengths [0] );      if ( error )        goto Fail;      error = T1_Add_Table( swap_table, 1,                            code_table->elements[0],                            code_table->lengths [0] );      if ( error )        goto Fail;      error = T1_Add_Table( name_table, 0, notdef_name, 8 );      if ( error )        goto Fail;      error = T1_Add_Table( code_table, 0, notdef_glyph, 5 );      if ( error )        goto Fail;      error = T1_Add_Table( name_table, n,                            swap_table->elements[0],                            swap_table->lengths [0] );      if ( error )        goto Fail;      error = T1_Add_Table( code_table, n,                            swap_table->elements[1],                            swap_table->lengths [1] );      if ( error )        goto Fail;      /* we added a glyph. */      loader->num_glyphs = n + 1;    }    return;  Fail:    parser->root.error = error;  }  static  const T1_FieldRec  t1_keywords[] =  {#include "t1tokens.h"    /* now add the special functions... */    T1_FIELD_CALLBACK( "FontName", parse_font_name )    T1_FIELD_CALLBACK( "FontBBox", parse_font_bbox )    T1_FIELD_CALLBACK( "FontMatrix", parse_font_matrix )    T1_FIELD_CALLBACK( "Encoding", parse_encoding )    T1_FIELD_CALLBACK( "Subrs", parse_subrs )    T1_FIELD_CALLBACK( "CharStrings", parse_charstrings )#ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT    T1_FIELD_CALLBACK( "BlendDesignPositions", parse_blend_design_positions )    T1_FIELD_CALLBACK( "BlendDesignMap", parse_blend_design_map )    T1_FIELD_CALLBACK( "BlendAxisTypes", parse_blend_axis_types )    T1_FIELD_CALLBACK( "WeightVector", parse_weight_vector )    T1_FIELD_CALLBACK( "shareddict", parse_shared_dict )#endif    { 0, T1_FIELD_LOCATION_CID_INFO, T1_FIELD_TYPE_NONE, 0, 0, 0, 0, 0 }  };  static FT_Error  parse_dict( T1_Face    face,              T1_Loader  loader,              FT_Byte*   base,              FT_Long    size )  {    T1_Parser  parser = &loader->parser;    parser->root.cursor = base;    parser->root.limit  = base + size;    parser->root.error  = 0;    {      FT_Byte*  cur   = base;      FT_Byte*  limit = cur + size;      for ( ; cur < limit; cur++ )      {        /* look for `FontDirectory', which causes problems on some fonts */        if ( *cur == 'F' && cur + 25 < limit                    &&             ft_strncmp( (char*)cur, "FontDirectory", 13 ) == 0 )        {          FT_Byte*  cur2;          /* skip the `FontDirectory' keyword */          cur += 13;          cur2 = cur;          /* lookup the `known' keyword */          while ( cur < limit && *cur != 'k'           &&                  ft_strncmp( (char*)cur, "known", 5 ) )            cur++;          if ( cur < limit )          {            T1_TokenRec  token;            /* skip the `known' keyword and the token following it */            cur += 5;            loader->parser.root.cursor = cur;            T1_ToToken( &loader->parser, &token );            /* if the last token was an array, skip it! */            if ( token.type == T1_TOKEN_TYPE_ARRAY )              cur2 = parser->root.cursor;          }          cur = cur2;        }        /* look for immediates */        else if ( *cur == '/' && cur + 2 < limit )        {          FT_Byte*  cur2;          FT_Int    len;          cur++;          cur2 = cur;          while ( cur2 < limit && is_alpha( *cur2 ) )            cur2++;          len  = (FT_Int)( cur2 - cur );          if ( len > 0 && len < 22 )          {            {              /* now, compare the immediate name to the keyword table */              T1_Field  keyword = (T1_Field)t1_keywords;              for (;;)              {                FT_Byte*  name;                name = (FT_Byte*)keyword->ident;                if ( !name )                  break;                if ( cur[0] == name[0]                             &&                     len == (FT_Int)ft_strlen( (const char*)name ) )                {                  FT_Int  n;                  for ( n = 1; n < len; n++ )                    if ( cur[n] != name[n] )                      break;                  if ( n >= len )                  {                    /* we found it -- run the parsing callback! */                    parser->root.cursor = cur2;                    T1_Skip_Spaces( parser );                    parser->root.error = t1_load_keyword( face,                                                          loader,                                                          keyword );                    if ( parser->root.error )                      return parser->root.error;                    cur = parser->root.cursor;                    break;                  }                }                keyword++;              }            }          }        }      }    }    return parser->root.error;  }  static void  t1_init_loader( T1_Loader  loader,                  T1_Face    face )  {    FT_UNUSED( face );    FT_MEM_SET( loader, 0, sizeof ( *loader ) );    loader->num_glyphs = 0;    loader->num_chars  = 0;    /* initialize the tables -- simply set their `init' field to 0 */    loader->encoding_table.init = 0;    loader->charstrings.init    = 0;    loader->glyph_names.init    = 0;    loader->subrs.init          = 0;    loader->swap_table.init     = 0;    loader->fontdata            = 0;  }  static void  t1_done_loader( T1_Loader  loader )  {    T1_Parser  parser = &loader->parser;    /* finalize tables */    T1_Release_Table( &loader->encoding_table );    T1_Release_Table( &loader->charstrings );    T1_Release_Table( &loader->glyph_names );    T1_Release_Table( &loader->swap_table );    T1_Release_Table( &loader->subrs );    /* finalize parser */    T1_Finalize_Parser( parser );  }  FT_LOCAL_DEF( FT_Error )  T1_Open_Face( T1_Face  face )  {    T1_LoaderRec   loader;    T1_Parser      parser;    T1_Font        type1 = &face->type1;    FT_Error       error;    PSAux_Service  psaux = (PSAux_Service)face->psaux;    t1_init_loader( &loader, face );    /* default lenIV */    type1->private_dict.lenIV = 4;    parser = &loader.parser;    error  = T1_New_Parser( parser,                            face->root.stream,                            face->root.memory,                            psaux );    if ( error )      goto Exit;    error = parse_dict( face, &loader, parser->base_dict, parser->base_len );    if ( error )      goto Exit;    error = T1_Get_Private_Dict( parser, psaux );    if ( error )      goto Exit;    error = parse_dict( face, &loader, parser->private_dict,                        parser->private_len );    if ( error )      goto Exit;    /* now, propagate the subrs, charstrings, and glyphnames tables */    /* to the Type1 data                                            */    type1->num_glyphs = loader.num_glyphs;    if ( loader.subrs.init )    {      loader.subrs.init  = 0;      type1->num_subrs   = loader.num_subrs;      type1->subrs_block = loader.subrs.block;      type1->subrs       = loader.subrs.elements;      type1->subrs_len   = loader.subrs.lengths;    }    if ( !loader.charstrings.init )    {      FT_ERROR(( "T1_Open_Face: no charstrings array in face!\n" ));      error = T1_Err_Invalid_File_Format;    }    loader.charstrings.init  = 0;    type1->charstrings_block = loader.charstrings.block;    type1->charstrings       = loader.charstrings.elements;    type1->charstrings_len   = loader.charstrings.lengths;    /* we copy the glyph names `block' and `elements' fields; */    /* the `lengths' field must be released later             */    type1->glyph_names_block    = loader.glyph_names.block;    type1->glyph_names          = (FT_String**)loader.glyph_names.elements;    loader.glyph_names.block    = 0;    loader.glyph_names.elements = 0;    /* we must now build type1.encoding when we have a custom array */    if ( type1->encoding_type == T1_ENCODING_TYPE_ARRAY )    {      FT_Int    charcode, idx, min_char, max_char;      FT_Byte*  char_name;      FT_Byte*  glyph_name;      /* OK, we do the following: for each element in the encoding  */      /* table, look up the index of the glyph having the same name */      /* the index is then stored in type1.encoding.char_index, and */      /* a the name to type1.encoding.char_name                     */      min_char = +32000;      max_char = -32000;      charcode = 0;      for ( ; charcode < loader.encoding_table.max_elems; charcode++ )      {        type1->encoding.char_index[charcode] = 0;        type1->encoding.char_name [charcode] = (char *)".notdef";        char_name = loader.encoding_table.elements[charcode];        if ( char_name )          for ( idx = 0; idx < type1->num_glyphs; idx++ )          {            glyph_name = (FT_Byte*)type1->glyph_names[idx];            if ( ft_strcmp( (const char*)char_name,                            (const char*)glyph_name ) == 0 )            {              type1->encoding.char_index[charcode] = (FT_UShort)idx;              type1->encoding.char_name [charcode] = (char*)glyph_name;              /* Change min/max encoded char only if glyph name is */              /* not /.notdef                                      */              if ( ft_strcmp( (const char*)".notdef",                              (const char*)glyph_name ) != 0 )              {                if ( charcode < min_char ) min_char = charcode;                if ( charcode > max_char ) max_char = charcode;              }              break;            }          }      }      type1->encoding.code_first = min_char;      type1->encoding.code_last  = max_char;      type1->encoding.num_chars  = loader.num_chars;    }  Exit:    t1_done_loader( &loader );    return error;  }/* END */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情综合网激情| 丁香天五香天堂综合| 久久婷婷综合激情| 91蜜桃在线免费视频| 久草热8精品视频在线观看| 亚洲欧美aⅴ...| 精品99999| 欧美福利电影网| 91色在线porny| 国产精品伊人色| 日韩和欧美一区二区| 成人欧美一区二区三区1314| 精品人伦一区二区色婷婷| 91久久精品一区二区三区| 国产精品影视在线观看| 蜜臀久久99精品久久久久久9| 亚洲精选免费视频| 国产精品视频你懂的| 久久久久久影视| 日韩午夜精品电影| 欧美精品精品一区| 欧美亚洲国产一卡| 色婷婷久久99综合精品jk白丝| 风间由美中文字幕在线看视频国产欧美| 日韩国产高清影视| 日韩福利电影在线观看| 午夜视频久久久久久| 亚洲国产日韩av| 伊人婷婷欧美激情| 国产成人夜色高潮福利影视| 久99久精品视频免费观看| 日韩不卡手机在线v区| 亚洲第一综合色| 亚洲国产精品人人做人人爽| 一区二区欧美在线观看| 亚洲精品中文在线影院| 亚洲欧美一区二区三区国产精品 | 色哟哟在线观看一区二区三区| 成人免费高清视频| 成人免费看黄yyy456| 国产不卡视频一区二区三区| 国产成a人亚洲精| 成人美女在线观看| 91色九色蝌蚪| 欧美视频一二三区| 在线观看欧美日本| 欧美日韩一区二区三区高清| 欧美精品久久久久久久多人混战 | 国产美女在线精品| 国产成人免费网站| 成人av在线资源网站| 懂色一区二区三区免费观看| 国产91精品入口| 国产亚洲一本大道中文在线| 国产目拍亚洲精品99久久精品| 国产精品五月天| 亚洲欧美另类久久久精品2019| 一区二区久久久久| 日韩黄色片在线观看| 国产一区在线视频| 成人免费视频一区二区| 色综合久久久久综合体桃花网| 欧美在线啊v一区| 5566中文字幕一区二区电影| 精品女同一区二区| 亚洲国产高清不卡| 亚洲一区中文日韩| 美女视频网站久久| 不卡一区二区在线| 欧美日韩一区二区在线观看 | 久久成人麻豆午夜电影| 国产乱人伦精品一区二区在线观看 | 亚洲精品成人在线| 亚洲成人福利片| 国产一区视频网站| 色综合久久中文字幕| 在线综合+亚洲+欧美中文字幕| 久久久久久夜精品精品免费| 亚洲激情一二三区| 精品制服美女丁香| 91蝌蚪porny九色| 日韩三级高清在线| 日韩美女精品在线| 蜜桃视频免费观看一区| 91一区二区三区在线观看| 在线综合+亚洲+欧美中文字幕| 中文字幕不卡在线| 午夜精品久久久| 成人精品鲁一区一区二区| 91精品福利视频| 久久久久久久久久电影| 亚洲一区视频在线| 粉嫩嫩av羞羞动漫久久久| 91精品国产入口在线| 一区在线中文字幕| 另类小说图片综合网| 日本二三区不卡| 欧美国产亚洲另类动漫| 日韩精品欧美成人高清一区二区| 成人久久18免费网站麻豆| 欧美一级欧美三级| 亚洲精品成a人| 国产成人一区二区精品非洲| 91精品久久久久久蜜臀| 亚洲女人的天堂| 国产成人在线免费观看| 日韩女优制服丝袜电影| 亚洲激情男女视频| 成人av中文字幕| 久久久久久97三级| 裸体健美xxxx欧美裸体表演| 在线免费观看不卡av| 国产精品久久午夜| 国产精品中文字幕日韩精品| 777午夜精品免费视频| 亚洲美女在线一区| 成人一二三区视频| 久久久三级国产网站| 精品综合久久久久久8888| 欧美日本一区二区在线观看| 亚洲三级电影网站| 9l国产精品久久久久麻豆| 久久久亚洲综合| 国产剧情一区二区| 日韩欧美在线综合网| 日日夜夜精品视频免费| 欧美视频一区二| 午夜精品爽啪视频| 欧美日韩国产色站一区二区三区| 夜色激情一区二区| 在线观看免费视频综合| 亚洲综合清纯丝袜自拍| 欧美中文字幕久久| 亚洲一区二区三区在线| 欧美日韩在线播| 性欧美大战久久久久久久久| 欧美日韩综合一区| 天天影视网天天综合色在线播放| 欧美日韩精品欧美日韩精品| 亚洲高清免费观看高清完整版在线观看| 色天使色偷偷av一区二区| 亚洲精品国产a| 欧美系列一区二区| 婷婷夜色潮精品综合在线| 欧美日本在线播放| 麻豆久久久久久久| 久久精品一区蜜桃臀影院| 成人午夜碰碰视频| 成人欧美一区二区三区白人| 色综合色综合色综合| 亚洲成a人片在线不卡一二三区| 欧美挠脚心视频网站| 日本视频一区二区| 精品国产一区二区三区久久影院| 国内成人自拍视频| 国产精品视频一二三区| 在线观看中文字幕不卡| 日韩精品五月天| 久久精品欧美一区二区三区不卡| 成人视屏免费看| 亚洲综合在线第一页| 欧美一区中文字幕| 国产成人a级片| 亚洲免费观看高清完整版在线观看熊 | 国产色爱av资源综合区| 99热精品一区二区| 性久久久久久久久久久久| 精品久久一区二区| av不卡免费在线观看| 日韩电影在线观看电影| 日本一区二区视频在线| 一本一道久久a久久精品综合蜜臀| 午夜视频一区在线观看| 久久久午夜电影| 欧美视频一区二区三区四区| 九九精品一区二区| 亚洲精品中文在线观看| 精品免费日韩av| 一本大道久久a久久综合婷婷| 日本成人在线看| 国产精品久久网站| 日韩限制级电影在线观看| 91在线丨porny丨国产| 免费在线观看精品| 亚洲视频一二区| 日韩欧美国产综合一区| 91视频com| 国产一区二区三区四| 午夜精品一区在线观看| 国产精品国产三级国产aⅴ入口| 欧美日韩国产一级| 波多野结衣在线一区| 青青青爽久久午夜综合久久午夜| 国产精品久久久久一区二区三区 | 久久综合成人精品亚洲另类欧美| 欧美在线免费观看视频| 东方aⅴ免费观看久久av| 视频一区二区中文字幕| 综合电影一区二区三区 | 亚洲另类在线一区|