Вопрос: Рендеринг лигатур Devanagari (Unicode) в Java Swing JComponent на Mac OS X


Я пытаюсь получить лигатуры Devanagari (в строках Unicode), которые правильно отображаются в Mac OS X 10.6.

Строки рисуются на JComponent и возьми RenderingHints для сглаживания. Лигатуры отображаются правильно в Windows XP с пакетом обновления 2 (SP2) и 7 (Ubuntu), но в Mac OS X лигатуры разлагаются (или, вернее, не сливаются правильно), диакритики отходят от своих позиций и т. Д. (См. Скриншоты ниже, правильный пример рендеринга с Win XP SP2 слева (с RenderingHints Ключ сглаживания ON), неправильный пример рендеринга с Mac OS X 10.6.7 справа (Антилечение DEFAULT знак равно OFF).

Я установил шрифт следующим образом, поэтому он должен использовать шрифт по умолчанию в любой системе:

new Font(null,Font.PLAIN,20);

Я считаю, что все это может иметь отношение к тому факту, что кодировка символов по умолчанию на компьютерах Mac - это MacRoman (не подмножество UTF-8), а другие системы (например, Windows) используют подмножество UTF-8 (например, WinLatin-1 ) или cp1252 или такой.

Даже имея эту информацию, я в неведении о том, как справиться с этой проблемой. Поэтому я был бы очень благодарен, если бы кто-то смог указать мне в правильном направлении.

correct and incorrect rendering of the same string

Я уже много пробовал:

  • Установка шрифта в Devanagari MT не решила проблему
  • TextAttribute  LIGATURES_ON не решила проблему

Я был бы чрезвычайно благодарен за любые подсказки или фрагменты кода другими разработчиками (желательно с фоном хинди, который развивается на Mac).


22


источник


Ответы:


Использование Quartz renderer вместо Java 2D-рендеринга.

Это существенно влияет на качество отображения глифов. Это необходимо сделать в первую очередь, как было предложено Вот ,

if (System.getProperty("os.name").startsWith("Mac OS X")) {
    System.setProperty("apple.awt.graphics.UseQuartz", "true");
}

Вы также можете посмотреть на использование TextLayout, поскольку FontRenderContext может применяться RenderingHints.KEY_FRACTIONALMETRICS,


3



Я не эксперт сам, но здесь некоторые указатели. Насколько я понял из Википедии, проблема, скорее всего, будет вашим шрифтом. Извините заранее за длинные кавычки, но я мог бы просто связать 2 статьи Википедии.

Вот часть раздела о лигатуры  из Статья Юникода :

Лигатуры

Многие сценарии, включая арабский и деванагари, имеют специальные орфографические правила, которые требуют объединения отдельных форм букв в специальные формы лигатуры. Правила, регулирующие образование лигатуры, могут быть довольно сложными, требующими специальных технологий формирования сценариев  таких как ACE (арабский каллиграфический движок DecoType в 1980-х годах и использовался для создания всех арабских примеров в печатных изданиях стандарта Unicode), что стало доказательством концепции OpenType (от Adobe и Microsoft), Graphite (by SIL International ), или AAT (от Apple) ,

Читайте далее в AAT (Apple Advanced Typography)  статья, раскрывает следующую информацию. Я рекомендую прочитать всю статью.

AAT и OpenType в Mac OS X

С Mac OS X 10.5 Leopard доступна частичная поддержка OpenType. В настоящее время поддержка ограничена западными сценариями и арабскими (с 2011 года). Если шрифт имеет таблицы AAT, они будут использоваться для типографики. Если шрифт не имеет таблиц AAT, но имеет таблицы OpenType, они будут использоваться в той мере, в какой система их поддерживает.

Это означает, что многие шрифты OpenType для западных или ближневосточных скриптов могут использоваться без изменений в Mac OS X 10.5, но южноазиатские скрипты, такие как тайский и деванагари, не могут. Для них требуются таблицы AAT для правильной компоновки.

А потом в разделе о макете шрифта:

Поскольку AAT полностью работает с глифами и никогда не с символами, вся информация о макете, необходимая для создания правильного отображения, находится внутри самого шрифта.  Это позволяет добавлять шрифты для новых скриптов, не требуя какой-либо конкретной поддержки от ОС.

И последнее:

AAT для индикативных скриптов

Для скриптов с индексом необходимы только необходимые функции - переопределение и замена символов. AAT поддерживает оба этих параметра. Как отмечалось выше, шрифты OpenType для скриптов индексов требуют добавления таблиц AAT до того, как они будут корректно работать в Mac OS X. Обратите внимание, что это относится только к программному обеспечению, зависящему от системной поддержки OpenType. Программы, которые обеспечивают собственную реализацию OpenType, будут корректно отображать индикаторы с помощью шрифтов OpenType. (Они могут, однако, не отображать индексы с таблицами AAT правильно.)

Mac OS X 10.5 поставляется со шрифтами для Деванагари, Гурмухи, Гуджарати, тайцев, тибетцев и тамилов. Шрифты для других индикационных скриптов доступны от третьих лиц.

Возможно, вам нужно выбрать шрифт, который явно поддерживает Devanagari.


6



У меня такая же проблема с проектом, над которым я работаю с скриптом Гурмуки. Теперь я попробовал оба шрифта с таблицами AAT, которые поставляются с Mac OS X (Gurmukhi MT, Gurmukhi MN) и шрифтами с таблицами OpenType. Ни один из них не работает в JAVA на Mac OS X, но шрифты OpenType немного читаемы. Единственная проблема заключается в том, что символ «halant» не отображает половинные формы символов, как это должно быть.

Я думаю, проблема связана с используемыми нами шрифтами и их совместимостью с JAVA на Mac OS X.


1



Я столкнулся с той же проблемой, когда пытался http://jambula.sourceforge.net  на Mac для тамильского языка.

Обходной путь, который я придумал, заключался в использовании Font.createFont для загрузки явного шрифта.

Вы можете увидеть тестовую программу по адресу: TestRendering.java

java org.jambula.image.TestRendering text.png

неверно отображает текст тамилов в text.png

Однако

java org.jambula.image.TestRendering text.png "/Library/Fonts/Arial Unicode.ttf"

делает это правильно.

Это может быть связано с https://bugs.openjdk.java.net/browse/JDK-7162125 ,


0