📄 ttload.c
字号:
case 11: printf( " url_vendor" ); break; case 12: printf( " url_designer" ); break; case 13: printf( " license" ); break; case 14: printf( " url_license" ); break; case 15: printf( " reserved (15)" ); break; case 16: printf( " prefered_family" ); break; case 17: printf( " prefered_style" ); break; case 18: printf( " mac_full_name" ); break; case 19: printf( " sample_text" ); break; case 20: printf( " cid_name" ); break; default: printf( " unknown_type(%d)", cur->nameID ); } /* printf platform/encoding id */ j = 0; switch ( cur->platformID ) { case 0: /* Unicode encodings */ { switch ( cur->encodingID ) { case 0: printf( " unicode_1.0" ); break; case 1: printf( " unicode_1.1" ); break; case 2: printf( " ISO_10646" ); break; case 3: printf( " unicode_2.0" ); break; default: j = 1; } break; } case 1: /* Apple encodings */ { switch ( cur->encodingID ) { case 0: printf( " mac_Roman" ); break; case 1: printf( " mac_Japanese" ); break; case 2: printf( " mac_Chinese_traditional" ); break; case 3: printf( " mac_Korean" ); break; case 4: printf( " mac_Arabic" ); break; case 5: printf( " mac_Hebrew" ); break; case 6: printf( " mac_Greek" ); break; case 7: printf( " mac_Russian" ); break; case 8: printf( " mac_RSymbol" ); break; case 9: printf( " mac_Devanagari" ); break; case 10: printf( " mac_Gurmukhi" ); break; case 11: printf( " mac_Gujarati" ); break; case 12: printf( " mac_Oriya" ); break; case 13: printf( " mac_Bengali" ); break; case 14: printf( " mac_Tamil" ); break; case 15: printf( " mac_Telugu" ); break; case 16: printf( " mac_Kannada" ); break; case 17: printf( " mac_Malayalam" ); break; case 18: printf( " mac_Sinhalese" ); break; case 19: printf( " mac_Burmese" ); break; case 20: printf( " mac_Khmer" ); break; case 21: printf( " mac_Thai" ); break; case 22: printf( " mac_Laotian" ); break; case 23: printf( " mac_Goergian" ); break; case 24: printf( " mac_Armenian" ); break; case 25: printf( " mac_Chinese_simplified" ); break; case 26: printf( " mac_Tibetan" ); break; case 27: printf( " mac_Mongolian" ); break; case 28: printf( " mac_Geez" ); break; case 29: printf( " mac_Slavic" ); break; case 30: printf( " mac_Vietnamese" ); break; case 31: printf( " mac_Sindhi" ); break; case 32: printf( " mac_Uninterpreted" ); break; default: j = 1; } break; } case 2: /* deprecated IDO encoding */ { switch ( cur->encodingID ) { case 0: printf( " iso_ASCII" ); break; case 1: printf( " iso_10646" ); break; case 2: printf( " iso_8859-1" ); break; default: j = 1; } break; } case 3: /* Windows encodings */ { switch ( cur->encodingID ) { case 0: printf( " win_symbol" ); break; case 1: printf( " win_unicode" ); break; case 2: printf( " win_shiftJIS" ); break; case 3: printf( " win_PRC" ); break; case 4: printf( " win_Big5" ); break; case 5: printf( " win_Wansung" ); break; case 6: printf( " win_Johab" ); break; case 10: printf( " win_UCS4" ); break; default: j = 1; } break; } default: j = 1; } if ( j == 1 ) printf( " unknown_encoding" ); printf( "\n " ); /* printf language - XXXX for later ....*/ /* I know that M$ encoded strings are Unicode, */ /* but this works reasonable well for debugging purposes. */ if ( cur->string ) { for ( j = 0; j < (FT_UInt)cur->stringLength; j++ ) { FT_Byte c = (FT_Byte)*( cur->string + j ); if ( c < 32 || c > 127 ) c = '.'; printf( "%c", c ); } } else printf( "INVALID_ENTRY!!" ); printf( "\n" ); } printf( "\n" ); } FT_TRACE2(( "loaded\n" )); /* everything went well, update face->num_names */ face->num_names = (FT_UShort)num_names; Exit: return error; } /*************************************************************************/ /* */ /* <Function> */ /* TT_Free_Names */ /* */ /* <Description> */ /* Frees the name records. */ /* */ /* <Input> */ /* face :: A handle to the target face object. */ /* */ FT_LOCAL_DEF void TT_Free_Names( TT_Face face ) { FT_Memory memory = face->root.driver->root.memory; TT_NameTable* names = &face->name_table; /* free strings table */ FREE( names->names ); /* free strings storage */ FREE( names->storage ); names->numNameRecords = 0; names->format = 0; names->storageOffset = 0; } /*************************************************************************/ /* */ /* <Function> */ /* TT_Load_CMap */ /* */ /* <Description> */ /* Loads the cmap directory in a face object. The cmaps itselves are */ /* loaded on demand in the `ttcmap.c' module. */ /* */ /* <Input> */ /* face :: A handle to the target face object. */ /* stream :: A handle to the input stream. */ /* */ /* <Return> */ /* FreeType error code. 0 means success. */ /* */ FT_LOCAL_DEF FT_Error TT_Load_CMap( TT_Face face, FT_Stream stream ) { FT_Error error; FT_Memory memory = stream->memory; FT_Long table_start; TT_CMapDir cmap_dir; const FT_Frame_Field cmap_fields[] = {#undef FT_STRUCTURE#define FT_STRUCTURE TT_CMapDir FT_FRAME_START( 4 ), FT_FRAME_USHORT( tableVersionNumber ), FT_FRAME_USHORT( numCMaps ), FT_FRAME_END }; const FT_Frame_Field cmap_rec_fields[] = {#undef FT_STRUCTURE#define FT_STRUCTURE TT_CMapTable FT_FRAME_START( 4 ), FT_FRAME_USHORT( format ), FT_FRAME_USHORT( length ), FT_FRAME_END }; FT_TRACE2(( "CMaps " )); error = face->goto_table( face, TTAG_cmap, stream, 0 ); if ( error ) { error = SFNT_Err_CMap_Table_Missing; goto Exit; } table_start = FILE_Pos(); if ( READ_Fields( cmap_fields, &cmap_dir ) ) goto Exit; /* reserve space in face table for cmap tables */ if ( ALLOC_ARRAY( face->charmaps, cmap_dir.numCMaps, TT_CharMapRec ) ) goto Exit; face->num_charmaps = cmap_dir.numCMaps; { TT_CharMap charmap = face->charmaps; TT_CharMap limit = charmap + face->num_charmaps; /* read the header of each charmap first */ if ( ACCESS_Frame( face->num_charmaps * 8L ) ) goto Exit; for ( ; charmap < limit; charmap++ ) { TT_CMapTable* cmap; charmap->root.face = (FT_Face)face; cmap = &charmap->cmap; cmap->loaded = FALSE; cmap->platformID = GET_UShort(); cmap->platformEncodingID = GET_UShort(); cmap->offset = (FT_ULong)GET_Long(); } FORGET_Frame(); /* now read the rest of each table */ for ( charmap = face->charmaps; charmap < limit; charmap++ ) { TT_CMapTable* cmap = &charmap->cmap; if ( FILE_Seek( table_start + (FT_Long)cmap->offset ) || READ_Fields( cmap_rec_fields, cmap ) ) goto Exit; cmap->offset = FILE_Pos(); } } FT_TRACE2(( "loaded\n" )); Exit: return error; } /*************************************************************************/ /* */ /* <Function> */ /* TT_Load_OS2 */ /* */ /* <Description> */ /* Loads the OS2 table. */ /* */ /* <Input> */ /* face :: A handle to the target face object. */ /* stream :: A handle to the input stream. */ /* */ /* <Return> */ /* FreeType error code. 0 means success. */ /* */ FT_LOCAL_DEF FT_Error TT_Load_OS2( TT_Face face, FT_Stream stream ) { FT_Error error; TT_OS2* os2; const FT_Frame_Field os2_fields[] = {#undef FT_STRUCTURE#define FT_STRUCTURE TT_OS2 FT_FRAME_START( 78 ), FT_FRAME_USHORT( version ), FT_FRAME_SHORT ( xAvgCharWidth ), FT_FRAME_USHORT( usWeightClass ), FT_FRAME_USHORT( usWidthClass ), FT_FRAME_SHORT ( fsType ), FT_FRAME_SHORT ( ySubscriptXSize ), FT_FRAME_SHORT ( ySubscriptYSize ), FT_FRAME_SHORT ( ySubscriptXOffset ), FT_FRAME_SHORT ( ySubscriptYOffset ), FT_FRAME_SHORT ( ySuperscriptXSize ), FT_FRAME_SHORT ( ySuperscriptYSize ), FT_FRAME_SHORT ( ySuperscriptXOffset ), FT_FRAME_SHORT ( ySuperscriptYOffset ), FT_FRAME_SHORT ( yStrikeoutSize ), FT_FRAME_SHORT ( yStrikeoutPosition ), FT_FRAME_SHORT ( sFamilyClass ), FT_FRAME_BYTE ( panose[0] ), FT_FRAME_BYTE ( panose[1] ), FT_FRAME_BYTE ( panose[2] ), FT_FRAME_BYTE ( panose[3] ), FT_FRAME_BYTE ( panose[4] ), FT_FRAME_BYTE ( panose[5] ), FT_FRAME_BYTE ( panose[6] ), FT_FRAME_BYTE ( panose[7] ), FT_FRAME_BYTE ( panose[8] ), FT_FRAME_BYTE ( panose[9] ), FT_FRAME_ULONG ( ulUnicodeRange1 ), FT_FRAME_ULONG ( ulUnicodeRange2 ), FT_FRAME_ULONG ( ulUnicodeRange3 ), FT_FRAME_ULONG ( ulUnicodeRange4 ), FT_FRAME_BYTE ( achVendID[0] ), FT_FRAME_BYTE ( achVendID[1] ), FT_FRAME_BYTE ( achVendID[2] ), FT_FRAME_BYTE ( achVendID[3] ),
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -