[OpenJDK 2D-Dev] RFR: 8169202: [macos] Font substitution does not work for supplementary characters

Philip Race philip.race at oracle.com
Thu Nov 10 16:11:24 UTC 2016


Uint .. but it looks like UniChar is also unsigned.
That  header file looks like it *is* the documentation.
Fine if you already know where to look but ..

Anyway based on the report that you've used this for months in 
production I can give this a "+1"
Sergey already reviewed too.
Who is going to push this ?

-phil.

On 11/10/16, 7:58 AM, Dmitry Batrak wrote:
> Updated webrev (removed wild card import): 
> http://cr.openjdk.java.net/~avu/JDK-8169202/webrev.03/ 
> <http://cr.openjdk.java.net/%7Eavu/JDK-8169202/webrev.03/>
>
> As for UnicodeScalarValue, I couldn't find its description (or the 
> description of an equivalent type UTF32Char) on developer.apple.com 
> <http://developer.apple.com> either. It's defined at MacTypes.h, at 
> the same place where UniChar is defined, like this:
>
>     /* ...
>         UnicodeScalarValue,     A complete Unicode character in UTF-32 
> format, with
>         UTF32Char                   values from 0 through 0x10FFFF 
> (excluding the surrogate
>              range 0xD800-0xDFFF and certain disallowed values)
>     ... */
>     typedef UInt32   UnicodeScalarValue;
>
> For what it's worth, the proposed change is part of OpenJDK-based 
> build bundled with JetBrains IDEs (in production since July this 
> year), and there are no known issues related to it, either reported by 
> users, found in IDEs testing or in JDK testing (AWT/Swing OpenJDK 8 
> jtreg tests).
>
> Best regards,
> Dmitry Batrak
>
>
> On Wed, Nov 9, 2016 at 11:55 PM, Phil Race <philip.race at oracle.com 
> <mailto:philip.race at oracle.com>> wrote:
>
>        29 import java.awt.*;
>
>     We avoid wild card imports - even in tests.
>
>     Can you provide a pointer to any Apple docs on UnicodeScalarValue.
>     I can't find it .. I presume its a typedef of int so it can hold a
>     composed
>     unicode code point outside the BMP ..
>
>     By already existing support I guess you refer to this :-
>
>       592 CGGI_CreateImageForUnicode
>       593     (CGGI_GlyphCanvas *canvas, const AWTStrike *strike,
>       594      const CGGI_RenderingMode *mode, const UnicodeScalarValue uniChar)
>     ...
>       602     if (uniChar>  0xFFFF) {
>       603         UTF16Char charRef[2];
>       604         CTS_BreakupUnicodeIntoSurrogatePairs(uniChar, charRef);
>     ...
>
>
>     This code was a bit more work to review than I was expecting because
>     of having to follow things around to see if numGlyphs != num16bitChars
>     was a problem or if the "non-negative" cases where we already have
>     a glyph were handled properly. And I'm still not entirely sure.
>     What reg. tests and other general testing has been done with this
>     fix ?
>
>     -phil.
>
>
>     On 11/07/2016 06:52 AM, Dmitry Batrak wrote:
>>     Hello,
>>
>>     I'd like to propose a patch for
>>     https://bugs.openjdk.java.net/browse/JDK-8169202
>>     <https://bugs.openjdk.java.net/browse/JDK-8169202>.
>>     I have a Contributor status via agreement signed by JetBrains,
>>     hope someone can sponsor the patch.
>>     This repeats the proposal I've sent earlier to this mailing list,
>>     adding now a reference to the created OpenJDK issue.
>>
>>     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.
>>
>>     Webrev for the fix is available at
>>     http://cr.openjdk.java.net/~avu/JDK-8169202/webrev.02/
>>     <http://cr.openjdk.java.net/%7Eavu/JDK-8169202/webrev.02/>
>>     (kindly posted by my colleague, having access to
>>     cr.openjdk.java.net <http://cr.openjdk.java.net>).
>>
>>     Best regards,
>>     Dmitry Batrak
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/2d-dev/attachments/20161110/82f847a2/attachment.html>


More information about the 2d-dev mailing list