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

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

?? t42parse.c

?? 智能設備中PDF閱讀器的源碼!用于windows mobile2003或者WM5以上
?? C
?? 第 1 頁 / 共 3 頁
字號:
    for (;;)
    {
      /* The format is simple:                   */
      /*   `/glyphname' + index [+ def]          */

      T1_Skip_Spaces( parser );

      cur = parser->root.cursor;
      if ( cur >= limit )
        break;

      /* We stop when we find an `end' keyword or '>' */
      if ( *cur   == 'e'          &&
           cur + 3 < limit        &&
           cur[1] == 'n'          &&
           cur[2] == 'd'          &&
           t42_is_space( cur[3] ) )
        break;
      if ( *cur == '>' )
        break;

      T1_Skip_PS_Token( parser );
      if ( parser->root.error )
        return;

      if ( *cur == '/' )
      {
        FT_PtrDist  len;


        if ( cur + 1 >= limit )
        {
          FT_ERROR(( "t42_parse_charstrings: out of bounds!\n" ));
          error = T42_Err_Invalid_File_Format;
          goto Fail;
        }

        cur++;                              /* skip `/' */
        len = parser->root.cursor - cur;

        error = T1_Add_Table( name_table, n, cur, 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 ( *cur == '.'                                              &&
             ft_strcmp( ".notdef",
                        (const char*)(name_table->elements[n]) ) == 0 )
        {
          notdef_index = n;
          notdef_found = 1;
        }

        T1_Skip_Spaces( parser );

        cur = parser->root.cursor;

        (void)T1_ToInt( parser );
        if ( parser->root.cursor >= limit )
        {
          FT_ERROR(( "t42_parse_charstrings: out of bounds!\n" ));
          error = T42_Err_Invalid_File_Format;
          goto Fail;
        }

        len = parser->root.cursor - cur;

        error = T1_Add_Table( code_table, n, cur, len + 1 );
        if ( error )
          goto Fail;

        code_table->elements[n][len] = '\0';

        n++;
        if ( n >= loader->num_glyphs )
          break;
      }
    }

    loader->num_glyphs = n;

    if ( !notdef_found )
    {
      FT_ERROR(( "t42_parse_charstrings: no /.notdef glyph!\n" ));
      error = T42_Err_Invalid_File_Format;
      goto Fail;
    }

    /* if /.notdef does not occupy index 0, do our magic. */
    if ( ft_strcmp( (const char*)".notdef",
                    (const char*)name_table->elements[0] ) )
    {
      /* 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;

    }

    return;

  Fail:
    parser->root.error = error;
  }


  static FT_Error
  t42_load_keyword( T42_Face    face,
                    T42_Loader  loader,
                    T1_Field    field )
  {
    FT_Error  error;
    void*     dummy_object;
    void**    objects;
    FT_UInt   max_objects = 0;


    /* if the keyword has a dedicated callback, call it */
    if ( field->type == T1_FIELD_TYPE_CALLBACK )
    {
      field->reader( (FT_Face)face, loader );
      error = loader->parser.root.error;
      goto Exit;
    }

    /* now the keyword is either a simple field or a table of fields; */
    /* we are now going to take care of it                            */

    switch ( field->location )
    {
    case T1_FIELD_LOCATION_FONT_INFO:
      dummy_object = &face->type1.font_info;
      break;

    case T1_FIELD_LOCATION_BBOX:
      dummy_object = &face->type1.font_bbox;
      break;

    default:
      dummy_object = &face->type1;
    }

    objects = &dummy_object;

    if ( field->type == T1_FIELD_TYPE_INTEGER_ARRAY ||
         field->type == T1_FIELD_TYPE_FIXED_ARRAY   )
      error = T1_Load_Field_Table( &loader->parser, field,
                                   objects, max_objects, 0 );
    else
      error = T1_Load_Field( &loader->parser, field,
                             objects, max_objects, 0 );

   Exit:
    return error;
  }


  FT_LOCAL_DEF( FT_Error )
  t42_parse_dict( T42_Face    face,
                  T42_Loader  loader,
                  FT_Byte*    base,
                  FT_Long     size )
  {
    T42_Parser  parser     = &loader->parser;
    FT_Byte*    limit;
    FT_Int      n_keywords = (FT_Int)( sizeof ( t42_keywords ) /
                                         sizeof ( t42_keywords[0] ) );


    parser->root.cursor = base;
    parser->root.limit  = base + size;
    parser->root.error  = T42_Err_Ok;

    limit = parser->root.limit;

    T1_Skip_Spaces( parser );

    while ( parser->root.cursor < limit )
    {
      FT_Byte*  cur;


      cur = parser->root.cursor;

      /* look for `FontDirectory' which causes problems for some fonts */
      if ( *cur == 'F' && cur + 25 < limit                    &&
           ft_strncmp( (char*)cur, "FontDirectory", 13 ) == 0 )
      {
        FT_Byte*  cur2;


        /* skip the `FontDirectory' keyword */
        T1_Skip_PS_Token( parser );
        T1_Skip_Spaces  ( parser );
        cur = cur2 = parser->root.cursor;

        /* look up the `known' keyword */
        while ( cur < limit )
        {
          if ( *cur == 'k' && cur + 5 < limit             &&
                ft_strncmp( (char*)cur, "known", 5 ) == 0 )
            break;

          T1_Skip_PS_Token( parser );
          if ( parser->root.error )
            goto Exit;
          T1_Skip_Spaces  ( parser );
          cur = parser->root.cursor;
        }

        if ( cur < limit )
        {
          T1_TokenRec  token;


          /* skip the `known' keyword and the token following it */
          T1_Skip_PS_Token( parser );
          T1_ToToken( parser, &token );

          /* if the last token was an array, skip it! */
          if ( token.type == T1_TOKEN_TYPE_ARRAY )
            cur2 = parser->root.cursor;
        }
        parser->root.cursor = cur2;
      }

      /* look for immediates */
      else if ( *cur == '/' && cur + 2 < limit )
      {
        FT_PtrDist  len;


        cur++;

        parser->root.cursor = cur;
        T1_Skip_PS_Token( parser );
        if ( parser->root.error )
          goto Exit;

        len = parser->root.cursor - cur;

        if ( len > 0 && len < 22 && parser->root.cursor < limit )
        {
          int  i;


          /* now compare the immediate name to the keyword table */

          /* loop through all known keywords */
          for ( i = 0; i < n_keywords; i++ )
          {
            T1_Field  keyword = (T1_Field)&t42_keywords[i];
            FT_Byte   *name   = (FT_Byte*)keyword->ident;


            if ( !name )
              continue;

            if ( cur[0] == name[0]                                  &&
                 len == (FT_PtrDist)ft_strlen( (const char *)name ) &&
                 ft_memcmp( cur, name, len ) == 0                   )
            {
              /* we found it -- run the parsing callback! */
              parser->root.error = t42_load_keyword( face,
                                                     loader,
                                                     keyword );
              if ( parser->root.error )
                return parser->root.error;
              break;
            }
          }
        }
      }
      else
      {
        T1_Skip_PS_Token( parser );
        if ( parser->root.error )
          goto Exit;
      }

      T1_Skip_Spaces( parser );
    }

  Exit:
    return parser->root.error;
  }


  FT_LOCAL_DEF( void )
  t42_loader_init( T42_Loader  loader,
                   T42_Face    face )
  {
    FT_UNUSED( face );

    FT_MEM_ZERO( loader, 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;
  }


  FT_LOCAL_DEF( void )
  t42_loader_done( T42_Loader  loader )
  {
    T42_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 );

    /* finalize parser */
    t42_parser_done( parser );
  }


/* END */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产乱子轮精品视频| 国产精品一区二区三区四区| 亚洲免费资源在线播放| 国产精品青草综合久久久久99| 日韩久久久久久| 欧美一级日韩免费不卡| 欧美日韩国产综合久久| 欧美日本韩国一区二区三区视频| 欧亚一区二区三区| 欧美日韩大陆一区二区| 欧美日本乱大交xxxxx| 91精品国产综合久久精品麻豆 | 99久久婷婷国产综合精品| 国产91精品一区二区麻豆亚洲| 国产一区三区三区| 成人自拍视频在线观看| 99re成人精品视频| 在线看日韩精品电影| 欧美日韩的一区二区| 欧美大片免费久久精品三p| 精品剧情在线观看| 久久精品视频一区二区三区| 日本一区二区三区四区在线视频| 欧美激情中文不卡| 亚洲人成7777| 婷婷六月综合亚洲| 美女视频网站久久| 国产精品1区2区3区在线观看| 成人精品一区二区三区中文字幕| 99久久er热在这里只有精品66| 91麻豆免费观看| 欧美二区三区的天堂| 精品噜噜噜噜久久久久久久久试看 | 韩国毛片一区二区三区| 国产经典欧美精品| 91啪亚洲精品| 91精品国产综合久久福利| 久久人人97超碰com| 日韩一区日韩二区| 日韩不卡免费视频| 成人的网站免费观看| 欧美日韩国产天堂| 国产性天天综合网| 亚洲第一久久影院| 国产一区二区看久久| 91日韩一区二区三区| 欧美岛国在线观看| 一区二区三区四区不卡在线| 蜜臂av日日欢夜夜爽一区| 99久久久免费精品国产一区二区| 欧美放荡的少妇| 国产精品视频你懂的| 午夜免费久久看| 国产v综合v亚洲欧| 欧美老肥妇做.爰bbww视频| 久久久久免费观看| 午夜精品久久久久久久| 床上的激情91.| 欧美一级久久久| 亚洲色图制服丝袜| 国产米奇在线777精品观看| 欧美日韩在线电影| 国产精品三级电影| 久久国产精品露脸对白| 在线观看视频一区二区 | 亚洲综合男人的天堂| 精品一区二区三区香蕉蜜桃| 色婷婷av久久久久久久| 久久久国产综合精品女国产盗摄| 亚洲大型综合色站| 99re在线视频这里只有精品| 精品久久久久久久一区二区蜜臀| 亚洲一卡二卡三卡四卡| 成人免费观看av| 日韩欧美一区二区三区在线| 亚洲尤物视频在线| voyeur盗摄精品| 久久嫩草精品久久久精品| 五月天激情综合| 91网站视频在线观看| 久久久久久久性| 天堂av在线一区| 一本到高清视频免费精品| 国产日韩欧美不卡在线| 久久91精品久久久久久秒播| 91麻豆精品国产自产在线| 亚洲综合久久久久| 色婷婷亚洲婷婷| 中文字幕日韩一区| 精品卡一卡二卡三卡四在线| 日本va欧美va欧美va精品| 在线观看不卡视频| 亚洲男同1069视频| 99精品久久久久久| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 国产欧美综合在线| 紧缚奴在线一区二区三区| 欧美一区二区三区在线电影| 婷婷丁香久久五月婷婷| 欧美午夜片在线看| 亚洲永久精品大片| 欧美性淫爽ww久久久久无| 亚洲男人电影天堂| 色视频欧美一区二区三区| 亚洲人成伊人成综合网小说| 99视频热这里只有精品免费| 欧美国产视频在线| 本田岬高潮一区二区三区| 国产精品久久久久久久久动漫| 成人性生交大合| 中文字幕亚洲欧美在线不卡| www.av亚洲| 亚洲一区二区四区蜜桃| 欧美色图第一页| 午夜在线成人av| 欧美一区二区三区在线| 精品一区二区久久| 国产亚洲美州欧州综合国| 国产成人自拍在线| 亚洲色图视频网| 欧美视频第二页| 蜜臀av一区二区在线观看 | 蜜桃av一区二区| 久久久蜜桃精品| 成人动漫一区二区在线| 玉米视频成人免费看| 欧美日韩国产一区| 国产一区二区久久| 中文字幕五月欧美| 欧美日韩一区二区三区不卡 | 欧美日韩一本到| 美女视频网站黄色亚洲| 国产清纯白嫩初高生在线观看91| av亚洲精华国产精华精| 一级特黄大欧美久久久| 日韩限制级电影在线观看| 国产成人在线视频网站| 亚洲欧美日韩成人高清在线一区| 欧美视频日韩视频在线观看| 激情成人综合网| 日韩久久一区二区| 欧美一区二区三区公司| 国产成人av资源| 亚洲国产精品天堂| 久久婷婷综合激情| 91福利社在线观看| 美日韩黄色大片| 国产精品不卡一区| 91精品国产乱| 99久久国产综合精品麻豆 | 91精品国产综合久久福利| 国产91富婆露脸刺激对白| 亚洲午夜私人影院| 国产亚洲欧美色| 欧美日韩精品二区第二页| 国产一区二区91| 亚洲福利国产精品| 国产精品家庭影院| 欧美一级日韩一级| 在线观看欧美日本| 国产经典欧美精品| 蜜臀久久99精品久久久画质超高清 | 在线精品观看国产| 国产精品1区二区.| 天天综合日日夜夜精品| 中文字幕一区三区| 精品国产欧美一区二区| 欧美在线免费视屏| 成人手机在线视频| 久久国内精品自在自线400部| 亚洲精品欧美二区三区中文字幕| 欧美www视频| 91精品国产91热久久久做人人| 91丨porny丨户外露出| 国产最新精品免费| 另类小说综合欧美亚洲| 亚洲国产综合在线| 亚洲欧美区自拍先锋| 久久久久久影视| 精品国产欧美一区二区| 欧美精品123区| 日本韩国欧美在线| aaa国产一区| 国产xxx精品视频大全| 激情综合亚洲精品| 免费成人av在线| 亚洲成人av中文| 亚洲欧美一区二区三区久本道91| 久久久久久久久久久99999| 欧美一区二区视频观看视频| 精品视频1区2区| 91成人免费网站| 91啪亚洲精品| 色综合天天综合色综合av | 91精品国产欧美一区二区成人| 在线精品视频一区二区| 一本色道久久综合精品竹菊| 成人免费毛片片v| 丰满白嫩尤物一区二区| 国产高清精品网站|