ref: 1c0d4acb256927c69bcfadc47c98458754e20865
parent: 920d41e038d5f8befa4d1572ee95cb4473191ff8
author: Werner Lemberg <[email protected]>
date: Tue Jun 6 16:41:48 EDT 2000
Fine-tuned a lot of tracing levels to make them more functional with ftview. Added a lot of \n to tracing messages. Fixed a serious bug in loading SBit offsets (missing parentheses around a xxx ? yyy : zzz construct). Replaced most GET_xxx() functions with calls to READ_Frame() in ttsbit.c
--- a/src/base/ftextend.c
+++ b/src/base/ftextend.c
@@ -77,7 +77,7 @@
registry->cur_offset = 0;
driver->extensions = registry;
- FT_TRACE2(( "FT_Init_Extensions: success" ));
+ FT_TRACE2(( "FT_Init_Extensions: success\n" ));
return FT_Err_Ok;
}
@@ -153,7 +153,7 @@
registry->num_extensions++;
registry->cur_offset += ( cur->size + FT_ALIGNMENT-1 ) & -FT_ALIGNMENT;
- FT_TRACE1(( "FT_Register_Extension: `%s' successfully registered",
+ FT_TRACE1(( "FT_Register_Extension: `%s' successfully registered\n",
cur->id ));
}
@@ -204,7 +204,7 @@
{
*extension_interface = cur->interface;
- FT_TRACE1(( "FT_Get_Extension: got `%s'", extension_id ));
+ FT_TRACE1(( "FT_Get_Extension: got `%s'\n", extension_id ));
return (void*)((char*)face->extensions + cur->offset);
}
@@ -212,7 +212,7 @@
/* could not find the extension id */
- FT_ERROR(( "FT_Get_Extension: couldn't find `%s'", extension_id ));
+ FT_ERROR(( "FT_Get_Extension: couldn't find `%s'\n", extension_id ));
*extension_interface = 0;
--- a/src/base/ftinit.c
+++ b/src/base/ftinit.c
@@ -130,7 +130,7 @@
if ( !memory )
{
FT_ERROR(( "FT_Init_FreeType:" ));
- FT_ERROR(( " cannot find memory manager" ));
+ FT_ERROR(( " cannot find memory manager\n" ));
return FT_Err_Unimplemented_Feature;
}
--- a/src/base/ftraster.c
+++ b/src/base/ftraster.c
@@ -565,7 +565,7 @@
break;
default:
- FT_ERROR(( "Invalid profile direction in Raster:New_Profile !!\n" ));
+ FT_ERROR(( "New_Profile: invalid profile direction!\n" ));
ras.error = Raster_Err_Invalid;
return FAILURE;
}
@@ -609,7 +609,7 @@
if ( h < 0 )
{
- FT_ERROR(( "Negative height encountered in End_Profile!\n" ));
+ FT_ERROR(( "End_Profile: negative height encountered!\n" ));
ras.error = Raster_Err_Neg_Height;
return FAILURE;
}
--- a/src/base/ftstream.c
+++ b/src/base/ftstream.c
@@ -138,7 +138,7 @@
if ( read_bytes < count )
{
FT_ERROR(( "FT_Read_Stream_At:" ));
- FT_ERROR(( " invalid read; expected %lu bytes, got %lu",
+ FT_ERROR(( " invalid read; expected %lu bytes, got %lu\n",
count, read_bytes ));
error = FT_Err_Invalid_Stream_Operation;
@@ -208,7 +208,7 @@
if ( read_bytes < count )
{
FT_ERROR(( "FT_Access_Frame:" ));
- FT_ERROR(( " invalid read; expected %lu bytes, got %lu",
+ FT_ERROR(( " invalid read; expected %lu bytes, got %lu\n",
count, read_bytes ));
FREE( stream->base );
@@ -225,7 +225,7 @@
stream->pos + count > stream->size )
{
FT_ERROR(( "FT_Access_Frame:" ));
- FT_ERROR(( " invalid i/o; pos = 0x%lx, count = %lu, size = 0x%lx",
+ FT_ERROR(( " invalid i/o; pos = 0x%lx, count = %lu, size = 0x%lx\n",
stream->pos, count, stream->size ));
error = FT_Err_Invalid_Stream_Operation;
@@ -364,7 +364,7 @@
Fail:
*error = FT_Err_Invalid_Stream_Operation;
FT_ERROR(( "FT_Read_Char:" ));
- FT_ERROR(( " invalid i/o; pos = 0x%lx, size = 0x%lx",
+ FT_ERROR(( " invalid i/o; pos = 0x%lx, size = 0x%lx\n",
stream->pos, stream->size ));
return 0;
@@ -410,7 +410,7 @@
Fail:
*error = FT_Err_Invalid_Stream_Operation;
FT_ERROR(( "FT_Read_Short:" ));
- FT_ERROR(( " invalid i/o; pos = 0x%lx, size = 0x%lx",
+ FT_ERROR(( " invalid i/o; pos = 0x%lx, size = 0x%lx\n",
stream->pos, stream->size ));
return 0;
@@ -456,7 +456,7 @@
Fail:
*error = FT_Err_Invalid_Stream_Operation;
FT_ERROR(( "FT_Read_Offset:" ));
- FT_ERROR(( " invalid i/o; pos = 0x%lx, size = 0x%lx",
+ FT_ERROR(( " invalid i/o; pos = 0x%lx, size = 0x%lx\n",
stream->pos, stream->size ));
return 0;
@@ -501,7 +501,7 @@
Fail:
FT_ERROR(( "FT_Read_Long:" ));
- FT_ERROR(( " invalid i/o; pos = 0x%lx, size = 0x%lx",
+ FT_ERROR(( " invalid i/o; pos = 0x%lx, size = 0x%lx\n",
stream->pos, stream->size ));
*error = FT_Err_Invalid_Stream_Operation;
--- a/src/cff/t2objs.c
+++ b/src/cff/t2objs.c
@@ -85,7 +85,7 @@
/* We must also be able to accept Mac/GX fonts, as well as OT ones */
if ( face->format_tag != 0x4f54544f ) /* OpenType/CFF font */
{
- FT_TRACE2(( "[not a valid OpenType/CFF font]" ));
+ FT_TRACE2(( "[not a valid OpenType/CFF font]\n" ));
goto Bad_Format;
}
--- a/src/cid/cidparse.c
+++ b/src/cid/cidparse.c
@@ -868,7 +868,7 @@
if ( strncmp( stream->cursor, "%!PS-Adobe-3.0 Resource-CIDFont", 31 ) )
{
- FT_ERROR(( "Not a valid CID-keyed font\n" ));
+ FT_ERROR(( "[not a valid CID-keyed font]\n" ));
error = FT_Err_Unknown_File_Format;
}
--- a/src/sfnt/ttload.c
+++ b/src/sfnt/ttload.c
@@ -58,7 +58,7 @@
TT_Table* limit;
- FT_TRACE3(( "TT_LookUp_Table: %08p, `%c%c%c%c' )\n",
+ FT_TRACE3(( "TT_LookUp_Table: %08p, `%c%c%c%c'\n",
face,
(TT_Char)( tag >> 24 ),
(TT_Char)( tag >> 16 ),
--- a/src/sfnt/ttpost.h
+++ b/src/sfnt/ttpost.h
@@ -31,18 +31,11 @@
#define TT_Err_Invalid_Post_Table_Format 0x0B00
#define TT_Err_Invalid_Post_Table 0x0B01
-#if 0
- /* the 258 standard Mac glyph names, used for format 1.0 and 2.5 */
- LOCAL_DEF
- const TT_String* TT_Mac_Postscript_Names[];
-#endif
-
LOCAL_DEF
TT_Error TT_Get_PS_Name( TT_Face face,
TT_UInt index,
TT_String** PSname );
-
LOCAL_DEF
void TT_Free_Post_Names( TT_Face face );
--- a/src/sfnt/ttsbit.c
+++ b/src/sfnt/ttsbit.c
@@ -170,101 +170,26 @@
}
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Load_Small_SBit_Metrics */
- /* */
- /* <Description> */
- /* Loads a small bitmap metrics record. */
- /* */
- /* <Input> */
- /* stream :: The input stream. */
- /* */
- /* <Output> */
- /* metrics :: A small metrics structure. */
- /* */
- static
- void TT_Load_Small_SBit_Metrics( TT_SBit_Small_Metrics* metrics,
- FT_Stream stream )
+ const FT_Frame_Field sbit_metrics_fields[] =
{
- metrics->height = GET_Byte();
- metrics->width = GET_Byte();
- metrics->bearingX = GET_Char();
- metrics->bearingY = GET_Char();
- metrics->advance = GET_Byte();
- }
+ FT_FRAME_START( 8 ),
+ FT_FRAME_BYTE( TT_SBit_Metrics, height ),
+ FT_FRAME_BYTE( TT_SBit_Metrics, width ),
+ FT_FRAME_CHAR( TT_SBit_Metrics, horiBearingX ),
+ FT_FRAME_CHAR( TT_SBit_Metrics, horiBearingY ),
+ FT_FRAME_BYTE( TT_SBit_Metrics, horiAdvance ),
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Load_SBit_Metrics */
- /* */
- /* <Description> */
- /* Loads a bitmap metrics record. */
- /* */
- /* <Input> */
- /* stream :: The input stream. */
- /* */
- /* <Output> */
- /* metrics :: A metrics structure. */
- /* */
- static
- void TT_Load_SBit_Metrics( TT_SBit_Metrics* metrics,
- FT_Stream stream )
- {
- metrics->height = GET_Byte();
- metrics->width = GET_Byte();
+ FT_FRAME_CHAR( TT_SBit_Metrics, vertBearingX ),
+ FT_FRAME_CHAR( TT_SBit_Metrics, vertBearingY ),
+ FT_FRAME_BYTE( TT_SBit_Metrics, vertAdvance ),
+ FT_FRAME_END
+ };
- metrics->horiBearingX = GET_Char();
- metrics->horiBearingY = GET_Char();
- metrics->horiAdvance = GET_Byte();
- metrics->vertBearingX = GET_Char();
- metrics->vertBearingY = GET_Char();
- metrics->vertAdvance = GET_Byte();
- }
-
-
/*************************************************************************/
/* */
/* <Function> */
- /* TT_Load_SBit_Line_Metrics */
- /* */
- /* <Description> */
- /* Loads a bitmap line metrics record. */
- /* */
- /* <Input> */
- /* stream :: The input stream. */
- /* */
- /* <Output> */
- /* metrics :: A line metrics structure. */
- /* */
- static
- void TT_Load_SBit_Line_Metrics( TT_SBit_Line_Metrics* metrics,
- FT_Stream stream )
- {
- metrics->ascender = GET_Char();
- metrics->descender = GET_Char();
- metrics->max_width = GET_Byte();
-
- metrics->caret_slope_numerator = GET_Char();
- metrics->caret_slope_denominator = GET_Char();
- metrics->caret_offset = GET_Char();
-
- metrics->min_origin_SB = GET_Char();
- metrics->min_advance_SB = GET_Char();
- metrics->max_before_BL = GET_Char();
- metrics->min_after_BL = GET_Char();
- metrics->pads[0] = GET_Char();
- metrics->pads[1] = GET_Char();
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
/* TT_Load_SBit_Const_Metrics */
/* */
/* <Description> */
@@ -285,15 +210,10 @@
TT_Error error;
- if ( !ACCESS_Frame( 12L ) )
- {
- range->image_size = GET_ULong();
- TT_Load_SBit_Metrics( &range->metrics, stream );
+ if ( READ_ULong( range->image_size ) )
+ return error;
- FORGET_Frame();
- }
-
- return error;
+ return READ_Fields( sbit_metrics_fields, &range->metrics );
}
@@ -400,7 +320,7 @@
range->num_glyphs = num_glyphs;
num_glyphs++; /* XXX: BEWARE - see spec */
- size_elem = large ? 4 : 2;
+ size_elem = large ? 4 : 2;
if ( ALLOC_ARRAY( range->glyph_offsets,
num_glyphs, TT_ULong ) ||
@@ -409,7 +329,8 @@
for ( n = 0; n < num_glyphs; n++ )
range->glyph_offsets[n] = (TT_ULong)( range->image_offset +
- large ? GET_ULong() : GET_UShort() );
+ ( large ? GET_ULong()
+ : GET_UShort() ) );
FORGET_Frame();
}
break;
@@ -462,7 +383,27 @@
TT_ULong num_strikes;
TT_ULong table_base;
+ const FT_Frame_Field sbit_line_metrics_fields[] =
+ {
+ /* no FT_FRAME_START */
+ FT_FRAME_CHAR( TT_SBit_Line_Metrics, ascender ),
+ FT_FRAME_CHAR( TT_SBit_Line_Metrics, descender ),
+ FT_FRAME_BYTE( TT_SBit_Line_Metrics, max_width ),
+ FT_FRAME_CHAR( TT_SBit_Line_Metrics, caret_slope_numerator ),
+ FT_FRAME_CHAR( TT_SBit_Line_Metrics, caret_slope_denominator ),
+ FT_FRAME_CHAR( TT_SBit_Line_Metrics, caret_offset ),
+
+ FT_FRAME_CHAR( TT_SBit_Line_Metrics, min_origin_SB ),
+ FT_FRAME_CHAR( TT_SBit_Line_Metrics, min_advance_SB ),
+ FT_FRAME_CHAR( TT_SBit_Line_Metrics, max_before_BL ),
+ FT_FRAME_CHAR( TT_SBit_Line_Metrics, min_after_BL ),
+ FT_FRAME_CHAR( TT_SBit_Line_Metrics, pads[0] ),
+ FT_FRAME_CHAR( TT_SBit_Line_Metrics, pads[1] ),
+ FT_FRAME_END
+ };
+
+
face->num_sbit_strikes = 0;
/* this table is optional */
@@ -483,8 +424,8 @@
FORGET_Frame();
/* check version number and strike count */
- if ( version != 0x00020000 ||
- num_strikes >= 0x10000 )
+ if ( version != 0x00020000L ||
+ num_strikes >= 0x10000L )
{
FT_ERROR(( "TT_Load_SBit_Strikes: invalid table version!\n" ));
error = TT_Err_Invalid_File_Format;
@@ -512,21 +453,21 @@
TT_ULong indexTablesSize;
- strike->ranges_offset = GET_ULong();
- indexTablesSize = GET_ULong(); /* don't save */
+ strike->ranges_offset = GET_ULong();
+ indexTablesSize = GET_ULong(); /* don't save */
- strike->num_ranges = GET_ULong();
- strike->color_ref = GET_ULong();
+ strike->num_ranges = GET_ULong();
+ strike->color_ref = GET_ULong();
- TT_Load_SBit_Line_Metrics( &strike->hori, stream );
- TT_Load_SBit_Line_Metrics( &strike->vert, stream );
+ (void)READ_Fields( sbit_line_metrics_fields, &strike->hori );
+ (void)READ_Fields( sbit_line_metrics_fields, &strike->vert );
- strike->start_glyph = GET_UShort();
- strike->end_glyph = GET_UShort();
- strike->x_ppem = GET_Byte();
- strike->y_ppem = GET_Byte();
- strike->bit_depth = GET_Byte();
- strike->flags = GET_Char();
+ strike->start_glyph = GET_UShort();
+ strike->end_glyph = GET_UShort();
+ strike->x_ppem = GET_Byte();
+ strike->y_ppem = GET_Byte();
+ strike->bit_depth = GET_Byte();
+ strike->flags = GET_Char();
count--;
strike++;
@@ -799,7 +740,8 @@
TT_Error error;
- error = Find_SBit_Range( glyph_index, strike, arange, aglyph_offset );
+ error = Find_SBit_Range( glyph_index, strike,
+ arange, aglyph_offset );
if ( error )
goto Fail;
@@ -859,16 +801,25 @@
case 1:
case 2:
case 8:
- /* variable small metrics */
+ /* variable small metrics */
{
TT_SBit_Small_Metrics smetrics;
+ const FT_Frame_Field sbit_small_metrics_fields[] =
+ {
+ FT_FRAME_START( 5 ),
+ FT_FRAME_BYTE( TT_SBit_Small_Metrics, height ),
+ FT_FRAME_BYTE( TT_SBit_Small_Metrics, width ),
+ FT_FRAME_CHAR( TT_SBit_Small_Metrics, bearingX ),
+ FT_FRAME_CHAR( TT_SBit_Small_Metrics, bearingY ),
+ FT_FRAME_BYTE( TT_SBit_Small_Metrics, advance ),
+ FT_FRAME_END
+ };
+
/* read small metrics */
- if ( ACCESS_Frame( 5L ) )
+ if ( READ_Fields( sbit_small_metrics_fields, &smetrics ) )
goto Exit;
- TT_Load_Small_SBit_Metrics( &smetrics, stream );
- FORGET_Frame();
/* convert it to a big metrics */
metrics->height = smetrics.height;
@@ -889,12 +840,7 @@
case 7:
case 9:
/* variable big metrics */
- {
- if ( ACCESS_Frame( 8L ) )
- goto Exit;
- TT_Load_SBit_Metrics( metrics, stream );
- FORGET_Frame();
- }
+ (void)READ_Fields( sbit_metrics_fields, metrics );
break;
case 5:
@@ -1167,8 +1113,8 @@
case 2:
case 5:
case 7:
- line_bits = glyph_width * pix_bits;
- glyph_size = (glyph_height * line_bits + 7) >> 3;
+ line_bits = glyph_width * pix_bits;
+ glyph_size = ( glyph_height * line_bits + 7 ) >> 3;
break;
default: /* invalid format */
@@ -1225,8 +1171,8 @@
TT_Long size;
- map->width = metrics->width;
- map->rows = metrics->height;
+ map->width = metrics->width;
+ map->rows = metrics->height;
switch ( strike->bit_depth )
{
@@ -1234,14 +1180,17 @@
map->pixel_mode = ft_pixel_mode_mono;
map->pitch = ( map->width + 7 ) >> 3;
break;
+
case 2:
map->pixel_mode = ft_pixel_mode_pal2;
map->pitch = ( map->width + 3 ) >> 2;
break;
+
case 4:
map->pixel_mode = ft_pixel_mode_pal4;
map->pitch = ( map->width + 1 ) >> 1;
break;
+
case 8:
map->pixel_mode = ft_pixel_mode_grays;
map->pitch = map->width;
--- a/src/sfnt/ttsbit.h
+++ b/src/sfnt/ttsbit.h
@@ -22,72 +22,13 @@
#include <ttload.h>
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Load_SBit_Strikes */
- /* */
- /* <Description> */
- /* Loads the table of embedded bitmap sizes for this face. */
- /* */
- /* <Input> */
- /* face :: The target face object. */
- /* stream :: The input stream. */
- /* */
- /* <Return> */
- /* TrueType error code. 0 means success. */
- /* */
LOCAL_DEF
TT_Error TT_Load_SBit_Strikes( TT_Face face,
FT_Stream stream );
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Free_SBit_Strikes */
- /* */
- /* <Description> */
- /* Releases the embedded bitmap tables. */
- /* */
- /* <Input> */
- /* face :: The target face object. */
- /* */
LOCAL_DEF
void TT_Free_SBit_Strikes( TT_Face face );
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_Load_SBit_Image */
- /* */
- /* <Description> */
- /* Loads a given glyph sbit image from the font resource. This also */
- /* returns its metrics. */
- /* */
- /* <Input> */
- /* face :: The target face object. */
- /* */
- /* x_ppem :: The horizontal resolution in points per EM. */
- /* */
- /* y_ppem :: The vertical resolution in points per EM. */
- /* */
- /* glyph_index :: The current glyph index. */
- /* */
- /* stream :: The input stream. */
- /* */
- /* <Output> */
- /* map :: The target pixmap. */
- /* metrics :: A big sbit metrics structure for the glyph image. */
- /* */
- /* <Return> */
- /* TrueType error code. 0 means success. Returns an error if no */
- /* glyph sbit exists for the index. */
- /* */
- /* <Note> */
- /* The `map.buffer' field is always freed before the glyph is loaded. */
- /* */
LOCAL_DEF
TT_Error TT_Load_SBit_Image( TT_Face face,
TT_Int x_ppem,
--- a/src/truetype/ttgload.c
+++ b/src/truetype/ttgload.c
@@ -241,7 +241,7 @@
goto Fail;
}
- FT_TRACE4(( "Instructions size : %d\n", n_ins ));
+ FT_TRACE5(( " Instructions size: %d\n", n_ins ));
if ( n_ins > face->max_profile.maxSizeOfInstructions )
{
@@ -552,13 +552,12 @@
FORGET_Frame();
- FT_TRACE6(( "Glyph %ld\n", index ));
- FT_TRACE6(( " # of contours : %d\n", num_contours ));
- FT_TRACE6(( " xMin: %4d xMax: %4d\n", loader->bbox.xMin,
- loader->bbox.xMax ));
- FT_TRACE6(( " yMin: %4d yMax: %4d\n", loader->bbox.yMin,
- loader->bbox.yMax ));
- FT_TRACE6(( "-" ));
+ FT_TRACE5(( "Glyph %ld\n", index ));
+ FT_TRACE5(( " # of contours: %d\n", contours_count ));
+ FT_TRACE5(( " xMin: %4d xMax: %4d\n", loader->bbox.xMin,
+ loader->bbox.xMax ));
+ FT_TRACE5(( " yMin: %4d yMax: %4d\n", loader->bbox.yMin,
+ loader->bbox.yMax ));
count -= 10;
@@ -868,7 +867,7 @@
/* read size of instructions */
if ( FILE_Seek( ins_offset ) ||
READ_UShort(n_ins) ) goto Fail;
- FT_TRACE4(( "Instructions size = %d\n", n_ins ));
+ FT_TRACE5(( " Instructions size = %d\n", n_ins ));
/* check it */
if ( n_ins > face->max_profile.maxSizeOfInstructions )