summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Turner <david@freetype.org>2005-06-30 11:46:46 +0000
committerDavid Turner <david@freetype.org>2005-06-30 11:46:46 +0000
commit00764a59e2460cc0afd2c632f66cda5d1895648f (patch)
treebe5ad1a0822c140c0511a1b15309a651af883333
parent4e0893774c735e3899d6bd23c652f7edb82d3ec1 (diff)
downloadfreetype2-00764a59e2460cc0afd2c632f66cda5d1895648f.tar.gz
* src/sfnt/ftbitmap.c, src/truetype/ttgload.c, src/sfnt/ttcmap.c:
removing compiler warnings (Visual C++ /W4) * Jamfile, src/otvalid/{otvcommn.h,otvgdef.c,otvgpos.c,otvgsub.c, otvjstf.c}: modified the code to use a different pre-processor trick to implement the OTV_NEST1, OTV_NEST2 and OTV_NEST3 macros. The code now compiles neatly with Visual C++. The 'otvalid' module has been put in the Jamfile build again.
-rw-r--r--ChangeLog13
-rw-r--r--Jamfile2
-rw-r--r--src/base/ftbitmap.c8
-rw-r--r--src/otvalid/otvcommn.h157
-rw-r--r--src/otvalid/otvgdef.c6
-rw-r--r--src/otvalid/otvgpos.c21
-rw-r--r--src/otvalid/otvgsub.c2
-rw-r--r--src/otvalid/otvjstf.c6
-rw-r--r--src/sfnt/ttcmap.c2
-rw-r--r--src/truetype/ttgload.c18
10 files changed, 158 insertions, 77 deletions
diff --git a/ChangeLog b/ChangeLog
index 99ac8d7f8..285d73cb4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2005-06-30 David Turner <david@freetype.org>
+
+ * src/sfnt/ftbitmap.c, src/truetype/ttgload.c, src/sfnt/ttcmap.c:
+ removing compiler warnings (Visual C++ /W4)
+
+ * Jamfile, src/otvalid/{otvcommn.h,otvgdef.c,otvgpos.c,otvgsub.c,
+ otvjstf.c}: modified the code to use a different pre-processor trick
+ to implement the OTV_NEST1, OTV_NEST2 and OTV_NEST3 macros. The code
+ now compiles neatly with Visual C++. The 'otvalid' module has been
+ put in the Jamfile build again.
+
2005-06-20 Chia I Wu <b90201047@ntu.edu.tw>
* include/freetype/internal/ftobjs.h, src/base/ftobjs.c: New function
@@ -5,7 +16,7 @@
* src/truetype/ttgload.c (compute_glyph_metrics): Use
ft_glyphslot_grid_fit_metrics.
-
+
* src/cff/cffgload.c (cff_slot_load), src/cid/cidgload.c
(cid_slot_load_glyph), src/type1/t1gload.c (T1_Load_Glyph): Use
ft_glyphslot_grid_fit_metrics.
diff --git a/Jamfile b/Jamfile
index 74e9f6ced..5b4614b0f 100644
--- a/Jamfile
+++ b/Jamfile
@@ -78,7 +78,7 @@ FT2_COMPONENTS ?= autofit # auto-fitter
cid # PostScript CID-keyed font driver
gzip # support for gzip-compressed files
lzw # support for LZW-compressed files
- #otvalid # validation of OpenType tables
+ otvalid # validation of OpenType tables
pcf # PCF font driver
pfr # PFR/TrueDoc font driver
psaux # common PostScript routines module
diff --git a/src/base/ftbitmap.c b/src/base/ftbitmap.c
index 7c95af7fa..dc5911d4c 100644
--- a/src/base/ftbitmap.c
+++ b/src/base/ftbitmap.c
@@ -277,7 +277,7 @@
/* for each row */
for ( y = 0; y < bitmap->rows ; y++ )
{
- /*
+ /*
* Horizontally:
*
* From the last pixel on, make each pixel or'ed with the
@@ -310,12 +310,12 @@
{
if ( p[x] + p[x - i] > bitmap->num_grays - 1 )
{
- p[x] = bitmap->num_grays - 1;
+ p[x] = (unsigned char)(bitmap->num_grays - 1);
break;
}
else
{
- p[x] += p[x - i];
+ p[x] = (unsigned char)(p[x] + p[x-i]);
if ( p[x] == bitmap->num_grays - 1 )
break;
}
@@ -326,7 +326,7 @@
}
}
- /*
+ /*
* Vertically:
*
* Make the above `ystr' rows or'ed with it.
diff --git a/src/otvalid/otvcommn.h b/src/otvalid/otvcommn.h
index f0c6945ee..78087987b 100644
--- a/src/otvalid/otvcommn.h
+++ b/src/otvalid/otvcommn.h
@@ -109,39 +109,42 @@ FT_BEGIN_HEADER
FT_END_STMNT
+#define OTV_NAME_(x) #x
+#define OTV_NAME(x) OTV_NAME_(x)
+
+#define OTV_FUNC_(x) x##Func
+#define OTV_FUNC(x) OTV_FUNC_(x)
+
#ifdef FT_DEBUG_LEVEL_TRACE
/* use preprocessor's argument prescan to expand one argument into two */
-#define OTV_NEST1( x ) OTV_NEST1_( x )
-#define OTV_NEST1_( func0, name0 ) \
- FT_BEGIN_STMNT \
- valid->nesting_level = 0; \
- valid->func[0] = func0; \
- valid->debug_function_name[0] = name0; \
+#define OTV_NEST1( x ) \
+ FT_BEGIN_STMNT \
+ valid->nesting_level = 0; \
+ valid->func[0] = OTV_FUNC(x); \
+ valid->debug_function_name[0] = OTV_NAME(x); \
FT_END_STMNT
/* use preprocessor's argument prescan to expand two arguments into four */
-#define OTV_NEST2( x, y ) OTV_NEST2_( x, y )
-#define OTV_NEST2_( func0, name0, func1, name1 ) \
- FT_BEGIN_STMNT \
- valid->nesting_level = 0; \
- valid->func[0] = func0; \
- valid->func[1] = func1; \
- valid->debug_function_name[0] = name0; \
- valid->debug_function_name[1] = name1; \
+#define OTV_NEST2( x, y ) \
+ FT_BEGIN_STMNT \
+ valid->nesting_level = 0; \
+ valid->func[0] = OTV_FUNC(x); \
+ valid->func[1] = OTV_FUNC(y); \
+ valid->debug_function_name[0] = OTV_NAME(x); \
+ valid->debug_function_name[1] = OTV_NAME(y); \
FT_END_STMNT
/* use preprocessor's argument prescan to expand three arguments into six */
-#define OTV_NEST3( x, y, z ) OTV_NEST3_( x, y, z )
-#define OTV_NEST3_( func0, name0, func1, name1, func2, name2 ) \
- FT_BEGIN_STMNT \
- valid->nesting_level = 0; \
- valid->func[0] = func0; \
- valid->func[1] = func1; \
- valid->func[2] = func2; \
- valid->debug_function_name[0] = name0; \
- valid->debug_function_name[1] = name1; \
- valid->debug_function_name[2] = name2; \
+#define OTV_NEST3( x, y, z ) \
+ FT_BEGIN_STMNT \
+ valid->nesting_level = 0; \
+ valid->func[0] = OTV_FUNC(x); \
+ valid->func[1] = OTV_FUNC(y); \
+ valid->func[2] = OTV_FUNC(z); \
+ valid->debug_function_name[0] = OTV_NAME(x); \
+ valid->debug_function_name[1] = OTV_NAME(y); \
+ valid->debug_function_name[2] = OTV_NAME(z); \
FT_END_STMNT
#define OTV_INIT valid->debug_indent = 0
@@ -172,30 +175,27 @@ FT_BEGIN_HEADER
#else /* !FT_DEBUG_LEVEL_TRACE */
/* use preprocessor's argument prescan to expand one argument into two */
-#define OTV_NEST1( x ) OTV_NEST1_( x )
-#define OTV_NEST1_( func0, name0 ) \
- FT_BEGIN_STMNT \
- valid->nesting_level = 0; \
- valid->func[0] = func0; \
+#define OTV_NEST1( x ) \
+ FT_BEGIN_STMNT \
+ valid->nesting_level = 0; \
+ valid->func[0] = OTV_FUNC(x); \
FT_END_STMNT
/* use preprocessor's argument prescan to expand two arguments into four */
-#define OTV_NEST2( x, y ) OTV_NEST2_( x, y )
-#define OTV_NEST2_( func0, name0, func1, name1 ) \
+#define OTV_NEST2( x, y ) \
FT_BEGIN_STMNT \
valid->nesting_level = 0; \
- valid->func[0] = func0; \
- valid->func[1] = func1; \
+ valid->func[0] = OTV_FUNC(x); \
+ valid->func[1] = OTV_FUNC(y); \
FT_END_STMNT
/* use preprocessor's argument prescan to expand three arguments into six */
-#define OTV_NEST3( x, y, z ) OTV_NEST3_( x, y, z )
-#define OTV_NEST3_( func0, name0, func1, name1, func2, name2 ) \
- FT_BEGIN_STMNT \
- valid->nesting_level = 0; \
- valid->func[0] = func0; \
- valid->func[1] = func1; \
- valid->func[2] = func2; \
+#define OTV_NEST3( x, y, z ) \
+ FT_BEGIN_STMNT \
+ valid->nesting_level = 0; \
+ valid->func[0] = OTV_FUNC(x); \
+ valid->func[1] = OTV_FUNC(y); \
+ valid->func[2] = OTV_FUNC(z); \
FT_END_STMNT
#define OTV_INIT do ; while ( 0 )
@@ -338,6 +338,7 @@ FT_BEGIN_HEADER
/*************************************************************************/
/*************************************************************************/
+#if 0
#define ChainPosClassSet otv_x_Ox, "ChainPosClassSet"
#define ChainPosRuleSet otv_x_Ox, "ChainPosRuleSet"
#define ChainSubClassSet otv_x_Ox, "ChainSubClassSet"
@@ -351,11 +352,27 @@ FT_BEGIN_HEADER
#define PosRuleSet otv_x_Ox, "PosRuleSet"
#define SubClassSet otv_x_Ox, "SubClassSet"
#define SubRuleSet otv_x_Ox, "SubRuleSet"
+#endif
+
+#define ChainPosClassSetFunc otv_x_Ox
+#define ChainPosRuleSetFunc otv_x_Ox
+#define ChainSubClassSetFunc otv_x_Ox
+#define ChainSubRuleSetFunc otv_x_Ox
+#define JstfLangSysFunc otv_x_Ox
+#define JstfMaxFunc otv_x_Ox
+#define LigGlyphFunc otv_x_Ox
+#define LigatureArrayFunc otv_x_Ox
+#define LigatureSetFunc otv_x_Ox
+#define PosClassSetFunc otv_x_Ox
+#define PosRuleSetFunc otv_x_Ox
+#define SubClassSetFunc otv_x_Ox
+#define SubRuleSetFunc otv_x_Ox
FT_LOCAL( void )
otv_x_Ox ( FT_Bytes table,
OTV_Validator valid );
+#if 0
#define AlternateSubstFormat1 otv_u_C_x_Ox, "AlternateSubstFormat1"
#define ChainContextPosFormat1 otv_u_C_x_Ox, "ChainContextPosFormat1"
#define ChainContextSubstFormat1 otv_u_C_x_Ox, "ChainContextSubstFormat1"
@@ -363,63 +380,115 @@ FT_BEGIN_HEADER
#define ContextSubstFormat1 otv_u_C_x_Ox, "ContextSubstFormat1"
#define LigatureSubstFormat1 otv_u_C_x_Ox, "LigatureSubstFormat1"
#define MultipleSubstFormat1 otv_u_C_x_Ox, "MultipleSubstFormat1"
+#endif
+
+#define AlternateSubstFormat1Func otv_u_C_x_Ox
+#define ChainContextPosFormat1Func otv_u_C_x_Ox
+#define ChainContextSubstFormat1Func otv_u_C_x_Ox
+#define ContextPosFormat1Func otv_u_C_x_Ox
+#define ContextSubstFormat1Func otv_u_C_x_Ox
+#define LigatureSubstFormat1Func otv_u_C_x_Ox
+#define MultipleSubstFormat1Func otv_u_C_x_Ox
+
FT_LOCAL( void )
otv_u_C_x_Ox( FT_Bytes table,
OTV_Validator valid );
+#if 0
#define AlternateSet otv_x_ux, "AlternateSet"
#define AttachPoint otv_x_ux, "AttachPoint"
#define ExtenderGlyph otv_x_ux, "ExtenderGlyph"
#define JstfGPOSModList otv_x_ux, "JstfGPOSModList"
#define JstfGSUBModList otv_x_ux, "JstfGSUBModList"
#define Sequence otv_x_ux, "Sequence"
+#endif
+#define AlternateSetFunc otv_x_ux
+#define AttachPointFunc otv_x_ux
+#define ExtenderGlyphFunc otv_x_ux
+#define JstfGPOSModListFunc otv_x_ux
+#define JstfGSUBModListFunc otv_x_ux
+#define SequenceFunc otv_x_ux
FT_LOCAL( void )
otv_x_ux( FT_Bytes table,
OTV_Validator valid );
+#if 0
#define PosClassRule otv_x_y_ux_sy, "PosClassRule"
#define PosRule otv_x_y_ux_sy, "PosRule"
#define SubClassRule otv_x_y_ux_sy, "SubClassRule"
#define SubRule otv_x_y_ux_sy, "SubRule"
+#endif
+
+#define PosClassRuleFunc otv_x_y_ux_sy
+#define PosRuleFunc otv_x_y_ux_sy
+#define SubClassRuleFunc otv_x_y_ux_sy
+#define SubRuleFunc otv_x_y_ux_sy
FT_LOCAL( void )
otv_x_y_ux_sy( FT_Bytes table,
OTV_Validator valid );
+#if 0
#define ChainPosClassRule otv_x_ux_y_uy_z_uz_p_sp, "ChainPosClassRule"
#define ChainPosRule otv_x_ux_y_uy_z_uz_p_sp, "ChainPosRule"
#define ChainSubClassRule otv_x_ux_y_uy_z_uz_p_sp, "ChainSubClassRule"
#define ChainSubRule otv_x_ux_y_uy_z_uz_p_sp, "ChainSubRule"
+#endif
+
+#define ChainPosClassRuleFunc otv_x_ux_y_uy_z_uz_p_sp
+#define ChainPosRuleFunc otv_x_ux_y_uy_z_uz_p_sp
+#define ChainSubClassRuleFunc otv_x_ux_y_uy_z_uz_p_sp
+#define ChainSubRuleFunc otv_x_ux_y_uy_z_uz_p_sp
FT_LOCAL( void )
otv_x_ux_y_uy_z_uz_p_sp( FT_Bytes table,
OTV_Validator valid );
+#if 0
#define ContextPosFormat2 otv_u_O_O_x_Onx, "ContextPosFormat2"
#define ContextSubstFormat2 otv_u_O_O_x_Onx, "ContextSubstFormat2"
+#endif
+
+#define ContextPosFormat2Func otv_u_O_O_x_Onx
+#define ContextSubstFormat2Func otv_u_O_O_x_Onx
FT_LOCAL( void )
otv_u_O_O_x_Onx( FT_Bytes table,
OTV_Validator valid );
+#if 0
#define ContextPosFormat3 otv_u_x_y_Ox_sy, "ContextPosFormat3"
#define ContextSubstFormat3 otv_u_x_y_Ox_sy, "ContextSubstFormat3"
+#endif
+
+#define ContextPosFormat3Func otv_u_x_y_Ox_sy
+#define ContextSubstFormat3Func otv_u_x_y_Ox_sy
FT_LOCAL( void )
otv_u_x_y_Ox_sy( FT_Bytes table,
OTV_Validator valid );
-#define ChainContextPosFormat2 otv_u_O_O_O_O_x_Onx, "ChainContextPosFormat2"
-#define ChainContextSubstFormat2 otv_u_O_O_O_O_x_Onx, "ChainContextSubstFormat2"
+#if 0
+#define ChainContextPosFormat2 otv_u_O_O_O_O_x_Onx, "ChainContextPosFormat2"
+#define ChainContextSubstFormat2 otv_u_O_O_O_O_x_Onx, "ChainContextSubstFormat2"
+#endif
+
+#define ChainContextPosFormat2Func otv_u_O_O_O_O_x_Onx
+#define ChainContextSubstFormat2Func otv_u_O_O_O_O_x_Onx
FT_LOCAL( void )
otv_u_O_O_O_O_x_Onx( FT_Bytes table,
OTV_Validator valid );
-#define ChainContextPosFormat3 otv_u_x_Ox_y_Oy_z_Oz_p_sp, "ChainContextPosFormat3"
-#define ChainContextSubstFormat3 otv_u_x_Ox_y_Oy_z_Oz_p_sp, "ChainContextSubstFormat3"
+#if 0
+#define ChainContextPosFormat3 otv_u_x_Ox_y_Oy_z_Oz_p_sp, "ChainContextPosFormat3"
+#define ChainContextSubstFormat3 otv_u_x_Ox_y_Oy_z_Oz_p_sp, "ChainContextSubstFormat3"
+#endif
+
+#define ChainContextPosFormat3Func otv_u_x_Ox_y_Oy_z_Oz_p_sp
+#define ChainContextSubstFormat3Func otv_u_x_Ox_y_Oy_z_Oz_p_sp
FT_LOCAL( void )
otv_u_x_Ox_y_Oy_z_Oz_p_sp( FT_Bytes table,
diff --git a/src/otvalid/otvgdef.c b/src/otvalid/otvgdef.c
index e408c709a..60f75f51c 100644
--- a/src/otvalid/otvgdef.c
+++ b/src/otvalid/otvgdef.c
@@ -38,8 +38,8 @@
/*************************************************************************/
/*************************************************************************/
-#define AttachList otv_O_x_Ox, "AttachList"
-#define LigCaretList otv_O_x_Ox, "LigCaretList"
+#define AttachListFunc otv_O_x_Ox
+#define LigCaretListFunc otv_O_x_Ox
/* sets valid->extra1 (0) */
@@ -88,7 +88,7 @@
/*************************************************************************/
/*************************************************************************/
-#define CaretValue otv_CaretValue_validate, "CaretValue"
+#define CaretValueFunc otv_CaretValue_validate
static void
otv_CaretValue_validate( FT_Bytes table,
diff --git a/src/otvalid/otvgpos.c b/src/otvalid/otvgpos.c
index ceffd2f8e..a93a00786 100644
--- a/src/otvalid/otvgpos.c
+++ b/src/otvalid/otvgpos.c
@@ -48,9 +48,9 @@
/*************************************************************************/
/*************************************************************************/
-#define BaseArray otv_x_sxy, "BaseArray"
-#define LigatureAttach otv_x_sxy, "LigatureAttach"
-#define Mark2Array otv_x_sxy, "Mark2Array"
+#define BaseArrayFunc otv_x_sxy
+#define LigatureAttachFunc otv_x_sxy
+#define Mark2ArrayFunc otv_x_sxy
/* uses valid->extra1 (counter) */
/* uses valid->extra2 (boolean to handle NULL anchor field) */
@@ -88,8 +88,8 @@
OTV_SIZE_CHECK( anchor_offset );
if ( anchor_offset )
otv_Anchor_validate( table + anchor_offset, valid );
- }
- else
+ }
+ else
otv_Anchor_validate( table + anchor_offset, valid );
}
@@ -97,9 +97,9 @@
}
-#define MarkBasePosFormat1 otv_u_O_O_u_O_O, "MarkBasePosFormat1"
-#define MarkLigPosFormat1 otv_u_O_O_u_O_O, "MarkLigPosFormat1"
-#define MarkMarkPosFormat1 otv_u_O_O_u_O_O, "MarkMarkPosFormat1"
+#define MarkBasePosFormat1Func otv_u_O_O_u_O_O
+#define MarkLigPosFormat1Func otv_u_O_O_u_O_O
+#define MarkMarkPosFormat1Func otv_u_O_O_u_O_O
/* sets valid->extra1 (class count) */
@@ -130,7 +130,7 @@
otv_MarkArray_validate( table + Array1, valid );
valid->nesting_level++;
- func = valid->func[valid->nesting_level];
+ func = valid->func[valid->nesting_level];
valid->extra1 = ClassCount;
func( table + Array2, valid );
@@ -861,8 +861,7 @@
/* context rules since even invalid glyph indices/classes return */
/* meaningful results */
- OTV_NEST3( ChainContextPosFormat2,
- ChainPosClassSet, ChainPosClassRule );
+ OTV_NEST3( ChainContextPosFormat2,ChainPosClassSet, ChainPosClassRule );
OTV_RUN( table, valid );
break;
diff --git a/src/otvalid/otvgsub.c b/src/otvalid/otvgsub.c
index 022fa46f6..91dae0bb1 100644
--- a/src/otvalid/otvgsub.c
+++ b/src/otvalid/otvgsub.c
@@ -200,7 +200,7 @@
/*************************************************************************/
/*************************************************************************/
-#define Ligature otv_Ligature_validate, "Ligature"
+#define LigatureFunc otv_Ligature_validate
/* uses valid->glyph_count */
diff --git a/src/otvalid/otvjstf.c b/src/otvalid/otvjstf.c
index a230b36fb..80b8dd660 100644
--- a/src/otvalid/otvjstf.c
+++ b/src/otvalid/otvjstf.c
@@ -31,8 +31,8 @@
#define FT_COMPONENT trace_otvjstf
-#define JstfPriority otv_JstfPriority_validate, "JstfPriority"
-#define JstfLookup otv_GPOS_subtable_validate, ""
+#define JstfPriorityFunc otv_JstfPriority_validate
+#define JstfLookupFunc otv_GPOS_subtable_validate
/* uses valid->extra1 (GSUB lookup count) */
/* uses valid->extra2 (GPOS lookup count) */
@@ -69,7 +69,7 @@
table_size = 20;
valid->extra1 = gsub_lookup_count;
-
+
OTV_OPTIONAL_OFFSET( ShrinkageEnableGSUB );
OTV_SIZE_CHECK( ShrinkageEnableGSUB );
if ( ShrinkageEnableGSUB )
diff --git a/src/sfnt/ttcmap.c b/src/sfnt/ttcmap.c
index 0f3a3241c..2dbb342da 100644
--- a/src/sfnt/ttcmap.c
+++ b/src/sfnt/ttcmap.c
@@ -2160,7 +2160,7 @@
if ( clazz->format == format )
{
volatile TT_ValidatorRec valid;
- FT_Error error = SFNT_Err_Ok;
+ volatile FT_Error error = SFNT_Err_Ok;
ft_validator_init( FT_VALIDATOR( &valid ), cmap, limit,
diff --git a/src/truetype/ttgload.c b/src/truetype/ttgload.c
index a975aa484..1c4bd2ef7 100644
--- a/src/truetype/ttgload.c
+++ b/src/truetype/ttgload.c
@@ -124,9 +124,9 @@
p = face->horz_metrics;
limit = p + face->horz_metrics_size;
}
-
+
k = header->number_Of_HMetrics;
-
+
if ( k > 0 )
{
if ( idx < (FT_UInt)k )
@@ -134,7 +134,7 @@
p += 4 * idx;
if ( p + 4 > limit )
goto NoData;
-
+
*aadvance = FT_NEXT_USHORT( p );
*abearing = FT_NEXT_SHORT( p );
}
@@ -143,7 +143,7 @@
p += 4 * ( k - 1 );
if ( p + 4 > limit )
goto NoData;
-
+
*aadvance = FT_NEXT_USHORT( p );
p += 2 + 2 * ( idx - k );
if ( p + 2 > limit )
@@ -233,7 +233,7 @@
FT_Byte* result = NULL;
FT_ULong record_size = face->hdmx_record_size;
FT_Byte* record = face->hdmx_table + 8;
-
+
for ( nn = 0; nn < face->hdmx_record_count; nn++ )
if ( face->hdmx_record_sizes[nn] == ppem )
@@ -1774,18 +1774,20 @@
/* table in the font. Otherwise, we use the */
/* values defined in the horizontal header. */
- height = FT_DivFix( bbox.yMax - bbox.yMin, y_scale );
+ height = (FT_Short)FT_DivFix( bbox.yMax - bbox.yMin, y_scale );
if ( face->os2.version != 0xFFFFU )
{
/* sTypoDescender is negative */
- max_height = face->os2.sTypoAscender - face->os2.sTypoDescender;
+ max_height = (FT_Short)(face->os2.sTypoAscender -
+ face->os2.sTypoDescender);
top_bearing = (FT_Short)( ( max_height - height ) / 2 );
advance_height = (FT_UShort)( max_height + face->os2.sTypoLineGap );
}
else
{
- max_height = face->horizontal.Ascender + face->horizontal.Descender;
+ max_height = (FT_Short)(face->horizontal.Ascender +
+ face->horizontal.Descender);
top_bearing = (FT_Short)( ( max_height - height ) / 2 );
advance_height = (FT_UShort)( max_height +