[autofit] Implement `fallback-script' property.
* src/autofit/afglobal.c: s/default_script/fallback_script/. * src/autofit/afglobal.h: s/AF_SCRIPT_DEFAULT/AF_SCRIPT_FALLBACK/. * src/autofit/afmodule.c: s/default_script/fallback_script/. (af_property_set, af_property_get): Implement `fallback-script'. * src/autofit/afmodule.h: s/default_script/fallback_script/. * include/freetype/ftautoh.h: Document it.
This commit is contained in:
parent
44e1f0d3a0
commit
d4ec007541
13
ChangeLog
13
ChangeLog
|
@ -1,3 +1,16 @@
|
||||||
|
2012-09-15 Werner Lemberg <wl@gnu.org>
|
||||||
|
|
||||||
|
[autofit] Implement `fallback-script' property.
|
||||||
|
|
||||||
|
* src/autofit/afglobal.c: s/default_script/fallback_script/.
|
||||||
|
* src/autofit/afglobal.h: s/AF_SCRIPT_DEFAULT/AF_SCRIPT_FALLBACK/.
|
||||||
|
|
||||||
|
* src/autofit/afmodule.c: s/default_script/fallback_script/.
|
||||||
|
(af_property_set, af_property_get): Implement `fallback-script'.
|
||||||
|
* src/autofit/afmodule.h: s/default_script/fallback_script/.
|
||||||
|
|
||||||
|
* include/freetype/ftautoh.h: Document it.
|
||||||
|
|
||||||
2012-09-15 Werner Lemberg <wl@gnu.org>
|
2012-09-15 Werner Lemberg <wl@gnu.org>
|
||||||
|
|
||||||
[autofit] Correct previous Unicode 6.1.0 change.
|
[autofit] Correct previous Unicode 6.1.0 change.
|
||||||
|
|
|
@ -246,6 +246,44 @@ FT_BEGIN_HEADER
|
||||||
|
|
||||||
} FT_Prop_GlyphToScriptMap;
|
} FT_Prop_GlyphToScriptMap;
|
||||||
|
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
*
|
||||||
|
* @property:
|
||||||
|
* fallback-script
|
||||||
|
*
|
||||||
|
* @description:
|
||||||
|
* If no auto-hinter script module can be assigned to a glyph, a
|
||||||
|
* fallback script gets assigned to it (see also the
|
||||||
|
* @glyph-to-script-map property). By default, this is
|
||||||
|
* @FT_AUTOHINTER_SCRIPT_CJK. Using the `fallback-script' property,
|
||||||
|
* this fallback value can be changed.
|
||||||
|
*
|
||||||
|
* {
|
||||||
|
* FT_Library library;
|
||||||
|
* FT_UInt fallback_script = FT_AUTOHINTER_SCRIPT_NONE;
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* FT_Init_FreeType( &library );
|
||||||
|
*
|
||||||
|
* FT_Property_Set( library, "autofitter",
|
||||||
|
* "fallback-script", &fallback_script );
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* @note:
|
||||||
|
* This property can be used with @FT_Property_Get also.
|
||||||
|
*
|
||||||
|
* It's important to use the right timing for changing this value: The
|
||||||
|
* creation of the glyph-to-script map which eventually uses the
|
||||||
|
* fallback script value gets triggered either by accessing the
|
||||||
|
* @glyph-to-script-map property of a face, or by auto-hinting any glyph
|
||||||
|
* from that face. In particular, if you have already created an
|
||||||
|
* @FT_Face structure but not loaded any glyph (using the auto-hinter),
|
||||||
|
* a change of the fallback glyph will affect this face.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
|
|
||||||
FT_END_HEADER
|
FT_END_HEADER
|
||||||
|
|
|
@ -54,7 +54,7 @@
|
||||||
|
|
||||||
static FT_Error
|
static FT_Error
|
||||||
af_face_globals_compute_script_coverage( AF_FaceGlobals globals,
|
af_face_globals_compute_script_coverage( AF_FaceGlobals globals,
|
||||||
FT_UInt default_script )
|
FT_UInt fallback_script )
|
||||||
{
|
{
|
||||||
FT_Error error = AF_Err_Ok;
|
FT_Error error = AF_Err_Ok;
|
||||||
FT_Face face = globals->face;
|
FT_Face face = globals->face;
|
||||||
|
@ -73,7 +73,7 @@
|
||||||
if ( error )
|
if ( error )
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Ignore this error; we simply use the default script.
|
* Ignore this error; we simply use the fallback script.
|
||||||
* XXX: Shouldn't we rather disable hinting?
|
* XXX: Shouldn't we rather disable hinting?
|
||||||
*/
|
*/
|
||||||
error = AF_Err_Ok;
|
error = AF_Err_Ok;
|
||||||
|
@ -133,7 +133,7 @@
|
||||||
|
|
||||||
Exit:
|
Exit:
|
||||||
/*
|
/*
|
||||||
* By default, all uncovered glyphs are set to the latin script.
|
* By default, all uncovered glyphs are set to the fallback script.
|
||||||
* XXX: Shouldn't we disable hinting or do something similar?
|
* XXX: Shouldn't we disable hinting or do something similar?
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
|
@ -145,7 +145,7 @@
|
||||||
if ( ( gscripts[nn] & ~AF_DIGIT ) == AF_SCRIPT_NONE )
|
if ( ( gscripts[nn] & ~AF_DIGIT ) == AF_SCRIPT_NONE )
|
||||||
{
|
{
|
||||||
gscripts[nn] &= ~AF_SCRIPT_NONE;
|
gscripts[nn] &= ~AF_SCRIPT_NONE;
|
||||||
gscripts[nn] |= default_script;
|
gscripts[nn] |= fallback_script;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -158,7 +158,7 @@
|
||||||
FT_LOCAL_DEF( FT_Error )
|
FT_LOCAL_DEF( FT_Error )
|
||||||
af_face_globals_new( FT_Face face,
|
af_face_globals_new( FT_Face face,
|
||||||
AF_FaceGlobals *aglobals,
|
AF_FaceGlobals *aglobals,
|
||||||
FT_UInt default_script )
|
FT_UInt fallback_script )
|
||||||
{
|
{
|
||||||
FT_Error error;
|
FT_Error error;
|
||||||
FT_Memory memory;
|
FT_Memory memory;
|
||||||
|
@ -176,7 +176,7 @@
|
||||||
globals->glyph_scripts = (FT_Byte*)( globals + 1 );
|
globals->glyph_scripts = (FT_Byte*)( globals + 1 );
|
||||||
|
|
||||||
error = af_face_globals_compute_script_coverage( globals,
|
error = af_face_globals_compute_script_coverage( globals,
|
||||||
default_script );
|
fallback_script );
|
||||||
if ( error )
|
if ( error )
|
||||||
{
|
{
|
||||||
af_face_globals_free( globals );
|
af_face_globals_free( globals );
|
||||||
|
|
|
@ -36,8 +36,8 @@ FT_BEGIN_HEADER
|
||||||
/************************************************************************/
|
/************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
/* index of default script in `af_script_classes' */
|
/* index of fallback script in `af_script_classes' */
|
||||||
#define AF_SCRIPT_DEFAULT 2
|
#define AF_SCRIPT_FALLBACK 2
|
||||||
/* a bit mask indicating an uncovered glyph */
|
/* a bit mask indicating an uncovered glyph */
|
||||||
#define AF_SCRIPT_NONE 0x7F
|
#define AF_SCRIPT_NONE 0x7F
|
||||||
/* if this flag is set, we have an ASCII digit */
|
/* if this flag is set, we have an ASCII digit */
|
||||||
|
@ -70,7 +70,7 @@ FT_BEGIN_HEADER
|
||||||
FT_LOCAL( FT_Error )
|
FT_LOCAL( FT_Error )
|
||||||
af_face_globals_new( FT_Face face,
|
af_face_globals_new( FT_Face face,
|
||||||
AF_FaceGlobals *aglobals,
|
AF_FaceGlobals *aglobals,
|
||||||
FT_UInt default_script );
|
FT_UInt fallback_script );
|
||||||
|
|
||||||
FT_LOCAL( FT_Error )
|
FT_LOCAL( FT_Error )
|
||||||
af_face_globals_get_metrics( AF_FaceGlobals globals,
|
af_face_globals_get_metrics( AF_FaceGlobals globals,
|
||||||
|
|
|
@ -60,7 +60,7 @@
|
||||||
if ( loader->globals == NULL )
|
if ( loader->globals == NULL )
|
||||||
{
|
{
|
||||||
error = af_face_globals_new( face, &loader->globals,
|
error = af_face_globals_new( face, &loader->globals,
|
||||||
module->default_script );
|
module->fallback_script );
|
||||||
if ( !error )
|
if ( !error )
|
||||||
{
|
{
|
||||||
face->autohint.data =
|
face->autohint.data =
|
||||||
|
|
|
@ -48,8 +48,18 @@
|
||||||
const char* property_name,
|
const char* property_name,
|
||||||
const void* value )
|
const void* value )
|
||||||
{
|
{
|
||||||
FT_UNUSED( module );
|
FT_Error error = AF_Err_Ok;
|
||||||
FT_UNUSED( value );
|
|
||||||
|
|
||||||
|
if ( !ft_strcmp( property_name, "fallback-script" ) )
|
||||||
|
{
|
||||||
|
FT_UInt* fallback_script = (FT_UInt*)value;
|
||||||
|
|
||||||
|
|
||||||
|
((AF_Module)module)->fallback_script = *fallback_script;
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
FT_TRACE0(( "af_property_get: missing property `%s'\n",
|
FT_TRACE0(( "af_property_get: missing property `%s'\n",
|
||||||
property_name ));
|
property_name ));
|
||||||
|
@ -63,7 +73,7 @@
|
||||||
void* value )
|
void* value )
|
||||||
{
|
{
|
||||||
FT_Error error = AF_Err_Ok;
|
FT_Error error = AF_Err_Ok;
|
||||||
FT_UInt default_script = ((AF_Module)module)->default_script;
|
FT_UInt fallback_script = ((AF_Module)module)->fallback_script;
|
||||||
|
|
||||||
|
|
||||||
if ( !ft_strcmp( property_name, "glyph-to-script-map" ) )
|
if ( !ft_strcmp( property_name, "glyph-to-script-map" ) )
|
||||||
|
@ -80,7 +90,7 @@
|
||||||
{
|
{
|
||||||
/* trigger computation of the global script data */
|
/* trigger computation of the global script data */
|
||||||
/* in case it hasn't been done yet */
|
/* in case it hasn't been done yet */
|
||||||
error = af_face_globals_new( prop->face, &globals, default_script );
|
error = af_face_globals_new( prop->face, &globals, fallback_script );
|
||||||
if ( !error )
|
if ( !error )
|
||||||
{
|
{
|
||||||
prop->face->autohint.data =
|
prop->face->autohint.data =
|
||||||
|
@ -95,6 +105,15 @@
|
||||||
|
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
else if ( !ft_strcmp( property_name, "fallback-script" ) )
|
||||||
|
{
|
||||||
|
FT_UInt* val = (FT_UInt*)value;
|
||||||
|
|
||||||
|
|
||||||
|
*val = fallback_script;
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
FT_TRACE0(( "af_property_get: missing property `%s'\n",
|
FT_TRACE0(( "af_property_get: missing property `%s'\n",
|
||||||
property_name ));
|
property_name ));
|
||||||
|
@ -138,7 +157,7 @@
|
||||||
FT_CALLBACK_DEF( FT_Error )
|
FT_CALLBACK_DEF( FT_Error )
|
||||||
af_autofitter_init( AF_Module module )
|
af_autofitter_init( AF_Module module )
|
||||||
{
|
{
|
||||||
module->default_script = AF_SCRIPT_DEFAULT;
|
module->fallback_script = AF_SCRIPT_FALLBACK;
|
||||||
|
|
||||||
return af_loader_init( module );
|
return af_loader_init( module );
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ FT_BEGIN_HEADER
|
||||||
{
|
{
|
||||||
FT_ModuleRec root;
|
FT_ModuleRec root;
|
||||||
|
|
||||||
FT_UInt default_script;
|
FT_UInt fallback_script;
|
||||||
|
|
||||||
AF_LoaderRec loader[1];
|
AF_LoaderRec loader[1];
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue