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.r...@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/ > (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 > > -- Dmitry Batrak Senior Software Developer JetBrains http://www.jetbrains.com The Drive to Develop