java macos unicode rendering ligature

Representación de ligaduras de Devanagari(Unicode) en Java Swing JComponent en Mac OS X



macos rendering (4)

Estoy intentando que las ligaduras de Devanagari (en cadenas Unicode) se representen correctamente en Mac OS X 10.6.

Las cadenas se dibujan en un JComponent y toman RenderingHints for Antialiasing. Las ligaduras se muestran correctamente en Windows XP SP2 y 7, y en Ubuntu, pero en Mac OS X, las ligaduras se descomponen (o, mejor dicho, no se combinan correctamente), los signos diacríticos se alejan de sus posiciones, etc. (ver capturas de pantalla a continuación, ejemplo de representación correcta de Win XP SP2 a la izquierda (con la tecla Antialiasing de RenderingHints ON ), ejemplo de representación incorrecto de Mac OS X 10.6.7 a la derecha (Antialising DEFAULT = OFF ).

He establecido la fuente de la siguiente manera, por lo que debería usar una fuente predeterminada en cualquier sistema:

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

Creo que todo esto podría tener algo que ver con el hecho de que la codificación de caracteres predeterminada en Mac es MacRoman (NO un subconjunto de UTF-8), y que otros sistemas (como Windows) usan un subconjunto de UTF-8 (como WinLatin-1 ) o cp1252 o similares.

Incluso con esta información a la mano, no sé cómo manejar este problema. Por lo tanto, le agradecería que alguien me indicara la dirección correcta.

Ya he probado varias cosas:

  • Establecer la fuente en Devanagari MT no resolvió el problema
  • TextAttribute LIGATURES_ON no resolvió el problema

Estaré extremadamente agradecido por cualquier sugerencia, o fragmentos de código de otros desarrolladores (preferiblemente con antecedentes hindi que se desarrollan en Mac).


Utilizando el renderizador de cuarzo en lugar del renderizador 2D en Java.

Esto hace una diferencia sustancial en la calidad de la representación de glifos. Se debe hacer primero, como se sugiere here .

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

También puede considerar el uso de TextLayout , ya que FontRenderContext puede aplicar RenderingHints.KEY_FRACTIONALMETRICS .


Estoy teniendo exactamente el mismo problema con un proyecto en el que estoy trabajando con el script Gurmukhi. Ahora he probado ambas fuentes con tablas AAT que vienen con Mac OS X (Gurmukhi MT, Gurmukhi MN) y fuentes con tablas OpenType. Ninguno funciona en JAVA en Mac OS X, pero las fuentes OpenType son un poco más legibles. El único problema es que el carácter "plano" no representa las medias formas de caracteres como debería.

Creo que el problema es con las fuentes que estamos usando y su compatibilidad con JAVA en Mac OS X.


Me enfrenté al mismo problema cuando probé http://jambula.sourceforge.net en Mac para el idioma tamil.

La solución que se me ocurrió fue usar Font.createFont para cargar una fuente explícita.

Puede ver un programa de prueba en: TestRendering.java

java org.jambula.image.TestRendering text.png

representa el texto tamil incorrectamente en text.png

sin embargo

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

lo hace correctamente.

Puede deberse a https://bugs.openjdk.java.net/browse/JDK-7162125 .


Yo no soy un experto, pero aquí algunos consejos. Por lo que entendí de Wikipedia, el problema es muy probable que sea su fuente. Le pido disculpas por adelantado por las citas largas, pero si no, podría haber vinculado los 2 artículos de Wikipedia.

Aquí una parte de la sección sobre ligaduras del artículo de Unicode :

Ligaduras

Muchos guiones, incluidos el árabe y el devanagari, tienen reglas ortográficas especiales que requieren que ciertas combinaciones de formas de letras se combinen en formas de ligaduras especiales. Las reglas que gobiernan la formación de ligaduras pueden ser bastante complejas, ya que requieren tecnologías especiales de modelado de guiones , como ACE (Motor Caligráfico Árabe por DecoType en la década de 1980 y utilizadas para generar todos los ejemplos árabes en las ediciones impresas del Estándar Unicode), que se convirtieron en la prueba. de concepto para OpenType (por Adobe y Microsoft), Graphite (por SIL International) o AAT (por Apple) .

Leer más en el artículo AAT (Apple Advanced Typography) , revela la siguiente información. Recomiendo leer todo el artículo.

AAT y OpenType en Mac OS X

A partir de Mac OS X 10.5 Leopard, el soporte parcial para OpenType está disponible. El soporte actualmente está limitado a scripts occidentales y árabe (a partir de 2011). Si una fuente tiene tablas AAT, se utilizarán para tipografía. Si la fuente no tiene tablas AAT pero sí tablas OpenType, se utilizarán en la medida en que el sistema las admita.

Esto significa que muchas fuentes OpenType para scripts occidentales o del Medio Oriente se pueden usar sin modificaciones en Mac OS X 10.5, pero no se pueden usar scripts del sur de Asia como Thai y Devanagari. Estos requieren tablas AAT para un diseño adecuado.

Y más adelante en la sección sobre diseño de fuente:

Dado que AAT opera completamente con glifos y nunca con caracteres, toda la información de diseño necesaria para producir la visualización adecuada reside dentro de la propia fuente. Esto permite agregar fuentes para nuevas secuencias de comandos sin requerir ningún soporte específico del sistema operativo.

Y última:

AAT para scripts Indic

Para las secuencias de comandos Indic, las únicas funciones que son necesarias son la reordenación y sustitución de glifos. AAT soporta ambos de estos. Como se indicó anteriormente, las fuentes OpenType para las secuencias de comandos Indic requieren que se agreguen tablas AAT antes de que funcionen correctamente en Mac OS X. Sin embargo, tenga en cuenta que esto solo se aplica al software que depende del soporte del sistema de OpenType. Los programas que proporcionan su propia implementación de OpenType procesarán Indic correctamente con las fuentes OpenType. (Sin embargo, es posible que no representen correctamente las fuentes Indic con tablas AAT).

Mac OS X 10.5 incluye fuentes para Devanagari, Gurmukhi, Gujarati, Thai, Tibetan y Tamil. Las fuentes para otros scripts de Indic están disponibles de terceros.

Tal vez necesite elegir una fuente que explícitamente admita Devanagari.