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

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

?? pcfdriver.c

?? a very goog book
?? C
字號:
/*  pcfdriver.c    FreeType font driver for pcf files    Copyright (C) 2000-2001, 2002 by    Francesco Zappa NardelliPermission is hereby granted, free of charge, to any person obtaining a copyof this software and associated documentation files (the "Software"), to dealin the Software without restriction, including without limitation the rightsto use, copy, modify, merge, publish, distribute, sublicense, and/or sellcopies of the Software, and to permit persons to whom the Software isfurnished to do so, subject to the following conditions:The above copyright notice and this permission notice shall be included inall copies or substantial portions of the Software.THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ORIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THEAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHERLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS INTHE SOFTWARE.*/#include <ft2build.h>#include FT_INTERNAL_DEBUG_H#include FT_INTERNAL_STREAM_H#include FT_INTERNAL_OBJECTS_H#include "pcf.h"#include "pcfdriver.h"#include "pcfutil.h"#include "pcferror.h"#undef  FT_COMPONENT#define FT_COMPONENT  trace_pcfread#ifdef FT_CONFIG_OPTION_USE_CMAPS  typedef struct  PCF_CMapRec_  {    FT_CMapRec    cmap;    FT_UInt       num_encodings;    PCF_Encoding  encodings;  } PCF_CMapRec, *PCF_CMap;  FT_CALLBACK_DEF( FT_Error )  pcf_cmap_init( PCF_CMap  cmap )  {    PCF_Face  face = (PCF_Face)FT_CMAP_FACE( cmap );    cmap->num_encodings = (FT_UInt)face->nencodings;    cmap->encodings     = face->encodings;    return FT_Err_Ok;  }  FT_CALLBACK_DEF( void )  pcf_cmap_done( PCF_CMap  cmap )  {    cmap->encodings     = NULL;    cmap->num_encodings = 0;  }  FT_CALLBACK_DEF( FT_UInt )  pcf_cmap_char_index( PCF_CMap   cmap,                       FT_UInt32  charcode )  {    PCF_Encoding  encodings = cmap->encodings;    FT_UInt       min, max, mid;    FT_UInt       result = 0;    min = 0;    max = cmap->num_encodings;    while ( min < max )    {      FT_UInt32  code;      mid  = ( min + max ) >> 1;      code = encodings[mid].enc;      if ( charcode == code )      {        result = encodings[mid].glyph + 1;        break;      }      if ( charcode < code )        max = mid;      else        min = mid + 1;    }    return result;  }  FT_CALLBACK_DEF( FT_UInt )  pcf_cmap_char_next( PCF_CMap    cmap,                      FT_UInt32  *acharcode )  {    PCF_Encoding  encodings = cmap->encodings;    FT_UInt       min, max, mid;    FT_UInt32     charcode = *acharcode + 1;    FT_UInt       result   = 0;    min = 0;    max = cmap->num_encodings;    while ( min < max )    {      FT_UInt32  code;      mid  = ( min + max ) >> 1;      code = encodings[mid].enc;      if ( charcode == code )      {        result = encodings[mid].glyph + 1;        goto Exit;      }      if ( charcode < code )        max = mid;      else        min = mid + 1;    }    charcode = 0;    if ( min < cmap->num_encodings )    {      charcode = encodings[min].enc;      result   = encodings[min].glyph + 1;    }  Exit:    *acharcode = charcode;    return result;  }  FT_CALLBACK_TABLE_DEF const FT_CMap_ClassRec  pcf_cmap_class =  {    sizeof( PCF_CMapRec ),    (FT_CMap_InitFunc)     pcf_cmap_init,    (FT_CMap_DoneFunc)     pcf_cmap_done,    (FT_CMap_CharIndexFunc)pcf_cmap_char_index,    (FT_CMap_CharNextFunc) pcf_cmap_char_next  };#else /* !FT_CONFIG_OPTION_USE_CMAPS */  static FT_UInt  PCF_Char_Get_Index( FT_CharMap  charmap,                      FT_Long     char_code )  {    PCF_Face      face     = (PCF_Face)charmap->face;    PCF_Encoding  en_table = face->encodings;    int           low, high, mid;    FT_TRACE4(( "get_char_index %ld\n", char_code ));    low = 0;    high = face->nencodings - 1;    while ( low <= high )    {      mid = ( low + high ) / 2;      if ( char_code < en_table[mid].enc )        high = mid - 1;      else if ( char_code > en_table[mid].enc )        low = mid + 1;      else        return en_table[mid].glyph + 1;    }    return 0;  }  static FT_Long  PCF_Char_Get_Next( FT_CharMap  charmap,                     FT_Long     char_code )  {    PCF_Face      face     = (PCF_Face)charmap->face;    PCF_Encoding  en_table = face->encodings;    int           low, high, mid;    FT_TRACE4(( "get_next_char %ld\n", char_code ));    char_code++;    low  = 0;    high = face->nencodings - 1;    while ( low <= high )    {      mid = ( low + high ) / 2;      if ( char_code < en_table[mid].enc )        high = mid - 1;      else if ( char_code > en_table[mid].enc )        low = mid + 1;      else        return char_code;    }    if ( high < 0 )      high = 0;    while ( high < face->nencodings )    {      if ( en_table[high].enc >= char_code )        return en_table[high].enc;      high++;    }    return 0;  }#endif /* !FT_CONFIG_OPTION_USE_CMAPS */  /*************************************************************************/  /*                                                                       */  /* The macro FT_COMPONENT is used in trace mode.  It is an implicit      */  /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log  */  /* messages during execution.                                            */  /*                                                                       */#undef  FT_COMPONENT#define FT_COMPONENT  trace_pcfdriver  FT_CALLBACK_DEF( FT_Error )  PCF_Face_Done( PCF_Face  face )  {    FT_Memory  memory = FT_FACE_MEMORY( face );    FT_FREE( face->encodings );    FT_FREE( face->metrics );    /* free properties */    {      PCF_Property  prop = face->properties;      FT_Int        i;      for ( i = 0; i < face->nprops; i++ )      {        prop = &face->properties[i];        FT_FREE( prop->name );        if ( prop->isString )          FT_FREE( prop->value );      }      FT_FREE( face->properties );    }    FT_FREE( face->toc.tables );    FT_FREE( face->root.family_name );    FT_FREE( face->root.available_sizes );    FT_FREE( face->charset_encoding );    FT_FREE( face->charset_registry );    FT_TRACE4(( "DONE_FACE!!!\n" ));    return PCF_Err_Ok;  }  FT_CALLBACK_DEF( FT_Error )  PCF_Face_Init( FT_Stream      stream,                 PCF_Face       face,                 FT_Int         face_index,                 FT_Int         num_params,                 FT_Parameter*  params )  {    FT_Error  error = PCF_Err_Ok;    FT_UNUSED( num_params );    FT_UNUSED( params );    FT_UNUSED( face_index );    error = pcf_load_font( stream, face );    if ( error )      goto Fail;    /* set-up charmap */    {      FT_String  *charset_registry, *charset_encoding;      FT_Bool     unicode_charmap  = 0;      charset_registry = face->charset_registry;      charset_encoding = face->charset_encoding;      if ( ( charset_registry != NULL ) &&           ( charset_encoding != NULL ) )      {        if ( !ft_strcmp( face->charset_registry, "ISO10646" )     ||             ( !ft_strcmp( face->charset_registry, "ISO8859" ) &&               !ft_strcmp( face->charset_encoding, "1" )       )  )          unicode_charmap = 1;      }#ifdef FT_CONFIG_OPTION_USE_CMAPS      {        FT_CharMapRec  charmap;        charmap.face        = FT_FACE( face );        charmap.encoding    = ft_encoding_none;        charmap.platform_id = 0;        charmap.encoding_id = 0;        if ( unicode_charmap )        {          charmap.encoding    = ft_encoding_unicode;          charmap.platform_id = 3;          charmap.encoding_id = 1;        }        error = FT_CMap_New( &pcf_cmap_class, NULL, &charmap, NULL );        /* Select default charmap */        if (face->root.num_charmaps)          face->root.charmap = face->root.charmaps[0];      }#else  /* !FT_CONFIG_OPTION_USE_CMAPS */      /* XXX: charmaps.  For now, report unicode for Unicode and Latin 1 */      face->root.charmaps     = &face->charmap_handle;      face->root.num_charmaps = 1;      face->charmap.encoding    = ft_encoding_none;      face->charmap.platform_id = 0;      face->charmap.encoding_id = 0;      if ( unicode_charmap )      {        face->charmap.encoding    = ft_encoding_unicode;        face->charmap.platform_id = 3;        face->charmap.encoding_id = 1;      }      face->charmap.face   = &face->root;      face->charmap_handle = &face->charmap;      face->root.charmap   = face->charmap_handle;#endif /* !FT_CONFIG_OPTION_USE_CMAPS */    }  Exit:    return error;  Fail:    FT_TRACE2(( "[not a valid PCF file]\n" ));    error = PCF_Err_Unknown_File_Format;  /* error */    goto Exit;  }  static FT_Error  PCF_Set_Pixel_Size( FT_Size  size )  {    PCF_Face face = (PCF_Face)FT_SIZE_FACE( size );    FT_TRACE4(( "rec %d - pres %d\n", size->metrics.y_ppem,                                      face->root.available_sizes->height ));    if ( size->metrics.y_ppem == face->root.available_sizes->height )    {      size->metrics.ascender    = face->accel.fontAscent << 6;      size->metrics.descender   = face->accel.fontDescent * (-64);#if 0      size->metrics.height      = face->accel.maxbounds.ascent << 6;#endif      size->metrics.height      = size->metrics.ascender -                                  size->metrics.descender;      size->metrics.max_advance = face->accel.maxbounds.characterWidth << 6;      return PCF_Err_Ok;    }    else    {      FT_TRACE4(( "size WRONG\n" ));      return PCF_Err_Invalid_Pixel_Size;    }  }  static FT_Error  PCF_Glyph_Load( FT_GlyphSlot  slot,                  FT_Size       size,                  FT_UInt       glyph_index,                  FT_Int        load_flags )  {    PCF_Face    face   = (PCF_Face)FT_SIZE_FACE( size );    FT_Stream   stream = face->root.stream;    FT_Error    error  = PCF_Err_Ok;    FT_Memory   memory = FT_FACE( face )->memory;    FT_Bitmap*  bitmap = &slot->bitmap;    PCF_Metric  metric;    int         bytes;    FT_UNUSED( load_flags );    FT_TRACE4(( "load_glyph %d ---", glyph_index ));    if ( !face )    {      error = PCF_Err_Invalid_Argument;      goto Exit;    }    if ( glyph_index > 0 )      glyph_index--;    metric = face->metrics + glyph_index;    bitmap->rows       = metric->ascent + metric->descent;    bitmap->width      = metric->rightSideBearing - metric->leftSideBearing;    bitmap->num_grays  = 1;    bitmap->pixel_mode = ft_pixel_mode_mono;    FT_TRACE6(( "BIT_ORDER %d ; BYTE_ORDER %d ; GLYPH_PAD %d\n",                  PCF_BIT_ORDER( face->bitmapsFormat ),                  PCF_BYTE_ORDER( face->bitmapsFormat ),                  PCF_GLYPH_PAD( face->bitmapsFormat ) ));    switch ( PCF_GLYPH_PAD( face->bitmapsFormat ) )    {    case 1:      bitmap->pitch = ( bitmap->width + 7 ) >> 3;      break;    case 2:      bitmap->pitch = ( ( bitmap->width + 15 ) >> 4 ) << 1;      break;    case 4:      bitmap->pitch = ( ( bitmap->width + 31 ) >> 5 ) << 2;      break;    case 8:      bitmap->pitch = ( ( bitmap->width + 63 ) >> 6 ) << 3;      break;    default:      return PCF_Err_Invalid_File_Format;    }    /* XXX: to do: are there cases that need repadding the bitmap? */    bytes = bitmap->pitch * bitmap->rows;    if ( FT_ALLOC( bitmap->buffer, bytes ) )      goto Exit;    if ( FT_STREAM_SEEK( metric->bits )          ||         FT_STREAM_READ( bitmap->buffer, bytes ) )      goto Exit;    if ( PCF_BIT_ORDER( face->bitmapsFormat ) != MSBFirst )      BitOrderInvert( bitmap->buffer,bytes );    if ( ( PCF_BYTE_ORDER( face->bitmapsFormat ) !=           PCF_BIT_ORDER( face->bitmapsFormat )  ) )    {      switch ( PCF_SCAN_UNIT( face->bitmapsFormat ) )      {      case 1:        break;      case 2:        TwoByteSwap( bitmap->buffer, bytes );        break;      case 4:        FourByteSwap( bitmap->buffer, bytes );        break;      }    }    slot->bitmap_left = metric->leftSideBearing;    slot->bitmap_top  = metric->ascent;    slot->metrics.horiAdvance  = metric->characterWidth << 6 ;    slot->metrics.horiBearingX = metric->rightSideBearing << 6 ;    slot->metrics.horiBearingY = metric->ascent << 6 ;    slot->metrics.width        = metric->characterWidth << 6 ;    slot->metrics.height       = bitmap->rows << 6;    slot->linearHoriAdvance = (FT_Fixed)bitmap->width << 16;    slot->format            = ft_glyph_format_bitmap;    slot->flags             = FT_GLYPH_OWN_BITMAP;    FT_TRACE4(( " --- ok\n" ));  Exit:    return error;  }  FT_CALLBACK_TABLE_DEF  const FT_Driver_ClassRec  pcf_driver_class =  {    {      ft_module_font_driver,      sizeof ( FT_DriverRec ),      "pcf",      0x10000L,      0x20000L,      0,      (FT_Module_Constructor)0,      (FT_Module_Destructor) 0,      (FT_Module_Requester)  0    },    sizeof( PCF_FaceRec ),    sizeof( FT_SizeRec ),    sizeof( FT_GlyphSlotRec ),    (FT_Face_InitFunc)        PCF_Face_Init,    (FT_Face_DoneFunc)        PCF_Face_Done,    (FT_Size_InitFunc)        0,    (FT_Size_DoneFunc)        0,    (FT_Slot_InitFunc)        0,    (FT_Slot_DoneFunc)        0,    (FT_Size_ResetPointsFunc) PCF_Set_Pixel_Size,    (FT_Size_ResetPixelsFunc) PCF_Set_Pixel_Size,    (FT_Slot_LoadFunc)        PCF_Glyph_Load,#ifndef FT_CONFIG_OPTION_USE_CMAPS    (FT_CharMap_CharIndexFunc)PCF_Char_Get_Index,#else    (FT_CharMap_CharIndexFunc)0,#endif    (FT_Face_GetKerningFunc)  0,    (FT_Face_AttachFunc)      0,    (FT_Face_GetAdvancesFunc) 0,#ifndef FT_CONFIG_OPTION_USE_CMAPS    (FT_CharMap_CharNextFunc) PCF_Char_Get_Next,#else    (FT_CharMap_CharNextFunc) 0#endif  };/* END */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲自拍偷拍综合| 欧美激情自拍偷拍| av在线综合网| 久草热8精品视频在线观看| 国产精品美女久久久久久久 | 亚洲精品少妇30p| 国产亚洲视频系列| 日韩免费一区二区| 7777精品伊人久久久大香线蕉最新版| 99久久伊人精品| fc2成人免费人成在线观看播放| 久久黄色级2电影| 日本不卡中文字幕| 青青草国产精品97视觉盛宴 | 欧美亚洲一区二区在线| a在线欧美一区| www.性欧美| 91亚洲国产成人精品一区二区三| 成人黄色一级视频| 白白色 亚洲乱淫| 在线观看一区二区精品视频| 91国偷自产一区二区三区成为亚洲经典| av亚洲精华国产精华| 成人av电影在线观看| 色婷婷一区二区| 欧美日韩激情在线| 日韩一级在线观看| 中文字幕av一区二区三区 | 欧美国产一区二区| 亚洲国产经典视频| 亚洲综合一区二区| 日韩成人免费看| 国产成人亚洲综合a∨婷婷| 99国产精品久久久久久久久久| av影院午夜一区| 日韩一区国产二区欧美三区| 久久综合999| 亚洲日本免费电影| 日本一区中文字幕| 国产寡妇亲子伦一区二区| 一本大道久久a久久综合| 欧美一区二区三区人| 国产亚洲女人久久久久毛片| 亚洲一区二区三区自拍| 国产美女在线观看一区| 欧美亚洲另类激情小说| 26uuu色噜噜精品一区二区| 一级特黄大欧美久久久| 成人成人成人在线视频| 日韩欧美一区二区视频| 亚洲永久免费av| 从欧美一区二区三区| 日韩女优av电影在线观看| 亚洲一区二区三区国产| 成人app软件下载大全免费| 日韩亚洲欧美高清| 婷婷久久综合九色国产成人| 91色九色蝌蚪| 国产精品久久一卡二卡| 成人教育av在线| 久久久久久久一区| 韩国三级在线一区| 国产亚洲精久久久久久| 国内精品在线播放| 精品国内片67194| 精品中文字幕一区二区| 欧美性色综合网| 亚洲成av人片在www色猫咪| 在线观看亚洲专区| 国产xxx精品视频大全| 精品三级av在线| 国内精品久久久久影院薰衣草| 精品少妇一区二区三区在线播放| 捆绑调教一区二区三区| 精品国产a毛片| 国产.欧美.日韩| 国产精品传媒入口麻豆| 色婷婷av一区二区| 亚洲午夜在线电影| 日韩欧美国产一二三区| 激情欧美一区二区三区在线观看| 久久精品水蜜桃av综合天堂| 不卡的av中国片| 亚洲夂夂婷婷色拍ww47| 精品日产卡一卡二卡麻豆| 国产成人av电影在线观看| 亚洲黄色性网站| 久久综合色婷婷| 在线观看免费视频综合| 美国毛片一区二区三区| 国产精品久久一卡二卡| 日韩午夜在线观看视频| 色狠狠色噜噜噜综合网| 麻豆成人免费电影| 亚洲精品成人在线| 国产亚洲精久久久久久| 欧美视频在线播放| 成人一区在线观看| 久久精品免费看| 亚洲一二三四在线观看| 国产精品人成在线观看免费| 91精品国模一区二区三区| 国产成a人无v码亚洲福利| 石原莉奈在线亚洲二区| 亚洲精品国产一区二区三区四区在线| 欧美videos大乳护士334| 欧美日韩一区二区不卡| 色综合天天性综合| 不卡的av网站| 国产91精品精华液一区二区三区 | 国产日韩欧美综合一区| 欧美一区二区视频在线观看2020| 91在线一区二区三区| 国产高清成人在线| 国产在线精品不卡| 国产一区二区久久| 看片网站欧美日韩| 国产尤物一区二区在线| 国产伦精品一区二区三区免费迷| 激情综合一区二区三区| 蜜桃一区二区三区在线| 日韩1区2区日韩1区2区| 麻豆精品在线观看| 久久99蜜桃精品| 国产酒店精品激情| 成人性视频网站| 色哟哟国产精品免费观看| 91最新地址在线播放| 欧美性高清videossexo| 日韩一区二区三区三四区视频在线观看| 欧美日本高清视频在线观看| 91精品国产乱码久久蜜臀| 2023国产精品自拍| 国产精品福利电影一区二区三区四区| 国产精品视频一二三区| 洋洋av久久久久久久一区| 免费三级欧美电影| 69精品人人人人| 中文成人av在线| 午夜精品一区二区三区三上悠亚| 免费成人av资源网| 国产99精品视频| 欧美色图在线观看| 久久午夜免费电影| 亚洲高清不卡在线| 国产aⅴ综合色| 日韩视频一区二区在线观看| 日韩毛片在线免费观看| 全国精品久久少妇| 91福利社在线观看| 国产色综合一区| 麻豆中文一区二区| 欧美视频在线一区| 国产精品免费视频观看| 美女久久久精品| 777亚洲妇女| 亚洲丶国产丶欧美一区二区三区| 国产成人h网站| 欧美videossexotv100| 天天做天天摸天天爽国产一区| av亚洲产国偷v产偷v自拍| 久久精品夜夜夜夜久久| 美女国产一区二区| 日韩写真欧美这视频| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧洲另类一二三四区| 亚洲国产aⅴ成人精品无吗| 99久久婷婷国产综合精品| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 国产乱色国产精品免费视频| 91精品黄色片免费大全| 亚洲国产精品久久艾草纯爱 | 国产不卡在线播放| 久久色中文字幕| 精品制服美女久久| 日韩免费在线观看| 久久精品国产精品青草| 欧美军同video69gay| 亚洲图片有声小说| 欧美中文字幕一区二区三区| 亚洲欧美日韩中文字幕一区二区三区| 国产麻豆视频一区| 国产精品久久久久久亚洲伦| 国产成人午夜精品5599| 久久精品欧美日韩| 国产成人鲁色资源国产91色综 | 99热这里都是精品| 亚洲欧美欧美一区二区三区| 99久久免费精品| 午夜欧美一区二区三区在线播放| 欧美日韩在线亚洲一区蜜芽| 日韩影院精彩在线| 精品国产免费一区二区三区四区| 国产九色精品成人porny| 国产精品久久免费看| 在线精品视频一区二区三四| 美女脱光内衣内裤视频久久影院| 久久亚洲综合色一区二区三区 | 久久免费偷拍视频| 91浏览器打开|