Fallback to Latin script if the font has no other usable scripts

Patch and description from Jonathan Kew:

It turns out that some legacy Thai fonts provide OpenType substitution
features to implement mark positioning, but (incorrectly) put those
features/lookups under the 'latn' script tag instead of using 'thai' (or
possibly 'DFLT'). See
https://bugzilla.mozilla.org/show_bug.cgi?id=719366 for an example and
more detailed description.

Although this is really a font bug, I suggest that we could improve the
rendering of such fonts by looking for the 'latn' as a fallback if
neither the requested script nor "default" is found in
hb_ot_layout_table_choose_script. Suggested patch against harfbuzz
master is attached.

This does _not_ affect the other kind of legacy Thai font, where custom
code to support vendor-specific PUA codepoints would be needed. I'm not
keen to go down that path; IMO, such fonts should be ruthlessly stamped
out in favour of standards-based solutions. :)

JK
This commit is contained in:
Behdad Esfahbod 2012-01-22 15:31:44 -05:00
parent 8f80f93491
commit 71632c96da
1 changed files with 9 additions and 0 deletions

View File

@ -281,6 +281,15 @@ hb_ot_layout_table_choose_script (hb_face_t *face,
return FALSE;
}
/* try with 'latn'; some old fonts put their features there even though
they're really trying to support Thai, for example :( */
#define HB_OT_TAG_LATIN_SCRIPT HB_TAG ('l', 'a', 't', 'n')
if (g.find_script_index (HB_OT_TAG_LATIN_SCRIPT, script_index)) {
if (chosen_script)
*chosen_script = HB_OT_TAG_LATIN_SCRIPT;
return FALSE;
}
if (script_index) *script_index = HB_OT_LAYOUT_NO_SCRIPT_INDEX;
if (chosen_script)
*chosen_script = HB_OT_LAYOUT_NO_SCRIPT_INDEX;