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

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

?? pcfread.c

?? 智能設(shè)備中PDF閱讀器的源碼!用于windows mobile2003或者WM5以上
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*  pcfread.c

    FreeType font driver for pcf fonts

  Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006 by
  Francesco Zappa Nardelli

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, 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 IN
THE SOFTWARE.
*/


#include <ft2build.h>

#include FT_INTERNAL_DEBUG_H
#include FT_INTERNAL_STREAM_H
#include FT_INTERNAL_OBJECTS_H

#include "pcf.h"
#include "pcfdrivr.h"
#include "pcfread.h"

#include "pcferror.h"


  /*************************************************************************/
  /*                                                                       */
  /* 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_pcfread


#if defined( FT_DEBUG_LEVEL_TRACE )
  static const char* const  tableNames[] =
  {
    "prop", "accl", "mtrcs", "bmps", "imtrcs",
    "enc", "swidth", "names", "accel"
  };
#endif


  static
  const FT_Frame_Field  pcf_toc_header[] =
  {
#undef  FT_STRUCTURE
#define FT_STRUCTURE  PCF_TocRec

    FT_FRAME_START( 8 ),
      FT_FRAME_ULONG_LE( version ),
      FT_FRAME_ULONG_LE( count ),
    FT_FRAME_END
  };


  static
  const FT_Frame_Field  pcf_table_header[] =
  {
#undef  FT_STRUCTURE
#define FT_STRUCTURE  PCF_TableRec

    FT_FRAME_START( 16  ),
      FT_FRAME_ULONG_LE( type ),
      FT_FRAME_ULONG_LE( format ),
      FT_FRAME_ULONG_LE( size ),
      FT_FRAME_ULONG_LE( offset ),
    FT_FRAME_END
  };


  static FT_Error
  pcf_read_TOC( FT_Stream  stream,
                PCF_Face   face )
  {
    FT_Error   error;
    PCF_Toc    toc = &face->toc;
    PCF_Table  tables;

    FT_Memory  memory = FT_FACE(face)->memory;
    FT_UInt    n;


    if ( FT_STREAM_SEEK ( 0 )                          ||
         FT_STREAM_READ_FIELDS ( pcf_toc_header, toc ) )
      return PCF_Err_Cannot_Open_Resource;

    if ( toc->version != PCF_FILE_VERSION                 ||
         toc->count   >  FT_ARRAY_MAX( face->toc.tables ) )
      return PCF_Err_Invalid_File_Format;

    if ( FT_NEW_ARRAY( face->toc.tables, toc->count ) )
      return PCF_Err_Out_Of_Memory;

    tables = face->toc.tables;
    for ( n = 0; n < toc->count; n++ )
    {
      if ( FT_STREAM_READ_FIELDS( pcf_table_header, tables ) )
        goto Exit;
      tables++;
    }

#if defined( FT_DEBUG_LEVEL_TRACE )

    {
      FT_UInt      i, j;
      const char*  name = "?";


      FT_TRACE4(( "pcf_read_TOC:\n" ));

      FT_TRACE4(( "  number of tables: %ld\n", face->toc.count ));

      tables = face->toc.tables;
      for ( i = 0; i < toc->count; i++ )
      {
        for( j = 0; j < sizeof ( tableNames ) / sizeof ( tableNames[0] ); j++ )
          if ( tables[i].type == (FT_UInt)( 1 << j ) )
            name = tableNames[j];

        FT_TRACE4(( "  %d: type=%s, format=0x%X, "
                    "size=%ld (0x%lX), offset=%ld (0x%lX)\n",
                    i, name,
                    tables[i].format,
                    tables[i].size, tables[i].size,
                    tables[i].offset, tables[i].offset ));
      }
    }

#endif

    return PCF_Err_Ok;

  Exit:
    FT_FREE( face->toc.tables );
    return error;
  }


  static
  const FT_Frame_Field  pcf_metric_header[] =
  {
#undef  FT_STRUCTURE
#define FT_STRUCTURE  PCF_MetricRec

    FT_FRAME_START( 12 ),
      FT_FRAME_SHORT_LE( leftSideBearing ),
      FT_FRAME_SHORT_LE( rightSideBearing ),
      FT_FRAME_SHORT_LE( characterWidth ),
      FT_FRAME_SHORT_LE( ascent ),
      FT_FRAME_SHORT_LE( descent ),
      FT_FRAME_SHORT_LE( attributes ),
    FT_FRAME_END
  };


  static
  const FT_Frame_Field  pcf_metric_msb_header[] =
  {
#undef  FT_STRUCTURE
#define FT_STRUCTURE  PCF_MetricRec

    FT_FRAME_START( 12 ),
      FT_FRAME_SHORT( leftSideBearing ),
      FT_FRAME_SHORT( rightSideBearing ),
      FT_FRAME_SHORT( characterWidth ),
      FT_FRAME_SHORT( ascent ),
      FT_FRAME_SHORT( descent ),
      FT_FRAME_SHORT( attributes ),
    FT_FRAME_END
  };


  static
  const FT_Frame_Field  pcf_compressed_metric_header[] =
  {
#undef  FT_STRUCTURE
#define FT_STRUCTURE  PCF_Compressed_MetricRec

    FT_FRAME_START( 5 ),
      FT_FRAME_BYTE( leftSideBearing ),
      FT_FRAME_BYTE( rightSideBearing ),
      FT_FRAME_BYTE( characterWidth ),
      FT_FRAME_BYTE( ascent ),
      FT_FRAME_BYTE( descent ),
    FT_FRAME_END
  };


  static FT_Error
  pcf_get_metric( FT_Stream   stream,
                  FT_ULong    format,
                  PCF_Metric  metric )
  {
    FT_Error  error = PCF_Err_Ok;


    if ( PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) )
    {
      const FT_Frame_Field*  fields;


      /* parsing normal metrics */
      fields = PCF_BYTE_ORDER( format ) == MSBFirst
               ? pcf_metric_msb_header
               : pcf_metric_header;

      /* the following sets 'error' but doesn't return in case of failure */
      (void)FT_STREAM_READ_FIELDS( fields, metric );
    }
    else
    {
      PCF_Compressed_MetricRec  compr;


      /* parsing compressed metrics */
      if ( FT_STREAM_READ_FIELDS( pcf_compressed_metric_header, &compr ) )
        goto Exit;

      metric->leftSideBearing  = (FT_Short)( compr.leftSideBearing  - 0x80 );
      metric->rightSideBearing = (FT_Short)( compr.rightSideBearing - 0x80 );
      metric->characterWidth   = (FT_Short)( compr.characterWidth   - 0x80 );
      metric->ascent           = (FT_Short)( compr.ascent           - 0x80 );
      metric->descent          = (FT_Short)( compr.descent          - 0x80 );
      metric->attributes       = 0;
    }

  Exit:
    return error;
  }


  static FT_Error
  pcf_seek_to_table_type( FT_Stream  stream,
                          PCF_Table  tables,
                          FT_Int     ntables,
                          FT_ULong   type,
                          FT_ULong  *aformat,
                          FT_ULong  *asize )
  {
    FT_Error  error = PCF_Err_Invalid_File_Format;
    FT_Int    i;


    for ( i = 0; i < ntables; i++ )
      if ( tables[i].type == type )
      {
        if ( stream->pos > tables[i].offset ) {
          error = PCF_Err_Invalid_Stream_Skip;
          goto Fail;
        }

        if ( FT_STREAM_SKIP( tables[i].offset - stream->pos ) ) {
          error = PCF_Err_Invalid_Stream_Skip;
          goto Fail;
        }

        *asize   = tables[i].size;  /* unused - to be removed */
        *aformat = tables[i].format;

        return PCF_Err_Ok;
      }

  Fail:
    return error;
  }


  static FT_Bool
  pcf_has_table_type( PCF_Table  tables,
                      FT_Int     ntables,
                      FT_ULong   type )
  {
    FT_Int  i;


    for ( i = 0; i < ntables; i++ )
      if ( tables[i].type == type )
        return TRUE;

    return FALSE;
  }


  static
  const FT_Frame_Field  pcf_property_header[] =
  {
#undef  FT_STRUCTURE
#define FT_STRUCTURE  PCF_ParsePropertyRec

    FT_FRAME_START( 9 ),
      FT_FRAME_LONG_LE( name ),
      FT_FRAME_BYTE   ( isString ),
      FT_FRAME_LONG_LE( value ),
    FT_FRAME_END
  };


  static
  const FT_Frame_Field  pcf_property_msb_header[] =
  {
#undef  FT_STRUCTURE
#define FT_STRUCTURE  PCF_ParsePropertyRec

    FT_FRAME_START( 9 ),
      FT_FRAME_LONG( name ),
      FT_FRAME_BYTE( isString ),
      FT_FRAME_LONG( value ),
    FT_FRAME_END
  };


  FT_LOCAL_DEF( PCF_Property )
  pcf_find_property( PCF_Face          face,
                     const FT_String*  prop )
  {
    PCF_Property  properties = face->properties;
    FT_Bool       found      = 0;
    int           i;


    for ( i = 0 ; i < face->nprops && !found; i++ )
    {
      if ( !ft_strcmp( properties[i].name, prop ) )
        found = 1;
    }

    if ( found )
      return properties + i - 1;
    else
      return NULL;
  }


  static FT_Error
  pcf_get_properties( FT_Stream  stream,
                      PCF_Face   face )
  {
    PCF_ParseProperty  props      = 0;
    PCF_Property       properties = 0;
    FT_Int             nprops, i;
    FT_ULong           format, size;
    FT_Error           error;
    FT_Memory          memory     = FT_FACE(face)->memory;
    FT_ULong           string_size;
    FT_String*         strings    = 0;


    error = pcf_seek_to_table_type( stream,
                                    face->toc.tables,
                                    face->toc.count,
                                    PCF_PROPERTIES,
                                    &format,
                                    &size );
    if ( error )
      goto Bail;

    if ( FT_READ_ULONG_LE( format ) )
      goto Bail;

    FT_TRACE4(( "pcf_get_properties:\n" ));

    FT_TRACE4(( "  format = %ld\n", format ));

    if ( !PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) )
      goto Bail;

    if ( PCF_BYTE_ORDER( format ) == MSBFirst )
      (void)FT_READ_ULONG( nprops );
    else
      (void)FT_READ_ULONG_LE( nprops );
    if ( error )
      goto Bail;

    FT_TRACE4(( "  nprop = %d\n", nprops ));

    if ( FT_NEW_ARRAY( props, nprops ) )
      goto Bail;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧洲色大大久久| 欧美国产精品劲爆| 亚洲午夜久久久久久久久电影网| 国内精品在线播放| 欧美精品一区二区三区在线播放| 亚洲大片免费看| 91精品国产aⅴ一区二区| 午夜私人影院久久久久| 日韩一卡二卡三卡国产欧美| 日本免费在线视频不卡一不卡二| 欧美四级电影网| 久久国产精品99精品国产| 久久久久国产成人精品亚洲午夜| 精品一区二区免费在线观看| 精品乱人伦一区二区三区| 国产传媒一区在线| 亚洲精品日韩专区silk| 日韩一区二区在线免费观看| 久草在线在线精品观看| 中文字幕精品三区| 欧美女孩性生活视频| 九九热在线视频观看这里只有精品| 精品欧美黑人一区二区三区| 高清国产午夜精品久久久久久| 亚洲黄色录像片| 久久久久久综合| 欧美日韩视频一区二区| 丰满亚洲少妇av| 日韩不卡手机在线v区| 亚洲欧洲日韩综合一区二区| 日韩你懂的在线播放| 97精品久久久久中文字幕| 国产一区美女在线| 天堂影院一区二区| 亚洲一区二区欧美日韩 | 国产美女久久久久| 亚洲狠狠丁香婷婷综合久久久| 精品少妇一区二区三区| 欧美日韩一区在线| 91老司机福利 在线| 国产成人精品三级麻豆| 久久精品国产99| 日韩精品乱码av一区二区| 一区二区三区在线播放| 国产精品系列在线| 欧美激情艳妇裸体舞| 欧美xxxxxxxx| 欧美一级专区免费大片| 欧美丰满一区二区免费视频| 色婷婷国产精品久久包臀| 91最新地址在线播放| 成人性生交大片免费| 国产宾馆实践打屁股91| 成人网页在线观看| av资源网一区| 欧美在线观看一区| 在线不卡免费av| 日韩欧美国产一区二区三区| 日韩欧美成人午夜| 国产精品亲子乱子伦xxxx裸| 亚洲国产精华液网站w| 国产精品久久久久四虎| 亚洲麻豆国产自偷在线| 香蕉乱码成人久久天堂爱免费| 日本女优在线视频一区二区| 国产mv日韩mv欧美| 欧美吞精做爰啪啪高潮| 久久青草欧美一区二区三区| 成人欧美一区二区三区视频网页| 亚洲一区二区影院| 99精品国产91久久久久久| 欧美日精品一区视频| 欧美精品一区二区三区高清aⅴ| 国产精品三级av| 免费观看在线综合色| 色综合视频在线观看| 欧美大片在线观看| 亚洲图片欧美一区| 国产乱理伦片在线观看夜一区| 在线国产电影不卡| 国产欧美一区二区精品婷婷| 午夜影院在线观看欧美| caoporn国产精品| 欧美大白屁股肥臀xxxxxx| 亚洲乱码日产精品bd| 国产成人av电影| 欧美成人a视频| 免费成人av在线播放| 欧美亚洲国产一卡| 亚洲影院久久精品| 色94色欧美sute亚洲线路一久| 久久九九全国免费| 久久精品噜噜噜成人av农村| 在线视频中文字幕一区二区| 欧美国产日韩在线观看| 成人综合日日夜夜| 国产精品久久久一区麻豆最新章节| 秋霞成人午夜伦在线观看| 欧美一区二区精品在线| 六月丁香婷婷色狠狠久久| 日韩视频一区二区| 激情国产一区二区 | 欧美在线不卡视频| 一区二区三区在线视频免费观看| 暴力调教一区二区三区| 亚洲色图视频网| 欧美在线看片a免费观看| 爽爽淫人综合网网站 | 欧美日韩1234| 婷婷激情综合网| 日韩亚洲欧美一区二区三区| 国产一区 二区| 综合久久综合久久| 欧美日本国产一区| 国产乱子伦一区二区三区国色天香 | 亚洲一区成人在线| 日韩三级精品电影久久久 | 精品久久久久久久久久久院品网| 国产主播一区二区| 自拍偷自拍亚洲精品播放| 欧美精品一卡两卡| 国产伦理精品不卡| 日韩激情一区二区| 中文字幕五月欧美| 日韩欧美在线网站| 91成人国产精品| 国产99精品视频| 免费成人性网站| 亚洲三级久久久| 久久久亚洲综合| 欧美日韩国产综合一区二区| 国产麻豆精品95视频| 亚洲123区在线观看| 亚洲人吸女人奶水| 久久精品亚洲一区二区三区浴池| 欧美另类久久久品| 色综合色综合色综合| 成人app在线观看| 国产呦精品一区二区三区网站| 五月激情六月综合| 亚洲一区在线电影| 亚洲综合999| 亚洲卡通欧美制服中文| 欧美国产日产图区| 欧美激情一二三区| 国产精品素人一区二区| 亚洲国产高清不卡| 国产精品沙发午睡系列990531| 国产精品福利一区| 亚洲欧洲精品一区二区精品久久久 | 国产精品99久久不卡二区| 久久精品99久久久| 极品瑜伽女神91| 福利电影一区二区| av一区二区三区| 欧美性做爰猛烈叫床潮| 欧美一区二区在线免费观看| 7777精品久久久大香线蕉| 91精品国产综合久久久久| www久久久久| 亚洲色欲色欲www| 亚洲午夜精品久久久久久久久| 日本亚洲三级在线| 国产成人午夜高潮毛片| 91免费看片在线观看| 欧美日韩精品三区| 国产精品私人影院| 日韩av在线播放中文字幕| 秋霞影院一区二区| 91理论电影在线观看| 日韩视频一区二区在线观看| 国产精品美女久久久久久久久久久| 伊人开心综合网| 成人福利视频网站| 精品欧美乱码久久久久久1区2区| 亚洲欧美日韩一区二区三区在线观看| 午夜久久久影院| 91视频在线观看免费| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲三级电影全部在线观看高清| 免费成人结看片| 欧美日本视频在线| 一级特黄大欧美久久久| 久久国产夜色精品鲁鲁99| 欧美色图激情小说| 国产精品白丝在线| 国产成人午夜视频| 精品国产成人在线影院| 日韩高清不卡一区二区三区| 91在线国内视频| 亚洲欧洲韩国日本视频| 成人综合在线网站| 日韩黄色片在线观看| 日本乱人伦一区| 亚洲欧美激情视频在线观看一区二区三区| 久久99精品久久只有精品| 欧美理论在线播放| 久久精品国内一区二区三区| 91精品国产一区二区三区蜜臀| 日本在线不卡视频|