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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? t1load.c

?? a very goog book
?? C
?? 第 1 頁 / 共 4 頁
字號:
                     T1_Loader  loader )  {    T1_Parser   parser = &loader->parser;    FT_Matrix*  matrix = &face->type1.font_matrix;    FT_Vector*  offset = &face->type1.font_offset;    FT_Face     root   = (FT_Face)&face->root;    FT_Fixed    temp[6];    FT_Fixed    temp_scale;    if ( matrix->xx || matrix->yx )      /* with synthetic fonts, it's possible we get here twice  */      return;    (void)T1_ToFixedArray( parser, 6, temp, 3 );    temp_scale = ABS( temp[3] );    /* Set Units per EM based on FontMatrix values.  We set the value to */    /* 1000 / temp_scale, because temp_scale was already multiplied by   */    /* 1000 (in t1_tofixed, from psobjs.c).                              */    root->units_per_EM = (FT_UShort)( FT_DivFix( 1000 * 0x10000L,                                                 temp_scale ) >> 16 );    /* we need to scale the values by 1.0/temp_scale */    if ( temp_scale != 0x10000L )    {      temp[0] = FT_DivFix( temp[0], temp_scale );      temp[1] = FT_DivFix( temp[1], temp_scale );      temp[2] = FT_DivFix( temp[2], temp_scale );      temp[4] = FT_DivFix( temp[4], temp_scale );      temp[5] = FT_DivFix( temp[5], temp_scale );      temp[3] = 0x10000L;    }    matrix->xx = temp[0];    matrix->yx = temp[1];    matrix->xy = temp[2];    matrix->yy = temp[3];    /* note that the offsets must be expressed in integer font units */    offset->x  = temp[4] >> 16;    offset->y  = temp[5] >> 16;  }  static void  parse_encoding( T1_Face    face,                  T1_Loader  loader )  {    T1_Parser      parser = &loader->parser;    FT_Byte*       cur    = parser->root.cursor;    FT_Byte*       limit  = parser->root.limit;    PSAux_Service  psaux  = (PSAux_Service)face->psaux;    /* skip whitespace */    while ( is_space( *cur ) )    {      cur++;      if ( cur >= limit )      {        FT_ERROR(( "parse_encoding: out of bounds!\n" ));        parser->root.error = T1_Err_Invalid_File_Format;        return;      }    }    /* if we have a number, then the encoding is an array, */    /* and we must load it now                             */    if ( (FT_Byte)( *cur - '0' ) < 10 )    {      T1_Encoding  encode     = &face->type1.encoding;      FT_Int       count, n;      PS_Table     char_table = &loader->encoding_table;      FT_Memory    memory     = parser->root.memory;      FT_Error     error;      if ( encode->char_index )        /*  with synthetic fonts, it's possible we get here twice  */        return;      /* read the number of entries in the encoding, should be 256 */      count = T1_ToInt( parser );      if ( parser->root.error )        return;      /* we use a T1_Table to store our charnames */      loader->num_chars = encode->num_chars = count;      if ( FT_NEW_ARRAY( encode->char_index, count ) ||           FT_NEW_ARRAY( encode->char_name,  count ) ||           FT_SET_ERROR( psaux->ps_table_funcs->init(                           char_table, count, memory ) ) )      {        parser->root.error = error;        return;      }      /* We need to `zero' out encoding_table.elements */      for ( n = 0; n < count; n++ )      {        char*  notdef = (char *)".notdef";        T1_Add_Table( char_table, n, notdef, 8 );      }      /* Now, we will need to read a record of the form         */      /* ... charcode /charname ... for each entry in our table */      /*                                                        */      /* We simply look for a number followed by an immediate   */      /* name.  Note that this ignores correctly the sequence   */      /* that is often seen in type1 fonts:                     */      /*                                                        */      /*   0 1 255 { 1 index exch /.notdef put } for dup        */      /*                                                        */      /* used to clean the encoding array before anything else. */      /*                                                        */      /* We stop when we encounter a `def'.                     */      cur   = parser->root.cursor;      limit = parser->root.limit;      n     = 0;      for ( ; cur < limit; )      {        FT_Byte  c;        c = *cur;        /* we stop when we encounter a `def' */        if ( c == 'd' && cur + 3 < limit )        {          if ( cur[1] == 'e'       &&               cur[2] == 'f'       &&               is_space( cur[-1] ) &&               is_space( cur[3] )  )          {            FT_TRACE6(( "encoding end\n" ));            break;          }        }        /* otherwise, we must find a number before anything else */        if ( (FT_Byte)( c - '0' ) < 10 )        {          FT_Int  charcode;          parser->root.cursor = cur;          charcode = T1_ToInt( parser );          cur      = parser->root.cursor;          /* skip whitespace */          while ( cur < limit && is_space( *cur ) )            cur++;          if ( cur < limit && *cur == '/' )          {            /* bingo, we have an immediate name -- it must be a */            /* character name                                   */            FT_Byte*  cur2 = cur + 1;            FT_Int    len;            while ( cur2 < limit && is_alpha( *cur2 ) )              cur2++;            len = (FT_Int)( cur2 - cur - 1 );            parser->root.error = T1_Add_Table( char_table, charcode,                                               cur + 1, len + 1 );            char_table->elements[charcode][len] = '\0';            if ( parser->root.error )              return;            cur = cur2;          }        }        else          cur++;      }      face->type1.encoding_type = T1_ENCODING_TYPE_ARRAY;      parser->root.cursor       = cur;    }    /* Otherwise, we should have either `StandardEncoding', */    /* `ExpertEncoding', or `ISOLatin1Encoding'             */    else    {      if ( cur + 17 < limit                                            &&           ft_strncmp( (const char*)cur, "StandardEncoding", 16 ) == 0 )        face->type1.encoding_type = T1_ENCODING_TYPE_STANDARD;      else if ( cur + 15 < limit                                          &&                ft_strncmp( (const char*)cur, "ExpertEncoding", 14 ) == 0 )        face->type1.encoding_type = T1_ENCODING_TYPE_EXPERT;      else if ( cur + 18 < limit                                             &&                ft_strncmp( (const char*)cur, "ISOLatin1Encoding", 17 ) == 0 )        face->type1.encoding_type = T1_ENCODING_TYPE_ISOLATIN1;      else      {        FT_ERROR(( "parse_encoding: invalid token!\n" ));        parser->root.error = T1_Err_Invalid_File_Format;      }    }  }  static void  parse_subrs( T1_Face    face,               T1_Loader  loader )  {    T1_Parser      parser = &loader->parser;    PS_Table       table  = &loader->subrs;    FT_Memory      memory = parser->root.memory;    FT_Error       error;    FT_Int         n;    PSAux_Service  psaux  = (PSAux_Service)face->psaux;    if ( loader->num_subrs )      /*  with synthetic fonts, it's possible we get here twice  */      return;    loader->num_subrs = T1_ToInt( parser );    if ( parser->root.error )      return;    /* position the parser right before the `dup' of the first subr */    T1_Skip_Spaces( parser );    T1_Skip_Alpha( parser );      /* `array' */    T1_Skip_Spaces( parser );    /* initialize subrs array */    error = psaux->ps_table_funcs->init( table, loader->num_subrs, memory );    if ( error )      goto Fail;    /* the format is simple:                                 */    /*                                                       */    /*   `index' + binary data                               */    /*                                                       */    for ( n = 0; n < loader->num_subrs; n++ )    {      FT_Int    idx, size;      FT_Byte*  base;      /* If the next token isn't `dup', we are also done.  This */      /* happens when there are `holes' in the Subrs array.     */      if ( ft_strncmp( (char*)parser->root.cursor, "dup", 3 ) != 0 )        break;      idx = T1_ToInt( parser );      if ( !read_binary_data( parser, &size, &base ) )        return;      /* The binary string is followed by one token, e.g. `NP' */      /* (bound to `noaccess put') or by two separate tokens:  */      /* `noaccess' & `put'.  We position the parser right     */      /* before the next `dup', if any.                        */      T1_Skip_Spaces( parser );      T1_Skip_Alpha( parser );    /* `NP' or `I' or `noaccess' */      T1_Skip_Spaces( parser );      if ( ft_strncmp( (char*)parser->root.cursor, "put", 3 ) == 0 )      {        T1_Skip_Alpha( parser );  /* skip `put' */        T1_Skip_Spaces( parser );      }      /* some fonts use a value of -1 for lenIV to indicate that */      /* the charstrings are unencoded                           */      /*                                                         */      /* thanks to Tom Kacvinsky for pointing this out           */      /*                                                         */      if ( face->type1.private_dict.lenIV >= 0 )      {        FT_Byte*  temp;        /* t1_decrypt() shouldn't write to base -- make temporary copy */        if ( FT_ALLOC( temp, size ) )          goto Fail;        FT_MEM_COPY( temp, base, size );        psaux->t1_decrypt( temp, size, 4330 );        size -= face->type1.private_dict.lenIV;        error = T1_Add_Table( table, idx,                              temp + face->type1.private_dict.lenIV, size );        FT_FREE( temp );      }      else        error = T1_Add_Table( table, idx, base, size );      if ( error )        goto Fail;    }    return;  Fail:    parser->root.error = error;  }  static void  parse_charstrings( T1_Face    face,                     T1_Loader  loader )  {    T1_Parser      parser       = &loader->parser;    PS_Table       code_table   = &loader->charstrings;    PS_Table       name_table   = &loader->glyph_names;    PS_Table       swap_table   = &loader->swap_table;    FT_Memory      memory       = parser->root.memory;    FT_Error       error;    PSAux_Service  psaux        = (PSAux_Service)face->psaux;    FT_Byte*       cur;    FT_Byte*       limit        = parser->root.limit;    FT_Int         n;    FT_UInt        notdef_index = 0;    FT_Byte        notdef_found = 0;    if ( loader->num_glyphs )      /*  with synthetic fonts, it's possible we get here twice  */      return;    loader->num_glyphs = T1_ToInt( parser );    if ( parser->root.error )      return;    /* initialize tables (leaving room for addition of .notdef, */    /* if necessary).                                           */    error = psaux->ps_table_funcs->init( code_table,                                         loader->num_glyphs + 1,                                         memory );    if ( error )      goto Fail;    error = psaux->ps_table_funcs->init( name_table,                                         loader->num_glyphs + 1,                                         memory );    if ( error )      goto Fail;    /* Initialize table for swapping index notdef_index and */    /* index 0 names and codes (if necessary).              */    error = psaux->ps_table_funcs->init( swap_table, 4, memory );    if ( error )      goto Fail;    n = 0;    for (;;)    {      FT_Int    size;      FT_Byte*  base;      /* the format is simple:                    */      /*   `/glyphname' + binary data             */      /*                                          */      /* note that we stop when we find a `def'   */      /*                                          */      T1_Skip_Spaces( parser );      cur = parser->root.cursor;      if ( cur >= limit )        break;      /* we stop when we find a `def' or `end' keyword */      if ( *cur   == 'd'   &&           cur + 3 < limit &&           cur[1] == 'e'   &&           cur[2] == 'f'   )        break;      if ( *cur   == 'e'   &&           cur + 3 < limit &&           cur[1] == 'n'   &&           cur[2] == 'd'   )        break;      if ( *cur != '/' )        T1_Skip_Alpha( parser );      else      {        FT_Byte*  cur2 = cur + 1;        FT_Int    len;        while ( cur2 < limit && is_alpha( *cur2 ) )          cur2++;        len = (FT_Int)( cur2 - cur - 1 );        error = T1_Add_Table( name_table, n, cur + 1, len + 1 );        if ( error )          goto Fail;        /* add a trailing zero to the name table */        name_table->elements[n][len] = '\0';        /* record index of /.notdef              */        if ( ft_strcmp( (const char*)".notdef",                        (const char*)(name_table->elements[n]) ) == 0 )        {          notdef_index = n;          notdef_found = 1;        }        parser->root.cursor = cur2;        if ( !read_binary_data( parser, &size, &base ) )          return;        if ( face->type1.private_dict.lenIV >= 0 )        {          FT_Byte*  temp;          /* t1_decrypt() shouldn't write to base -- make temporary copy */          if ( FT_ALLOC( temp, size ) )            goto Fail;          FT_MEM_COPY( temp, base, size );          psaux->t1_decrypt( temp, size, 4330 );          size -= face->type1.private_dict.lenIV;          error = T1_Add_Table( code_table, n,                                temp + face->type1.private_dict.lenIV, size );          FT_FREE( temp );        }        else

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品影院在线观看| 亚洲女同一区二区| 一本大道久久a久久综合婷婷| 亚洲va韩国va欧美va精品| 久久久久久免费| 欧美一区二区三区在线| 99精品视频在线播放观看| 国精产品一区一区三区mba视频| 欧美国产一区在线| 成人99免费视频| 精品国产一区二区国模嫣然| 日韩精品电影在线| 日韩美女在线视频| 精品一区二区三区免费毛片爱| 欧美一区二区三区公司| 久久99日本精品| 久久久久久9999| 日本国产一区二区| 亚洲成av人片| 国产午夜精品一区二区三区四区| 国产乱码精品一区二区三区av | 91精品欧美久久久久久动漫| 亚洲视频一区二区免费在线观看 | 国产欧美日韩卡一| 美女视频黄久久| 色呦呦网站一区| 亚洲视频在线一区| 欧美日韩一区三区| 91看片淫黄大片一级| 色94色欧美sute亚洲13| www.亚洲人| 狠狠久久亚洲欧美| 日本人妖一区二区| 日本免费在线视频不卡一不卡二| 亚洲电影欧美电影有声小说| 亚洲自拍偷拍综合| 亚洲精品你懂的| 玉米视频成人免费看| 亚洲欧美日韩精品久久久久| 26uuu亚洲综合色| 色综合色狠狠综合色| 久久精品国产成人一区二区三区| 亚洲日穴在线视频| 日韩欧美第一区| 成人性视频免费网站| 国产老女人精品毛片久久| 亚洲人成精品久久久久| 国产日产欧美一区| 国产精品麻豆视频| 亚洲综合视频在线观看| 国产日本亚洲高清| 久久亚洲综合色一区二区三区| 2022国产精品视频| 国产喂奶挤奶一区二区三区| 国产精品久久久久久亚洲伦| 国产精品动漫网站| 亚洲一区二区三区视频在线| 亚洲电影一区二区| 精品中文字幕一区二区| 成人蜜臀av电影| 欧美午夜不卡在线观看免费| 欧美放荡的少妇| 久久先锋资源网| 亚洲天堂a在线| 日韩中文字幕av电影| 国内成+人亚洲+欧美+综合在线| 国产91丝袜在线播放九色| 91在线精品秘密一区二区| 欧美在线免费视屏| 欧美不卡一区二区三区四区| 国产精品三级av在线播放| 亚洲午夜激情av| 国产乱人伦精品一区二区在线观看| bt欧美亚洲午夜电影天堂| 56国语精品自产拍在线观看| 国产日韩综合av| 精品1区2区3区| 国产一区二区久久| 成人一级片在线观看| 成人午夜视频免费看| 乱一区二区av| 成人免费高清视频在线观看| av亚洲精华国产精华精华 | 国产欧美日韩卡一| 免费在线看一区| 精品国产乱码久久久久久牛牛| 国产最新精品精品你懂的| 日本一区二区综合亚洲| 欧美一区二区三级| 91看片淫黄大片一级| 紧缚捆绑精品一区二区| 亚洲成人在线免费| 综合久久久久久| 日韩精品在线网站| 91精品福利视频| 99国产精品久久久久久久久久| 国产一区二区看久久| 国内精品久久久久影院一蜜桃| 亚洲一区二区三区中文字幕| 精品国产91洋老外米糕| 日本高清不卡视频| 国产一区三区三区| 亚洲a一区二区| 亚洲精品视频在线| 精品国产91洋老外米糕| 日本道免费精品一区二区三区| 亚洲成人免费观看| 亚洲午夜日本在线观看| 亚洲免费av高清| 亚洲福利视频导航| 欧美aaaaa成人免费观看视频| 婷婷国产在线综合| 精品久久人人做人人爰| 1024成人网色www| 久久99国产精品免费| 欧美日韩精品一区二区| 国产精品国产成人国产三级| 韩国精品免费视频| 日韩女优av电影在线观看| 亚洲va欧美va天堂v国产综合| 色综合天天做天天爱| 日韩毛片视频在线看| 成人网在线播放| 国产日韩v精品一区二区| 国产在线精品不卡| 精品免费日韩av| 国产一区二区精品久久| 精品欧美乱码久久久久久 | 丝袜美腿亚洲一区二区图片| 91麻豆精品视频| 一色屋精品亚洲香蕉网站| 成人爽a毛片一区二区免费| 国产亚洲精品福利| 国产精品一区二区黑丝| 国产欧美精品在线观看| 成人黄色国产精品网站大全在线免费观看| 精品99一区二区| 午夜精品免费在线观看| 免费成人av资源网| 国产精品一卡二卡| 成人一区二区视频| 成人app在线观看| 青娱乐精品在线视频| 中文字幕欧美日韩一区| 精品国产伦一区二区三区观看体验| 欧美日韩精品是欧美日韩精品| 在线观看亚洲a| 亚洲欧美色综合| 国产精品一区二区免费不卡 | 亚洲成人av福利| 欧美a一区二区| 欧美视频精品在线观看| 555www色欧美视频| 91精品婷婷国产综合久久| 欧美一级片在线| 国产农村妇女精品| 亚洲免费观看高清完整版在线 | eeuss鲁片一区二区三区| 日韩国产欧美三级| 日韩成人av影视| 成人爱爱电影网址| 欧美国产成人在线| 一本一道综合狠狠老| 亚洲成a人v欧美综合天堂| 日韩三级电影网址| 成人深夜视频在线观看| 一区二区三国产精华液| 4438亚洲最大| 成人午夜精品在线| 天堂av在线一区| 国产精品久久久久三级| 欧美性猛交xxxx乱大交退制版 | 精品国产乱码久久久久久牛牛| 成人手机电影网| 奇米色一区二区三区四区| 国产精品网站导航| 91麻豆精品国产无毒不卡在线观看| 国产一区二区三区在线看麻豆| 一区二区三区在线免费播放| 欧美电影免费观看高清完整版| 99精品热视频| 韩国视频一区二区| 亚洲第一综合色| 欧美激情一区在线| 91精品国产aⅴ一区二区| 成人丝袜高跟foot| 美国精品在线观看| 亚洲最大的成人av| 国产亚洲精品免费| 538prom精品视频线放| 99久久亚洲一区二区三区青草| 麻豆91精品视频| 亚洲午夜久久久久久久久久久| 日本一区二区三区四区在线视频| 国产精品女同一区二区三区| 91精品国产综合久久久久久漫画| 成年人国产精品| 国产成人精品亚洲日本在线桃色| 午夜精品福利一区二区三区蜜桃| 中文字幕在线观看不卡|