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

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

?? ftoldmac.c

?? Demo for Free type 2.2.1
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
  printf("           --font-listing-api={quickdraw_old|quickdraw|ats}\n" );
  printf("           specify API to list system font\n" );
  printf("\n" );
  printf("           --font-resolve-api={quickdraw|ats}\n" );
  printf("           specify API to find fontfile by fontname\n" );
  printf("\n" );
  printf("           --auto-suffix\n" );
  printf("           old QuickDraw API cannot list available style suffixes,\n" );
  printf("           this option adds Bold and Italic suffixes automatically.\n" );
  printf("\n" );
}


void
verifyFMOutput( FMOutput*  fmout )
{
  OSErr    err;
  Handle   font_handle;
  short    rsrcID;
  ResType  rsrcType;
  Str255   rsrcName;



#ifdef VERBOSE
  printf( "FMOutput.boldPixels   0x%02x\n", fmout->boldPixels );
  printf( "FMOutput.italicPixels 0x%02x\n", fmout->italicPixels );
  printf( "FMOutput.ulOffset     0x%02x\n", fmout->ulOffset );
  printf( "FMOutput.ulShadow     0x%02x\n", fmout->ulShadow );
  printf( "FMOutput.ulThick      0x%02x\n", fmout->ulThick );
  printf( "FMOutput.shadowPixels 0x%02x\n", fmout->shadowPixels );
  printf( "FMOutput.extra        0x%02x\n", fmout->extra );
  printf( "FMOutput.curStyle     0x%02x\n", fmout->curStyle );
#else
  printf( "FMOutput.widMax:%d\n", fmout->widMax );
#endif

  font_handle = fmout->fontHandle,
  GetResInfo( font_handle, &rsrcID, &rsrcType, rsrcName );
  err = ResError();
  if ( 0 != err )
    printf( "could not get resource info for handle 0x%08x, err=%d\n",
            (int)(fmout->fontHandle), err );
  else
    printf( "resource: ID=0x%04x, Type=%c%c%c%c, name=%s\n",
             rsrcID,
             (int)MAX( (rsrcType >> 24) & 0xFF, 0x20 ),
             (int)MAX( (rsrcType >> 16) & 0xFF, 0x20 ),
             (int)MAX( (rsrcType >>  8) & 0xFF, 0x20 ),
             (int)MAX( (rsrcType >>  0) & 0xFF, 0x20 ),
             rsrcName[0] > 0 ? rsrcName + 1 : '\0' );
}


FT_OldMac_Err
resolveToolBoxQuickDrawFontName( const char*  font_name )
{
#if !defined( HAVE_QUICKDRAW_CARBON ) || ( QUICKDRAW_CARBON == 0 )
  printf( "cannot check [%s] by Carbon QuickDraw\n", font_name );
  return FT_OldMac_Err_Unimplemented;
#else
  Str255     familyName;
  SInt16     familyID;
  FMInput    lookup_inst;
  FMOutput*  lookup_rslt;


  ft_strncpy( (char*)familyName + 1, (char*)font_name, 254 );
  familyName[0] = strlen( (char *)familyName + 1 );
  GetFNum( familyName, &familyID );
  if ( 0 > familyID )
  {
    printf( "familyName %s is unresolvable\n", familyName + 1 );
    return FT_OldMac_Err_Unresolvable;
  }
  else if ( 0 == familyID )
    return FT_OldMac_Err_PseudoFontName;

  printf( "familyName %s:%d -> familyID 0x%04x: -> ",
           familyName + 1, familyName[0],
           familyID );

  bzero( &lookup_inst, sizeof( FMInput ) );
  lookup_inst.family   = familyID;
  lookup_inst.size     = 14;
  lookup_inst.face     = 0;
  lookup_inst.needBits = FALSE;
  lookup_inst.device   = 0;
  lookup_inst.numer.v  = 1;
  lookup_inst.numer.h  = 1;
  lookup_inst.denom.v  = 1;
  lookup_inst.denom.h  = 1;

  lookup_rslt = FMSwapFont( &lookup_inst );
  if ( NULL == lookup_rslt )
  {
    printf( "FMSwapFont returns NULL (unresolved)\n" );
    return FT_OldMac_Err_UnswappableFontID;
  }
  else
    verifyFMOutput( lookup_rslt );
  return FT_OldMac_Err_Ok;
#endif
}


void
test_face_quickdraw( char*       face_name,
                     FT_Library  library    )
{
  FSSpec   spec;
  UInt8    font_file_path[1024];
  FT_Long  face_index; 
  FT_Face  face;


  printf( "Lookup [%s]...", face_name );
  if ( 0 != FT_GetFile_From_Mac_Name( face_name, &spec, &face_index ) )
  {
    printf( "FreeType could not find font file\n" );
    return;
  }

  ftmac_FSpMakePath( &spec, font_file_path, 1024 );
  printf( "Font file found [%s], face #%d...", font_file_path, (int)face_index );
  if ( 0 != FT_New_Face_From_FSSpec( library, &spec, face_index, &face ) )
  {
    printf( "FreeType could not load font file\n" );
    return;
  }
  printf( "Ok\n" );

  num_opened_faces ++;
  dump_face_info( face );
  FT_Done_Face( face );
}


void
test_face_ats( char*       face_name,
               FT_Library  library    )
{
#if !defined( HAVE_ATS ) || ( HAVE_ATS == 0 )
  FT_UNUSED( library );
  printf( "cannot check [%s] by ATS\n", face_name );
#else
  FSSpec   spec;
  UInt8    font_file_path[1024];
  FT_Long  face_index; 
  FT_Face  face;


  printf( "Lookup [%s]...", face_name );
  if ( 0 != FT_GetFile_From_Mac_ATS_Name( face_name, &spec, &face_index ) )
  {
    printf( "FreeType could not find font file\n" );
    return;
  }

  ftmac_FSpMakePath( &spec, font_file_path, 1024 );
  printf( "Font file found [%s], face #%d...", font_file_path, (int)face_index );
  if ( 0 != FT_New_Face_From_FSSpec( library, &spec, face_index, &face ) )
  {
    printf( "FreeType could not load font file\n" );
    return;
  }
  printf( "Ok\n" );

  num_opened_faces ++;
  dump_face_info( face );
  FT_Done_Face( face );
#endif
}


void
test_face( char*       face_name,
           FT_Library  library    )
{
  num_scanned_faces ++;
  if ( 0 == ft_strcmp( font_resolve_api, "quickdraw" ) )
    test_face_quickdraw( face_name, library );
  else if ( 0 == ft_strcmp( font_resolve_api, "ats" ) )
    test_face_ats( face_name, library );
  else
  { 
    printf( "invalid api name to resolve [%s]\n", font_resolve_api );
    exit( -1 );
  }
}


void
test_font_list_quickdraw_old( FT_Library  library )
{
  Str255  fmo_family_name;
  char    fmo_face_name[1024];
  int     i;


  for ( i = 0; i < 0x7FFF; i++ )
  {
    GetFontName( i, fmo_family_name );
    if ( 0 < fmo_family_name[0] )
    {
      fmo_family_name[ fmo_family_name[0] + 1 ] = '\0';

      ft_strncpy( (char *)fmo_face_name, (char *)fmo_family_name + 1, 1024 );
      test_face( fmo_face_name, library );

      if ( !auto_suffix )
        continue;

      ft_strncpy( (char *)fmo_face_name, (char *)fmo_family_name + 1, 1024 );
      strncat( (char *)fmo_face_name, " Bold", 1024 );
      printf( "+ " );
      test_face( fmo_face_name, library );

      ft_strncpy( (char *)fmo_face_name, (char *)fmo_family_name + 1, 1024 );
      strncat( (char *)fmo_face_name, " Italic", 1024 );
      printf( "+ " );
      test_face( fmo_face_name, library );

      ft_strncpy( (char *)fmo_face_name, (char *)fmo_family_name + 1, 1024 );
      strncat( (char *)fmo_face_name, " Bold Italic", 1024 );
      printf( "+ " );
      test_face( fmo_face_name, library );
    }
  }
}


char*
make_style_suffix( char*        fm_style_name,
                   FMFontStyle  fm_style      )
{
  fm_style_name[0] = ' ';
  fm_style_name[1] = '\0';
  if ( fm_style & bold      ) strcat( fm_style_name, "Bold " );
  if ( fm_style & italic    ) strcat( fm_style_name, "Italic " );
  if ( fm_style & underline ) strcat( fm_style_name, "Underline " );
  if ( fm_style & outline   ) strcat( fm_style_name, "Outline " );
  if ( fm_style & shadow    ) strcat( fm_style_name, "Shadow " );
  if ( fm_style & condense  ) strcat( fm_style_name, "Condense " );
  if ( fm_style & extend    ) strcat( fm_style_name, "Extend " );
  if ( ft_strlen( fm_style_name ) > 0 )
    fm_style_name[ strlen( fm_style_name) - 1 ] = '\0';

  return fm_style_name;
}


void
test_font_list_quickdraw( FT_Library  library )
{
#if !defined( HAVE_QUICKDRAW_CARBON ) || ( QUICKDRAW_CARBON == 0 )
  FT_UNUSED( library );
  printf( "cannot get font list by Carbon QuickDraw\n" );
#else
  FMFontFamilyIterator          fm_family_iter;
  FMFontFamily                  fm_family;
  Str255                        fm_family_namestr;
  char                          fm_family_name[1024];

  FMFontFamilyInstanceIterator  fm_font_iter;
  FMFont                        fm_font;
  FMFontStyle                   fm_style;
  FMFontSize                    fm_size;
  char                          fm_style_name[1024];



  if ( 0 != FMCreateFontFamilyIterator( NULL, NULL,
                                        kFMUseGlobalScopeOption,
                                        &fm_family_iter ) )
    return;
  
get_quickdraw_font_family:
  if ( 0 == FMGetNextFontFamily( &fm_family_iter, &fm_family ) )
  {
    if ( 0 == FMCreateFontFamilyInstanceIterator( fm_family, &fm_font_iter ) )
    {
get_quickdraw_font_instance:
      if ( 0 == FMGetNextFontFamilyInstance( &fm_font_iter, &fm_font, &fm_style, &fm_size ) )
      {
        if ( 0 == fm_size )
        {
          FMGetFontFamilyName( fm_family, fm_family_namestr );
          CopyPascalStringToC( fm_family_namestr, fm_family_name );
          strcat( fm_family_name, make_style_suffix( fm_style_name, fm_style ) );
          test_face( fm_family_name, library );
        }
        goto get_quickdraw_font_instance;
      }
      else
      {
        FMDisposeFontFamilyInstanceIterator( &fm_font_iter );
        goto get_quickdraw_font_family;
      }
    }
    else
      goto get_quickdraw_font_family;
  }

  FMDisposeFontFamilyIterator( &fm_family_iter );
  return;
#endif
}


void
test_font_list_ats( FT_Library  library )
{
#if !defined( HAVE_ATS ) || ( HAVE_ATS == 0 )
  FT_UNUSED( library );
  printf( "cannot get font list by ATS\n" );
#else
  ATSFontIterator  ats_font_iter;
  ATSFontRef       ats_font_ref;
  CFStringRef      ats_font_name;
  char             face_name[1024];


  if ( noErr != ATSFontIteratorCreate( kATSFontContextGlobal,
                                       NULL, NULL,
                                       kATSOptionFlagsUnRestrictedScope,
                                       &ats_font_iter ) )
    return;

  while ( noErr == ATSFontIteratorNext( ats_font_iter, &ats_font_ref ) )
  {
    if ( 0 != ATSFontGetName( ats_font_ref, kATSOptionFlagsUnRestrictedScope, &ats_font_name ) )
      continue;

    if ( NULL == ats_font_name )
      continue;

    if ( CFStringGetCString( ats_font_name, face_name, 1024, kCFStringEncodingNonLossyASCII ) )
      test_face( (char *)face_name, library );
  }
  return;
#endif
}


void
test_system_font_list()
{
  FT_Library  library;


  printf( "fontlist is generated by [%s]\n", font_listing_api );
  printf( "fontname is resolved by  [%s]\n", font_resolve_api );

  if ( 0 != FT_Init_FreeType( &library ) )
    return;

  if ( 0 == ft_strcmp( font_listing_api, "quickdraw_old" ) )
    test_font_list_quickdraw_old( library );
  else if ( 0 == ft_strcmp( font_listing_api, "quickdraw" ) )
    test_font_list_quickdraw( library );
  else if ( 0 == ft_strcmp( font_listing_api, "ats" ) )
    test_font_list_ats( library );
  else
  { 
    printf( "invalid api name to list [%s]\n", font_listing_api );
    exit( -1 );
  }

  FT_Done_FreeType( library );
}


int
main( int     argc,
      char**  argv )
{
  int  i;


  num_scanned_fonts = 0;
  num_opened_fonts  = 0;
  num_scanned_faces = 0;
  num_opened_faces  = 0;

  font_listing_api = NULL;
  font_resolve_api = NULL;
  auto_suffix      = FALSE;
  max_face_number  = 0;
  force_scan_face  = FALSE;

  if ( 1 == argc )
    print_help();
  else
  {
    for ( i = 1; i < argc; i++ ) 
    {
      if ( 0 == ft_strcmp( "--help", argv[i] ) )
      {
        print_help();
        exit( 0 );
      }
      else if ( 0 == ft_strncmp( "--font-listing-api=", argv[i], 19 ) )
        font_listing_api = argv[i] + 19;
      else if ( 0 == ft_strncmp( "--font-resolve-api=", argv[i], 19 ) )
        font_resolve_api = argv[i] + 19;
      else if ( 0 == ft_strcmp( "--auto-suffix", argv[i] ) )
        auto_suffix = TRUE;
      else if ( 0 == ft_strncmp( "--max-face-number=", argv[i], 18 ) )
        max_face_number = atoi( argv[i] + 18 );
      else if ( 0 == ft_strcmp( "--force-scan-face", argv[i] ) )
        force_scan_face = TRUE;
    }
  }

  if ( NULL == font_listing_api && NULL == font_resolve_api )
    test_font_files( argc, argv );
  else if ( NULL != font_listing_api && NULL != font_resolve_api )
    test_system_font_list( argc, argv );
  else if ( NULL == font_listing_api )
    printf( "require --font-listing-api to specify how to list system font\n" );
  else if ( NULL == font_resolve_api )
    printf( "require --font-resolve-api to specify how to find file by fontname\n" );

  printf( "\n" );
  printf( "---------------------------------\n" );
  printf( "Summary\n" );
  printf( "Font File opened/scanned = %d/%d\n", num_opened_fonts, num_scanned_fonts );
  printf( "Font Face opened/scanned = %d/%d\n", num_opened_faces, num_scanned_faces );
  exit( 0 );
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
毛片av一区二区| 久久久精品国产免大香伊| 97久久精品人人爽人人爽蜜臀| 91福利小视频| 在线播放日韩导航| 久久精品综合网| 亚洲国产精品嫩草影院| 午夜电影网一区| 欧美日韩在线播| 国产成人综合精品三级| 亚洲成a天堂v人片| 亚洲国产精品国自产拍av| 欧美成人精品高清在线播放| 美女一区二区视频| 亚洲线精品一区二区三区| 久久久一区二区| 日韩三级在线观看| 色综合久久久久| 激情综合网激情| 国产乱人伦精品一区二区在线观看 | 国产精品看片你懂得| 精品国产一区二区亚洲人成毛片| 欧美日韩视频在线第一区 | 久久免费看少妇高潮| 国产情人综合久久777777| 国产亚洲女人久久久久毛片| 久久精品视频在线看| 国产午夜亚洲精品羞羞网站| 欧美日韩久久久| 激情偷乱视频一区二区三区| 蜜臀精品久久久久久蜜臀| 蜜臀国产一区二区三区在线播放| 美国十次综合导航| 欧美午夜宅男影院| 91小视频在线免费看| av色综合久久天堂av综合| 99国产精品久| 欧美蜜桃一区二区三区| 精品视频在线视频| 欧美在线免费播放| 在线视频欧美区| 日韩一区国产二区欧美三区| 欧美一级片免费看| 国产人成一区二区三区影院| 国产精品久久毛片a| 久久亚洲精品小早川怜子| 亚洲国产高清在线观看视频| 亚洲三级在线免费| 美国十次综合导航| 成人在线视频首页| 9191久久久久久久久久久| 欧美大胆人体bbbb| 亚洲美女偷拍久久| 全国精品久久少妇| 精久久久久久久久久久| 成人黄色小视频| 欧美亚洲日本一区| 欧美精品一区二区久久婷婷| 国产精品视频九色porn| 日本大胆欧美人术艺术动态| 国产一区二区三区免费播放| 成人一二三区视频| 色哟哟国产精品| 日韩欧美一区二区三区在线| 日韩美女视频一区二区| 青草国产精品久久久久久| 91在线观看高清| 欧美一区二区三区小说| 欧美韩日一区二区三区| 老司机免费视频一区二区三区| 风间由美一区二区av101| 欧美精品日韩一本| 中文字幕不卡一区| 亚洲国产精品一区二区www在线 | 青娱乐精品视频| 国产一区二区三区在线观看免费| 欧美日韩精品电影| 日本一区二区成人在线| 九色综合国产一区二区三区| 4438x亚洲最大成人网| 国产精品自拍av| 欧美一级二级三级乱码| 豆国产96在线|亚洲| 精品久久免费看| 久久精品一区蜜桃臀影院| 日本成人中文字幕在线视频 | 欧美男女性生活在线直播观看| 99re免费视频精品全部| 在线不卡一区二区| 欧美成人午夜电影| 一区二区三区四区不卡视频| 一区二区在线观看视频| 久久理论电影网| 久久久久久夜精品精品免费| 成人福利视频在线看| caoporm超碰国产精品| 欧美v日韩v国产v| 国产精品色哟哟| 精品sm在线观看| 亚洲成人av免费| caoporn国产精品| 国产日韩在线不卡| 偷拍日韩校园综合在线| 91麻豆精东视频| 中文字幕二三区不卡| 亚洲制服丝袜在线| 一本久久综合亚洲鲁鲁五月天| 精品久久久久香蕉网| 国内精品久久久久影院一蜜桃| 91精品在线观看入口| 蜜桃在线一区二区三区| 91精品国产综合久久婷婷香蕉 | 色综合色狠狠综合色| 日韩午夜激情av| 视频一区视频二区中文| 在线观看欧美精品| 中文字幕一区不卡| 99精品国产一区二区三区不卡| 国产欧美日韩精品一区| 国产又粗又猛又爽又黄91精品| 欧美福利一区二区| 亚洲一区二区三区四区的| 99久久精品国产导航| 日韩一区二区麻豆国产| 日韩在线一二三区| 欧美一区二区三区男人的天堂| 日本一区二区不卡视频| 成人毛片在线观看| 久久精品水蜜桃av综合天堂| 国内精品自线一区二区三区视频| 欧美成人aa大片| 国产精品一区免费视频| 欧美国产亚洲另类动漫| 色拍拍在线精品视频8848| 亚洲制服丝袜在线| 制服丝袜日韩国产| 蜜臀av性久久久久蜜臀aⅴ流畅 | 99热这里都是精品| 国产精品高潮呻吟| 国产精品国产三级国产aⅴ原创| 高清国产一区二区| 亚洲日本成人在线观看| 91久久免费观看| 日韩精品国产精品| 亚洲精品一区二区三区福利| 国产999精品久久| 国产日韩高清在线| 91丨porny丨在线| 成人免费小视频| 99久久久无码国产精品| 免费一级欧美片在线观看| av欧美精品.com| 亚洲女同女同女同女同女同69| 成人理论电影网| 视频在线在亚洲| 欧美日韩卡一卡二| 日韩va亚洲va欧美va久久| 久久这里只有精品首页| 精品国产91亚洲一区二区三区婷婷| 亚洲美女精品一区| 91成人在线观看喷潮| 一区二区三区不卡视频| 欧美人牲a欧美精品| 一区二区三区国产精品| 日韩美女视频一区二区在线观看| 亚洲成av人片| 高清在线成人网| 视频一区在线视频| 亚洲福利一区二区| 久久午夜国产精品| 中文字幕在线不卡视频| 国产精品美女www爽爽爽| 欧美一级理论片| 国产在线精品免费av| 亚洲人123区| 亚洲女人小视频在线观看| 日韩av一区二区三区四区| 欧美色精品天天在线观看视频| 日韩一区二区三区免费观看| 另类调教123区| 国产精品色婷婷久久58| 欧美性猛交xxxx黑人交| 99re亚洲国产精品| 在线不卡的av| 欧美三级一区二区| 日韩欧美中文一区| 精品日韩一区二区三区| 国产欧美视频一区二区| 日本美女视频一区二区| 欧美男人的天堂一二区| 日韩亚洲欧美在线| 在线视频欧美精品| 一区二区三区国产精华| 精品国产乱码久久久久久1区2区 | 91丨九色丨尤物| 中文字幕精品一区二区精品绿巨人| 国产毛片精品国产一区二区三区| 91无套直看片红桃| 狠狠色综合日日| 一区二区三区欧美|