* src/pshinter/pshalgo3.c (psh3_glyph_compute_extrema): Skip
contours with only a single point to avoid segfault. * src/autohint/ahtypes.h (AH_OPTION_NO_STRONG_INTERPOLATION): Removed since unused.
This commit is contained in:
parent
834dd30508
commit
71d5b74f85
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
|||
2003-05-28 Werner Lemberg <wl@gnu.org>
|
||||
|
||||
* src/pshinter/pshalgo3.c (psh3_glyph_compute_extrema): Skip
|
||||
contours with only a single point to avoid segfault.
|
||||
|
||||
2003-05-24 Werner Lemberg <wl@gnu.org>
|
||||
|
||||
* src/autohint/ahtypes.h (AH_OPTION_NO_STRONG_INTERPOLATION):
|
||||
Removed since unused.
|
||||
|
||||
2003-05-21 Werner Lemberg <wl@gnu.org>
|
||||
|
||||
* include/freetype/config/ftstdlib.h (ft_strcat): New wrapper macro
|
||||
|
|
|
@ -27,6 +27,8 @@
|
|||
|
||||
#define MAX_TEST_CHARACTERS 12
|
||||
|
||||
/* cf. AH_BLUE_XXX constants in ahtypes.h */
|
||||
|
||||
static
|
||||
const char* blue_chars[AH_BLUE_MAX] =
|
||||
{
|
||||
|
@ -93,8 +95,8 @@
|
|||
goto Exit;
|
||||
|
||||
/* we compute the blues simply by loading each character from the */
|
||||
/* 'blue_chars[blues]' string, then compute its top-most and */
|
||||
/* bottom-most points */
|
||||
/* 'blue_chars[blues]' string, then compute its top-most or */
|
||||
/* bottom-most points (depending on `AH_IS_TOP_BLUE') */
|
||||
|
||||
AH_LOG(( "blue zones computation\n" ));
|
||||
AH_LOG(( "------------------------------------------------\n" ));
|
||||
|
@ -103,6 +105,7 @@
|
|||
{
|
||||
const char* p = blue_chars[blue];
|
||||
const char* limit = p + MAX_TEST_CHARACTERS;
|
||||
|
||||
FT_Pos *blue_ref, *blue_shoot;
|
||||
|
||||
|
||||
|
|
|
@ -996,8 +996,8 @@
|
|||
/* we do this by inserting fake segments when needed */
|
||||
if ( dimension == 0 )
|
||||
{
|
||||
AH_Point point = outline->points;
|
||||
AH_Point point_limit = point + outline->num_points;
|
||||
AH_Point point = outline->points;
|
||||
AH_Point point_limit = point + outline->num_points;
|
||||
|
||||
FT_Pos min_pos = 32000;
|
||||
FT_Pos max_pos = -32000;
|
||||
|
@ -1067,6 +1067,7 @@
|
|||
segments = outline->vert_segments;
|
||||
major_dir = AH_DIR_UP;
|
||||
p_num_segments = &outline->num_vsegments;
|
||||
|
||||
ah_setup_uv( outline, AH_UV_FXY );
|
||||
}
|
||||
}
|
||||
|
@ -1485,7 +1486,7 @@
|
|||
edge->dir = up_dir;
|
||||
|
||||
else if ( ups < downs )
|
||||
edge->dir = - up_dir;
|
||||
edge->dir = -up_dir;
|
||||
|
||||
else if ( ups == downs )
|
||||
edge->dir = 0; /* both up and down! */
|
||||
|
@ -1579,7 +1580,7 @@
|
|||
return;
|
||||
}
|
||||
|
||||
/* compute for each horizontal edge, which blue zone is closer */
|
||||
/* for each horizontal edge search the blue zone which is closest */
|
||||
for ( ; edge < edge_limit; edge++ )
|
||||
{
|
||||
AH_Blue blue;
|
||||
|
|
|
@ -699,6 +699,10 @@
|
|||
/* glyph is not an m), so the potential for unwanted distortion is */
|
||||
/* relatively low. */
|
||||
|
||||
/* We don't handle horizontal edges since we can't easily assure that */
|
||||
/* the third (lowest) stem aligns with the base line; it might end up */
|
||||
/* one pixel higher or lower. */
|
||||
|
||||
n_edges = edge_limit - edges;
|
||||
if ( !dimension && ( n_edges == 6 || n_edges == 12 ) )
|
||||
{
|
||||
|
@ -1580,7 +1584,7 @@
|
|||
FT_SubGlyph subglyph;
|
||||
|
||||
|
||||
start_point = gloader->base.outline.n_points;
|
||||
start_point = gloader->base.outline.n_points;
|
||||
|
||||
/* first of all, copy the subglyph descriptors in the glyph loader */
|
||||
error = ah_loader_check_subglyphs( gloader, num_subglyphs );
|
||||
|
@ -1663,8 +1667,8 @@
|
|||
FT_Vector* p2;
|
||||
|
||||
|
||||
if ( start_point + k >= num_base_points ||
|
||||
l >= (FT_UInt)num_new_points )
|
||||
if ( start_point + k >= num_base_points ||
|
||||
l >= (FT_UInt)num_new_points )
|
||||
{
|
||||
error = AH_Err_Invalid_Composite;
|
||||
goto Exit;
|
||||
|
@ -1822,7 +1826,7 @@
|
|||
/* adust x_scale
|
||||
*/
|
||||
if ( fitted < scaled )
|
||||
x_scale -= x_scale/50; /* x_scale*0.98 with integers */
|
||||
x_scale -= x_scale / 50; /* x_scale*0.98 with integers */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -76,16 +76,6 @@ FT_BEGIN_HEADER
|
|||
#undef AH_OPTION_NO_WEAK_INTERPOLATION
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* If this option is defined, only weak interpolation will be used to */
|
||||
/* place the points between edges. Otherwise, `strong' points are */
|
||||
/* detected and later hinted through strong interpolation to correct */
|
||||
/* some unpleasant artefacts. */
|
||||
/* */
|
||||
#undef AH_OPTION_NO_STRONG_INTERPOLATION
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Undefine this macro if you don't want to hint the metrics. There is */
|
||||
|
|
|
@ -1261,6 +1261,9 @@
|
|||
PSH3_Point point, before, after;
|
||||
|
||||
|
||||
if ( glyph->contours[n].count == 0 )
|
||||
continue;
|
||||
|
||||
point = first;
|
||||
before = point;
|
||||
after = point;
|
||||
|
|
Loading…
Reference in New Issue