From 508cc3d3cfcfb0383df0fe795cc28db4e0fd5729 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Thu, 17 Dec 2015 17:31:17 +0000 Subject: [PATCH] [indic] Allow context when matching for Malayalam new-spec Test sequence: U+0995,U+09CD,U+09B0 With Nirmala shipped on Windows 10, this failed to form the below form. Works now. Reported by Sairus. --- src/hb-ot-shape-complex-indic.cc | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/hb-ot-shape-complex-indic.cc b/src/hb-ot-shape-complex-indic.cc index 53548976a..a630419ad 100644 --- a/src/hb-ot-shape-complex-indic.cc +++ b/src/hb-ot-shape-complex-indic.cc @@ -557,8 +557,15 @@ data_create_indic (const hb_ot_shape_plan_t *plan) indic_plan->virama_glyph = (hb_codepoint_t) -1; /* Use zero-context would_substitute() matching for new-spec of the main - * Indic scripts, and scripts with one spec only, but not for old-specs. */ - bool zero_context = !indic_plan->is_old_spec; + * Indic scripts, and scripts with one spec only, but not for old-specs. + * The new-spec for all dual-spec scripts says zero-context matching happens. + * + * However, testing with Malayalam shows that old and new spec both allow + * context. Testing with Bengali new-spec however shows that it doesn't. + * So, the heuristic here is the way it is. It should *only* be changed, + * as we discover more cases of what Windows does. DON'T TOUCH OTHERWISE. + */ + bool zero_context = !indic_plan->is_old_spec && plan->props.script != HB_SCRIPT_MALAYALAM; indic_plan->rphf.init (&plan->map, HB_TAG('r','p','h','f'), zero_context); indic_plan->pref.init (&plan->map, HB_TAG('p','r','e','f'), zero_context); indic_plan->blwf.init (&plan->map, HB_TAG('b','l','w','f'), zero_context);