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

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

?? t1cmap.c

?? 智能設備中PDF閱讀器的源碼!用于windows mobile2003或者WM5以上
?? C
字號:
/***************************************************************************/
/*                                                                         */
/*  t1cmap.c                                                               */
/*                                                                         */
/*    Type 1 character map support (body).                                 */
/*                                                                         */
/*  Copyright 2002, 2003, 2006 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.                                        */
/*                                                                         */
/***************************************************************************/


#include "t1cmap.h"

#include FT_INTERNAL_DEBUG_H

#include "psauxerr.h"


  /*************************************************************************/
  /*************************************************************************/
  /*****                                                               *****/
  /*****          TYPE1 STANDARD (AND EXPERT) ENCODING CMAPS           *****/
  /*****                                                               *****/
  /*************************************************************************/
  /*************************************************************************/

  static void
  t1_cmap_std_init( T1_CMapStd  cmap,
                    FT_Int      is_expert )
  {
    T1_Face             face    = (T1_Face)FT_CMAP_FACE( cmap );
    FT_Service_PsCMaps  psnames = (FT_Service_PsCMaps)face->psnames;


    cmap->num_glyphs    = face->type1.num_glyphs;
    cmap->glyph_names   = (const char* const*)face->type1.glyph_names;
    cmap->sid_to_string = psnames->adobe_std_strings;
    cmap->code_to_sid   = is_expert ? psnames->adobe_expert_encoding
                                    : psnames->adobe_std_encoding;

    FT_ASSERT( cmap->code_to_sid != NULL );
  }


  FT_CALLBACK_DEF( void )
  t1_cmap_std_done( T1_CMapStd  cmap )
  {
    cmap->num_glyphs    = 0;
    cmap->glyph_names   = NULL;
    cmap->sid_to_string = NULL;
    cmap->code_to_sid   = NULL;
  }


  FT_CALLBACK_DEF( FT_UInt )
  t1_cmap_std_char_index( T1_CMapStd  cmap,
                          FT_UInt32   char_code )
  {
    FT_UInt  result = 0;


    if ( char_code < 256 )
    {
      FT_UInt      code, n;
      const char*  glyph_name;


      /* convert character code to Adobe SID string */
      code       = cmap->code_to_sid[char_code];
      glyph_name = cmap->sid_to_string( code );

      /* look for the corresponding glyph name */
      for ( n = 0; n < cmap->num_glyphs; n++ )
      {
        const char* gname = cmap->glyph_names[n];


        if ( gname && gname[0] == glyph_name[0]  &&
             ft_strcmp( gname, glyph_name ) == 0 )
        {
          result = n;
          break;
        }
      }
    }

    return result;
  }


  FT_CALLBACK_DEF( FT_UInt )
  t1_cmap_std_char_next( T1_CMapStd   cmap,
                         FT_UInt32   *pchar_code )
  {
    FT_UInt    result    = 0;
    FT_UInt32  char_code = *pchar_code + 1;


    while ( char_code < 256 )
    {
      result = t1_cmap_std_char_index( cmap, char_code );
      if ( result != 0 )
        goto Exit;

      char_code++;
    }
    char_code = 0;

  Exit:
    *pchar_code = char_code;
    return result;
  }


  FT_CALLBACK_DEF( FT_Error )
  t1_cmap_standard_init( T1_CMapStd  cmap )
  {
    t1_cmap_std_init( cmap, 0 );
    return 0;
  }


  FT_CALLBACK_TABLE_DEF const FT_CMap_ClassRec
  t1_cmap_standard_class_rec =
  {
    sizeof ( T1_CMapStdRec ),

    (FT_CMap_InitFunc)     t1_cmap_standard_init,
    (FT_CMap_DoneFunc)     t1_cmap_std_done,
    (FT_CMap_CharIndexFunc)t1_cmap_std_char_index,
    (FT_CMap_CharNextFunc) t1_cmap_std_char_next
  };


  FT_CALLBACK_DEF( FT_Error )
  t1_cmap_expert_init( T1_CMapStd  cmap )
  {
    t1_cmap_std_init( cmap, 1 );
    return 0;
  }

  FT_CALLBACK_TABLE_DEF const FT_CMap_ClassRec
  t1_cmap_expert_class_rec =
  {
    sizeof ( T1_CMapStdRec ),

    (FT_CMap_InitFunc)     t1_cmap_expert_init,
    (FT_CMap_DoneFunc)     t1_cmap_std_done,
    (FT_CMap_CharIndexFunc)t1_cmap_std_char_index,
    (FT_CMap_CharNextFunc) t1_cmap_std_char_next
  };


  /*************************************************************************/
  /*************************************************************************/
  /*****                                                               *****/
  /*****                    TYPE1 CUSTOM ENCODING CMAP                 *****/
  /*****                                                               *****/
  /*************************************************************************/
  /*************************************************************************/


  FT_CALLBACK_DEF( FT_Error )
  t1_cmap_custom_init( T1_CMapCustom  cmap )
  {
    T1_Face      face     = (T1_Face)FT_CMAP_FACE( cmap );
    T1_Encoding  encoding = &face->type1.encoding;


    cmap->first   = encoding->code_first;
    cmap->count   = (FT_UInt)( encoding->code_last - cmap->first + 1 );
    cmap->indices = encoding->char_index;

    FT_ASSERT( cmap->indices != NULL );
    FT_ASSERT( encoding->code_first <= encoding->code_last );

    return 0;
  }


  FT_CALLBACK_DEF( void )
  t1_cmap_custom_done( T1_CMapCustom  cmap )
  {
    cmap->indices = NULL;
    cmap->first   = 0;
    cmap->count   = 0;
  }


  FT_CALLBACK_DEF( FT_UInt )
  t1_cmap_custom_char_index( T1_CMapCustom  cmap,
                             FT_UInt32      char_code )
  {
    FT_UInt    result = 0;


    if ( ( char_code >= cmap->first )                  &&
         ( char_code < ( cmap->first + cmap->count ) ) )
      result = cmap->indices[char_code];

    return result;
  }


  FT_CALLBACK_DEF( FT_UInt )
  t1_cmap_custom_char_next( T1_CMapCustom  cmap,
                            FT_UInt32     *pchar_code )
  {
    FT_UInt    result = 0;
    FT_UInt32  char_code = *pchar_code;


    ++char_code;

    if ( char_code < cmap->first )
      char_code = cmap->first;

    for ( ; char_code < ( cmap->first + cmap->count ); char_code++ )
    {
      result = cmap->indices[char_code];
      if ( result != 0 )
        goto Exit;
    }

    char_code = 0;

  Exit:
    *pchar_code = char_code;
    return result;
  }


  FT_CALLBACK_TABLE_DEF const FT_CMap_ClassRec
  t1_cmap_custom_class_rec =
  {
    sizeof ( T1_CMapCustomRec ),

    (FT_CMap_InitFunc)     t1_cmap_custom_init,
    (FT_CMap_DoneFunc)     t1_cmap_custom_done,
    (FT_CMap_CharIndexFunc)t1_cmap_custom_char_index,
    (FT_CMap_CharNextFunc) t1_cmap_custom_char_next
  };


  /*************************************************************************/
  /*************************************************************************/
  /*****                                                               *****/
  /*****            TYPE1 SYNTHETIC UNICODE ENCODING CMAP              *****/
  /*****                                                               *****/
  /*************************************************************************/
  /*************************************************************************/

  FT_CALLBACK_DEF( const char * )
  t1_get_glyph_name( T1_Face  face,
                     FT_UInt  idx )
  {
    return face->type1.glyph_names[idx];
  }


  FT_CALLBACK_DEF( FT_Error )
  t1_cmap_unicode_init( PS_Unicodes  unicodes )
  {
    T1_Face             face    = (T1_Face)FT_CMAP_FACE( unicodes );
    FT_Memory           memory  = FT_FACE_MEMORY( face );
    FT_Service_PsCMaps  psnames = (FT_Service_PsCMaps)face->psnames;


    return psnames->unicodes_init( memory,
                                   unicodes,
                                   face->type1.num_glyphs,
                                   (PS_Glyph_NameFunc)&t1_get_glyph_name,
                                   (FT_Pointer)face );
  }


  FT_CALLBACK_DEF( void )
  t1_cmap_unicode_done( PS_Unicodes  unicodes )
  {
    FT_Face    face   = FT_CMAP_FACE( unicodes );
    FT_Memory  memory = FT_FACE_MEMORY( face );


    FT_FREE( unicodes->maps );
    unicodes->num_maps = 0;
  }


  FT_CALLBACK_DEF( FT_UInt )
  t1_cmap_unicode_char_index( PS_Unicodes  unicodes,
                              FT_UInt32    char_code )
  {
    T1_Face             face    = (T1_Face)FT_CMAP_FACE( unicodes );
    FT_Service_PsCMaps  psnames = (FT_Service_PsCMaps)face->psnames;


    return psnames->unicodes_char_index( unicodes, char_code );
  }


  FT_CALLBACK_DEF( FT_UInt )
  t1_cmap_unicode_char_next( PS_Unicodes  unicodes,
                             FT_UInt32   *pchar_code )
  {
    T1_Face             face    = (T1_Face)FT_CMAP_FACE( unicodes );
    FT_Service_PsCMaps  psnames = (FT_Service_PsCMaps)face->psnames;


    return psnames->unicodes_char_next( unicodes, pchar_code );
  }


  FT_CALLBACK_TABLE_DEF const FT_CMap_ClassRec
  t1_cmap_unicode_class_rec =
  {
    sizeof ( PS_UnicodesRec ),

    (FT_CMap_InitFunc)     t1_cmap_unicode_init,
    (FT_CMap_DoneFunc)     t1_cmap_unicode_done,
    (FT_CMap_CharIndexFunc)t1_cmap_unicode_char_index,
    (FT_CMap_CharNextFunc) t1_cmap_unicode_char_next
  };


/* END */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美激情一区二区三区蜜桃视频| 极品少妇一区二区三区精品视频| 成人高清免费在线播放| 精品国产a毛片| 国产一区二区三区| 国产人妖乱国产精品人妖| 国产乱对白刺激视频不卡| 国产日韩欧美精品在线| 成人丝袜视频网| 亚洲精品日韩专区silk| 欧美午夜不卡在线观看免费| 性做久久久久久免费观看| 91精品中文字幕一区二区三区| 奇米影视一区二区三区小说| 欧美tickling挠脚心丨vk| 国产伦精一区二区三区| 成人欧美一区二区三区视频网页| 91亚洲大成网污www| 性做久久久久久久免费看| 日韩亚洲欧美在线观看| 国产电影一区在线| 亚洲精品一二三| 日韩欧美国产一区二区在线播放| 成人免费va视频| 亚洲一区二区欧美| 2020日本不卡一区二区视频| 91蝌蚪国产九色| 奇米888四色在线精品| 久久久久高清精品| 欧美性欧美巨大黑白大战| 久久91精品国产91久久小草| 日本一二三四高清不卡| 欧美三级视频在线| 国产成人免费9x9x人网站视频| 亚洲人成精品久久久久久| 日韩欧美综合一区| jiyouzz国产精品久久| 青青草91视频| 一区二区三区欧美在线观看| 精品国产91久久久久久久妲己| 成a人片国产精品| 免费黄网站欧美| 亚洲欧洲精品一区二区三区| 欧美电影免费观看高清完整版在线| 成人不卡免费av| 久久99热这里只有精品| 一区二区国产盗摄色噜噜| 国产日产欧产精品推荐色| 欧美一级生活片| 色狠狠av一区二区三区| 国产福利精品一区二区| 日韩精品福利网| 亚洲伦理在线精品| 国产欧美日韩一区二区三区在线观看| 欧美精品免费视频| 色拍拍在线精品视频8848| 成人性生交大片免费看在线播放 | 久久九九影视网| 欧美日韩一区中文字幕| 99久久99精品久久久久久| 国产精一区二区三区| 美女视频免费一区| 亚洲一区二区三区在线| 亚洲欧洲韩国日本视频| 国产视频一区在线观看| 日韩美一区二区三区| 在线播放国产精品二区一二区四区 | www激情久久| 日韩精品一区二区三区中文精品| 7777精品伊人久久久大香线蕉超级流畅| 99亚偷拍自图区亚洲| 国产黄色91视频| 国产精品主播直播| 国产精品一区二区久久不卡| 男男视频亚洲欧美| 蜜臀av性久久久久蜜臀aⅴ| 婷婷国产在线综合| 日韩中文字幕区一区有砖一区 | 丁香天五香天堂综合| 国产麻豆一精品一av一免费| 久久9热精品视频| 精品亚洲国产成人av制服丝袜| 蜜臀av性久久久久蜜臀aⅴ| 美女视频一区在线观看| 久久国产免费看| 极品少妇一区二区| 成人中文字幕电影| av成人免费在线观看| 色偷偷久久人人79超碰人人澡| 91老师片黄在线观看| 欧美三级中文字幕在线观看| 777精品伊人久久久久大香线蕉| 91精品在线免费观看| 日韩欧美国产三级| 久久综合九色综合欧美98| 国产女人水真多18毛片18精品视频| 久久久高清一区二区三区| 中文字幕av一区二区三区免费看| 国产精品入口麻豆九色| 亚洲色图视频网| 丝袜亚洲另类丝袜在线| 九九九精品视频| 国产不卡在线视频| 欧美性受xxxx黑人xyx| 欧美电影免费观看高清完整版在线 | 青青草97国产精品免费观看| 精品亚洲欧美一区| 99久久精品国产一区二区三区| 色成年激情久久综合| 欧美一区二区日韩一区二区| 精品福利视频一区二区三区| 国产精品免费视频观看| 一区二区激情小说| 麻豆91在线看| 99久久久久久| 91精品在线麻豆| 亚洲图片你懂的| 蜜臀av性久久久久蜜臀av麻豆| www.欧美亚洲| 56国语精品自产拍在线观看| 欧美激情中文字幕一区二区| 亚洲一二三专区| 福利电影一区二区| 欧美无砖专区一中文字| 国产亚洲成av人在线观看导航| 一区二区成人在线| 黄页视频在线91| 欧美性极品少妇| 国产精品视频观看| 青青草97国产精品免费观看无弹窗版| 成人午夜在线免费| 日韩三级免费观看| 一区二区三区加勒比av| 激情综合色播激情啊| 欧美体内she精高潮| 国产精品免费视频观看| 美女在线观看视频一区二区| 色88888久久久久久影院野外| 久久网站最新地址| 视频一区在线视频| 色中色一区二区| 国产精品久久久久aaaa| 国模冰冰炮一区二区| 在线成人av网站| 亚洲专区一二三| jlzzjlzz欧美大全| 国产女同互慰高潮91漫画| 另类小说视频一区二区| 欧美人动与zoxxxx乱| 亚洲欧美激情一区二区| 成人一区二区在线观看| 久久综合精品国产一区二区三区 | 欧美精品一区二区三区高清aⅴ | 91麻豆123| 国产精品久久久久四虎| 国产中文字幕精品| 日韩网站在线看片你懂的| 亚洲123区在线观看| 欧美在线三级电影| 一区二区三区影院| 一本色道久久综合亚洲aⅴ蜜桃 | 国产精品亚洲成人| 精品国产一区二区三区久久影院 | 久久久久久免费网| 精品一区二区三区的国产在线播放| 欧美一区二区网站| 日韩va欧美va亚洲va久久| 欧美剧情片在线观看| 亚洲成人免费在线| 欧美精三区欧美精三区| 亚洲地区一二三色| 欧美高清你懂得| 免费看黄色91| 久久综合av免费| 成人激情校园春色| 亚洲欧美一区二区视频| 在线视频一区二区三| 午夜欧美电影在线观看| 欧美精品在线一区二区三区| 日本不卡的三区四区五区| 日韩视频在线你懂得| 精品一区二区国语对白| 中文字幕欧美日本乱码一线二线| 国产成人午夜99999| 国产精品久久久久7777按摩| 色香蕉成人二区免费| 午夜免费久久看| 欧美精品一区在线观看| 成人永久aaa| 亚洲国产精品久久艾草纯爱| 日韩午夜av一区| 成人夜色视频网站在线观看| 夜夜嗨av一区二区三区网页| 7799精品视频| 国产一区二区91| 一区二区在线观看免费视频播放| 欧美日韩精品一区视频| 国产一区日韩二区欧美三区| 国产精品九色蝌蚪自拍| 欧美日韩亚洲综合在线 |