[Indic] Fix Eyelash Ra with old Devanagari spec

This commit is contained in:
Behdad Esfahbod 2013-02-12 18:17:39 -05:00
parent cc5f24cde0
commit 85c51ec2e1
1 changed files with 32 additions and 0 deletions

View File

@ -937,6 +937,38 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
info[i].mask |= mask; info[i].mask |= mask;
} }
if (indic_plan->is_old_spec &&
buffer->props.script == HB_SCRIPT_DEVANAGARI)
{
/* Old-spec eye-lash Ra needs special handling. From the
* spec:
*
* "The feature 'below-base form' is applied to consonants
* having below-base forms and following the base consonant.
* The exception is vattu, which may appear below half forms
* as well as below the base glyph. The feature 'below-base
* form' will be applied to all such occurrences of Ra as well."
*
* Test case: U+0924,U+094D,U+0930,U+094d,U+0915
* with Sanskrit 2003 font.
*
* However, note that Ra,Halant,ZWJ is the correct way to
* request eyelash form of Ra, so we wouldbn't inhibit it
* in that sequence.
*
* Test case: U+0924,U+094D,U+0930,U+094d,U+200D,U+0915
*/
for (unsigned int i = start; i + 1 < base; i++)
if (info[i ].indic_category() == OT_Ra &&
info[i+1].indic_category() == OT_H &&
(i + 2 == base ||
info[i+2].indic_category() != OT_ZWJ))
{
info[i ].mask |= indic_plan->mask_array[BLWF];
info[i+1].mask |= indic_plan->mask_array[BLWF];
}
}
if (indic_plan->mask_array[PREF] && base + 2 < end) if (indic_plan->mask_array[PREF] && base + 2 < end)
{ {
/* Find a Halant,Ra sequence and mark it for pre-base reordering processing. */ /* Find a Halant,Ra sequence and mark it for pre-base reordering processing. */