diff --git a/ChangeLog b/ChangeLog index 8787d69fb..d880f3ca6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2013-10-12 Werner Lemberg + + [autofit] Improve tracing of `latin' hinter. + + * src/autofit/aflatin.c (af_latin_metrics_init_blues): Report blue + zone types. + (af_latin_metrics_scale_dim): Report scaling changes due to x height + alignment. + Report scaled stroke width and blue zone values. + 2013-10-03 Dave Arnold * src/cff/cf2font.c (cf2_computeDarkening): Avoid division by zero. diff --git a/src/autofit/aflatin.c b/src/autofit/aflatin.c index d00b99602..0bc9748c1 100644 --- a/src/autofit/aflatin.c +++ b/src/autofit/aflatin.c @@ -232,7 +232,44 @@ FT_Pos* blue_shoot; - FT_TRACE5(( "blue zone %d:\n", axis->blue_count )); +#ifdef FT_DEBUG_LEVEL_TRACE + { + FT_Bool have_flag = 0; + + + FT_TRACE5(( "blue zone %d", axis->blue_count )); + + if ( bs->properties ) + { + FT_TRACE5(( " (" )); + + if ( AF_LATIN_IS_TOP_BLUE( bs ) ) + { + FT_TRACE5(( "top" )); + have_flag = 1; + } + + if ( AF_LATIN_IS_SMALL_TOP_BLUE( bs ) ) + { + if ( have_flag ) + FT_TRACE5(( ", " )); + FT_TRACE5(( "small top" )); + have_flag = 1; + } + + if ( AF_LATIN_IS_LONG_BLUE( bs ) ) + { + if ( have_flag ) + FT_TRACE5(( ", " )); + FT_TRACE5(( "long" )); + } + + FT_TRACE5(( ")" )); + } + + FT_TRACE5(( ":\n" )); + } +#endif /* FT_DEBUG_LEVEL_TRACE */ num_flats = 0; num_rounds = 0; @@ -837,7 +874,20 @@ else #endif if ( dim == AF_DIMENSION_VERT ) + { scale = FT_MulDiv( scale, fitted, scaled ); + + FT_TRACE5(( + "af_latin_metrics_scale_dim:" + " x height alignment (script `%s'):\n" + " " + " vertical scaling changed from %.4f to %.4f (by %d%%)\n" + "\n", + af_script_names[metrics->root.script_class->script], + axis->org_scale / 65536.0, + scale / 65536.0, + ( fitted - scaled ) * 100 / scaled )); + } } } } @@ -856,6 +906,10 @@ metrics->root.scaler.y_delta = delta; } + FT_TRACE5(( "%s widths (script `%s')\n", + dim == AF_DIMENSION_HORZ ? "horizontal" : "vertical", + af_script_names[metrics->root.script_class->script] )); + /* scale the widths */ for ( nn = 0; nn < axis->width_count; nn++ ) { @@ -864,15 +918,30 @@ width->cur = FT_MulFix( width->org, scale ); width->fit = width->cur; + + FT_TRACE5(( " %d scaled to %.2f\n", + width->org, + width->cur / 64.0 )); } + FT_TRACE5(( "\n" )); + /* an extra-light axis corresponds to a standard width that is */ /* smaller than 5/8 pixels */ axis->extra_light = (FT_Bool)( FT_MulFix( axis->standard_width, scale ) < 32 + 8 ); +#ifdef FT_DEBUG_LEVEL_TRACE + if ( axis->extra_light ) + FT_TRACE5(( "this font is extra light\n" + "\n" )); +#endif + if ( dim == AF_DIMENSION_VERT ) { + FT_TRACE5(( "blue zones (script `%s')\n", + af_script_names[metrics->root.script_class->script] )); + /* scale the blue zones */ for ( nn = 0; nn < axis->blue_count; nn++ ) { @@ -944,6 +1013,19 @@ #endif blue->flags |= AF_LATIN_BLUE_ACTIVE; + + FT_TRACE5(( " reference %d: %d scaled to %.2f%s\n" + " overshoot %d: %d scaled to %.2f%s\n", + nn, + blue->ref.org, + blue->ref.fit / 64.0, + blue->flags & AF_LATIN_BLUE_ACTIVE ? "" + : " (inactive)", + nn, + blue->shoot.org, + blue->shoot.fit / 64.0, + blue->flags & AF_LATIN_BLUE_ACTIVE ? "" + : " (inactive)" )); } } }