Hi,

I can file a bug on this if I can't find one.
If you can email me the test it will help even if it is not checked in.

-phil.

On 10/26/16, 6:28 AM, Dmitry Batrak wrote:
Hello,

I'd like to propose a patch to make automatic font substitution on macOS work for surrogate pairs. I have a Contributor status via agreement signed by JetBrains, hope someone can sponsor the patch.

Currently, if requested font cannot render a Unicode character represented by a surrogate pair, no substitution is performed - Font.canDisplay will return false, and the character will be rendered as a 'missing' glyph. This behaviour doesn't violate any specification, but it looks like it can be easily improved, as underlying OS framework used under the hood does support surrogate pairs.

The proposed change consists of two parts. First part is adjusting the code in CoreTextSupport.m to handle surrogate pairs while performing char-to-glyph mapping, by encoding non-displayable surrogate pairs using negative values of the codepoint, similar to how non-displayable BMP characters are encoded. Second part is fixing the rendering code (in CGGlyphImages.m), where wrong type was used to pass character values around, so that code for surrogate pairs handling, already present there,
could work.

I didn't include a test for this change, as it would depend on OS-specific font fallback mechanism and fonts installed, but I can create one that will work on a latest version of macOS with default
fonts, if needed.

Webrev for the fix is available at
http://cr.openjdk.java.net/~avu/rfe_surrogates/webrev.00/ <http://cr.openjdk.java.net/%7Eavu/rfe_surrogates/webrev.00/> (kindly posted by my colleague, having access to cr.openjdk.java.net <http://cr.openjdk.java.net>).

To my knowledge, there's no ticket in OpenJDK issue tracker for the proposed enhancement.
I can submit it via http://bugs.java.com/, if that's an obstacle.

Best regards,
Dmitry Batrak

Reply via email to