[autofit] Fix handling of default script.
Patch taken from ttfautohint, commit 071ae2c00e0d67f9d19418f4fade1c23d27dc185. There were two bugs. - We now use non-standard script tags like `khms' for special purposes. However, HarfBuzz maps such tags to `DFLT', and without this commit the associated lookups were incorrectly assigned to the non-standard tags. - Let's assume we have a Bengali font, and the font's `DFLT' script tag handles the necessary lookups for Bengali, too. Without this commit, the `DFLT' lookups were assigned to ttfautohint's default script (usually `latn') before the standard lookups for Bengali were handled. We now have the following order while searching for covered glyph indices. special features of scripts (e.g. `sups' for Cyrillic) Unicode mappings of scripts remaining features of scripts (especially important for Indic scripts) default features of default script * src/autofit/afshaper.c, src/autofit/afshaper.h (af_shaper_get_coverage): Add boolean parameter to indicate default script. Update all callers. * src/autofit/afglobal.c (af_face_globals_compute_style_coverage): Fix search order for coverages.
This commit is contained in:
parent
fc11af1ea2
commit
ec776596ce
37
ChangeLog
37
ChangeLog
|
@ -1,3 +1,40 @@
|
||||||
|
2016-01-19 Werner Lemberg <wl@gnu.org>
|
||||||
|
|
||||||
|
[autofit] Fix handling of default script.
|
||||||
|
|
||||||
|
Patch taken from ttfautohint, commit
|
||||||
|
071ae2c00e0d67f9d19418f4fade1c23d27dc185.
|
||||||
|
|
||||||
|
There were two bugs.
|
||||||
|
|
||||||
|
- We now use non-standard script tags like `khms' for special
|
||||||
|
purposes. However, HarfBuzz maps such tags to `DFLT', and
|
||||||
|
without this commit the associated lookups were incorrectly
|
||||||
|
assigned to the non-standard tags.
|
||||||
|
|
||||||
|
- Let's assume we have a Bengali font, and the font's `DFLT'
|
||||||
|
script tag handles the necessary lookups for Bengali, too.
|
||||||
|
Without this commit, the `DFLT' lookups were assigned to
|
||||||
|
ttfautohint's default script (usually `latn') before the
|
||||||
|
standard lookups for Bengali were handled.
|
||||||
|
|
||||||
|
We now have the following order while searching for covered
|
||||||
|
glyph indices.
|
||||||
|
|
||||||
|
special features of scripts (e.g. `sups' for Cyrillic)
|
||||||
|
Unicode mappings of scripts
|
||||||
|
remaining features of scripts (especially important for Indic
|
||||||
|
scripts)
|
||||||
|
default features of default script
|
||||||
|
|
||||||
|
* src/autofit/afshaper.c, src/autofit/afshaper.h
|
||||||
|
(af_shaper_get_coverage): Add boolean parameter to indicate default
|
||||||
|
script.
|
||||||
|
Update all callers.
|
||||||
|
|
||||||
|
* src/autofit/afglobal.c (af_face_globals_compute_style_coverage):
|
||||||
|
Fix search order for coverages.
|
||||||
|
|
||||||
2016-01-19 Werner Lemberg <wl@gnu.org>
|
2016-01-19 Werner Lemberg <wl@gnu.org>
|
||||||
|
|
||||||
Various minor clang fixes.
|
Various minor clang fixes.
|
||||||
|
|
|
@ -241,23 +241,23 @@
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* get glyphs not directly addressable by cmap */
|
/* get glyphs not directly addressable by cmap */
|
||||||
af_shaper_get_coverage( globals, style_class, gstyles );
|
af_shaper_get_coverage( globals, style_class, gstyles, 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* handle the default OpenType features of the default script ... */
|
/* handle the remaining default OpenType features ... */
|
||||||
af_shaper_get_coverage( globals, AF_STYLE_CLASSES_GET[dflt], gstyles );
|
|
||||||
|
|
||||||
/* ... and the remaining default OpenType features */
|
|
||||||
for ( ss = 0; AF_STYLE_CLASSES_GET[ss]; ss++ )
|
for ( ss = 0; AF_STYLE_CLASSES_GET[ss]; ss++ )
|
||||||
{
|
{
|
||||||
AF_StyleClass style_class = AF_STYLE_CLASSES_GET[ss];
|
AF_StyleClass style_class = AF_STYLE_CLASSES_GET[ss];
|
||||||
|
|
||||||
|
|
||||||
if ( ss != dflt && style_class->coverage == AF_COVERAGE_DEFAULT )
|
if ( style_class->coverage == AF_COVERAGE_DEFAULT )
|
||||||
af_shaper_get_coverage( globals, style_class, gstyles );
|
af_shaper_get_coverage( globals, style_class, gstyles, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ... and finally the default OpenType features of the default script */
|
||||||
|
af_shaper_get_coverage( globals, AF_STYLE_CLASSES_GET[dflt], gstyles, 1 );
|
||||||
|
|
||||||
/* mark ASCII digits */
|
/* mark ASCII digits */
|
||||||
for ( i = 0x30; i <= 0x39; i++ )
|
for ( i = 0x30; i <= 0x39; i++ )
|
||||||
{
|
{
|
||||||
|
|
|
@ -98,7 +98,8 @@
|
||||||
FT_Error
|
FT_Error
|
||||||
af_shaper_get_coverage( AF_FaceGlobals globals,
|
af_shaper_get_coverage( AF_FaceGlobals globals,
|
||||||
AF_StyleClass style_class,
|
AF_StyleClass style_class,
|
||||||
FT_UShort* gstyles )
|
FT_UShort* gstyles,
|
||||||
|
FT_Bool default_script )
|
||||||
{
|
{
|
||||||
hb_face_t* face;
|
hb_face_t* face;
|
||||||
|
|
||||||
|
@ -143,8 +144,7 @@
|
||||||
/* `hb_ot_tags_from_script' usually returns HB_OT_TAG_DEFAULT_SCRIPT */
|
/* `hb_ot_tags_from_script' usually returns HB_OT_TAG_DEFAULT_SCRIPT */
|
||||||
/* as the second tag. We change that to HB_TAG_NONE except for the */
|
/* as the second tag. We change that to HB_TAG_NONE except for the */
|
||||||
/* default script. */
|
/* default script. */
|
||||||
if ( style_class->script == globals->module->default_script &&
|
if ( default_script )
|
||||||
style_class->coverage == AF_COVERAGE_DEFAULT )
|
|
||||||
{
|
{
|
||||||
if ( script_tags[0] == HB_TAG_NONE )
|
if ( script_tags[0] == HB_TAG_NONE )
|
||||||
script_tags[0] = HB_OT_TAG_DEFAULT_SCRIPT;
|
script_tags[0] = HB_OT_TAG_DEFAULT_SCRIPT;
|
||||||
|
@ -158,6 +158,11 @@
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
/* we use non-standard tags like `khms' for special purposes; */
|
||||||
|
/* HarfBuzz maps them to `DFLT', which we don't want to handle here */
|
||||||
|
if ( script_tags[0] == HB_OT_TAG_DEFAULT_SCRIPT )
|
||||||
|
goto Exit;
|
||||||
|
|
||||||
if ( script_tags[1] == HB_OT_TAG_DEFAULT_SCRIPT )
|
if ( script_tags[1] == HB_OT_TAG_DEFAULT_SCRIPT )
|
||||||
script_tags[1] = HB_TAG_NONE;
|
script_tags[1] = HB_TAG_NONE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,8 @@ FT_BEGIN_HEADER
|
||||||
FT_Error
|
FT_Error
|
||||||
af_shaper_get_coverage( AF_FaceGlobals globals,
|
af_shaper_get_coverage( AF_FaceGlobals globals,
|
||||||
AF_StyleClass style_class,
|
AF_StyleClass style_class,
|
||||||
FT_UShort* gstyles );
|
FT_UShort* gstyles,
|
||||||
|
FT_Bool default_script );
|
||||||
|
|
||||||
|
|
||||||
void*
|
void*
|
||||||
|
|
Loading…
Reference in New Issue