Рендеринг логических шрифтов кажется полем загадок.В одном тестовом прогоне я получил правильное отображение соответствующих символов в пределах JTextArea
, но не в пределах JTextField
, в то время как textArea.getFont()==textField.getFont()
оценивается как true
!
* fontconfig.properties.src
относится к Arial
, но также содержит следующую строку:
exclusion.alphabetic=0700-1e9f,1f00-2017,2020-20ab,20ad-20b8,20bb-20bc,20be-f8ff
и ṣ
и Ṣ
(U+1e63
и U+1e62
) находятся именно в этом диапазоне.
Я не знаюНе известно, где эти явно «буквенные» символы должны заканчиваться, когда их здесь исключают. В этом документе просто говорится:
Используется, если шрифт с большим набором символов необходимо поместить в начале последовательности поиска (например, из соображений производительности), нонекоторые символы, которые он поддерживает, должны быть нарисованы другим шрифтом.
Но я понятия не имею, почему эти символы не должны отображаться с первым шрифтом, настроенным для «алфавитного», и каким другим шрифтом впоследовательность поиска должна их визуализировать.
Кроме того, этот диапазон выглядит произвольно произвольным, то есть подразумевает, что, хотя Ṣ
и ṣ
находятся в исключенном диапазоне, Ạ
и ạ
- нети может быть отображено правильно.
Когда вы превращаете эту строку в комментарий, то есть
#exclusion.alphabetic=0700-1e9f,1f00-2017,2020-20ab,20ad-20b8,20bb-20bc,20be-f8ff
, проблема исчезает.
У меня такое ощущение, что первоначальное предложение об исключениивызывал рендеринг с использованием встроенного шрифта Lucida, который не может отображать эти символы.В JDK 11 эта линия исключения все еще существует, и ее обновленная версия:
exclusion.alphabetic=0700-1cff,1d80-1e9f,1f00-2017,2020-20ab,20ad-20b8,20bb-20bc,20be-f8ff
по-прежнему охватывает ṣ
и Ṣ
(U+1e63
и U+1e62
).Но шрифты Lucida были удалены, следовательно, жестко закодированные ссылки на эти шрифты в коде AWT также должны быть удалены.
В результате изменений, внесенных между JDK 10 и JDK 11, символыṣ
и Ṣ
отображаются правильно.
Таким образом, суть в том, что вместо попытки исправить конфигурацию AWT JDK 10 вы также можете просто обновить ее до JDK 11.
Это относится как к OpenJDK 11, так и к Oracle JDK 11. Их файлы конфигурации шрифтов отличаются только комментарием к заголовку лицензии…