ref: 61bd4b9dd1713faf57e738b3ca5e728f87e7e912
parent: 1c0d4acb256927c69bcfadc47c98458754e20865
author: Werner Lemberg <[email protected]>
date: Tue Jun 6 20:00:08 EDT 2000
Added FT_FRAME_SKIP_xxx to skip fields. More use of READ_Fields() in ttsbit.c Other minor fixes.
--- a/include/freetype/internal/ftstream.h
+++ b/include/freetype/internal/ftstream.h
@@ -83,6 +83,11 @@
#define FT_FRAME_SHORT_LE(s,f) FT_FRAME_FIELD( ft_frame_short_le, s, f )
#define FT_FRAME_USHORT_LE(s,f) FT_FRAME_FIELD( ft_frame_ushort_le, s, f )
+#define FT_FRAME_SKIP_LONG { ft_frame_long_be, 0, 0 }
+#define FT_FRAME_SKIP_SHORT { ft_frame_short_be, 0, 0 }
+#define FT_FRAME_SKIP_BYTE { ft_frame_byte, 0, 0 }
+
+
/*************************************************************************/
/* */
/* integer extraction macros - the `buffer' parameter must ALWAYS be of */
--- a/src/base/ftcalc.c
+++ b/src/base/ftcalc.c
@@ -373,7 +373,7 @@
else
a = 0x7FFFFFFFL;
- return ( s < 0 ) ? -a : a;
+ return ( s < 0 ? -a : a );
}
@@ -648,7 +648,7 @@
else
q = 0x7FFFFFFFL;
- return ( s < 0 ) ? -(FT_Int32)q : (FT_Int32)q;
+ return ( s < 0 ? -(FT_Int32)q : (FT_Int32)q );
}
r = x->hi;
@@ -655,7 +655,7 @@
lo = x->lo;
if ( r >= (FT_Word32)y ) /* we know y is to be treated as unsigned here */
- return ( s < 0 ) ? 0x80000001UL : 0x7FFFFFFFUL;
+ return ( s < 0 ? 0x80000001UL : 0x7FFFFFFFUL );
/* Return Max/Min Int32 if division overflow. */
/* This includes division by zero! */
q = 0;
@@ -673,7 +673,7 @@
lo <<= 1;
}
- return ( s < 0 ) ? -(FT_Int32)q : (FT_Int32)q;
+ return ( s < 0 ? -(FT_Int32)q : (FT_Int32)q );
}
--- a/src/base/ftraster.c
+++ b/src/base/ftraster.c
@@ -1371,7 +1371,7 @@
{
/* the arc is y-monotonous, either ascending or descending */
/* detect a change of direction */
- state_bez = y1 < y3 ? Ascending : Descending;
+ state_bez = y1 < y3 ? Ascending : Descending;
if ( ras.state != state_bez )
{
/* finalize current profile if any */
@@ -1498,7 +1498,7 @@
}
else
{
- state_bez = ( y1 <= y4 ) ? Ascending : Descending;
+ state_bez = y1 <= y4 ? Ascending : Descending;
/* detect a change of direction */
if ( ras.state != state_bez )
--- a/src/base/ftstream.c
+++ b/src/base/ftstream.c
@@ -531,38 +531,35 @@
switch ( fields->value )
{
case ft_frame_start: /* access a new frame */
- {
- error = FT_Access_Frame( stream, fields->offset );
- if ( error )
- goto Exit;
+ error = FT_Access_Frame( stream, fields->offset );
+ if ( error )
+ goto Exit;
- frame_accessed = 1;
- fields++;
- continue; /* loop! */
- }
+ frame_accessed = 1;
+ fields++;
+ continue; /* loop! */
case ft_frame_byte:
case ft_frame_schar: /* read a single byte */
- {
- value = GET_Byte();
- sign_shift = 24;
- break;
- }
+ value = GET_Byte();
+ sign_shift = 24;
+ break;
case ft_frame_short_be:
case ft_frame_ushort_be: /* read a 2-byte big-endian short */
- {
- value = GET_UShort();
- sign_shift = 16;
- break;
- }
+ value = GET_UShort();
+ sign_shift = 16;
+ break;
case ft_frame_short_le:
case ft_frame_ushort_le: /* read a 2-byte little-endian short */
{
char* p;
+
+
value = 0;
p = stream->cursor;
+
if ( p + 1 < stream->limit )
{
value = ( FT_UShort)p[0] | ((FT_UShort)p[1] << 8 );
@@ -574,11 +571,9 @@
case ft_frame_long_be:
case ft_frame_ulong_be: /* read a 4-byte big-endian long */
- {
- value = GET_ULong();
- sign_shift = 0;
- break;
- }
+ value = GET_ULong();
+ sign_shift = 0;
+ break;
case ft_frame_long_le:
case ft_frame_ulong_le: /* read a 4-byte little-endian long */
@@ -588,12 +583,13 @@
value = 0;
p = stream->cursor;
+
if ( p + 3 < stream->limit )
{
- value = (FT_ULong)p[0] |
- ( (FT_ULong)p[1] << 8 ) |
- ( (FT_ULong)p[2] << 16 ) |
- ( (FT_ULong)p[3] << 24 );
+ value = (FT_ULong)p[0] |
+ ( (FT_ULong)p[1] << 8 ) |
+ ( (FT_ULong)p[2] << 16 ) |
+ ( (FT_ULong)p[3] << 24 );
stream->cursor += 4;
}
sign_shift = 0;
@@ -602,11 +598,9 @@
case ft_frame_off3_be:
case ft_frame_uoff3_be: /* read a 3-byte big-endian long */
- {
- value = GET_UOffset();
- sign_shift = 8;
- break;
- }
+ value = GET_UOffset();
+ sign_shift = 8;
+ break;
case ft_frame_off3_le:
case ft_frame_uoff3_le: /* read a 3-byte little-endian long */
@@ -616,12 +610,13 @@
value = 0;
p = stream->cursor;
+
if ( p + 3 < stream->limit )
{
- value = (FT_ULong)p[0] |
- ( (FT_ULong)p[1] << 8 ) |
- ( (FT_ULong)p[2] << 16 ) |
- ( (FT_ULong)p[3] << 24 );
+ value = (FT_ULong)p[0] |
+ ( (FT_ULong)p[1] << 8 ) |
+ ( (FT_ULong)p[2] << 16 ) |
+ ( (FT_ULong)p[3] << 24 );
stream->cursor += 4;
}
sign_shift = 8;
--- a/src/sfnt/ttcmap.c
+++ b/src/sfnt/ttcmap.c
@@ -130,7 +130,7 @@
/* load subheaders */
cmap2->numGlyphId = l =
- ( ( cmap->length - 2L * ( 256 + 3 ) - num_SH * 8L ) & 0xffff ) / 2;
+ ( ( cmap->length - 2L * ( 256 + 3 ) - num_SH * 8L ) & 0xFFFF ) / 2;
if ( ALLOC_ARRAY( cmap2->subHeaders,
num_SH + 1,
--- a/src/sfnt/ttsbit.c
+++ b/src/sfnt/ttsbit.c
@@ -403,7 +403,29 @@
FT_FRAME_END
};
+ const FT_Frame_Field strike_start_fields[] =
+ {
+ /* no FT_FRAME_START */
+ FT_FRAME_ULONG( TT_SBit_Strike, ranges_offset ),
+ FT_FRAME_SKIP_LONG,
+ FT_FRAME_ULONG( TT_SBit_Strike, num_ranges ),
+ FT_FRAME_ULONG( TT_SBit_Strike, color_ref ),
+ FT_FRAME_END
+ };
+ const FT_Frame_Field strike_end_fields[] =
+ {
+ /* no FT_FRAME_START */
+ FT_FRAME_USHORT( TT_SBit_Strike, start_glyph ),
+ FT_FRAME_USHORT( TT_SBit_Strike, end_glyph ),
+ FT_FRAME_BYTE ( TT_SBit_Strike, x_ppem ),
+ FT_FRAME_BYTE ( TT_SBit_Strike, y_ppem ),
+ FT_FRAME_BYTE ( TT_SBit_Strike, bit_depth ),
+ FT_FRAME_CHAR ( TT_SBit_Strike, flags ),
+ FT_FRAME_END
+ };
+
+
face->num_sbit_strikes = 0;
/* this table is optional */
@@ -450,24 +472,12 @@
while ( count > 0 )
{
- TT_ULong indexTablesSize;
+ (void)READ_Fields( strike_start_fields, strike );
-
- strike->ranges_offset = GET_ULong();
- indexTablesSize = GET_ULong(); /* don't save */
-
- strike->num_ranges = GET_ULong();
- strike->color_ref = GET_ULong();
-
(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();
+ (void)READ_Fields( strike_end_fields, strike );
count--;
strike++;