ref: fadb6be7e33b0ab86c35c004b10c1d0cf6d1c2c4
parent: 609e28c3be484792936271dacefe9b48c378e7eb
author: Werner Lemberg <[email protected]>
date: Sat Apr 20 01:38:33 EDT 2002
* src/pfr/pfrload.c (pfr_extra_items_farse): Fix debug message. (pfr_phy_font_load): s/size/Size/ for local variable to avoid compiler warning. * src/pfr/pfrobjs.c (pfr_face_init): Fix debug message. (pfr_slot_load): Remove redundant local variable. adding copyrights, formatting
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,23 +1,31 @@
+2002-04-19 Werner Lemberg <[email protected]>
+
+ * src/pfr/pfrload.c (pfr_extra_items_farse): Fix debug message.
+ (pfr_phy_font_load): s/size/Size/ for local variable to avoid
+ compiler warning.
+ * src/pfr/pfrobjs.c (pfr_face_init): Fix debug message.
+ (pfr_slot_load): Remove redundant local variable.
+
2002-04-19 David Turner <[email protected]>
- * src/type1/t1gload.h, src/type1/t1gload.c: fixed incorrect
- parameter sign-ness in callback function
+ Adding a PFR font driver to the FreeType sources. Note that it
+ doesn't support embedded bitmaps or kerning tables yet.
- * include/freetype/config/ftmodule.h,
- include/freetype/internal/fttrace.h,
- src/Jamfile, src/pfr/*:
-
- adding a PFR font driver to the FreeType sources. Not that it
- doesn't support embedded bitmaps or kerning tables for now..
+ src/pfr/*: New files.
+ * include/freetype/config/ftmodule.h,
+ include/freetype/internal/fttrace.h, src/Jamefile: Updated.
- * include/freetype/internal/ftmemory.h: adding the FT_MEM_ZERO
- and FT_ZERO macros
+ * src/type1/t1gload.h (T1_Load_Glyph), src/type1/t1gload.c
+ (T1_Load_Glyph): Fixed incorrect parameter sign-ness in callback
+ function.
- * include/freetype/internal/ftstream.h: adding the FT_NEXT_OFF3,
- FT_NEXT_UOFF3, FT_NEXT_OFF3_LE and FT_NEXT_UOFF3_LE to parse
- in-memory 24-bit integers.
+ * include/freetype/internal/ftmemory.h (FT_MEM_ZERO, FT_ZERO): New
+ macros.
+ * include/freetype/internal/ftstream.h (FT_NEXT_OFF3, FT_NEXT_UOFF3,
+ FT_NEXT_OFF3_LE, FT_NEXT_UOFF3_LE): New macros to parse in-memory
+ 24-bit integers.
2002-04-18 David Turner <[email protected]>
--- a/include/freetype/internal/ftmemory.h
+++ b/include/freetype/internal/ftmemory.h
@@ -178,9 +178,11 @@
#define FT_MEM_MOVE( dest, source, count ) ft_memmove( dest, source, count )
-#define FT_MEM_ZERO( dest, count ) FT_MEM_SET( dest, 0, count )
-#define FT_ZERO(p) FT_MEM_ZERO( p, sizeof(*(p)) )
+#define FT_MEM_ZERO( dest, count ) FT_MEM_SET( dest, 0, count )
+
+#define FT_ZERO( p ) FT_MEM_ZERO( p, sizeof ( *(p) ) )
+
/*************************************************************************/
/* */
--- a/src/pfr/descrip.mms
+++ b/src/pfr/descrip.mms
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2002 by
+# Copyright 2002 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
--- a/src/pfr/module.mk
+++ b/src/pfr/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2002 by
+# Copyright 2002 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
--- a/src/pfr/pfr.c
+++ b/src/pfr/pfr.c
@@ -2,9 +2,9 @@
/* */
/* pfr.c */
/* */
-/* FreeType PFR driver component */
+/* FreeType PFR driver component. */
/* */
-/* Copyright 1996-2002 by */
+/* Copyright 2002 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
--- a/src/pfr/pfrcmap.c
+++ b/src/pfr/pfrcmap.c
@@ -1,11 +1,30 @@
+/***************************************************************************/
+/* */
+/* pfrcmap.c */
+/* */
+/* FreeType PFR cmap handling (body). */
+/* */
+/* Copyright 2002 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. */
+/* */
+/***************************************************************************/
+
+
#include "pfrcmap.h"
#include "pfrobjs.h"
#include FT_INTERNAL_DEBUG_H
+
FT_CALLBACK_DEF( FT_Error )
pfr_cmap_init( PFR_CMap cmap )
{
- PFR_Face face = (PFR_Face)FT_CMAP_FACE(cmap);
+ PFR_Face face = (PFR_Face)FT_CMAP_FACE( cmap );
cmap->num_chars = face->phy_font.num_chars;
@@ -12,14 +31,15 @@
cmap->chars = face->phy_font.chars;
/* just for safety, check that the character entries are correctly */
- /* sorted in increasing character code order.. */
+ /* sorted in increasing character code order */
{
FT_UInt n;
+
for ( n = 1; n < cmap->num_chars; n++ )
{
- if ( cmap->chars[n-1].char_code >= cmap->chars[n].char_code )
- FT_ASSERT(0);
+ if ( cmap->chars[n - 1].char_code >= cmap->chars[n].char_code )
+ FT_ASSERT( 0 );
}
}
@@ -63,8 +83,8 @@
FT_CALLBACK_DEF( FT_UInt )
- pfr_cmap_char_next( PFR_CMap cmap,
- FT_UInt32 *pchar_code )
+ pfr_cmap_char_next( PFR_CMap cmap,
+ FT_UInt32 *pchar_code )
{
FT_UInt result = 0;
FT_UInt32 char_code = *pchar_code + 1;
@@ -122,8 +142,11 @@
{
sizeof ( PFR_CMapRec ),
- (FT_CMap_InitFunc) pfr_cmap_init,
- (FT_CMap_DoneFunc) pfr_cmap_done,
- (FT_CMap_CharIndexFunc) pfr_cmap_char_index,
- (FT_CMap_CharNextFunc) pfr_cmap_char_next
+ (FT_CMap_InitFunc) pfr_cmap_init,
+ (FT_CMap_DoneFunc) pfr_cmap_done,
+ (FT_CMap_CharIndexFunc)pfr_cmap_char_index,
+ (FT_CMap_CharNextFunc) pfr_cmap_char_next
};
+
+
+/* END */
--- a/src/pfr/pfrcmap.h
+++ b/src/pfr/pfrcmap.h
@@ -1,13 +1,32 @@
-#ifndef __PFR_CMAP_H__
-#define __PFR_CMAP_H__
+/***************************************************************************/
+/* */
+/* pfrcmap.h */
+/* */
+/* FreeType PFR cmap handling (specification). */
+/* */
+/* Copyright 2002 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. */
+/* */
+/***************************************************************************/
+
+#ifndef __PFRCMAP_H__
+#define __PFRCMAP_H__
+
#include <ft2build.h>
#include FT_INTERNAL_OBJECTS_H
#include "pfrtypes.h"
+
FT_BEGIN_HEADER
- typedef struct PFR_CMapRec_
+ typedef struct PFR_CMapRec_
{
FT_CMapRec cmap;
FT_UInt num_chars;
@@ -16,8 +35,12 @@
} PFR_CMapRec, *PFR_CMap;
- FT_CALLBACK_TABLE const FT_CMap_ClassRec pfr_cmap_class_rec;
+ FT_CALLBACK_TABLE const FT_CMap_ClassRec pfr_cmap_class_rec;
FT_END_HEADER
-#endif /* __PFR_CMAP_H__ */
+
+#endif /* __PFRCMAP_H__ */
+
+
+/* END */
--- a/src/pfr/pfrdrivr.c
+++ b/src/pfr/pfrdrivr.c
@@ -1,3 +1,21 @@
+/***************************************************************************/
+/* */
+/* pfrdrivr.c */
+/* */
+/* FreeType PFR driver interface (body). */
+/* */
+/* Copyright 2002 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. */
+/* */
+/***************************************************************************/
+
+
#include <ft2build.h>
#include FT_INTERNAL_DEBUG_H
#include FT_INTERNAL_STREAM_H
@@ -20,9 +38,9 @@
0, /* format interface */
- (FT_Module_Constructor) NULL,
- (FT_Module_Destructor) NULL,
- (FT_Module_Requester) NULL
+ (FT_Module_Constructor)NULL,
+ (FT_Module_Destructor) NULL,
+ (FT_Module_Requester) NULL
},
sizeof( PFR_FaceRec ),
@@ -29,24 +47,24 @@
sizeof( PFR_SizeRec ),
sizeof( PFR_SlotRec ),
- (FT_Face_InitFunc) pfr_face_init,
- (FT_Face_DoneFunc) pfr_face_done,
- (FT_Size_InitFunc) NULL,
- (FT_Size_DoneFunc) NULL,
- (FT_Slot_InitFunc) pfr_slot_init,
- (FT_Slot_DoneFunc) pfr_slot_done,
+ (FT_Face_InitFunc) pfr_face_init,
+ (FT_Face_DoneFunc) pfr_face_done,
+ (FT_Size_InitFunc) NULL,
+ (FT_Size_DoneFunc) NULL,
+ (FT_Slot_InitFunc) pfr_slot_init,
+ (FT_Slot_DoneFunc) pfr_slot_done,
- (FT_Size_ResetPointsFunc) NULL,
- (FT_Size_ResetPixelsFunc) NULL,
- (FT_Slot_LoadFunc) pfr_slot_load,
- (FT_CharMap_CharIndexFunc) NULL,
+ (FT_Size_ResetPointsFunc) NULL,
+ (FT_Size_ResetPixelsFunc) NULL,
+ (FT_Slot_LoadFunc) pfr_slot_load,
+ (FT_CharMap_CharIndexFunc)NULL,
- (FT_Face_GetKerningFunc) 0,
- (FT_Face_AttachFunc) 0,
- (FT_Face_GetAdvancesFunc) 0,
+ (FT_Face_GetKerningFunc) 0,
+ (FT_Face_AttachFunc) 0,
+ (FT_Face_GetAdvancesFunc) 0,
- (FT_CharMap_CharNextFunc) NULL
+ (FT_CharMap_CharNextFunc) NULL
};
-
+/* END */
--- a/src/pfr/pfrdrivr.h
+++ b/src/pfr/pfrdrivr.h
@@ -2,9 +2,9 @@
/* */
/* pfrdrivr.h */
/* */
-/* High-level Type PFR driver interface */
+/* High-level Type PFR driver interface (specification). */
/* */
-/* Copyright 1996-2002 by */
+/* Copyright 2002 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __PFR_DRIVER_H__
-#define __PFR_DRIVER_H__
+#ifndef __PFRDRIVR_H__
+#define __PFRDRIVR_H__
#include <ft2build.h>
@@ -32,7 +32,8 @@
FT_END_HEADER
-#endif /* __PFR_DRIVER_H__ */
+
+#endif /* __PFRDRIVR_H__ */
/* END */
--- a/src/pfr/pfrgload.c
+++ b/src/pfr/pfrgload.c
@@ -1,19 +1,38 @@
+/***************************************************************************/
+/* */
+/* pfrgload.c */
+/* */
+/* FreeType PFR glyph loader (body). */
+/* */
+/* Copyright 2002 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. */
+/* */
+/***************************************************************************/
+
+
#include "pfrgload.h"
-#include "pfrload.h" /* for macro definitions */
+#include "pfrload.h" /* for macro definitions */
#include FT_INTERNAL_DEBUG_H
#undef FT_COMPONENT
#define FT_COMPONENT trace_pfr
- /**************************************************************************/
- /**************************************************************************/
- /***** *****/
- /***** PFR GLYPH BUILDER *****/
- /***** *****/
- /**************************************************************************/
- /**************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** PFR GLYPH BUILDER *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+
FT_LOCAL_DEF( void )
pfr_glyph_init( PFR_Glyph glyph,
FT_GlyphLoader loader )
@@ -32,6 +51,7 @@
{
FT_Memory memory = glyph->loader->memory;
+
FT_FREE( glyph->x_control );
glyph->y_control = NULL;
@@ -49,7 +69,7 @@
}
- /* close current contour, if any */
+ /* close current contour, if any */
static void
pfr_glyph_close_contour( PFR_Glyph glyph )
{
@@ -57,6 +77,7 @@
FT_Outline* outline = &loader->current.outline;
FT_Int last, first;
+
if ( !glyph->path_begun )
return;
@@ -64,7 +85,7 @@
last = outline->n_points - 1;
first = 0;
if ( outline->n_contours > 0 )
- first = outline->contours[ outline->n_contours-1 ];
+ first = outline->contours[outline->n_contours - 1];
/* if the last point falls on the same location than the first one */
/* we need to delete it */
@@ -73,6 +94,7 @@
FT_Vector* p1 = outline->points + first;
FT_Vector* p2 = outline->points + last;
+
if ( p1->x == p2->x && p1->y == p2->y )
{
outline->n_points--;
@@ -82,14 +104,13 @@
/* don't add empty contours */
if ( last >= first )
- outline->contours[ outline->n_contours++ ] = (short) last;
+ outline->contours[outline->n_contours++] = (short)last;
glyph->path_begun = 0;
}
-
- /* reset glyph to start the loading of a new glyph */
+ /* reset glyph to start the loading of a new glyph */
static void
pfr_glyph_start( PFR_Glyph glyph )
{
@@ -105,7 +126,8 @@
FT_Outline* outline = &loader->current.outline;
FT_Error error;
- /* check that we've begun a new path */
+
+ /* check that we have begun a new path */
FT_ASSERT( glyph->path_begun != 0 );
error = FT_GlyphLoader_CheckPoints( loader, 1, 0 );
@@ -113,6 +135,7 @@
{
FT_UInt n = outline->n_points;
+
outline->points[n] = *to;
outline->tags [n] = FT_Curve_Tag_On;
@@ -133,15 +156,17 @@
FT_Outline* outline = &loader->current.outline;
FT_Error error;
- /* check that we've begun a new path */
+
+ /* check that we have begun a new path */
FT_ASSERT( glyph->path_begun != 0 );
error = FT_GlyphLoader_CheckPoints( loader, 3, 0 );
if ( !error )
{
- FT_Vector* vec = outline->points + outline->n_points;
- FT_Byte* tag = (FT_Byte*)outline->tags + outline->n_points;
+ FT_Vector* vec = outline->points + outline->n_points;
+ FT_Byte* tag = (FT_Byte*)outline->tags + outline->n_points;
+
vec[0] = *control1;
vec[1] = *control2;
vec[2] = *to;
@@ -163,6 +188,7 @@
FT_GlyphLoader loader = glyph->loader;
FT_Error error;
+
/* close current contour if any */
pfr_glyph_close_contour( glyph );
@@ -179,7 +205,6 @@
}
-
static void
pfr_glyph_end( PFR_Glyph glyph )
{
@@ -191,31 +216,32 @@
}
- /**************************************************************************/
- /**************************************************************************/
- /***** *****/
- /***** PFR GLYPH LOADER *****/
- /***** *****/
- /**************************************************************************/
- /**************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** PFR GLYPH LOADER *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
- /* Load a simple glyph */
+ /* load a simple glyph */
static FT_Error
pfr_glyph_load_simple( PFR_Glyph glyph,
FT_Byte* p,
FT_Byte* limit )
{
- FT_Error error = 0;
+ FT_Error error = 0;
FT_Memory memory = glyph->loader->memory;
FT_UInt flags, x_count, y_count, i, count, mask;
FT_Int x;
- PFR_CHECK(1);
- flags = PFR_NEXT_BYTE(p);
+ PFR_CHECK( 1 );
+ flags = PFR_NEXT_BYTE( p );
+
/* test for composite glyphs */
- FT_ASSERT( (flags & PFR_GLYPH_IS_COMPOUND) == 0 );
+ FT_ASSERT( ( flags & PFR_GLYPH_IS_COMPOUND ) == 0 );
x_count = 0;
y_count = 0;
@@ -222,23 +248,23 @@
if ( flags & PFR_GLYPH_1BYTE_XYCOUNT )
{
- PFR_CHECK(1);
- count = PFR_NEXT_BYTE(p);
- x_count = (count & 15);
- y_count = (count >> 4);
+ PFR_CHECK( 1 );
+ count = PFR_NEXT_BYTE( p );
+ x_count = ( count & 15 );
+ y_count = ( count >> 4 );
}
else
{
if ( flags & PFR_GLYPH_XCOUNT )
{
- PFR_CHECK(1);
- x_count = PFR_NEXT_BYTE(p);
+ PFR_CHECK( 1 );
+ x_count = PFR_NEXT_BYTE( p );
}
if ( flags & PFR_GLYPH_YCOUNT )
{
- PFR_CHECK(1);
- y_count = PFR_NEXT_BYTE(p);
+ PFR_CHECK( 1 );
+ y_count = PFR_NEXT_BYTE( p );
}
}
@@ -247,9 +273,12 @@
/* re-allocate array when necessary */
if ( count > glyph->max_xy_control )
{
- FT_UInt new_max = (count+7) & -8;
+ FT_UInt new_max = ( count + 7 ) & -8;
- if ( FT_RENEW_ARRAY( glyph->x_control, glyph->max_xy_control, new_max ) )
+
+ if ( FT_RENEW_ARRAY( glyph->x_control,
+ glyph->max_xy_control,
+ new_max ) )
goto Exit;
glyph->max_xy_control = new_max;
@@ -259,23 +288,24 @@
mask = 0;
x = 0;
+
for ( i = 0; i < count; i++ )
{
- if ( (i & 7) == 0 )
+ if ( ( i & 7 ) == 0 )
{
- PFR_CHECK(1);
- mask = PFR_NEXT_BYTE(p);
+ PFR_CHECK( 1 );
+ mask = PFR_NEXT_BYTE( p );
}
if ( mask & 1 )
{
- PFR_CHECK(2);
- x = PFR_NEXT_SHORT(p);
+ PFR_CHECK( 2 );
+ x = PFR_NEXT_SHORT( p );
}
else
{
- PFR_CHECK(1);
- x += PFR_NEXT_BYTE(p);
+ PFR_CHECK( 1 );
+ x += PFR_NEXT_BYTE( p );
}
glyph->x_control[i] = x;
@@ -283,16 +313,16 @@
mask >>= 1;
}
- /* XXXX: for now we ignore the secondary stroke and edge definitions */
- /* since we don't want to support native PFR hinting.. */
- /* */
+ /* XXX: for now we ignore the secondary stroke and edge definitions */
+ /* since we don't want to support native PFR hinting */
+ /* */
if ( flags & PFR_GLYPH_EXTRA_ITEMS )
{
error = pfr_extra_items_skip( &p, limit );
- if (error) goto Exit;
+ if ( error )
+ goto Exit;
}
-
pfr_glyph_start( glyph );
/* now load a simple glyph */
@@ -300,6 +330,7 @@
FT_Vector pos[4];
FT_Vector* cur;
+
pos[0].x = pos[0].y = 0;
pos[3] = pos[0];
@@ -307,65 +338,67 @@
{
FT_Int format, args_format = 0, args_count, n;
+
/***************************************************************/
/* read instruction */
/* */
- PFR_CHECK(1);
- format = PFR_NEXT_BYTE(p);
- switch (format >> 4)
+ PFR_CHECK( 1 );
+ format = PFR_NEXT_BYTE( p );
+
+ switch ( format >> 4 )
{
- case 0: /* end glyph */
- FT_TRACE6(( "- end glyph" ));
- args_count = 0;
- break;
+ case 0: /* end glyph */
+ FT_TRACE6(( "- end glyph" ));
+ args_count = 0;
+ break;
- case 1: /* general line operation */
- FT_TRACE6(( "- general line" ));
- goto Line1;
+ case 1: /* general line operation */
+ FT_TRACE6(( "- general line" ));
+ goto Line1;
- case 4: /* move to inside contour */
- FT_TRACE6(( "- move to inside" ));
- goto Line1;
+ case 4: /* move to inside contour */
+ FT_TRACE6(( "- move to inside" ));
+ goto Line1;
- case 5: /* move to outside contour */
- FT_TRACE6(( "- move to outside" ));
- Line1:
- args_format = format & 15;
- args_count = 1;
- break;
+ case 5: /* move to outside contour */
+ FT_TRACE6(( "- move to outside" ));
+ Line1:
+ args_format = format & 15;
+ args_count = 1;
+ break;
- case 2: /* horizontal line to */
- FT_TRACE6(( "- horizontal line to cx.%d", format & 15 ));
- pos[0].y = pos[3].y;
- pos[0].x = glyph->x_control[ format & 15 ];
- pos[3] = pos[0];
- args_count = 0;
- break;
+ case 2: /* horizontal line to */
+ FT_TRACE6(( "- horizontal line to cx.%d", format & 15 ));
+ pos[0].y = pos[3].y;
+ pos[0].x = glyph->x_control[format & 15];
+ pos[3] = pos[0];
+ args_count = 0;
+ break;
- case 3: /* vertical line to */
- FT_TRACE6(( "- vertical line to cy.%d", format & 15 ));
- pos[0].x = pos[3].x;
- pos[0].y = glyph->y_control[ format & 15 ];
- pos[3] = pos[0];
- args_count = 0;
- break;
+ case 3: /* vertical line to */
+ FT_TRACE6(( "- vertical line to cy.%d", format & 15 ));
+ pos[0].x = pos[3].x;
+ pos[0].y = glyph->y_control[format & 15];
+ pos[3] = pos[0];
+ args_count = 0;
+ break;
- case 6: /* horizontal to vertical curve */
- FT_TRACE6(( "- hv curve " ));
- args_format = 0xB8E;
- args_count = 3;
- break;
+ case 6: /* horizontal to vertical curve */
+ FT_TRACE6(( "- hv curve " ));
+ args_format = 0xB8E;
+ args_count = 3;
+ break;
- case 7: /* vertical to horizontal curve */
- FT_TRACE6(( "- vh curve" ));
- args_format = 0xE2B;
- args_count = 3;
- break;
+ case 7: /* vertical to horizontal curve */
+ FT_TRACE6(( "- vh curve" ));
+ args_format = 0xE2B;
+ args_count = 3;
+ break;
- default: /* general curve to */
- FT_TRACE6(( "- general curve" ));
- args_count = 4;
- args_format = (format & 15);
+ default: /* general curve to */
+ FT_TRACE6(( "- general curve" ));
+ args_count = 4;
+ args_format = format & 15;
}
/***********************************************************/
@@ -376,67 +409,68 @@
{
FT_Int index, delta;
+
/* read the X argument */
switch ( args_format & 3 )
{
- case 0: /* 8-bit index */
- PFR_CHECK(1);
- index = PFR_NEXT_BYTE(p);
- cur->x = glyph->x_control[index];
- FT_TRACE7(( " cx#%d", index ));
- break;
+ case 0: /* 8-bit index */
+ PFR_CHECK( 1 );
+ index = PFR_NEXT_BYTE( p );
+ cur->x = glyph->x_control[index];
+ FT_TRACE7(( " cx#%d", index ));
+ break;
- case 1: /* 16-bit value */
- PFR_CHECK(2);
- cur->x = PFR_NEXT_SHORT(p);
- FT_TRACE7(( " x.%d", cur->x ));
- break;
+ case 1: /* 16-bit value */
+ PFR_CHECK( 2 );
+ cur->x = PFR_NEXT_SHORT( p );
+ FT_TRACE7(( " x.%d", cur->x ));
+ break;
- case 2: /* 8-bit delta */
- PFR_CHECK(1);
- delta = PFR_NEXT_INT8(p);
- cur->x = pos[3].x + delta;
- FT_TRACE7(( " dx.%d", delta ));
- break;
+ case 2: /* 8-bit delta */
+ PFR_CHECK( 1 );
+ delta = PFR_NEXT_INT8( p );
+ cur->x = pos[3].x + delta;
+ FT_TRACE7(( " dx.%d", delta ));
+ break;
- default:
- FT_TRACE7(( " |" ));
- cur->x = pos[3].x;
+ default:
+ FT_TRACE7(( " |" ));
+ cur->x = pos[3].x;
}
/* read the Y argument */
- switch ( (args_format >> 2) & 3 )
+ switch ( ( args_format >> 2 ) & 3 )
{
- case 0: /* 8-bit index */
- PFR_CHECK(1);
- index = PFR_NEXT_BYTE(p);
- cur->y = glyph->y_control[index];
- FT_TRACE7(( " cy#%d", index ));
- break;
+ case 0: /* 8-bit index */
+ PFR_CHECK( 1 );
+ index = PFR_NEXT_BYTE( p );
+ cur->y = glyph->y_control[index];
+ FT_TRACE7(( " cy#%d", index ));
+ break;
- case 1: /* 16-bit absolute value */
- PFR_CHECK(2);
- cur->y = PFR_NEXT_SHORT(p);
- FT_TRACE7(( " y.%d", cur->y ));
- break;
+ case 1: /* 16-bit absolute value */
+ PFR_CHECK( 2 );
+ cur->y = PFR_NEXT_SHORT( p );
+ FT_TRACE7(( " y.%d", cur->y ));
+ break;
- case 2: /* 8-bit delta */
- PFR_CHECK(1);
- delta = PFR_NEXT_INT8(p);
- cur->y = pos[3].y + delta;
- FT_TRACE7(( " dy.%d", delta ));
- break;
+ case 2: /* 8-bit delta */
+ PFR_CHECK( 1 );
+ delta = PFR_NEXT_INT8( p );
+ cur->y = pos[3].y + delta;
+ FT_TRACE7(( " dy.%d", delta ));
+ break;
- default:
- FT_TRACE7(( " -" ));
- cur->y = pos[3].y;
+ default:
+ FT_TRACE7(( " -" ));
+ cur->y = pos[3].y;
}
/* read the additional format flag for the general curve */
if ( n == 0 && args_count == 4 )
{
- PFR_CHECK(1);
- args_format = PFR_NEXT_BYTE(p);
+ PFR_CHECK( 1 );
+ args_format = PFR_NEXT_BYTE( p );
args_count--;
}
else
@@ -452,29 +486,29 @@
/***********************************************************/
/* finally, execute instruction */
/* */
- switch (format >> 4)
+ switch ( format >> 4 )
{
- case 0: /* end glyph => EXIT */
- pfr_glyph_end( glyph );
- goto Exit;
+ case 0: /* end glyph => EXIT */
+ pfr_glyph_end( glyph );
+ goto Exit;
- case 1: /* line operations */
- case 2:
- case 3:
- error = pfr_glyph_line_to( glyph, pos );
- goto Test_Error;
+ case 1: /* line operations */
+ case 2:
+ case 3:
+ error = pfr_glyph_line_to( glyph, pos );
+ goto Test_Error;
- case 4: /* move to inside contour */
- case 5: /* move to outside contour */
- error = pfr_glyph_move_to( glyph, pos );
- goto Test_Error;
+ case 4: /* move to inside contour */
+ case 5: /* move to outside contour */
+ error = pfr_glyph_move_to( glyph, pos );
+ goto Test_Error;
- default: /* curve operations */
- error = pfr_glyph_curve_to( glyph, pos, pos+1, pos+2 );
+ default: /* curve operations */
+ error = pfr_glyph_curve_to( glyph, pos, pos + 1, pos + 2 );
- Test_Error: /* test error condition */
- if (error)
- goto Exit;
+ Test_Error: /* test error condition */
+ if ( error )
+ goto Exit;
}
} /* for (;;) */
}
@@ -489,9 +523,7 @@
}
-
- /* load a composite/compound glyph */
-
+ /* load a composite/compound glyph */
static FT_Error
pfr_glyph_load_compound( PFR_Glyph glyph,
FT_Byte* p,
@@ -504,11 +536,12 @@
FT_UInt flags, i, count, org_count;
FT_Int x_pos, y_pos;
- PFR_CHECK(1);
- flags = PFR_NEXT_BYTE(p);
+ PFR_CHECK( 1 );
+ flags = PFR_NEXT_BYTE( p );
+
/* test for composite glyphs */
- FT_ASSERT( (flags & PFR_GLYPH_IS_COMPOUND) != 0 );
+ FT_ASSERT( ( flags & PFR_GLYPH_IS_COMPOUND ) != 0 );
count = flags & 0x3F;
@@ -521,12 +554,12 @@
}
/* we can't rely on the FT_GlyphLoader to load sub-glyphs, because */
- /* the PFR format is so damn stupid that it uses direct file offsets */
- /* to point to the sub-glyphs (instead of glyph indices).. */
+ /* the PFR format is dumb, using direct file offsets to point to the */
+ /* sub-glyphs (instead of glyph indices). Sigh. */
/* */
- /* for now, we'll load the list of sub-glyphs in a different array */
+ /* For now, we load the list of sub-glyphs into a different array */
/* but this will prevent us from using the auto-hinter at its best */
- /* quality.. */
+ /* quality. */
/* */
org_count = glyph->num_subs;
@@ -534,6 +567,7 @@
{
FT_UInt new_max = ( org_count + count + 3 ) & -4;
+
if ( FT_RENEW_ARRAY( glyph->subs, glyph->max_subs, new_max ) )
goto Exit;
@@ -548,55 +582,56 @@
{
FT_UInt format;
- PFR_CHECK(1);
- format = PFR_NEXT_BYTE(p);
+ PFR_CHECK( 1 );
+ format = PFR_NEXT_BYTE( p );
+
/* read scale when available */
subglyph->x_scale = 0x10000L;
if ( format & PFR_SUBGLYPH_XSCALE )
{
- PFR_CHECK(2);
- subglyph->x_scale = PFR_NEXT_SHORT(p) << 4;
+ PFR_CHECK( 2 );
+ subglyph->x_scale = PFR_NEXT_SHORT( p ) << 4;
}
subglyph->y_scale = 0x10000L;
if ( format & PFR_SUBGLYPH_YSCALE )
{
- PFR_CHECK(2);
- subglyph->y_scale = PFR_NEXT_SHORT(p) << 4;
+ PFR_CHECK( 2 );
+ subglyph->y_scale = PFR_NEXT_SHORT( p ) << 4;
}
/* read offset */
switch ( format & 3 )
{
- case 1:
- PFR_CHECK(2);
- x_pos = PFR_NEXT_SHORT(p);
- break;
+ case 1:
+ PFR_CHECK( 2 );
+ x_pos = PFR_NEXT_SHORT( p );
+ break;
- case 2:
- PFR_CHECK(1);
- x_pos += PFR_NEXT_INT8(p);
- break;
+ case 2:
+ PFR_CHECK( 1 );
+ x_pos += PFR_NEXT_INT8( p );
+ break;
- default:
- ;
+ default:
+ ;
}
- switch ( (format >> 2) & 3 )
+ switch ( ( format >> 2 ) & 3 )
{
- case 1:
- PFR_CHECK(2);
- y_pos = PFR_NEXT_SHORT(p);
- break;
+ case 1:
+ PFR_CHECK( 2 );
+ y_pos = PFR_NEXT_SHORT( p );
+ break;
- case 2:
- PFR_CHECK(1);
- y_pos += PFR_NEXT_INT8(p);
- break;
+ case 2:
+ PFR_CHECK( 1 );
+ y_pos += PFR_NEXT_INT8( p );
+ break;
- default:
- ;
+ default:
+ ;
}
subglyph->x_delta = x_pos;
@@ -605,30 +640,29 @@
/* read glyph position and size now */
if ( format & PFR_SUBGLYPH_2BYTE_SIZE )
{
- PFR_CHECK(2);
- subglyph->gps_size = PFR_NEXT_USHORT(p);
+ PFR_CHECK( 2 );
+ subglyph->gps_size = PFR_NEXT_USHORT( p );
}
else
{
- PFR_CHECK(1);
- subglyph->gps_size = PFR_NEXT_BYTE(p);
+ PFR_CHECK( 1 );
+ subglyph->gps_size = PFR_NEXT_BYTE( p );
}
if ( format & PFR_SUBGLYPH_3BYTE_OFFSET )
{
- PFR_CHECK(3);
- subglyph->gps_offset = PFR_NEXT_LONG(p);
+ PFR_CHECK( 3 );
+ subglyph->gps_offset = PFR_NEXT_LONG( p );
}
else
{
- PFR_CHECK(2);
- subglyph->gps_offset = PFR_NEXT_USHORT(p);
+ PFR_CHECK( 2 );
+ subglyph->gps_offset = PFR_NEXT_USHORT( p );
}
glyph->num_subs++;
}
-
Exit:
return error;
@@ -639,23 +673,23 @@
}
-
static FT_Error
- pfr_glyph_load_rec( PFR_Glyph glyph,
- FT_Stream stream,
- FT_ULong gps_offset,
- FT_ULong offset,
- FT_ULong size )
+ pfr_glyph_load_rec( PFR_Glyph glyph,
+ FT_Stream stream,
+ FT_ULong gps_offset,
+ FT_ULong offset,
+ FT_ULong size )
{
FT_Error error;
FT_Byte* p;
FT_Byte* limit;
+
if ( FT_STREAM_SEEK( gps_offset + offset ) ||
FT_FRAME_ENTER( size ) )
- goto Exit;
+ goto Exit;
- p = (FT_Byte*) stream->cursor;
+ p = (FT_Byte*)stream->cursor;
limit = p + size;
if ( size > 0 && *p & PFR_GLYPH_IS_COMPOUND )
@@ -672,7 +706,8 @@
FT_FRAME_EXIT();
- if ( error ) goto Exit;
+ if ( error )
+ goto Exit;
count = glyph->num_subs - old_count;
@@ -687,11 +722,12 @@
old_points = base->n_points;
error = pfr_glyph_load_rec( glyph, stream, gps_offset,
- subglyph->gps_offset, subglyph->gps_size );
+ subglyph->gps_offset,
+ subglyph->gps_size );
if ( error )
goto Exit;
- /* note that the 'glyph->subs' might have been re-allocated */
+ /* note that `glyph->subs' might have been re-allocated */
subglyph = glyph->subs + old_count + n;
num_points = base->n_points - old_points;
@@ -703,8 +739,10 @@
for ( i = 0; i < num_points; i++, vec++ )
{
- vec->x = FT_MulFix( vec->x, subglyph->x_scale ) + subglyph->x_delta;
- vec->y = FT_MulFix( vec->y, subglyph->y_scale ) + subglyph->y_delta;
+ vec->x = FT_MulFix( vec->x, subglyph->x_scale ) +
+ subglyph->x_delta;
+ vec->y = FT_MulFix( vec->y, subglyph->y_scale ) +
+ subglyph->y_delta;
}
}
else
@@ -736,11 +774,11 @@
FT_LOCAL_DEF( FT_Error )
- pfr_glyph_load( PFR_Glyph glyph,
- FT_Stream stream,
- FT_ULong gps_offset,
- FT_ULong offset,
- FT_ULong size )
+ pfr_glyph_load( PFR_Glyph glyph,
+ FT_Stream stream,
+ FT_ULong gps_offset,
+ FT_ULong offset,
+ FT_ULong size )
{
/* initialize glyph loader */
FT_GlyphLoader_Rewind( glyph->loader );
@@ -749,3 +787,5 @@
return pfr_glyph_load_rec( glyph, stream, gps_offset, offset, size );
}
+
+/* END */
--- a/src/pfr/pfrgload.h
+++ b/src/pfr/pfrgload.h
@@ -1,10 +1,29 @@
-#ifndef __PFR_GLYPH_LOAD_H__
-#define __PFR_GLYPH_LOAD_H__
+/***************************************************************************/
+/* */
+/* pfrgload.h */
+/* */
+/* FreeType PFR glyph loader (specification). */
+/* */
+/* Copyright 2002 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. */
+/* */
+/***************************************************************************/
+
+#ifndef __PFRGLOAD_H__
+#define __PFRGLOAD_H__
+
#include "pfrtypes.h"
FT_BEGIN_HEADER
+
FT_LOCAL( void )
pfr_glyph_init( PFR_Glyph glyph,
FT_GlyphLoader loader );
@@ -24,4 +43,4 @@
FT_END_HEADER
-#endif /* __PFR_GLYPH_LOAD_H__ */
+#endif /* __PFRGLOAD_H__ */
--- a/src/pfr/pfrload.c
+++ b/src/pfr/pfrload.c
@@ -1,3 +1,21 @@
+/***************************************************************************/
+/* */
+/* pfrload.c */
+/* */
+/* FreeType PFR loader (body). */
+/* */
+/* Copyright 2002 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. */
+/* */
+/***************************************************************************/
+
+
#include "pfrload.h"
#include FT_INTERNAL_DEBUG_H
#include FT_INTERNAL_STREAM_H
@@ -5,17 +23,19 @@
#undef FT_COMPONENT
#define FT_COMPONENT trace_pfr
- /***********************************************************************/
- /***********************************************************************/
- /***** *****/
- /***** EXTRA ITEMS *****/
- /***** *****/
- /***********************************************************************/
- /***********************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** EXTRA ITEMS *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+
FT_LOCAL_DEF( FT_Error )
- pfr_extra_items_skip( FT_Byte* *pp, FT_Byte* limit )
+ pfr_extra_items_skip( FT_Byte* *pp,
+ FT_Byte* limit )
{
return pfr_extra_items_parse( pp, limit, NULL, NULL );
}
@@ -31,20 +51,23 @@
FT_Byte* p = *pp;
FT_UInt num_items, item_type, item_size;
- PFR_CHECK(1);
- num_items = PFR_NEXT_BYTE(p);
+
+ PFR_CHECK( 1 );
+ num_items = PFR_NEXT_BYTE( p );
+
for ( ; num_items > 0; num_items-- )
{
- PFR_CHECK(2);
- item_size = PFR_NEXT_BYTE(p);
- item_type = PFR_NEXT_BYTE(p);
+ PFR_CHECK( 2 );
+ item_size = PFR_NEXT_BYTE( p );
+ item_type = PFR_NEXT_BYTE( p );
- PFR_CHECK(item_size);
+ PFR_CHECK( item_size );
if ( item_list )
{
PFR_ExtraItem extra = item_list;
+
for ( extra = item_list; extra->parser != NULL; extra++ )
{
if ( extra->type == item_type )
@@ -65,62 +88,61 @@
return error;
Too_Short:
- FT_ERROR(( "pfr.extra_items.skip: invalid extra items table\n" ));
+ FT_ERROR(( "pfr_extra_items_parse: invalid extra items table\n" ));
error = FT_Err_Invalid_Table;
goto Exit;
}
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** PFR HEADER *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
- /***********************************************************************/
- /***********************************************************************/
- /***** *****/
- /***** PFR HEADER *****/
- /***** *****/
- /***********************************************************************/
- /***********************************************************************/
-
- static const FT_Frame_Field pfr_header_fields[] =
+ static const FT_Frame_Field pfr_header_fields[] =
{
#undef FT_STRUCTURE
#define FT_STRUCTURE PFR_HeaderRec
- FT_FRAME_START(58),
- FT_FRAME_ULONG (signature),
- FT_FRAME_USHORT(version),
- FT_FRAME_USHORT(signature2),
- FT_FRAME_USHORT(header_size),
+ FT_FRAME_START( 58 ),
+ FT_FRAME_ULONG ( signature ),
+ FT_FRAME_USHORT( version ),
+ FT_FRAME_USHORT( signature2 ),
+ FT_FRAME_USHORT( header_size ),
- FT_FRAME_USHORT(log_dir_size),
- FT_FRAME_USHORT(log_dir_offset),
+ FT_FRAME_USHORT( log_dir_size ),
+ FT_FRAME_USHORT( log_dir_offset ),
- FT_FRAME_USHORT(log_font_max_size),
- FT_FRAME_UOFF3 (log_font_section_size),
- FT_FRAME_UOFF3 (log_font_section_offset),
+ FT_FRAME_USHORT( log_font_max_size ),
+ FT_FRAME_UOFF3 ( log_font_section_size ),
+ FT_FRAME_UOFF3 ( log_font_section_offset ),
- FT_FRAME_USHORT(phy_font_max_size),
- FT_FRAME_UOFF3 (phy_font_section_size),
- FT_FRAME_UOFF3 (phy_font_section_offset),
+ FT_FRAME_USHORT( phy_font_max_size ),
+ FT_FRAME_UOFF3 ( phy_font_section_size ),
+ FT_FRAME_UOFF3 ( phy_font_section_offset ),
- FT_FRAME_USHORT(gps_max_size),
- FT_FRAME_UOFF3 (gps_section_size),
- FT_FRAME_UOFF3 (gps_section_offset),
+ FT_FRAME_USHORT( gps_max_size ),
+ FT_FRAME_UOFF3 ( gps_section_size ),
+ FT_FRAME_UOFF3 ( gps_section_offset ),
- FT_FRAME_BYTE (max_blue_values),
- FT_FRAME_BYTE (max_x_orus),
- FT_FRAME_BYTE (max_y_orus),
+ FT_FRAME_BYTE ( max_blue_values ),
+ FT_FRAME_BYTE ( max_x_orus ),
+ FT_FRAME_BYTE ( max_y_orus ),
- FT_FRAME_BYTE (phy_font_max_size_high),
- FT_FRAME_BYTE (color_flags),
+ FT_FRAME_BYTE ( phy_font_max_size_high ),
+ FT_FRAME_BYTE ( color_flags ),
- FT_FRAME_UOFF3 (bct_max_size),
- FT_FRAME_UOFF3 (bct_set_max_size),
- FT_FRAME_UOFF3 (phy_bct_set_max_size),
+ FT_FRAME_UOFF3 ( bct_max_size ),
+ FT_FRAME_UOFF3 ( bct_set_max_size ),
+ FT_FRAME_UOFF3 ( phy_bct_set_max_size ),
- FT_FRAME_USHORT(num_phy_fonts),
- FT_FRAME_BYTE (max_vert_stem_snap),
- FT_FRAME_BYTE (max_horz_stem_snap),
- FT_FRAME_USHORT(max_chars),
+ FT_FRAME_USHORT( num_phy_fonts ),
+ FT_FRAME_BYTE ( max_vert_stem_snap ),
+ FT_FRAME_BYTE ( max_horz_stem_snap ),
+ FT_FRAME_USHORT( max_chars ),
FT_FRAME_END
};
@@ -131,6 +153,7 @@
{
FT_Error error;
+
/* read header directly */
if ( !FT_STREAM_SEEK( 0 ) &&
!FT_STREAM_READ_FIELDS( pfr_header_fields, header ) )
@@ -149,11 +172,12 @@
{
FT_Bool result = 1;
+
/* check signature and header size */
- if ( header->signature != 0x50465230 || /* "PFR0" */
- header->version > 4 ||
- header->header_size < 58 ||
- header->signature2 != 0x0d0a ) /* CR/LF */
+ if ( header->signature != 0x50465230L || /* "PFR0" */
+ header->version > 4 ||
+ header->header_size < 58 ||
+ header->signature2 != 0x0d0a ) /* CR/LF */
{
result = 0;
}
@@ -179,7 +203,8 @@
FT_UInt count;
FT_UInt result = 0;
- if ( FT_STREAM_SEEK( section_offset ) || FT_READ_USHORT(count) )
+
+ if ( FT_STREAM_SEEK( section_offset ) || FT_READ_USHORT( count ) )
goto Exit;
result = count;
@@ -191,11 +216,11 @@
FT_LOCAL_DEF( FT_Error )
- pfr_log_font_load( PFR_LogFont log_font,
- FT_Stream stream,
- FT_UInt index,
- FT_UInt32 section_offset,
- FT_Bool size_increment )
+ pfr_log_font_load( PFR_LogFont log_font,
+ FT_Stream stream,
+ FT_UInt index,
+ FT_UInt32 section_offset,
+ FT_Bool size_increment )
{
FT_UInt num_log_fonts;
FT_UInt flags;
@@ -203,15 +228,17 @@
FT_UInt32 size;
FT_Error error;
- if ( FT_STREAM_SEEK( section_offset ) || FT_READ_USHORT(num_log_fonts) )
+
+ if ( FT_STREAM_SEEK( section_offset ) ||
+ FT_READ_USHORT( num_log_fonts ) )
goto Exit;
if ( index >= num_log_fonts )
return FT_Err_Invalid_Argument;
- if ( FT_STREAM_SKIP( index*5 ) ||
- FT_READ_USHORT(size) ||
- FT_READ_UOFF3 (offset) )
+ if ( FT_STREAM_SKIP( index * 5 ) ||
+ FT_READ_USHORT( size ) ||
+ FT_READ_UOFF3 ( offset ) )
goto Exit;
/* save logical font size and offset */
@@ -224,6 +251,7 @@
FT_Byte* limit;
FT_UInt local;
+
if ( FT_STREAM_SEEK( offset ) || FT_FRAME_ENTER( size ) )
goto Exit;
@@ -232,12 +260,12 @@
PFR_CHECK(13);
- log_font->matrix[0] = PFR_NEXT_LONG(p);
- log_font->matrix[1] = PFR_NEXT_LONG(p);
- log_font->matrix[2] = PFR_NEXT_LONG(p);
- log_font->matrix[3] = PFR_NEXT_LONG(p);
+ log_font->matrix[0] = PFR_NEXT_LONG( p );
+ log_font->matrix[1] = PFR_NEXT_LONG( p );
+ log_font->matrix[2] = PFR_NEXT_LONG( p );
+ log_font->matrix[3] = PFR_NEXT_LONG( p );
- flags = PFR_NEXT_BYTE(p);
+ flags = PFR_NEXT_BYTE( p );
local = 0;
if ( flags & PFR_LOG_STROKE )
@@ -256,23 +284,23 @@
local++;
}
- PFR_CHECK(local);
+ PFR_CHECK( local );
if ( flags & PFR_LOG_STROKE )
{
log_font->stroke_thickness = ( flags & PFR_LOG_2BYTE_STROKE )
- ? PFR_NEXT_SHORT(p)
- : PFR_NEXT_BYTE(p);
+ ? PFR_NEXT_SHORT( p )
+ : PFR_NEXT_BYTE( p );
- if ( (flags & PFR_LINE_JOIN_MASK) == PFR_LINE_JOIN_MITER )
- log_font->miter_limit = PFR_NEXT_LONG(p);
+ if ( ( flags & PFR_LINE_JOIN_MASK ) == PFR_LINE_JOIN_MITER )
+ log_font->miter_limit = PFR_NEXT_LONG( p );
}
if ( flags & PFR_LOG_BOLD )
{
log_font->bold_thickness = ( flags & PFR_LOG_2BYTE_BOLD )
- ? PFR_NEXT_SHORT(p)
- : PFR_NEXT_BYTE(p);
+ ? PFR_NEXT_SHORT( p )
+ : PFR_NEXT_BYTE( p );
}
if ( flags & PFR_LOG_EXTRA_ITEMS )
@@ -282,12 +310,12 @@
}
PFR_CHECK(5);
- log_font->phys_size = PFR_NEXT_USHORT(p);
- log_font->phys_offset = PFR_NEXT_ULONG(p);
+ log_font->phys_size = PFR_NEXT_USHORT( p );
+ log_font->phys_offset = PFR_NEXT_ULONG( p );
if ( size_increment )
{
- PFR_CHECK(1);
- log_font->phys_size += (FT_UInt32)PFR_NEXT_BYTE(p) << 16;
+ PFR_CHECK( 1 );
+ log_font->phys_size += (FT_UInt32)PFR_NEXT_BYTE( p ) << 16;
}
}
@@ -313,7 +341,7 @@
/***********************************************************************/
- /* load bitmap strikes lists */
+ /* load bitmap strikes lists */
FT_CALLBACK_DEF( FT_Error )
pfr_extra_item_load_bitmap_info( FT_Byte* p,
FT_Byte* limit,
@@ -325,11 +353,12 @@
FT_UInt n, count, size1;
FT_Error error = 0;
- PFR_CHECK(5);
+
+ PFR_CHECK( 5 );
p += 3; /* skip bctSize */
- flags0 = PFR_NEXT_BYTE(p);
- count = PFR_NEXT_BYTE(p);
+ flags0 = PFR_NEXT_BYTE( p );
+ count = PFR_NEXT_BYTE( p );
/* re-allocate when needed */
if ( phy_font->num_strikes + count > phy_font->max_strikes )
@@ -336,7 +365,9 @@
{
FT_UInt new_max = (phy_font->num_strikes + count + 3) & -4;
- if ( FT_RENEW_ARRAY( phy_font->strikes, phy_font->num_strikes, new_max ) )
+ if ( FT_RENEW_ARRAY( phy_font->strikes,
+ phy_font->num_strikes,
+ new_max ) )
goto Exit;
phy_font->max_strikes = new_max;
@@ -360,31 +391,31 @@
strike = phy_font->strikes + phy_font->num_strikes;
- PFR_CHECK( count*size1 );
+ PFR_CHECK( count * size1 );
for ( n = 0; n < count; n++, strike++ )
{
strike->x_ppm = ( flags0 & PFR_STRIKE_2BYTE_XPPM )
- ? PFR_NEXT_USHORT(p)
- : PFR_NEXT_BYTE(p);
+ ? PFR_NEXT_USHORT( p )
+ : PFR_NEXT_BYTE( p );
strike->y_ppm = ( flags0 & PFR_STRIKE_2BYTE_YPPM )
- ? PFR_NEXT_USHORT(p)
- : PFR_NEXT_BYTE(p);
+ ? PFR_NEXT_USHORT( p )
+ : PFR_NEXT_BYTE( p );
- strike->flags = PFR_NEXT_BYTE(p);
+ strike->flags = PFR_NEXT_BYTE( p );
strike->bct_size = ( flags0 & PFR_STRIKE_3BYTE_SIZE )
- ? PFR_NEXT_ULONG(p)
- : PFR_NEXT_USHORT(p);
+ ? PFR_NEXT_ULONG( p )
+ : PFR_NEXT_USHORT( p );
strike->bct_offset = ( flags0 & PFR_STRIKE_3BYTE_OFFSET )
- ? PFR_NEXT_ULONG(p)
- : PFR_NEXT_USHORT(p);
+ ? PFR_NEXT_ULONG( p )
+ : PFR_NEXT_USHORT( p );
strike->num_bitmaps = ( flags0 & PFR_STRIKE_2BYTE_COUNT )
- ? PFR_NEXT_USHORT(p)
- : PFR_NEXT_BYTE(p);
+ ? PFR_NEXT_USHORT( p )
+ : PFR_NEXT_BYTE( p );
}
phy_font->num_strikes += count;
@@ -399,7 +430,7 @@
}
- /* load font ID, i.e. name */
+ /* load font ID, i.e. name */
FT_CALLBACK_DEF( FT_Error )
pfr_extra_item_load_font_id( FT_Byte* p,
FT_Byte* limit,
@@ -409,6 +440,7 @@
FT_Memory memory = phy_font->memory;
FT_UInt len = (FT_UInt)( limit - p );
+
if ( phy_font->font_id != NULL )
goto Exit;
@@ -424,28 +456,29 @@
}
- /* load stem snap tables */
+ /* load stem snap tables */
FT_CALLBACK_DEF( FT_Error )
pfr_extra_item_load_stem_snaps( FT_Byte* p,
FT_Byte* limit,
PFR_PhyFont phy_font )
{
- FT_UInt count, num_vert, num_horz;
- FT_Int* snaps;
- FT_Error error = 0;
- FT_Memory memory = phy_font->memory;
+ FT_UInt count, num_vert, num_horz;
+ FT_Int* snaps;
+ FT_Error error = 0;
+ FT_Memory memory = phy_font->memory;
+
if ( phy_font->vertical.stem_snaps != NULL )
goto Exit;
- PFR_CHECK(1);
- count = PFR_NEXT_BYTE(p);
+ PFR_CHECK( 1 );
+ count = PFR_NEXT_BYTE( p );
num_vert = count & 15;
num_horz = count >> 4;
count = num_vert + num_horz;
- PFR_CHECK( count*2 );
+ PFR_CHECK( count * 2 );
if ( FT_NEW_ARRAY( snaps, count ) )
goto Exit;
@@ -454,7 +487,7 @@
phy_font->horizontal.stem_snaps = snaps + num_vert;
for ( ; count > 0; count--, snaps++ )
- *snaps = FT_NEXT_SHORT(p);
+ *snaps = FT_NEXT_SHORT( p );
Exit:
return error;
@@ -466,7 +499,7 @@
}
- static const PFR_ExtraItemRec pfr_phy_font_extra_items[] =
+ static const PFR_ExtraItemRec pfr_phy_font_extra_items[] =
{
{ 1, (PFR_ExtraItem_ParseFunc) pfr_extra_item_load_bitmap_info },
{ 2, (PFR_ExtraItem_ParseFunc) pfr_extra_item_load_font_id },
@@ -475,9 +508,6 @@
};
-
-
-
FT_LOCAL_DEF( void )
pfr_phy_font_done( PFR_PhyFont phy_font,
FT_Memory memory )
@@ -500,16 +530,12 @@
phy_font->chars_offset = 0;
}
-
-
-
-
FT_LOCAL_DEF( FT_Error )
- pfr_phy_font_load( PFR_PhyFont phy_font,
- FT_Stream stream,
- FT_UInt32 offset,
- FT_UInt32 size )
+ pfr_phy_font_load( PFR_PhyFont phy_font,
+ FT_Stream stream,
+ FT_UInt32 offset,
+ FT_UInt32 size )
{
FT_Error error;
FT_Memory memory = stream->memory;
@@ -517,6 +543,7 @@
FT_Byte* p;
FT_Byte* limit;
+
phy_font->memory = memory;
phy_font->offset = offset;
@@ -527,27 +554,27 @@
limit = p + size;
PFR_CHECK( 15 );
- phy_font->font_ref_number = PFR_NEXT_USHORT(p);
- phy_font->outline_resolution = PFR_NEXT_USHORT(p);
- phy_font->metrics_resolution = PFR_NEXT_USHORT(p);
- phy_font->bbox.xMin = PFR_NEXT_SHORT(p);
- phy_font->bbox.yMin = PFR_NEXT_SHORT(p);
- phy_font->bbox.xMax = PFR_NEXT_SHORT(p);
- phy_font->bbox.yMax = PFR_NEXT_SHORT(p);
- phy_font->flags = flags = PFR_NEXT_BYTE(p);
+ phy_font->font_ref_number = PFR_NEXT_USHORT( p );
+ phy_font->outline_resolution = PFR_NEXT_USHORT( p );
+ phy_font->metrics_resolution = PFR_NEXT_USHORT( p );
+ phy_font->bbox.xMin = PFR_NEXT_SHORT( p );
+ phy_font->bbox.yMin = PFR_NEXT_SHORT( p );
+ phy_font->bbox.xMax = PFR_NEXT_SHORT( p );
+ phy_font->bbox.yMax = PFR_NEXT_SHORT( p );
+ phy_font->flags = flags = PFR_NEXT_BYTE( p );
/* get the standard advance for non-proprotional fonts */
if ( !(flags & PFR_PHY_PROPORTIONAL) )
{
- PFR_CHECK(2);
- phy_font->standard_advance = PFR_NEXT_SHORT(p);
+ PFR_CHECK( 2 );
+ phy_font->standard_advance = PFR_NEXT_SHORT( p );
}
/* load the extra items when present */
if ( flags & PFR_PHY_EXTRA_ITEMS )
{
- error =
- pfr_extra_items_parse( &p, limit, pfr_phy_font_extra_items, phy_font );
+ error = pfr_extra_items_parse( &p, limit,
+ pfr_phy_font_extra_items, phy_font );
if ( error )
goto Fail;
@@ -554,10 +581,10 @@
}
/* skip the aux bytes */
- PFR_CHECK(3);
- num_aux = PFR_NEXT_ULONG(p);
+ PFR_CHECK( 3 );
+ num_aux = PFR_NEXT_ULONG( p );
- PFR_CHECK(num_aux);
+ PFR_CHECK( num_aux );
p += num_aux;
/* read the blue values */
@@ -565,79 +592,81 @@
FT_UInt n, count;
PFR_CHECK( 1 );
- phy_font->num_blue_values = count = PFR_NEXT_BYTE(p);
+ phy_font->num_blue_values = count = PFR_NEXT_BYTE( p );
- PFR_CHECK( count*2 );
+ PFR_CHECK( count * 2 );
if ( FT_NEW_ARRAY( phy_font->blue_values, count ) )
goto Fail;
for ( n = 0; n < count; n++ )
- phy_font->blue_values[n] = PFR_NEXT_SHORT(p);
+ phy_font->blue_values[n] = PFR_NEXT_SHORT( p );
}
- PFR_CHECK(8);
- phy_font->blue_fuzz = PFR_NEXT_BYTE(p);
- phy_font->blue_scale = PFR_NEXT_BYTE(p);
+ PFR_CHECK( 8 );
+ phy_font->blue_fuzz = PFR_NEXT_BYTE( p );
+ phy_font->blue_scale = PFR_NEXT_BYTE( p );
- phy_font->vertical.standard = PFR_NEXT_USHORT(p);
- phy_font->horizontal.standard = PFR_NEXT_USHORT(p);
+ phy_font->vertical.standard = PFR_NEXT_USHORT( p );
+ phy_font->horizontal.standard = PFR_NEXT_USHORT( p );
/* read the character descriptors */
{
- FT_UInt n, count, size;
+ FT_UInt n, count, Size;
- phy_font->num_chars = count = PFR_NEXT_USHORT(p);
- phy_font->chars_offset = offset + (p - stream->cursor);
+ phy_font->num_chars = count = PFR_NEXT_USHORT( p );
+ phy_font->chars_offset = offset + ( p - stream->cursor );
+
if ( FT_NEW_ARRAY( phy_font->chars, count ) )
goto Fail;
- size = 1 + 1 + 2;
+ Size = 1 + 1 + 2;
if ( flags & PFR_PHY_2BYTE_CHARCODE )
- size += 1;
+ Size += 1;
if ( flags & PFR_PHY_PROPORTIONAL )
- size += 2;
+ Size += 2;
if ( flags & PFR_PHY_ASCII_CODE )
- size += 1;
+ Size += 1;
if ( flags & PFR_PHY_2BYTE_GPS_SIZE )
- size += 1;
+ Size += 1;
if ( flags & PFR_PHY_3BYTE_GPS_OFFSET )
- size += 1;
+ Size += 1;
- PFR_CHECK( count*size );
+ PFR_CHECK( count * Size );
for ( n = 0; n < count; n++ )
{
- PFR_Char cur = &phy_font->chars[n];
+ PFR_Char cur = &phy_font->chars[n];
- cur->char_code = ( flags & PFR_PHY_2BYTE_CHARCODE )
- ? PFR_NEXT_USHORT(p)
- : PFR_NEXT_BYTE(p);
- cur->advance = ( flags & PFR_PHY_PROPORTIONAL )
- ? PFR_NEXT_SHORT(p)
+ cur->char_code = ( flags & PFR_PHY_2BYTE_CHARCODE )
+ ? PFR_NEXT_USHORT( p )
+ : PFR_NEXT_BYTE( p );
+
+ cur->advance = ( flags & PFR_PHY_PROPORTIONAL )
+ ? PFR_NEXT_SHORT( p )
: phy_font->standard_advance;
#if 0
- cur->ascii = ( flags & PFR_PHY_ASCII_CODE )
- ? PFR_NEXT_BYTE(p)
+ cur->ascii = ( flags & PFR_PHY_ASCII_CODE )
+ ? PFR_NEXT_BYTE( p )
: 0;
#else
- if ( flags & PFR_PHY_ASCII_CODE )
- p += 1;
+ if ( flags & PFR_PHY_ASCII_CODE )
+ p += 1;
#endif
- cur->gps_size = ( flags & PFR_PHY_2BYTE_GPS_SIZE )
- ? PFR_NEXT_USHORT(p)
- : PFR_NEXT_BYTE(p);
+ cur->gps_size = ( flags & PFR_PHY_2BYTE_GPS_SIZE )
+ ? PFR_NEXT_USHORT( p )
+ : PFR_NEXT_BYTE( p );
- cur->gps_offset = ( flags & PFR_PHY_3BYTE_GPS_OFFSET )
- ? PFR_NEXT_ULONG(p)
- : PFR_NEXT_USHORT(p);
+ cur->gps_offset = ( flags & PFR_PHY_3BYTE_GPS_OFFSET )
+ ? PFR_NEXT_ULONG( p )
+ : PFR_NEXT_USHORT( p );
}
}
@@ -655,3 +684,4 @@
}
+/* END */
--- a/src/pfr/pfrload.h
+++ b/src/pfr/pfrload.h
@@ -1,30 +1,56 @@
-#ifndef __PFR_LOAD_H__
-#define __PFR_LOAD_H__
+/***************************************************************************/
+/* */
+/* pfrload.h */
+/* */
+/* FreeType PFR loader (specification). */
+/* */
+/* Copyright 2002 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. */
+/* */
+/***************************************************************************/
+
+#ifndef __PFRLOAD_H__
+#define __PFRLOAD_H__
+
#include "pfrobjs.h"
#include FT_INTERNAL_STREAM_H
+
FT_BEGIN_HEADER
#ifdef PFR_CONFIG_NO_CHECKS
-# define PFR_CHECK(x) do { } while (0)
+#define PFR_CHECK( x ) do { } while ( 0 )
#else
-# define PFR_CHECK(x) do { if ( p + (x) > limit ) goto Too_Short; } while (0)
+#define PFR_CHECK( x ) do \
+ { \
+ if ( p + (x) > limit ) \
+ goto Too_Short; \
+ } while ( 0 )
#endif
-#define PFR_NEXT_BYTE(p) FT_NEXT_BYTE(p)
-#define PFR_NEXT_INT8(p) FT_NEXT_CHAR(p)
-#define PFR_NEXT_SHORT(p) FT_NEXT_SHORT(p)
-#define PFR_NEXT_USHORT(p) FT_NEXT_USHORT(p)
-#define PFR_NEXT_LONG(p) FT_NEXT_OFF3(p)
-#define PFR_NEXT_ULONG(p) FT_NEXT_UOFF3(p)
+#define PFR_NEXT_BYTE( p ) FT_NEXT_BYTE( p )
+#define PFR_NEXT_INT8( p ) FT_NEXT_CHAR( p )
+#define PFR_NEXT_SHORT( p ) FT_NEXT_SHORT( p )
+#define PFR_NEXT_USHORT( p ) FT_NEXT_USHORT( p )
+#define PFR_NEXT_LONG( p ) FT_NEXT_OFF3( p )
+#define PFR_NEXT_ULONG( p ) FT_NEXT_UOFF3( p )
+
/* handling extra items */
- typedef FT_Error (*PFR_ExtraItem_ParseFunc)( FT_Byte* p,
- FT_Byte* limit,
- FT_Pointer data );
- typedef struct PFR_ExtraItemRec_
+ typedef FT_Error
+ (*PFR_ExtraItem_ParseFunc)( FT_Byte* p,
+ FT_Byte* limit,
+ FT_Pointer data );
+
+ typedef struct PFR_ExtraItemRec_
{
FT_UInt type;
PFR_ExtraItem_ParseFunc parser;
@@ -33,8 +59,10 @@
typedef const struct PFR_ExtraItemRec_* PFR_ExtraItem;
+
FT_LOCAL( FT_Error )
- pfr_extra_items_skip( FT_Byte* *pp, FT_Byte* limit );
+ pfr_extra_items_skip( FT_Byte* *pp,
+ FT_Byte* limit );
FT_LOCAL( FT_Error )
pfr_extra_items_parse( FT_Byte* *pp,
@@ -43,47 +71,48 @@
FT_Pointer item_data );
- /* load a PFR header */
+ /* load a PFR header */
FT_LOCAL( FT_Error )
pfr_header_load( PFR_Header header,
FT_Stream stream );
- /* check a PFR header */
+ /* check a PFR header */
FT_LOCAL( FT_Bool )
pfr_header_check( PFR_Header header );
-
- /* return number of logical fonts in this file */
+ /* return number of logical fonts in this file */
FT_LOCAL( FT_Error )
- pfr_log_font_count( FT_Stream stream,
- FT_UInt32 log_section_offset,
- FT_UInt *acount );
+ pfr_log_font_count( FT_Stream stream,
+ FT_UInt32 log_section_offset,
+ FT_UInt *acount );
-
- /* load a pfr logical font entry */
+ /* load a pfr logical font entry */
FT_LOCAL( FT_Error )
- pfr_log_font_load( PFR_LogFont log_font,
- FT_Stream stream,
- FT_UInt face_index,
- FT_UInt32 section_offset,
- FT_Bool size_increment );
+ pfr_log_font_load( PFR_LogFont log_font,
+ FT_Stream stream,
+ FT_UInt face_index,
+ FT_UInt32 section_offset,
+ FT_Bool size_increment );
- /* load a physical font entry */
+ /* load a physical font entry */
FT_LOCAL( FT_Error )
- pfr_phy_font_load( PFR_PhyFont phy_font,
- FT_Stream stream,
- FT_UInt32 offset,
- FT_UInt32 size );
+ pfr_phy_font_load( PFR_PhyFont phy_font,
+ FT_Stream stream,
+ FT_UInt32 offset,
+ FT_UInt32 size );
- /* finalize a physical font */
+ /* finalize a physical font */
FT_LOCAL( void )
pfr_phy_font_done( PFR_PhyFont phy_font,
FT_Memory memory );
- /* */
+ /* */
FT_END_HEADER
-#endif /* __PFR_LOAD_H__ */
+#endif /* __PFRLOAD_H__ */
+
+
+/* END */
--- a/src/pfr/pfrobjs.c
+++ b/src/pfr/pfrobjs.c
@@ -1,3 +1,21 @@
+/***************************************************************************/
+/* */
+/* pfrobjs.c */
+/* */
+/* FreeType PFR object methods (body). */
+/* */
+/* Copyright 2002 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. */
+/* */
+/***************************************************************************/
+
+
#include "pfrobjs.h"
#include "pfrload.h"
#include "pfrgload.h"
@@ -8,19 +26,20 @@
#undef FT_COMPONENT
#define FT_COMPONENT trace_pfr
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** FACE OBJECT METHODS *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** FACE OBJECT METHODS *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+
FT_LOCAL_DEF( void )
- pfr_face_done( PFR_Face face )
+ pfr_face_done( PFR_Face face )
{
/* finalize the physical font record */
- pfr_phy_font_done( &face->phy_font, FT_FACE_MEMORY(face) );
+ pfr_phy_font_done( &face->phy_font, FT_FACE_MEMORY( face ) );
/* no need to finalize the logical font or the header */
}
@@ -33,13 +52,15 @@
{
FT_Error error;
+
/* load the header and check it */
error = pfr_header_load( &face->header, stream );
- if ( error ) goto Exit;
+ if ( error )
+ goto Exit;
if ( !pfr_header_check( &face->header ) )
{
- FT_TRACE4(( "PFR.Face.Init: not a valid PFR font\n" ));
+ FT_TRACE4(( "pfr_face_init: not a valid PFR font\n" ));
error = FT_Err_Invalid_Argument;
goto Exit;
}
@@ -48,10 +69,12 @@
{
FT_UInt num_faces;
+
error = pfr_log_font_count( stream,
face->header.log_dir_offset,
&num_faces );
- if ( error ) goto Exit;
+ if ( error )
+ goto Exit;
face->root.num_faces = num_faces;
}
@@ -61,7 +84,7 @@
if ( face_index >= face->root.num_faces )
{
- FT_ERROR(( "PFR.Face.Init: invalid face index\n" ));
+ FT_ERROR(( "pfr_face_init: invalid face index\n" ));
error = FT_Err_Invalid_Argument;
goto Exit;
}
@@ -83,9 +106,10 @@
/* now, set-up all root face fields */
{
- FT_Face root = FT_FACE(face);
+ FT_Face root = FT_FACE( face );
PFR_PhyFont phy_font = &face->phy_font;
+
root->face_index = face_index;
root->num_glyphs = phy_font->num_chars;
root->face_flags = FT_FACE_FLAG_SCALABLE;
@@ -98,7 +122,7 @@
else
root->face_flags |= FT_FACE_FLAG_VERTICAL;
- /* XXXX: kerning and embedded bitmap support isn't there yet */
+ /* XXX: kerning and embedded bitmap support isn't there yet */
root->family_name = phy_font->font_id;
root->style_name = NULL; /* no style name in font file */
@@ -107,14 +131,16 @@
root->available_sizes = 0;
root->bbox = phy_font->bbox;
- root->units_per_EM = (FT_UShort) phy_font->outline_resolution;
- root->ascender = (FT_Short) phy_font->bbox.yMax;
- root->descender = (FT_Short) phy_font->bbox.yMin;
- root->height = (FT_Short)( ((root->ascender - root->descender)*12) / 10 );
+ root->units_per_EM = (FT_UShort)phy_font->outline_resolution;
+ root->ascender = (FT_Short) phy_font->bbox.yMax;
+ root->descender = (FT_Short) phy_font->bbox.yMin;
+ root->height = (FT_Short)
+ ( ( ( root->ascender - root->descender ) * 12 )
+ / 10 );
/* now compute maximum advance width */
- if ( (phy_font->flags & PFR_PHY_PROPORTIONAL) == 0 )
- root->max_advance_width = (FT_Short) phy_font->standard_advance;
+ if ( ( phy_font->flags & PFR_PHY_PROPORTIONAL ) == 0 )
+ root->max_advance_width = (FT_Short)phy_font->standard_advance;
else
{
FT_Int max = 0;
@@ -121,6 +147,7 @@
FT_UInt count = phy_font->num_chars;
PFR_Char gchar = phy_font->chars;
+
for ( ; count > 0; count--, gchar++ )
{
if ( max < gchar->advance )
@@ -127,18 +154,19 @@
max = gchar->advance;
}
- root->max_advance_width = (FT_Short) max;
+ root->max_advance_width = (FT_Short)max;
}
root->max_advance_height = root->height;
- root->underline_position = (FT_Short)( - root->units_per_EM/10 );
- root->underline_thickness = (FT_Short)( root->units_per_EM/30 );
+ root->underline_position = (FT_Short)( - root->units_per_EM / 10 );
+ root->underline_thickness = (FT_Short)( root->units_per_EM / 30 );
/* create charmap */
{
- FT_CharMapRec charmap;
+ FT_CharMapRec charmap;
+
charmap.face = root;
charmap.platform_id = 3;
charmap.encoding_id = 1;
@@ -153,18 +181,18 @@
}
- /*************************************************************************/
- /*************************************************************************/
- /***** *****/
- /***** SLOT OBJECT METHOD *****/
- /***** *****/
- /*************************************************************************/
- /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** SLOT OBJECT METHOD *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
FT_LOCAL_DEF( FT_Error )
pfr_slot_init( PFR_Slot slot )
{
- FT_GlyphLoader loader = slot->root.internal->loader;
+ FT_GlyphLoader loader = slot->root.internal->loader;
pfr_glyph_init( &slot->glyph, loader );
@@ -186,12 +214,13 @@
FT_Int load_flags )
{
FT_Error error;
- PFR_Face face = (PFR_Face) slot->root.face;
+ PFR_Face face = (PFR_Face)slot->root.face;
PFR_Char gchar = face->phy_font.chars + gindex;
FT_Outline* outline = &slot->root.outline;
FT_ULong gps_offset;
- /* check that the glyph index is correct */
+
+ /* check that the glyph index is correct */
FT_ASSERT( gindex < face->phy_font.num_chars );
slot->root.format = ft_glyph_format_outline;
@@ -199,22 +228,21 @@
outline->n_contours = 0;
gps_offset = face->header.gps_section_offset;
-
- /* load the glyph outline ( FT_LOAD_NO_RECURSE isn't supported ) */
+ /* load the glyph outline (FT_LOAD_NO_RECURSE isn't supported) */
error = pfr_glyph_load( &slot->glyph, face->root.stream,
gps_offset, gchar->gps_offset, gchar->gps_size );
- if (!error)
+ if ( !error )
{
FT_BBox cbox;
- FT_Outline* outline = &slot->root.outline;
FT_Glyph_Metrics* metrics = &slot->root.metrics;
FT_Pos advance;
FT_Int em_metrics, em_outline;
FT_Bool scaling;
- scaling = FT_BOOL( (load_flags & FT_LOAD_NO_SCALE) == 0 );
+ scaling = FT_BOOL( ( load_flags & FT_LOAD_NO_SCALE ) == 0 );
+
/* copy outline data */
*outline = slot->glyph.loader->base.outline;
@@ -243,7 +271,7 @@
slot->root.linearHoriAdvance = metrics->horiAdvance;
slot->root.linearVertAdvance = metrics->vertAdvance;
- /* make-up vertical metrics (?) */
+ /* make-up vertical metrics(?) */
metrics->vertBearingX = 0;
metrics->vertBearingY = 0;
@@ -255,6 +283,7 @@
FT_Fixed y_scale = size->root.metrics.y_scale;
FT_Vector* vec = outline->points;
+
/* scale outline points */
for ( n = 0; n < outline->n_points; n++, vec++ )
{
@@ -278,3 +307,6 @@
return error;
}
+
+
+/* END */
--- a/src/pfr/pfrobjs.h
+++ b/src/pfr/pfrobjs.h
@@ -1,19 +1,37 @@
-#ifndef __PFR_OBJS_H__
-#define __PFR_OBJS_H__
+/***************************************************************************/
+/* */
+/* pfrobjs.h */
+/* */
+/* FreeType PFR object methods (specification). */
+/* */
+/* Copyright 2002 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. */
+/* */
+/***************************************************************************/
+
+#ifndef __PFROBJS_H__
+#define __PFROBJS_H__
+
#include "pfrtypes.h"
+
FT_BEGIN_HEADER
- typedef struct PFR_FaceRec_* PFR_Face;
+ typedef struct PFR_FaceRec_* PFR_Face;
- typedef struct PFR_SizeRec_* PFR_Size;
+ typedef struct PFR_SizeRec_* PFR_Size;
- typedef struct PFR_SlotRec_* PFR_Slot;
+ typedef struct PFR_SlotRec_* PFR_Slot;
-
- typedef struct PFR_FaceRec_
+ typedef struct PFR_FaceRec_
{
FT_FaceRec root;
PFR_HeaderRec header;
@@ -23,14 +41,14 @@
} PFR_FaceRec;
- typedef struct PFR_SizeRec_
+ typedef struct PFR_SizeRec_
{
- FT_SizeRec root;
+ FT_SizeRec root;
} PFR_SizeRec;
- typedef struct PFR_SlotRec_
+ typedef struct PFR_SlotRec_
{
FT_GlyphSlotRec root;
PFR_GlyphRec glyph;
@@ -43,7 +61,6 @@
PFR_Face face,
FT_Int face_index );
-
FT_LOCAL( void )
pfr_face_done( PFR_Face face );
@@ -51,7 +68,6 @@
FT_LOCAL( FT_Error )
pfr_slot_init( PFR_Slot slot );
-
FT_LOCAL( void )
pfr_slot_done( PFR_Slot slot );
@@ -65,4 +81,4 @@
FT_END_HEADER
-#endif /* __PFR_OBJS_H__ */
+#endif /* __PFROBJS_H__ */
--- a/src/pfr/pfrtypes.h
+++ b/src/pfr/pfrtypes.h
@@ -1,57 +1,75 @@
-#ifndef __PFR_TYPES_H__
-#define __PFR_TYPES_H__
+/***************************************************************************/
+/* */
+/* pfrtypes.h */
+/* */
+/* FreeType PFR data structures (specification only). */
+/* */
+/* Copyright 2002 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. */
+/* */
+/***************************************************************************/
+
+#ifndef __PFRTYPES_H__
+#define __PFRTYPES_H__
+
#include <ft2build.h>
#include FT_INTERNAL_OBJECTS_H
FT_BEGIN_HEADER
- /************************************************************************/
+ /************************************************************************/
- /* the PFR Header structure */
- typedef struct PFR_HeaderRec_
+ /* the PFR Header structure */
+ typedef struct PFR_HeaderRec_
{
- FT_UInt32 signature;
- FT_UInt version;
- FT_UInt signature2;
- FT_UInt header_size;
+ FT_UInt32 signature;
+ FT_UInt version;
+ FT_UInt signature2;
+ FT_UInt header_size;
- FT_UInt log_dir_size;
- FT_UInt log_dir_offset;
+ FT_UInt log_dir_size;
+ FT_UInt log_dir_offset;
- FT_UInt log_font_max_size;
- FT_UInt32 log_font_section_size;
- FT_UInt32 log_font_section_offset;
+ FT_UInt log_font_max_size;
+ FT_UInt32 log_font_section_size;
+ FT_UInt32 log_font_section_offset;
- FT_UInt32 phy_font_max_size;
- FT_UInt32 phy_font_section_size;
- FT_UInt32 phy_font_section_offset;
+ FT_UInt32 phy_font_max_size;
+ FT_UInt32 phy_font_section_size;
+ FT_UInt32 phy_font_section_offset;
- FT_UInt gps_max_size;
- FT_UInt32 gps_section_size;
- FT_UInt32 gps_section_offset;
+ FT_UInt gps_max_size;
+ FT_UInt32 gps_section_size;
+ FT_UInt32 gps_section_offset;
- FT_UInt max_blue_values;
- FT_UInt max_x_orus;
- FT_UInt max_y_orus;
+ FT_UInt max_blue_values;
+ FT_UInt max_x_orus;
+ FT_UInt max_y_orus;
- FT_UInt phy_font_max_size_high;
- FT_UInt color_flags;
+ FT_UInt phy_font_max_size_high;
+ FT_UInt color_flags;
- FT_UInt32 bct_max_size;
- FT_UInt32 bct_set_max_size;
- FT_UInt32 phy_bct_set_max_size;
+ FT_UInt32 bct_max_size;
+ FT_UInt32 bct_set_max_size;
+ FT_UInt32 phy_bct_set_max_size;
- FT_UInt num_phy_fonts;
- FT_UInt max_vert_stem_snap;
- FT_UInt max_horz_stem_snap;
- FT_UInt max_chars;
+ FT_UInt num_phy_fonts;
+ FT_UInt max_vert_stem_snap;
+ FT_UInt max_horz_stem_snap;
+ FT_UInt max_chars;
} PFR_HeaderRec, *PFR_Header;
- /* used in 'color_flags' field of the PFR_Header */
- typedef enum PFR_HeaderFlags_
+ /* used in `color_flags' field of the PFR_Header */
+ typedef enum PFR_HeaderFlags_
{
PFR_FLAG_BLACK_PIXEL = 1,
PFR_FLAG_INVERT_BITMAP = 2
@@ -59,9 +77,9 @@
} PFR_HeaderFlags;
- /************************************************************************/
+ /************************************************************************/
- typedef struct PFR_LogFontRec_
+ typedef struct PFR_LogFontRec_
{
FT_UInt32 size;
FT_UInt32 offset;
@@ -78,19 +96,19 @@
} PFR_LogFontRec, *PFR_LogFont;
- typedef enum PFR_LogFlags_
+ typedef enum PFR_LogFlags_
{
- PFR_LOG_EXTRA_ITEMS = 0x40,
- PFR_LOG_2BYTE_BOLD = 0x20,
- PFR_LOG_BOLD = 0x10,
- PFR_LOG_2BYTE_STROKE = 8,
- PFR_LOG_STROKE = 4,
- PFR_LINE_JOIN_MASK = 3
+ PFR_LOG_EXTRA_ITEMS = 0x40,
+ PFR_LOG_2BYTE_BOLD = 0x20,
+ PFR_LOG_BOLD = 0x10,
+ PFR_LOG_2BYTE_STROKE = 8,
+ PFR_LOG_STROKE = 4,
+ PFR_LINE_JOIN_MASK = 3
} PFR_LogFlags;
- typedef enum PFR_LineJoinFlags_
+ typedef enum PFR_LineJoinFlags_
{
PFR_LINE_JOIN_MITER = 0,
PFR_LINE_JOIN_ROUND = 1,
@@ -99,18 +117,18 @@
} PFR_LineJoinFlags;
- /************************************************************************/
+ /************************************************************************/
- typedef enum PFR_BitmapFlags_
+ typedef enum PFR_BitmapFlags_
{
- PFR_BITMAP_3BYTE_OFFSET = 4,
- PFR_BITMAP_2BYTE_SIZE = 2,
- PFR_BITMAP_2BYTE_CHARCODE = 1
+ PFR_BITMAP_3BYTE_OFFSET = 4,
+ PFR_BITMAP_2BYTE_SIZE = 2,
+ PFR_BITMAP_2BYTE_CHARCODE = 1
} PFR_BitmapFlags;
- typedef struct PFR_BitmapCharRec_
+ typedef struct PFR_BitmapCharRec_
{
FT_UInt char_code;
FT_UInt gps_size;
@@ -119,7 +137,7 @@
} PFR_BitmapCharRec, *PFR_BitmapChar;
- typedef enum PFR_StrikeFlags_
+ typedef enum PFR_StrikeFlags_
{
PFR_STRIKE_2BYTE_COUNT = 0x10,
PFR_STRIKE_3BYTE_OFFSET = 0x08,
@@ -130,7 +148,7 @@
} PFR_StrikeFlags;
- typedef struct PFR_StrikeRec_
+ typedef struct PFR_StrikeRec_
{
FT_UInt x_ppm;
FT_UInt y_ppm;
@@ -149,33 +167,32 @@
} PFR_StrikeRec, *PFR_Strike;
+ /************************************************************************/
- /************************************************************************/
-
- typedef struct PFR_CharRec_
+ typedef struct PFR_CharRec_
{
- FT_UInt char_code;
- FT_Int advance;
- FT_UInt gps_size;
- FT_UInt32 gps_offset;
+ FT_UInt char_code;
+ FT_Int advance;
+ FT_UInt gps_size;
+ FT_UInt32 gps_offset;
} PFR_CharRec, *PFR_Char;
- /************************************************************************/
+ /************************************************************************/
- typedef struct PFR_DimensionRec_
+ typedef struct PFR_DimensionRec_
{
- FT_UInt standard;
- FT_UInt num_stem_snaps;
- FT_Int* stem_snaps;
+ FT_UInt standard;
+ FT_UInt num_stem_snaps;
+ FT_Int* stem_snaps;
} PFR_DimensionRec, *PFR_Dimension;
- /************************************************************************/
+ /************************************************************************/
- typedef struct PFR_PhyFontRec_
+ typedef struct PFR_PhyFontRec_
{
FT_Memory memory;
FT_UInt32 offset;
@@ -207,7 +224,8 @@
} PFR_PhyFontRec, *PFR_PhyFont;
- typedef enum PFR_PhyFlags_
+
+ typedef enum PFR_PhyFlags_
{
PFR_PHY_EXTRA_ITEMS = 0x80,
PFR_PHY_3BYTE_GPS_OFFSET = 0x20,
@@ -219,9 +237,10 @@
} PFR_PhyFlags;
- /************************************************************************/
- typedef enum PFR_GlyphFlags_
+ /************************************************************************/
+
+ typedef enum PFR_GlyphFlags_
{
PFR_GLYPH_IS_COMPOUND = 0x80,
PFR_GLYPH_EXTRA_ITEMS = 0x08,
@@ -231,8 +250,9 @@
} PFR_GlyphFlags;
- /* controlled coordinate */
- typedef struct PFR_CoordRec_
+
+ /* controlled coordinate */
+ typedef struct PFR_CoordRec_
{
FT_UInt org;
FT_UInt cur;
@@ -240,7 +260,7 @@
} PFR_CoordRec, *PFR_Coord;
- typedef struct PFR_SubGlyphRec_
+ typedef struct PFR_SubGlyphRec_
{
FT_Fixed x_scale;
FT_Fixed y_scale;
@@ -252,7 +272,7 @@
} PFR_SubGlyphRec, *PFR_SubGlyph;
- typedef enum PFR_SubgGlyphFlags_
+ typedef enum PFR_SubgGlyphFlags_
{
PFR_SUBGLYPH_3BYTE_OFFSET = 0x80,
PFR_SUBGLYPH_2BYTE_SIZE = 0x40,
@@ -262,8 +282,7 @@
} PFR_SubGlyphFlags;
-
- typedef struct PFR_GlyphRec_
+ typedef struct PFR_GlyphRec_
{
FT_Byte format;
@@ -286,4 +305,7 @@
FT_END_HEADER
-#endif /* __PFR_TYPES_H__ */
+#endif /* __PFRTYPES_H__ */
+
+
+/* END */