📄 t1driver.c
字号:
if (charcode < 256) { FT_UInt code; FT_Int n; const char* glyph_name; code = psnames->adobe_std_encoding[charcode]; if (charmap->encoding == ft_encoding_adobe_expert) code = psnames->adobe_expert_encoding[charcode]; glyph_name = psnames->adobe_std_strings(code); if (!glyph_name) break; for ( n = 0; n < face->type1.num_glyphs; n++ ) { const char* gname = face->type1.glyph_names[n]; if ( gname && gname[0] == glyph_name[0] && strcmp( gname, glyph_name ) == 0 ) { result = n; break; } } } } Exit: return result; } static T1_Error Init_Face( FT_Stream stream, FT_Int face_index, T1_Face face ) { T1_Error error; error = T1_Init_Face(stream, face_index, face); if (!error) { FT_Face root = &face->root; FT_CharMap charmap = face->charmaprecs; /* synthetize a Unicode charmap if there is support in the "psnames" */ /* module.. */ if (face->psnames) { PSNames_Interface* psnames = (PSNames_Interface*)face->psnames; if (psnames->unicode_value) { error = psnames->build_unicodes( root->memory, face->type1.num_glyphs, (const char**)face->type1.glyph_names, &face->unicode_map ); if (!error) { root->charmap = charmap; charmap->face = (FT_Face)face; charmap->encoding = ft_encoding_unicode; charmap->platform_id = 3; charmap->encoding_id = 1; charmap++; } /* simply clear the error in case of failure (which really) */ /* means that out of memory or no unicode glyph names */ error = 0; } } /* now, support either the standard, expert, or custom encodings */ charmap->face = (FT_Face)face; charmap->platform_id = 7; /* a new platform id for Adobe fonts ?? */ switch (face->type1.encoding_type) { case t1_encoding_standard: charmap->encoding = ft_encoding_adobe_standard; charmap->encoding_id = 0; break; case t1_encoding_expert: charmap->encoding = ft_encoding_adobe_expert; charmap->encoding_id = 1; break; default: charmap->encoding = ft_encoding_adobe_custom; charmap->encoding_id = 2; break; } root->charmaps = face->charmaps; root->num_charmaps = charmap - face->charmaprecs + 1; face->charmaps[0] = &face->charmaprecs[0]; face->charmaps[1] = &face->charmaprecs[1]; } return error; } /******************************************************************/ /* */ /* <Struct> FT_DriverInterface */ /* */ /* <Description> */ /* A structure used to hold a font driver's basic interface */ /* used by the high-level parts of FreeType (or other apps) */ /* */ /* Most scalable drivers provide a specialized interface to */ /* access format-specific features. It can be retrieved with */ /* a call to the "get_format_interface", and should be defined */ /* in each font driver header (e.g. ttdriver.h, t1driver.h,..) */ /* */ /* All fields are function pointers .. */ /* */ /* */ /* <Fields> */ /* */ /* new_engine :: */ /* used to create and initialise a new driver object */ /* */ /* done_engine :: */ /* used to finalise and destroy a given driver object */ /* */ /* get_format_interface :: */ /* return a typeless pointer to the format-specific */ /* driver interface. */ /* */ /* new_face :: */ /* create a new face object from a resource */ /* */ /* done_face :: */ /* discards a face object, as well as all child objects */ /* ( sizes, charmaps, glyph slots ) */ /* */ /* get_face_properties :: */ /* return generic face properties */ /* */ /* get_kerning :: */ /* return the kerning vector corresponding to a pair */ /* of glyphs, expressed in unscaled font units. */ /* */ /* new_size :: */ /* create and initialise a new scalable size object. */ /* */ /* new_fixed_size :: */ /* create and initialise a new fixed-size object. */ /* */ /* done_size :: */ /* finalize a given face size object. */ /* */ /* set_size_resolutions :: */ /* reset a scalable size object's output resolutions */ /* */ /* set_size_char_sizes :: */ /* reset a scalable size object's character size */ /* */ /* set_pixel_sizes :: */ /* reset a face size object's pixel dimensions. Applies */ /* to both scalable and fixed faces. */ /* */ /* new_glyph_slot :: */ /* create and initialise a new glyph slot */ /* */ /* done_glyph_slot :: */ /* discard a given glyph slot */ /* */ /* load_glyph :: */ /* load a given glyph into a given slot */ /* */ /* get_glyph_metrics :: */ /* return a loaded glyph's metrics. */ /* */ EXPORT_FUNC const FT_DriverInterface t1z_driver_interface = { sizeof( FT_DriverRec ), sizeof( T1_FaceRec ), sizeof( T1_SizeRec ), sizeof( T1_GlyphSlotRec ), "type1", 100, 200, 0, /* format interface */ (FTDriver_initDriver) T1_Init_Driver, (FTDriver_doneDriver) T1_Done_Driver,#ifdef T1_CONFIG_OPTION_NO_AFM (FTDriver_getInterface) 0,#else (FTDriver_getInterface) Get_Interface,#endif (FTDriver_initFace) Init_Face, (FTDriver_doneFace) T1_Done_Face,#ifdef T1_CONFIG_OPTION_NO_AFM (FTDriver_getKerning) 0,#else (FTDriver_getKerning) Get_Kerning,#endif (FTDriver_initSize) T1_Init_Size, (FTDriver_doneSize) T1_Done_Size, (FTDriver_setCharSizes) Set_Char_Sizes, (FTDriver_setPixelSizes) Set_Pixel_Sizes, (FTDriver_initGlyphSlot) T1_Init_GlyphSlot, (FTDriver_doneGlyphSlot) T1_Done_GlyphSlot, (FTDriver_loadGlyph) T1_Load_Glyph, (FTDriver_getCharIndex) Get_Char_Index, }; /******************************************************************/ /* */ /* <Function> Get_FreeType_Driver_Interface */ /* */ /* <Description> */ /* This function is used when compiling the TrueType driver */ /* as a shared library (.DLL or .so). It will be used by the */ /* high-level library of FreeType to retrieve the address of */ /* the driver's generic interface. */ /* */ /* It shouldn't be implemented in a static build, as each */ /* driver must have the same function as an exported entry */ /* point. */ /* */ /* <Return> */ /* address of TrueType's driver generic interface. The */ /* forma-specific interface can then be retrieved through */ /* the method interface->get_format_interface.. */ /* */#ifdef FT_CONFIG_OPTION_DYNAMIC_DRIVERS EXPORT_FUNC FT_DriverInterface* getDriverInterface( void ) { return &t1_driver_interface; } #endif /* FT_CONFIG_OPTION_DYNAMIC_DRIVERS */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -