[OpenJDK 2D-Dev] [PATCH] Make automatic font substitution on macOS work for surrogate pairs
Dmitry Batrak
dmitry.batrak at jetbrains.com
Wed Oct 26 13:28:58 UTC 2016
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/
(kindly posted by my colleague, having access to 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/2d-dev/attachments/20161026/1b9694a1/attachment.html>
More information about the 2d-dev
mailing list