[Indic] Break syllables at Halant,ZWNJ

That's really what Uniscribe does, and explains a lot of pecularities of
Halant,ZWNJ before the base.

Sent Telugu from 1% failures to 0.03%.  Improved Kannada and Malayalam
slightly.  Fixed half of Bengali, and did NOT break anything!
This commit is contained in:
Behdad Esfahbod 2012-07-20 13:48:03 -04:00
parent 2c372b80f6
commit 9e4f94a72c
2 changed files with 5 additions and 5 deletions

View File

@ -67,8 +67,9 @@ forced_rakar = ZWJ H ZWJ Ra;
matra_group = z*.M.N?.(H | forced_rakar)?;
syllable_tail = SM? (Coeng (cn|V))? (VD VD?)?;
place_holder = NBSP | DOTTEDCIRCLE;
halant_group = (z?.h.z?);
halant_or_matra_group = (halant_group | matra_group*);
halant_group = (z?.h.ZWJ?);
final_halant_group = halant_group | h.ZWNJ;
halant_or_matra_group = (final_halant_group | matra_group*);
consonant_syllable = Repha? (cn.halant_group)* cn A? halant_or_matra_group? syllable_tail;

View File

@ -531,9 +531,8 @@ initial_reordering_consonant_syllable (const hb_ot_map_t *map, hb_buffer_t *buff
}
else
{
/* A ZWJ at the end of syllable, or any ZWJ/ZWNJ in other places, stop the base
* search (to request explicit half or halant forms. */
if (is_joiner (info[i]) && (i + 1 < end || info[i].indic_category() == OT_ZWJ))
/* A ZWJ stops the base search, and requests an explicit half form. */
if (info[i].indic_category() == OT_ZWJ)
break;
}
} while (i > limit);