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

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

?? pcfread.c

?? 智能設(shè)備中PDF閱讀器的源碼!用于windows mobile2003或者WM5以上
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
  const FT_Frame_Field  pcf_accel_msb_header[] =
  {
#undef  FT_STRUCTURE
#define FT_STRUCTURE  PCF_AccelRec

    FT_FRAME_START( 20 ),
      FT_FRAME_BYTE      ( noOverlap ),
      FT_FRAME_BYTE      ( constantMetrics ),
      FT_FRAME_BYTE      ( terminalFont ),
      FT_FRAME_BYTE      ( constantWidth ),
      FT_FRAME_BYTE      ( inkInside ),
      FT_FRAME_BYTE      ( inkMetrics ),
      FT_FRAME_BYTE      ( drawDirection ),
      FT_FRAME_SKIP_BYTES( 1 ),
      FT_FRAME_LONG      ( fontAscent ),
      FT_FRAME_LONG      ( fontDescent ),
      FT_FRAME_LONG      ( maxOverlap ),
    FT_FRAME_END
  };


  static FT_Error
  pcf_get_accel( FT_Stream  stream,
                 PCF_Face   face,
                 FT_ULong   type )
  {
    FT_ULong   format, size;
    FT_Error   error = PCF_Err_Ok;
    PCF_Accel  accel = &face->accel;


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

    error = FT_READ_ULONG_LE( format );

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

    if ( PCF_BYTE_ORDER( format ) == MSBFirst )
    {
      if ( FT_STREAM_READ_FIELDS( pcf_accel_msb_header, accel ) )
        goto Bail;
    }
    else
    {
      if ( FT_STREAM_READ_FIELDS( pcf_accel_header, accel ) )
        goto Bail;
    }

    error = pcf_get_metric( stream,
                            format & ( ~PCF_FORMAT_MASK ),
                            &(accel->minbounds) );
    if ( error )
      goto Bail;

    error = pcf_get_metric( stream,
                            format & ( ~PCF_FORMAT_MASK ),
                            &(accel->maxbounds) );
    if ( error )
      goto Bail;

    if ( PCF_FORMAT_MATCH( format, PCF_ACCEL_W_INKBOUNDS ) )
    {
      error = pcf_get_metric( stream,
                              format & ( ~PCF_FORMAT_MASK ),
                              &(accel->ink_minbounds) );
      if ( error )
        goto Bail;

      error = pcf_get_metric( stream,
                              format & ( ~PCF_FORMAT_MASK ),
                              &(accel->ink_maxbounds) );
      if ( error )
        goto Bail;
    }
    else
    {
      accel->ink_minbounds = accel->minbounds; /* I'm not sure about this */
      accel->ink_maxbounds = accel->maxbounds;
    }
    return error;

  Bail:
    return error;
  }


  static FT_Error
  pcf_interpret_style( PCF_Face  pcf )
  {
    FT_Error   error  = PCF_Err_Ok;
    FT_Face    face   = FT_FACE( pcf );
    FT_Memory  memory = face->memory;

    PCF_Property  prop;

    char  *istr = NULL, *bstr = NULL;
    char  *sstr = NULL, *astr = NULL;

    int  parts = 0, len = 0;


    face->style_flags = 0;

    prop = pcf_find_property( pcf, "SLANT" );
    if ( prop && prop->isString                                       &&
         ( *(prop->value.atom) == 'O' || *(prop->value.atom) == 'o' ||
           *(prop->value.atom) == 'I' || *(prop->value.atom) == 'i' ) )
    {
      face->style_flags |= FT_STYLE_FLAG_ITALIC;
      istr = ( *(prop->value.atom) == 'O' || *(prop->value.atom) == 'o' )
               ? (char *)"Oblique"
               : (char *)"Italic";
      len += ft_strlen( istr );
      parts++;
    }

    prop = pcf_find_property( pcf, "WEIGHT_NAME" );
    if ( prop && prop->isString                                       &&
         ( *(prop->value.atom) == 'B' || *(prop->value.atom) == 'b' ) )
    {
      face->style_flags |= FT_STYLE_FLAG_BOLD;
      bstr = (char *)"Bold";
      len += ft_strlen( bstr );
      parts++;
    }

    prop = pcf_find_property( pcf, "SETWIDTH_NAME" );
    if ( prop && prop->isString                                        &&
         *(prop->value.atom)                                           &&
         !( *(prop->value.atom) == 'N' || *(prop->value.atom) == 'n' ) )
    {
      sstr = (char *)(prop->value.atom);
      len += ft_strlen( sstr );
      parts++;
    }

    prop = pcf_find_property( pcf, "ADD_STYLE_NAME" );
    if ( prop && prop->isString                                        &&
         *(prop->value.atom)                                           &&
         !( *(prop->value.atom) == 'N' || *(prop->value.atom) == 'n' ) )
    {
      astr = (char *)(prop->value.atom);
      len += ft_strlen( astr );
      parts++;
    }

    if ( !parts || !len )
    {
      if ( FT_ALLOC( face->style_name, 8 ) )
        return error;
      ft_strcpy( face->style_name, "Regular" );
      face->style_name[7] = '\0';
    }
    else
    {
      char          *style, *s;
      unsigned int  i;


      if ( FT_ALLOC( style, len + parts ) )
        return error;

      s = style;

      if ( astr )
      {
        ft_strcpy( s, astr );
        for ( i = 0; i < ft_strlen( astr ); i++, s++ )
          if ( *s == ' ' )
            *s = '-';                     /* replace spaces with dashes */
        *(s++) = ' ';
      }
      if ( bstr )
      {
        ft_strcpy( s, bstr );
        s += ft_strlen( bstr );
        *(s++) = ' ';
      }
      if ( istr )
      {
        ft_strcpy( s, istr );
        s += ft_strlen( istr );
        *(s++) = ' ';
      }
      if ( sstr )
      {
        ft_strcpy( s, sstr );
        for ( i = 0; i < ft_strlen( sstr ); i++, s++ )
          if ( *s == ' ' )
            *s = '-';                     /* replace spaces with dashes */
        *(s++) = ' ';
      }
      *(--s) = '\0';        /* overwrite last ' ', terminate the string */

      face->style_name = style;                     /* allocated string */
    }

    return error;
  }


  FT_LOCAL_DEF( FT_Error )
  pcf_load_font( FT_Stream  stream,
                 PCF_Face   face )
  {
    FT_Error   error  = PCF_Err_Ok;
    FT_Memory  memory = FT_FACE(face)->memory;
    FT_Bool    hasBDFAccelerators;


    error = pcf_read_TOC( stream, face );
    if ( error )
      goto Exit;

    error = pcf_get_properties( stream, face );
    if ( error )
      goto Exit;

    /* Use the old accelerators if no BDF accelerators are in the file. */
    hasBDFAccelerators = pcf_has_table_type( face->toc.tables,
                                             face->toc.count,
                                             PCF_BDF_ACCELERATORS );
    if ( !hasBDFAccelerators )
    {
      error = pcf_get_accel( stream, face, PCF_ACCELERATORS );
      if ( error )
        goto Exit;
    }

    /* metrics */
    error = pcf_get_metrics( stream, face );
    if ( error )
      goto Exit;

    /* bitmaps */
    error = pcf_get_bitmaps( stream, face );
    if ( error )
      goto Exit;

    /* encodings */
    error = pcf_get_encodings( stream, face );
    if ( error )
      goto Exit;

    /* BDF style accelerators (i.e. bounds based on encoded glyphs) */
    if ( hasBDFAccelerators )
    {
      error = pcf_get_accel( stream, face, PCF_BDF_ACCELERATORS );
      if ( error )
        goto Exit;
    }

    /* XXX: TO DO: inkmetrics and glyph_names are missing */

    /* now construct the face object */
    {
      FT_Face       root = FT_FACE( face );
      PCF_Property  prop;


      root->num_faces  = 1;
      root->face_index = 0;
      root->face_flags = FT_FACE_FLAG_FIXED_SIZES |
                         FT_FACE_FLAG_HORIZONTAL  |
                         FT_FACE_FLAG_FAST_GLYPHS;

      if ( face->accel.constantWidth )
        root->face_flags |= FT_FACE_FLAG_FIXED_WIDTH;

      if ( ( error = pcf_interpret_style( face ) ) != 0 )
         goto Exit;

      prop = pcf_find_property( face, "FAMILY_NAME" );
      if ( prop && prop->isString )
      {
        int  l = ft_strlen( prop->value.atom ) + 1;


        if ( FT_NEW_ARRAY( root->family_name, l ) )
          goto Exit;
        ft_strcpy( root->family_name, prop->value.atom );
      }
      else
        root->family_name = NULL;

      /* Note: We shift all glyph indices by +1 since we must
       * respect the convention that glyph 0 always corresponds
       * to the "missing glyph".
       *
       * This implies bumping the number of "available" glyphs by 1.
       */
      root->num_glyphs = face->nmetrics + 1;

      root->num_fixed_sizes = 1;
      if ( FT_NEW_ARRAY( root->available_sizes, 1 ) )
        goto Exit;

      {
        FT_Bitmap_Size*  bsize = root->available_sizes;
        FT_Short         resolution_x = 0, resolution_y = 0;


        FT_MEM_ZERO( bsize, sizeof ( FT_Bitmap_Size ) );

#if 0
        bsize->height = face->accel.maxbounds.ascent << 6;
#endif
        bsize->height = (FT_Short)( face->accel.fontAscent +
                                    face->accel.fontDescent );

        prop = pcf_find_property( face, "AVERAGE_WIDTH" );
        if ( prop )
          bsize->width = (FT_Short)( ( prop->value.integer + 5 ) / 10 );
        else
          bsize->width = (FT_Short)( bsize->height * 2/3 );

        prop = pcf_find_property( face, "POINT_SIZE" );
        if ( prop )
          /* convert from 722.7 decipoints to 72 points per inch */
          bsize->size =
            (FT_Pos)( ( prop->value.integer * 64 * 7200 + 36135L ) / 72270L );

        prop = pcf_find_property( face, "PIXEL_SIZE" );
        if ( prop )
          bsize->y_ppem = (FT_Short)prop->value.integer << 6;

        prop = pcf_find_property( face, "RESOLUTION_X" );
        if ( prop )
          resolution_x = (FT_Short)prop->value.integer;

        prop = pcf_find_property( face, "RESOLUTION_Y" );
        if ( prop )
          resolution_y = (FT_Short)prop->value.integer;

        if ( bsize->y_ppem == 0 )
        {
          bsize->y_ppem = bsize->size;
          if ( resolution_y )
            bsize->y_ppem = bsize->y_ppem * resolution_y / 72;
        }
        if ( resolution_x && resolution_y )
          bsize->x_ppem = bsize->y_ppem * resolution_x / resolution_y;
        else
          bsize->x_ppem = bsize->y_ppem;
      }

      /* set up charset */
      {
        PCF_Property  charset_registry = 0, charset_encoding = 0;


        charset_registry = pcf_find_property( face, "CHARSET_REGISTRY" );
        charset_encoding = pcf_find_property( face, "CHARSET_ENCODING" );

        if ( charset_registry && charset_registry->isString &&
             charset_encoding && charset_encoding->isString )
        {
          if ( FT_NEW_ARRAY( face->charset_encoding,
                             ft_strlen( charset_encoding->value.atom ) + 1 ) )
            goto Exit;

          if ( FT_NEW_ARRAY( face->charset_registry,
                             ft_strlen( charset_registry->value.atom ) + 1 ) )
            goto Exit;

          ft_strcpy( face->charset_registry, charset_registry->value.atom );
          ft_strcpy( face->charset_encoding, charset_encoding->value.atom );
        }
      }
    }

  Exit:
    if ( error )
    {
      /* this is done to respect the behaviour of the original */
      /* PCF font driver.                                      */
      error = PCF_Err_Invalid_File_Format;
    }

    return error;
  }


/* END */

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产.欧美.日韩| 777a∨成人精品桃花网| 欧美日韩电影在线| 精品日韩99亚洲| 一区二区三区av电影| 国产真实乱对白精彩久久| 日本乱人伦一区| 久久精品这里都是精品| 婷婷久久综合九色国产成人| 成人av网址在线观看| 精品日韩av一区二区| 一区二区三区精品久久久| 国产精品白丝jk白祙喷水网站| 日本精品视频一区二区| 国产精品欧美综合在线| 久久精品国产99| 欧美伦理视频网站| 亚洲一区在线观看免费观看电影高清| 国产成人精品免费网站| 日韩精品一区二区三区中文精品| 亚洲乱码日产精品bd| 成人免费毛片a| 亚洲精品在线电影| 秋霞电影网一区二区| 欧美男男青年gay1069videost| 综合色中文字幕| 成人影视亚洲图片在线| 久久久久久久久久久久电影| 日韩国产欧美三级| 欧美精品日韩一区| 日韩在线a电影| 欧美视频一区二区三区| 亚洲综合激情网| 日本韩国一区二区三区视频| 亚洲视频在线观看三级| 91在线云播放| 中文字幕一区视频| 99久久精品国产一区| 一区二区中文视频| 99视频精品在线| 亚洲精品久久7777| 欧美午夜精品久久久久久孕妇| 亚洲精品高清视频在线观看| 欧美少妇bbb| 爽好久久久欧美精品| 欧美一级免费观看| 久草这里只有精品视频| 久久久久久久久久久久电影| 成人一区二区三区中文字幕| 最近日韩中文字幕| 在线视频一区二区三| 亚洲18色成人| 日韩欧美一卡二卡| 国产激情视频一区二区在线观看| 国产午夜精品理论片a级大结局| 丰满少妇久久久久久久| 亚洲卡通动漫在线| 欧美久久高跟鞋激| 99久久国产综合精品麻豆| 亚洲欧美日韩一区二区| 欧美艳星brazzers| 免费人成精品欧美精品| 久久久久久一级片| 欧美亚洲国产一区二区三区va| 亚洲国产精品欧美一二99| 日韩色视频在线观看| 国产成人精品免费视频网站| 亚洲手机成人高清视频| 欧美一区二区在线视频| 国产成人免费视频精品含羞草妖精| 国产精品国产a级| 欧美日韩综合不卡| 国产麻豆成人传媒免费观看| 亚洲美女区一区| 日韩欧美自拍偷拍| 成人97人人超碰人人99| 日韩专区中文字幕一区二区| 国产日韩三级在线| 欧美日韩不卡一区二区| 国产成人精品www牛牛影视| 一区二区三区国产豹纹内裤在线 | 亚洲色图都市小说| 欧美精品自拍偷拍| 成人一区二区三区视频| 日本三级韩国三级欧美三级| 国产精品国产自产拍在线| 欧美精品久久久久久久多人混战| 国产精品91xxx| 午夜精品久久一牛影视| 一区二区中文字幕在线| 精品国产乱码久久久久久闺蜜 | 国产精品视频免费看| 欧美日本一区二区在线观看| 丁香婷婷综合网| 奇米一区二区三区| 一区二区久久久久| 国产精品久久久久久久久晋中| 91精品国产91久久久久久一区二区 | 亚洲高清久久久| 久久久99久久| 精品日韩欧美一区二区| 91精品国产色综合久久不卡电影 | 久88久久88久久久| 亚洲国产成人av网| 成人免费小视频| 国产网站一区二区| 国产亚洲一区字幕| 日韩三级.com| 日韩欧美激情四射| 制服.丝袜.亚洲.中文.综合| 欧美日产在线观看| 欧美少妇bbb| 欧美日韩国产综合久久| 欧美日韩一本到| 欧美色图第一页| 欧美老人xxxx18| 欧美精品高清视频| 制服.丝袜.亚洲.中文.综合| 91精品国产一区二区三区蜜臀| 欧美精品色综合| 91精品国产91热久久久做人人| 91精品久久久久久久99蜜桃| 欧美精品丝袜中出| 91精品国产欧美一区二区18| 日韩一区二区在线免费观看| 日韩一区和二区| 26uuu精品一区二区| 国产日本一区二区| 国产精品每日更新| 一二三区精品视频| 无码av免费一区二区三区试看| 99久久99精品久久久久久| 国产成人夜色高潮福利影视| 成人性视频免费网站| 91在线云播放| 欧美肥妇bbw| 欧美xxxx在线观看| 中文字幕精品一区二区三区精品| 中文字幕视频一区| 亚洲欧洲日本在线| 一个色综合网站| 免费一级片91| 国产毛片精品一区| 99久久国产免费看| 在线不卡a资源高清| 精品嫩草影院久久| 最新国产の精品合集bt伙计| 一区二区三区欧美日韩| 美国一区二区三区在线播放| 国产一区在线精品| 97aⅴ精品视频一二三区| 91精品国模一区二区三区| 国产日韩精品视频一区| 一区二区三区精密机械公司| 久久激情五月激情| 91首页免费视频| 欧美一卡二卡三卡| 国产精品久久夜| 日韩精品欧美精品| 成人听书哪个软件好| 欧美日韩视频专区在线播放| 久久亚区不卡日本| 午夜日韩在线观看| 成人看片黄a免费看在线| 欧美日韩极品在线观看一区| 久久久精品天堂| 性感美女久久精品| 不卡的电影网站| 日韩免费高清电影| 国产精品美女视频| 奇米四色…亚洲| 99免费精品在线观看| 26uuu亚洲综合色| 亚洲电影在线播放| 99视频在线精品| 久久久夜色精品亚洲| 日韩综合小视频| 91一区二区在线| 日韩女优av电影在线观看| 亚洲综合久久久| 国产91精品在线观看| 欧美不卡视频一区| 人妖欧美一区二区| 欧美日韩综合在线| 亚洲另类在线一区| 成人福利电影精品一区二区在线观看 | 91麻豆自制传媒国产之光| 日韩免费一区二区| 日本一区中文字幕| 欧美性xxxxxxxx| 亚洲欧美日韩一区二区| av中文一区二区三区| 国产午夜亚洲精品不卡| 极品美女销魂一区二区三区| 欧美巨大另类极品videosbest| 亚洲国产精品久久久久婷婷884| 一本久久精品一区二区| 中文字幕欧美日本乱码一线二线| 国产中文字幕一区| 欧美精品一区二区三区在线|