[OpenJDK 2D-Dev] [PATCH] Make automatic font substitution on macOS work for surrogate pairs
Dmitry Batrak
dmitry.batrak at jetbrains.com
Thu Nov 3 14:23:40 UTC 2016
Added an automated version of the test to the webrev -
http://cr.openjdk.java.net/~avu/rfe_surrogates/webrev.01/
Best regards,
Dmitry Batrak
On Tue, Nov 1, 2016 at 5:40 PM, Sergey Bylokhov <Sergey.Bylokhov at oracle.com>
wrote:
> Looks fine to me, but the jtreg test will be helpful.
>
> On 27.10.16 11:56, Dmitry Batrak wrote:
>
>> Sure, here's the simplest test, that can be used for visual inspection:
>>
>> import javax.swing.*;
>> import java.awt.*;
>>
>> public class SurrogatesFallbackTest {
>> public static void main(String[] args) {
>> SwingUtilities.invokeLater(() -> {
>> JFrame frame = new JFrame();
>> JLabel label = new JLabel(new
>> String(Character.toChars(0x1d400))); // MATHEMATICAL BOLD CAPITAL A
>> label.setFont(new Font("Menlo", Font.PLAIN, 36)); //
>> expected to fallback to STIXGeneral
>> frame.add(label);
>> frame.pack();
>> frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE
>> );
>> frame.setLocationRelativeTo(null);
>> frame.setVisible(true);
>> });
>> }
>> }
>>
>> I can convert it to an automatic test (rendering to a bitmap and
>> comparing the result to rendering of 'missing' glyph), and add it to the
>> webrev, if that makes sense.
>>
>> Best regards,
>> Dmitry Batrak
>>
>> On Thu, Oct 27, 2016 at 2:17 AM, Philip Race <philip.race at oracle.com
>> <mailto:philip.race at oracle.com>> wrote:
>>
>> 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
>>>
>>
>>
>>
>>
>> --
>> Dmitry Batrak
>> Senior Software Developer
>> JetBrains
>> http://www.jetbrains.com
>> The Drive to Develop
>>
>
>
> --
> Best regards, Sergey.
>
--
Dmitry Batrak
Senior Software Developer
JetBrains
http://www.jetbrains.com
The Drive to Develop
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/2d-dev/attachments/20161103/168ca28f/attachment.html>
More information about the 2d-dev
mailing list