This fixes 3 submitted bugs
https://bugs.openjdk.java.net/browse/JDK-7017058 : the Malayalam bug above
And also
https://bugs.openjdk.java.net/browse/JDK-8191130 :
Sinhala text rendering problem with C+VIRAMA+ZWJ+RA/YA+V
and
https://bugs.openjdk.java.net/browse/JDK-8195836:
opentype:Bengali: "Khanda Ta" shaping issue with U+09A4 TA, U+09CD virama, U+200D ZWJ

Webrev: http://cr.openjdk.java.net/~prr/7017058/

As discussed in the evaluation of 7017058, this is because of some code which
always maps several unicode formatting characters to the invisible glyph to
ensure it is never rendered as a missing glyph box.
But if the opentype tables in a font have glyph substitution looks ups that
depend on that font's actual mapping of those glyphs then they are broken.
We have had several reports of this (above) and also complaints this breaks
Emoji family ligature substitution.

The fix changes this to first consult the font to see if it does map these codepoints. If it does not then we still will map to the empty glyph in which case clearly the
font can't have any lookup that depends on it.

The variable origCharCode is added because several of the methods mutate charCode
and we avoid risk with this approach.

The tab, NL and CR code points are still always mapped to the empty glyph
since they are never going to be used by layout in this way and some fonts
map TAB to a space char which is not what we want.

-phil.


Reply via email to