diff --git a/ChangeLog b/ChangeLog index 923e373c2..016f4ded5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-06-18 Werner Lemberg + + * src/type/t1objs.c (T1_Face_Init): Fix change from 2008-03-21. + Reported by Peter Weilbacher . + + * docs/CHANGES: Updated. + 2008-06-15 George Williams * src/otvalid/otvgpos.c (otv_MarkBasePos_validate): Set diff --git a/docs/CHANGES b/docs/CHANGES index ade991bc1..9b9e1749c 100644 --- a/docs/CHANGES +++ b/docs/CHANGES @@ -8,6 +8,13 @@ CHANGES BETWEEN 2.3.7 and 2.3.6 `FT_Request_Metrics' and `FT_Select_Metrics', returning an incorrect descender size. + - The `style_name' field in the `FT_FaceRec' structure often + contained a wrong value for Type 1 fonts. This misbehaviour + has been introduced in version 2.3.6 while trying to fix + another problem. [Note, however, that this value is + informative only since the used algorithm to extract it is + very simplistic.] + ====================================================================== diff --git a/src/type1/t1objs.c b/src/type1/t1objs.c index 40b258fce..bc3e2d4ce 100644 --- a/src/type1/t1objs.c +++ b/src/type1/t1objs.c @@ -90,7 +90,7 @@ FT_LOCAL_DEF( FT_Error ) T1_Size_Init( T1_Size size ) { - FT_Error error = 0; + FT_Error error = T1_Err_Ok; PSH_Globals_Funcs funcs = T1_Size_Get_Globals_Funcs( size ); @@ -254,8 +254,8 @@ face->unicode_map = NULL; #endif - face->root.family_name = 0; - face->root.style_name = 0; + face->root.family_name = NULL; + face->root.style_name = NULL; } } @@ -355,15 +355,19 @@ /* XXX: TODO -- add kerning with .afm support */ + + /* The following code to extract the family and the style is very */ + /* simplistic and might get some things wrong. For a full-featured */ + /* algorithm you might have a look at the whitepaper given at */ + /* */ + /* http://blogs.msdn.com/text/archive/2007/04/23/wpf-font-selection-model.aspx */ + /* get style name -- be careful, some broken fonts only */ /* have a `/FontName' dictionary entry! */ root->family_name = info->family_name; - /* assume "Regular" style if we don't know better */ - root->style_name = (char *)"Regular"; + root->style_name = NULL; - if ( info->weight ) - root->style_name = info->weight; - else if ( root->family_name ) + if ( root->family_name ) { char* full = info->full_name; char* family = root->family_name; @@ -401,6 +405,15 @@ root->family_name = type1->font_name; } + if ( !root->style_name ) + { + if ( info->weight ) + root->style_name = info->weight; + else + /* assume "Regular" style because we don't know better */ + root->style_name = (char *)"Regular"; + } + /* compute style flags */ root->style_flags = 0; if ( info->italic_angle ) @@ -445,7 +458,7 @@ if ( !error ) root->max_advance_width = (FT_Short)max_advance; else - error = 0; /* clear error */ + error = T1_Err_Ok; /* clear error */ } root->max_advance_height = root->height;