ReactOS  0.4.14-dev-1233-gf5658fd
t1afm.h File Reference
#include <ft2build.h>
#include "t1objs.h"
Include dependency graph for t1afm.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

FT_BEGIN_HEADER T1_Read_Metrics (FT_Face face, FT_Stream stream)
 
 T1_Done_Metrics (FT_Memory memory, AFM_FontInfo fi)
 
 T1_Get_Kerning (AFM_FontInfo fi, FT_UInt glyph1, FT_UInt glyph2, FT_Vector *kerning)
 
 T1_Get_Track_Kerning (FT_Face face, FT_Fixed ptsize, FT_Int degree, FT_Fixed *kerning)
 

Function Documentation

◆ T1_Done_Metrics()

T1_Done_Metrics ( FT_Memory  memory,
AFM_FontInfo  fi 
)

Definition at line 40 of file t1afm.c.

42  {
43  FT_FREE( fi->KernPairs );
44  fi->NumKernPair = 0;
45 
46  FT_FREE( fi->TrackKerns );
47  fi->NumTrackKern = 0;
48 
49  FT_FREE( fi );
50  }
AFM_KernPair KernPairs
Definition: t1types.h:177
AFM_TrackKern TrackKerns
Definition: t1types.h:175
#define FT_FREE(ptr)
Definition: ftmemory.h:329
FT_UInt NumKernPair
Definition: t1types.h:178
FT_UInt NumTrackKern
Definition: t1types.h:176

Referenced by T1_Face_Done(), and T1_Read_Metrics().

◆ T1_Get_Kerning()

T1_Get_Kerning ( AFM_FontInfo  fi,
FT_UInt  glyph1,
FT_UInt  glyph2,
FT_Vector kerning 
)

Definition at line 330 of file t1afm.c.

334  {
335  AFM_KernPair min, mid, max;
336  FT_ULong idx = KERN_INDEX( glyph1, glyph2 );
337 
338 
339  /* simple binary search */
340  min = fi->KernPairs;
341  max = min + fi->NumKernPair - 1;
342 
343  while ( min <= max )
344  {
345  FT_ULong midi;
346 
347 
348  mid = min + ( max - min ) / 2;
349  midi = KERN_INDEX( mid->index1, mid->index2 );
350 
351  if ( midi == idx )
352  {
353  kerning->x = mid->x;
354  kerning->y = mid->y;
355 
356  return;
357  }
358 
359  if ( midi < idx )
360  min = mid + 1;
361  else
362  max = mid - 1;
363  }
364 
365  kerning->x = 0;
366  kerning->y = 0;
367  }
#define max(a, b)
Definition: svc.c:63
FT_Pos y
Definition: ftimage.h:77
unsigned long FT_ULong
Definition: fttypes.h:253
AFM_KernPair KernPairs
Definition: t1types.h:177
#define KERN_INDEX(g1, g2)
Definition: t1afm.c:83
FT_Pos x
Definition: ftimage.h:76
FT_UInt index2
Definition: t1types.h:163
unsigned int idx
Definition: utils.c:41
FT_UInt NumKernPair
Definition: t1types.h:178
#define min(a, b)
Definition: monoChain.cc:55
FT_UInt index1
Definition: t1types.h:162
FT_UInt FT_UInt FT_Vector * kerning
Definition: ttdriver.c:204

Referenced by Get_Kerning().

◆ T1_Get_Track_Kerning()

T1_Get_Track_Kerning ( FT_Face  face,
FT_Fixed  ptsize,
FT_Int  degree,
FT_Fixed kerning 
)

Definition at line 371 of file t1afm.c.

375  {
376  AFM_FontInfo fi = (AFM_FontInfo)( (T1_Face)face )->afm_data;
377  FT_UInt i;
378 
379 
380  if ( !fi )
381  return FT_THROW( Invalid_Argument );
382 
383  for ( i = 0; i < fi->NumTrackKern; i++ )
384  {
385  AFM_TrackKern tk = fi->TrackKerns + i;
386 
387 
388  if ( tk->degree != degree )
389  continue;
390 
391  if ( ptsize < tk->min_ptsize )
392  *kerning = tk->min_kern;
393  else if ( ptsize > tk->max_ptsize )
394  *kerning = tk->max_kern;
395  else
396  {
397  *kerning = FT_MulDiv( ptsize - tk->min_ptsize,
398  tk->max_kern - tk->min_kern,
399  tk->max_ptsize - tk->min_ptsize ) +
400  tk->min_kern;
401  }
402  }
403 
404  return FT_Err_Ok;
405  }
FT_Fixed max_kern
Definition: t1types.h:156
FT_Fixed min_ptsize
Definition: t1types.h:153
return FT_Err_Ok
Definition: ftbbox.c:511
AFM_TrackKern TrackKerns
Definition: t1types.h:175
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define FT_THROW(e)
Definition: ftdebug.h:213
FT_MulDiv(FT_Long a, FT_Long b, FT_Long c)
Definition: ftcalc.c:416
FT_Fixed min_kern
Definition: t1types.h:154
WORD face[3]
Definition: mesh.c:4747
struct AFM_FontInfoRec_ * AFM_FontInfo
unsigned int FT_UInt
Definition: fttypes.h:231
FT_UInt NumTrackKern
Definition: t1types.h:176
FT_Fixed max_ptsize
Definition: t1types.h:155
FT_UInt FT_UInt FT_Vector * kerning
Definition: ttdriver.c:204

◆ T1_Read_Metrics()

FT_BEGIN_HEADER T1_Read_Metrics ( FT_Face  face,
FT_Stream  stream 
)

Definition at line 236 of file t1afm.c.

238  {
239  PSAux_Service psaux;
240  FT_Memory memory = stream->memory;
242  AFM_FontInfo fi = NULL;
243  FT_Error error = FT_ERR( Unknown_File_Format );
244  T1_Face face = (T1_Face)t1_face;
245  T1_Font t1_font = &face->type1;
246 
247 
248  if ( face->afm_data )
249  {
250  FT_TRACE1(( "T1_Read_Metrics:"
251  " Freeing previously attached metrics data.\n" ));
252  T1_Done_Metrics( memory, (AFM_FontInfo)face->afm_data );
253 
254  face->afm_data = NULL;
255  }
256 
257  if ( FT_NEW( fi ) ||
259  goto Exit;
260 
261  fi->FontBBox = t1_font->font_bbox;
262  fi->Ascender = t1_font->font_bbox.yMax;
263  fi->Descender = t1_font->font_bbox.yMin;
264 
265  psaux = (PSAux_Service)face->psaux;
266  if ( psaux->afm_parser_funcs )
267  {
268  error = psaux->afm_parser_funcs->init( &parser,
269  stream->memory,
270  stream->cursor,
271  stream->limit );
272 
273  if ( !error )
274  {
275  parser.FontInfo = fi;
276  parser.get_index = t1_get_index;
277  parser.user_data = t1_font;
278 
279  error = psaux->afm_parser_funcs->parse( &parser );
280  psaux->afm_parser_funcs->done( &parser );
281  }
282  }
283 
284  if ( FT_ERR_EQ( error, Unknown_File_Format ) )
285  {
286  FT_Byte* start = stream->cursor;
287 
288 
289  /* MS Windows allows versions up to 0x3FF without complaining */
290  if ( stream->size > 6 &&
291  start[1] < 4 &&
292  FT_PEEK_ULONG_LE( start + 2 ) == stream->size )
293  error = T1_Read_PFM( t1_face, stream, fi );
294  }
295 
296  if ( !error )
297  {
298  t1_font->font_bbox = fi->FontBBox;
299 
300  t1_face->bbox.xMin = fi->FontBBox.xMin >> 16;
301  t1_face->bbox.yMin = fi->FontBBox.yMin >> 16;
302  /* no `U' suffix here to 0xFFFF! */
303  t1_face->bbox.xMax = ( fi->FontBBox.xMax + 0xFFFF ) >> 16;
304  t1_face->bbox.yMax = ( fi->FontBBox.yMax + 0xFFFF ) >> 16;
305 
306  /* no `U' suffix here to 0x8000! */
307  t1_face->ascender = (FT_Short)( ( fi->Ascender + 0x8000 ) >> 16 );
308  t1_face->descender = (FT_Short)( ( fi->Descender + 0x8000 ) >> 16 );
309 
310  if ( fi->NumKernPair )
311  {
312  t1_face->face_flags |= FT_FACE_FLAG_KERNING;
313  face->afm_data = fi;
314  fi = NULL;
315  }
316  }
317 
318  FT_FRAME_EXIT();
319 
320  Exit:
321  if ( fi )
322  T1_Done_Metrics( memory, fi );
323 
324  return error;
325  }
int FT_Error
Definition: fttypes.h:300
void(* done)(AFM_Parser parser)
Definition: psaux.h:1203
FT_Fixed Descender
Definition: t1types.h:174
struct T1_FaceRec_ * T1_Face
Definition: t1types.h:196
#define error(str)
Definition: mkdosfs.c:1605
FT_Error(* parse)(AFM_Parser parser)
Definition: psaux.h:1206
FT_BBox font_bbox
Definition: t1types.h:122
static char memory[1024 *256]
Definition: process.c:116
T1_Done_Metrics(FT_Memory memory, AFM_FontInfo fi)
Definition: t1afm.c:40
#define FT_TRACE1(varformat)
Definition: ftdebug.h:158
unsigned char FT_Byte
Definition: fttypes.h:154
smooth NULL
Definition: ftsmooth.c:416
FT_Pos yMax
Definition: ftimage.h:118
static FT_Error T1_Read_PFM(FT_Face t1_face, FT_Stream stream, AFM_FontInfo fi)
Definition: t1afm.c:109
FT_BBox FontBBox
Definition: t1types.h:172
#define FT_ERR(e)
Definition: fttypes.h:586
FT_Error(* init)(AFM_Parser parser, FT_Memory memory, FT_Byte *base, FT_Byte *limit)
Definition: psaux.h:1197
FT_UInt NumKernPair
Definition: t1types.h:178
static FT_Int t1_get_index(const char *name, FT_Offset len, void *user_data)
Definition: t1afm.c:55
FT_Pos xMin
Definition: ftimage.h:117
if(!(yy_init))
Definition: macro.lex.yy.c:714
struct PSAux_ServiceRec_ * PSAux_Service
static void Exit(void)
Definition: sock.c:1331
#define FT_ERR_EQ(x, e)
Definition: fttypes.h:591
FT_Pos xMax
Definition: ftimage.h:118
unsigned int size
Definition: parse.h:27
Definition: parse.h:22
#define FT_PEEK_ULONG_LE(p)
Definition: ftstream.h:203
signed short FT_Short
Definition: fttypes.h:198
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
Definition: ftsystem.h:66
const AFM_Parser_FuncsRec * afm_parser_funcs
Definition: psaux.h:1307
#define FT_FRAME_EXIT()
Definition: ftstream.h:517
GLuint start
Definition: gl.h:1545
FT_Pos yMin
Definition: ftimage.h:117
#define FT_FACE_FLAG_KERNING
Definition: freetype.h:1244
Definition: import.c:85
#define FT_FRAME_ENTER(size)
Definition: ftstream.h:512
#define FT_NEW(ptr)
Definition: ftmemory.h:331
FT_Fixed Ascender
Definition: t1types.h:173
GLenum GLuint GLint GLenum face
Definition: glext.h:7025