Index: src/sfnt/ttmtx.c |
diff --git a/src/sfnt/ttmtx.c b/src/sfnt/ttmtx.c |
index 73ac8b2d55fbc98885f55364bbe6197bced220a9..371a9edabeecc8e2a5d5a1b11491960d1c2c8cb2 100644 |
--- a/src/sfnt/ttmtx.c |
+++ b/src/sfnt/ttmtx.c |
@@ -4,7 +4,7 @@ |
/* */ |
/* Load the metrics tables common to TTF and OTF fonts (body). */ |
/* */ |
-/* Copyright 2006-2009, 2011 by */ |
+/* Copyright 2006-2009, 2011-2013 by */ |
/* David Turner, Robert Wilhelm, and Werner Lemberg. */ |
/* */ |
/* This file is part of the FreeType project, and may only be used, */ |
@@ -35,13 +35,6 @@ |
#define FT_COMPONENT trace_ttmtx |
- /* |
- * Unfortunately, we can't enable our memory optimizations if |
- * FT_CONFIG_OPTION_OLD_INTERNALS is defined. This is because at least |
- * one rogue client (libXfont in the X.Org XServer) is directly accessing |
- * the metrics. |
- */ |
- |
/*************************************************************************/ |
/* */ |
/* <Function> */ |
@@ -60,8 +53,6 @@ |
/* <Return> */ |
/* FreeType error code. 0 means success. */ |
/* */ |
-#ifndef FT_CONFIG_OPTION_OLD_INTERNALS |
- |
FT_LOCAL_DEF( FT_Error ) |
tt_face_load_hmtx( TT_Face face, |
FT_Stream stream, |
@@ -97,142 +88,6 @@ |
return error; |
} |
-#else /* !FT_CONFIG_OPTION_OLD_INTERNALS */ |
- |
- FT_LOCAL_DEF( FT_Error ) |
- tt_face_load_hmtx( TT_Face face, |
- FT_Stream stream, |
- FT_Bool vertical ) |
- { |
- FT_Error error; |
- FT_Memory memory = stream->memory; |
- |
- FT_ULong table_len; |
- FT_Long num_shorts, num_longs, num_shorts_checked; |
- |
- TT_LongMetrics* longs; |
- TT_ShortMetrics** shorts; |
- FT_Byte* p; |
- |
- |
- if ( vertical ) |
- { |
- void* lm = &face->vertical.long_metrics; |
- void** sm = &face->vertical.short_metrics; |
- |
- |
- error = face->goto_table( face, TTAG_vmtx, stream, &table_len ); |
- if ( error ) |
- goto Fail; |
- |
- num_longs = face->vertical.number_Of_VMetrics; |
- if ( (FT_ULong)num_longs > table_len / 4 ) |
- num_longs = (FT_Long)( table_len / 4 ); |
- |
- face->vertical.number_Of_VMetrics = 0; |
- |
- longs = (TT_LongMetrics*)lm; |
- shorts = (TT_ShortMetrics**)sm; |
- } |
- else |
- { |
- void* lm = &face->horizontal.long_metrics; |
- void** sm = &face->horizontal.short_metrics; |
- |
- |
- error = face->goto_table( face, TTAG_hmtx, stream, &table_len ); |
- if ( error ) |
- goto Fail; |
- |
- num_longs = face->horizontal.number_Of_HMetrics; |
- if ( (FT_ULong)num_longs > table_len / 4 ) |
- num_longs = (FT_Long)( table_len / 4 ); |
- |
- face->horizontal.number_Of_HMetrics = 0; |
- |
- longs = (TT_LongMetrics*)lm; |
- shorts = (TT_ShortMetrics**)sm; |
- } |
- |
- /* never trust derived values */ |
- |
- num_shorts = face->max_profile.numGlyphs - num_longs; |
- num_shorts_checked = ( table_len - num_longs * 4L ) / 2; |
- |
- if ( num_shorts < 0 ) |
- { |
- FT_TRACE0(( "tt_face_load_hmtx:" |
- " %cmtx has more metrics than glyphs.\n", |
- vertical ? 'v' : 'h' )); |
- |
- /* Adobe simply ignores this problem. So we shall do the same. */ |
-#if 0 |
- error = vertical ? SFNT_Err_Invalid_Vert_Metrics |
- : SFNT_Err_Invalid_Horiz_Metrics; |
- goto Exit; |
-#else |
- num_shorts = 0; |
-#endif |
- } |
- |
- if ( FT_QNEW_ARRAY( *longs, num_longs ) || |
- FT_QNEW_ARRAY( *shorts, num_shorts ) ) |
- goto Fail; |
- |
- if ( FT_FRAME_ENTER( table_len ) ) |
- goto Fail; |
- |
- p = stream->cursor; |
- |
- { |
- TT_LongMetrics cur = *longs; |
- TT_LongMetrics limit = cur + num_longs; |
- |
- |
- for ( ; cur < limit; cur++ ) |
- { |
- cur->advance = FT_NEXT_USHORT( p ); |
- cur->bearing = FT_NEXT_SHORT( p ); |
- } |
- } |
- |
- /* do we have an inconsistent number of metric values? */ |
- { |
- TT_ShortMetrics* cur = *shorts; |
- TT_ShortMetrics* limit = cur + |
- FT_MIN( num_shorts, num_shorts_checked ); |
- |
- |
- for ( ; cur < limit; cur++ ) |
- *cur = FT_NEXT_SHORT( p ); |
- |
- /* We fill up the missing left side bearings with the */ |
- /* last valid value. Since this will occur for buggy CJK */ |
- /* fonts usually only, nothing serious will happen. */ |
- if ( num_shorts > num_shorts_checked && num_shorts_checked > 0 ) |
- { |
- FT_Short val = (*shorts)[num_shorts_checked - 1]; |
- |
- |
- limit = *shorts + num_shorts; |
- for ( ; cur < limit; cur++ ) |
- *cur = val; |
- } |
- } |
- |
- FT_FRAME_EXIT(); |
- |
- if ( vertical ) |
- face->vertical.number_Of_VMetrics = (FT_UShort)num_longs; |
- else |
- face->horizontal.number_Of_HMetrics = (FT_UShort)num_longs; |
- |
- Fail: |
- return error; |
- } |
- |
-#endif /* !FT_CONFIG_OPTION_OLD_INTERNALS */ |
- |
/*************************************************************************/ |
/* */ |
@@ -260,7 +115,7 @@ |
FT_Error error; |
TT_HoriHeader* header; |
- const FT_Frame_Field metrics_header_fields[] = |
+ static const FT_Frame_Field metrics_header_fields[] = |
{ |
#undef FT_STRUCTURE |
#define FT_STRUCTURE TT_HoriHeader |
@@ -343,8 +198,6 @@ |
/* */ |
/* advance :: The advance width resp. advance height. */ |
/* */ |
-#ifndef FT_CONFIG_OPTION_OLD_INTERNALS |
- |
FT_LOCAL_DEF( FT_Error ) |
tt_face_get_metrics( TT_Face face, |
FT_Bool vertical, |
@@ -419,50 +272,8 @@ |
*aadvance = 0; |
} |
- return SFNT_Err_Ok; |
- } |
- |
-#else /* !FT_CONFIG_OPTION_OLD_INTERNALS */ |
- |
- FT_LOCAL_DEF( FT_Error ) |
- tt_face_get_metrics( TT_Face face, |
- FT_Bool vertical, |
- FT_UInt gindex, |
- FT_Short* abearing, |
- FT_UShort* aadvance ) |
- { |
- void* v = &face->vertical; |
- void* h = &face->horizontal; |
- TT_HoriHeader* header = vertical ? (TT_HoriHeader*)v |
- : (TT_HoriHeader*)h; |
- TT_LongMetrics longs_m; |
- FT_UShort k = header->number_Of_HMetrics; |
- |
- |
- if ( k == 0 || |
- !header->long_metrics || |
- gindex >= (FT_UInt)face->max_profile.numGlyphs ) |
- { |
- *abearing = *aadvance = 0; |
- return SFNT_Err_Ok; |
- } |
- |
- if ( gindex < (FT_UInt)k ) |
- { |
- longs_m = (TT_LongMetrics)header->long_metrics + gindex; |
- *abearing = longs_m->bearing; |
- *aadvance = longs_m->advance; |
- } |
- else |
- { |
- *abearing = ((TT_ShortMetrics*)header->short_metrics)[gindex - k]; |
- *aadvance = ((TT_LongMetrics)header->long_metrics)[k - 1].advance; |
- } |
- |
- return SFNT_Err_Ok; |
+ return FT_Err_Ok; |
} |
-#endif /* !FT_CONFIG_OPTION_OLD_INTERNALS */ |
- |
/* END */ |