Blacklist GDEF table of timesi.ttf and timesbi.ttf on Win 7
See discussion: https://lists.freedesktop.org/archives/harfbuzz/2016-February/005489.html
This commit is contained in:
parent
c335fd7986
commit
e23cf902e9
@ -60,6 +60,31 @@ _hb_ot_layout_create (hb_face_t *face)
|
|||||||
layout->gpos_blob = OT::Sanitizer<OT::GPOS>::sanitize (face->reference_table (HB_OT_TAG_GPOS));
|
layout->gpos_blob = OT::Sanitizer<OT::GPOS>::sanitize (face->reference_table (HB_OT_TAG_GPOS));
|
||||||
layout->gpos = OT::Sanitizer<OT::GPOS>::lock_instance (layout->gpos_blob);
|
layout->gpos = OT::Sanitizer<OT::GPOS>::lock_instance (layout->gpos_blob);
|
||||||
|
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The ugly business of blacklisting individual fonts' tables happen here!
|
||||||
|
* See this thread for why we finally had to bend in and do this:
|
||||||
|
* https://lists.freedesktop.org/archives/harfbuzz/2016-February/005489.html
|
||||||
|
*/
|
||||||
|
unsigned int gdef_len = hb_blob_get_length (layout->gdef_blob);
|
||||||
|
unsigned int gsub_len = hb_blob_get_length (layout->gsub_blob);
|
||||||
|
unsigned int gpos_len = hb_blob_get_length (layout->gpos_blob);
|
||||||
|
if (0
|
||||||
|
|| (442 == gdef_len && 42038 == gpos_len && 2874 == gsub_len) /* Windows 7 timesi.ttf */
|
||||||
|
|| (430 == gdef_len && 40662 == gpos_len && 2874 == gsub_len) /* Windows 7 timesbi.ttf */
|
||||||
|
)
|
||||||
|
{
|
||||||
|
/* In certain versions of Times New Roman Italic and Bold Italic,
|
||||||
|
* ASCII double quotation mark U+0022, mapped to glyph 5, has wrong
|
||||||
|
* glyph class 3 (mark) in GDEF. Nuke the GDEF to avoid zero-width
|
||||||
|
* double-quote. See:
|
||||||
|
* https://lists.freedesktop.org/archives/harfbuzz/2016-February/005489.html
|
||||||
|
*/
|
||||||
|
if (3 == layout->gdef->get_glyph_class (5))
|
||||||
|
layout->gdef = &OT::Null(OT::GDEF);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
layout->gsub_lookup_count = layout->gsub->get_lookup_count ();
|
layout->gsub_lookup_count = layout->gsub->get_lookup_count ();
|
||||||
layout->gpos_lookup_count = layout->gpos->get_lookup_count ();
|
layout->gpos_lookup_count = layout->gpos->get_lookup_count ();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user