📄 t1driver.c
字号:
/***************************************************************************//* *//* t1driver.c *//* *//* Type 1 driver interface (body). *//* *//* Copyright 1996-2000 by *//* David Turner, Robert Wilhelm, and Werner Lemberg. *//* *//* This file is part of the FreeType project, and may only be used, *//* modified, and distributed under the terms of the FreeType project *//* license, LICENSE.TXT. By continuing to use, modify, or distribute *//* this file you indicate that you have read the license and *//* understand and accept it fully. *//* *//***************************************************************************/#ifdef FT_FLAT_COMPILE#include "t1driver.h"#include "t1gload.h"#include "t1load.h"#ifndef T1_CONFIG_OPTION_NO_AFM#include "t1afm.h"#endif#else#include <type1/t1driver.h>#include <type1/t1gload.h>#include <type1/t1load.h>#ifndef T1_CONFIG_OPTION_NO_AFM#include <type1/t1afm.h>#endif#endif#include <freetype/internal/ftdebug.h>#include <freetype/internal/ftstream.h>#include <freetype/internal/psnames.h>#include <string.h> /* for strcmp() */ /*************************************************************************/ /* */ /* 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_t1driver static FT_Error get_t1_glyph_name( T1_Face face, FT_UInt glyph_index, FT_Pointer buffer, FT_UInt buffer_max ) { FT_String* gname; gname = face->type1.glyph_names[glyph_index]; if ( buffer_max > 0 ) { FT_UInt len = strlen( gname ); if (len >= buffer_max) len = buffer_max - 1; MEM_Copy( buffer, gname, len ); ((FT_Byte*)buffer)[len] = 0; } return T1_Err_Ok; } /*************************************************************************/ /* */ /* <Function> */ /* Get_Interface */ /* */ /* <Description> */ /* Each driver can provide one or more extensions to the base */ /* FreeType API. These can be used to access format specific */ /* features (e.g., all TrueType/OpenType resources share a common */ /* file structure and common tables which can be accessed through the */ /* `sfnt' interface), or more simply generic ones (e.g., the */ /* `postscript names' interface which can be used to retrieve the */ /* PostScript name of a given glyph index). */ /* */ /* <InOut> */ /* driver :: A handle to a driver object. */ /* */ /* <Input> */ /* interface :: A string designing the interface. Examples are */ /* `sfnt', `post_names', `charmaps', etc. */ /* */ /* <Return> */ /* A typeless pointer to the extension's interface (normally a table */ /* of function pointers). Returns NULL if the requested extension */ /* isn't available (i.e., wasn't compiled in the driver at build */ /* time). */ /* */ static FT_Module_Interface Get_Interface( FT_Driver driver, const FT_String* interface ) { FT_UNUSED( driver ); FT_UNUSED( interface ); if ( strcmp( (const char*)interface, "glyph_name" ) == 0 ) return (FT_Module_Interface)get_t1_glyph_name;#ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT if ( strcmp( (const char*)interface, "get_mm" ) == 0 ) return (FT_Module_Interface)T1_Get_Multi_Master; if ( strcmp( (const char*)interface, "set_mm_design") == 0 ) return (FT_Module_Interface)T1_Set_MM_Design; if ( strcmp( (const char*)interface, "set_mm_blend") == 0 ) return (FT_Module_Interface)T1_Set_MM_Blend;#endif return 0; }#ifndef T1_CONFIG_OPTION_NO_AFM /*************************************************************************/ /* */ /* <Function> */ /* Get_Kerning */ /* */ /* <Description> */ /* A driver method used to return the kerning vector between two */ /* glyphs of the same face. */ /* */ /* <Input> */ /* face :: A handle to the source face object. */ /* */ /* left_glyph :: The index of the left glyph in the kern pair. */ /* */ /* right_glyph :: The index of the right glyph in the kern pair. */ /* */ /* <Output> */ /* kerning :: The kerning vector. This is in font units for */ /* scalable formats, and in pixels for fixed-sizes */ /* formats. */ /* */ /* <Return> */ /* FreeType error code. 0 means success. */ /* */ /* <Note> */ /* Only horizontal layouts (left-to-right & right-to-left) are */ /* supported by this function. Other layouts, or more sophisticated */ /* kernings are out of scope of this method (the basic driver */ /* interface is meant to be simple). */ /* */ /* They can be implemented by format-specific interfaces. */ /* */ static FT_Error Get_Kerning( T1_Face face, FT_UInt left_glyph, FT_UInt right_glyph, FT_Vector* kerning ) { T1_AFM* afm; kerning->x = 0; kerning->y = 0; afm = (T1_AFM*)face->afm_data; if ( afm ) T1_Get_Kerning( afm, left_glyph, right_glyph, kerning );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -