[autofit] More code orthogonality.

* src/autofit/aftypes.h (AF_StyleMetrics): Replace `script_class'
pointer to an `AF_ScriptClass' structure with `script' index of type
`AF_Script'.
Move some code around.

* src/autofit/afcjk.c: Include `afpic.h'.
(af_cjk_metrics_init_widths, af_cjk_metrics_init_blues,
af_cjk_hint_edges): Updated.

* src/autofit/aflatin.c: Include `afpic.h'.
(af_latin_metrics_init_widths, af_latin_metrics_init_blues,
af_latin_metrics_scale_dim, af_latin_hint_edges): Updated.

* src/autofit/afglobal.c (af_face_globals_get_metrics): Updated.

* src/autofit/afloader.c (af_loader_load_g, af_loader_load_glyph):
Updated.
This commit is contained in:
Werner Lemberg 2013-12-19 15:24:17 +01:00
parent 115de7131d
commit 73f3198101
6 changed files with 88 additions and 52 deletions

View File

@ -1,3 +1,25 @@
2013-12-18 Werner Lemberg <wl@gnu.org>
[autofit] More code orthogonality.
* src/autofit/aftypes.h (AF_StyleMetrics): Replace `script_class'
pointer to an `AF_ScriptClass' structure with `script' index of type
`AF_Script'.
Move some code around.
* src/autofit/afcjk.c: Include `afpic.h'.
(af_cjk_metrics_init_widths, af_cjk_metrics_init_blues,
af_cjk_hint_edges): Updated.
* src/autofit/aflatin.c: Include `afpic.h'.
(af_latin_metrics_init_widths, af_latin_metrics_init_blues,
af_latin_metrics_scale_dim, af_latin_hint_edges): Updated.
* src/autofit/afglobal.c (af_face_globals_get_metrics): Updated.
* src/autofit/afloader.c (af_loader_load_g, af_loader_load_glyph):
Updated.
2013-12-18 Werner Lemberg <wl@gnu.org>
[autofit] s/ScriptMetrics/StyleMetrics/.

View File

@ -27,6 +27,7 @@
#include FT_INTERNAL_DEBUG_H
#include "afglobal.h"
#include "afpic.h"
#include "aflatin.h"
@ -77,7 +78,7 @@
"cjk standard widths computation (script `%s')\n"
"===============================================\n"
"\n",
af_script_names[metrics->root.script_class->script] ));
af_script_names[metrics->root.script] ));
af_glyph_hints_init( hints, face->memory );
@ -91,15 +92,16 @@
AF_CJKMetricsRec dummy[1];
AF_Scaler scaler = &dummy->root.scaler;
AF_ScriptClass script_class =
AF_SCRIPT_CLASSES_GET[metrics->root.script];
glyph_index = FT_Get_Char_Index(
face,
metrics->root.script_class->standard_char );
glyph_index = FT_Get_Char_Index( face, script_class->standard_char );
if ( glyph_index == 0 )
goto Exit;
FT_TRACE5(( "standard character: U+%04lX (glyph index %d)\n",
metrics->root.script_class->standard_char, glyph_index ));
script_class->standard_char, glyph_index ));
error = FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_SCALE );
if ( error || face->glyph->outline.n_points <= 0 )
@ -226,7 +228,9 @@
AF_CJKAxis axis;
FT_Outline outline;
AF_Blue_Stringset bss = metrics->root.script_class->blue_stringset;
AF_ScriptClass sc = AF_SCRIPT_CLASSES_GET[metrics->root.script];
AF_Blue_Stringset bss = sc->blue_stringset;
const AF_Blue_StringRec* bs = &af_blue_stringsets[bss];
#ifdef FT_DEBUG_LEVEL_TRACE
@ -1667,7 +1671,7 @@
FT_TRACE5(( "cjk %s edge hinting (script `%s')\n",
dim == AF_DIMENSION_VERT ? "horizontal" : "vertical",
af_script_names[hints->metrics->script_class->script] ));
af_script_names[hints->metrics->script] ));
/* we begin by aligning all stems relative to the blue zone */

View File

@ -294,8 +294,8 @@
if ( FT_ALLOC( metrics, writing_system_class->style_metrics_size ) )
goto Exit;
metrics->script_class = script_class;
metrics->globals = globals;
metrics->script = script;
metrics->globals = globals;
if ( writing_system_class->style_metrics_init )
{

View File

@ -21,6 +21,7 @@
#include FT_INTERNAL_DEBUG_H
#include "afglobal.h"
#include "afpic.h"
#include "aflatin.h"
#include "aferrors.h"
@ -64,7 +65,7 @@
"latin standard widths computation (script `%s')\n"
"=================================================\n"
"\n",
af_script_names[metrics->root.script_class->script] ));
af_script_names[metrics->root.script] ));
af_glyph_hints_init( hints, face->memory );
@ -78,15 +79,16 @@
AF_LatinMetricsRec dummy[1];
AF_Scaler scaler = &dummy->root.scaler;
AF_ScriptClass script_class =
AF_SCRIPT_CLASSES_GET[metrics->root.script];
glyph_index = FT_Get_Char_Index(
face,
metrics->root.script_class->standard_char );
glyph_index = FT_Get_Char_Index( face, script_class->standard_char );
if ( glyph_index == 0 )
goto Exit;
FT_TRACE5(( "standard character: U+%04lX (glyph index %d)\n",
metrics->root.script_class->standard_char, glyph_index ));
script_class->standard_char, glyph_index ));
error = FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_SCALE );
if ( error || face->glyph->outline.n_points <= 0 )
@ -214,7 +216,9 @@
AF_LatinAxis axis = &metrics->axis[AF_DIMENSION_VERT];
FT_Outline outline;
AF_Blue_Stringset bss = metrics->root.script_class->blue_stringset;
AF_ScriptClass sc = AF_SCRIPT_CLASSES_GET[metrics->root.script];
AF_Blue_Stringset bss = sc->blue_stringset;
const AF_Blue_StringRec* bs = &af_blue_stringsets[bss];
@ -883,7 +887,7 @@
" "
" vertical scaling changed from %.4f to %.4f (by %d%%)\n"
"\n",
af_script_names[metrics->root.script_class->script],
af_script_names[metrics->root.script],
axis->org_scale / 65536.0,
scale / 65536.0,
( fitted - scaled ) * 100 / scaled ));
@ -908,7 +912,7 @@
FT_TRACE5(( "%s widths (script `%s')\n",
dim == AF_DIMENSION_HORZ ? "horizontal" : "vertical",
af_script_names[metrics->root.script_class->script] ));
af_script_names[metrics->root.script] ));
/* scale the widths */
for ( nn = 0; nn < axis->width_count; nn++ )
@ -935,13 +939,13 @@
if ( axis->extra_light )
FT_TRACE5(( "`%s' script is extra light (at current resolution)\n"
"\n",
af_script_names[metrics->root.script_class->script] ));
af_script_names[metrics->root.script] ));
#endif
if ( dim == AF_DIMENSION_VERT )
{
FT_TRACE5(( "blue zones (script `%s')\n",
af_script_names[metrics->root.script_class->script] ));
af_script_names[metrics->root.script] ));
/* scale the blue zones */
for ( nn = 0; nn < axis->blue_count; nn++ )
@ -2150,7 +2154,7 @@
FT_TRACE5(( "latin %s edge hinting (script `%s')\n",
dim == AF_DIMENSION_VERT ? "horizontal" : "vertical",
af_script_names[hints->metrics->script_class->script] ));
af_script_names[hints->metrics->script] ));
/* we begin by aligning all stems relative to the blue zone */
/* if needed -- that's only for horizontal edges */

View File

@ -183,11 +183,12 @@
/* automatic hinting process */
{
#ifdef FT_CONFIG_OPTION_PIC
AF_FaceGlobals globals = loader->globals;
AF_FaceGlobals globals = loader->globals;
#endif
AF_ScriptClass script_class =
AF_SCRIPT_CLASSES_GET[metrics->script];
AF_WritingSystemClass writing_system_class =
AF_WRITING_SYSTEM_CLASSES_GET
[metrics->script_class->writing_system];
AF_WRITING_SYSTEM_CLASSES_GET[script_class->writing_system];
if ( writing_system_class->style_hints_apply )
@ -544,11 +545,12 @@
if ( !error )
{
#ifdef FT_CONFIG_OPTION_PIC
AF_FaceGlobals globals = loader->globals;
AF_FaceGlobals globals = loader->globals;
#endif
AF_ScriptClass script_class =
AF_SCRIPT_CLASSES_GET[metrics->script];
AF_WritingSystemClass writing_system_class =
AF_WRITING_SYSTEM_CLASSES_GET
[metrics->script_class->writing_system];
AF_WRITING_SYSTEM_CLASSES_GET[script_class->writing_system];
loader->metrics = metrics;

View File

@ -197,32 +197,7 @@ extern void* _af_debug_hints;
(a)->y_delta == (b)->y_delta )
/*************************************************************************/
/*************************************************************************/
/***** *****/
/***** S T Y L E M E T R I C S *****/
/***** *****/
/*************************************************************************/
/*************************************************************************/
typedef struct AF_WritingSystemClassRec_ const* AF_WritingSystemClass;
typedef struct AF_ScriptClassRec_ const* AF_ScriptClass;
typedef struct AF_FaceGlobalsRec_* AF_FaceGlobals;
/* This is the main structure that combines everything. Autofit modules */
/* specific to writing systems derive their structures from it, for */
/* example `AF_LatinMetrics'. */
typedef struct AF_StyleMetricsRec_
{
AF_ScriptClass script_class;
AF_ScalerRec scaler;
FT_Bool digits_have_same_width;
AF_FaceGlobals globals; /* to access properties */
} AF_StyleMetricsRec, *AF_StyleMetrics;
typedef struct AF_StyleMetricsRec_* AF_StyleMetrics;
/* This function parses an FT_Face to compute global metrics for
* a specific script.
@ -308,6 +283,8 @@ extern void* _af_debug_hints;
} AF_WritingSystemClassRec;
typedef const AF_WritingSystemClassRec* AF_WritingSystemClass;
/*************************************************************************/
/*************************************************************************/
@ -363,6 +340,33 @@ extern void* _af_debug_hints;
} AF_ScriptClassRec;
typedef const AF_ScriptClassRec* AF_ScriptClass;
/*************************************************************************/
/*************************************************************************/
/***** *****/
/***** S T Y L E M E T R I C S *****/
/***** *****/
/*************************************************************************/
/*************************************************************************/
typedef struct AF_FaceGlobalsRec_* AF_FaceGlobals;
/* This is the main structure that combines everything. Autofit modules */
/* specific to writing systems derive their structures from it, for */
/* example `AF_LatinMetrics'. */
typedef struct AF_StyleMetricsRec_
{
AF_Script script;
AF_ScalerRec scaler;
FT_Bool digits_have_same_width;
AF_FaceGlobals globals; /* to access properties */
} AF_StyleMetricsRec;
/* Declare and define vtables for classes */
#ifndef FT_CONFIG_OPTION_PIC