-
Bug
-
Resolution: Fixed
-
P3
-
6, 9, 11
-
b14
-
x86
-
windows_xp
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8212140 | 11.0.2 | Philip Race | P3 | Resolved | Fixed | b01 |
FULL PRODUCT VERSION :
java version "1.6.0_13"
Java(TM) SE Runtime Environment (build 1.6.0_13-b03)
Java HotSpot(TM) Client VM (build 11.3-b02, mixed mode, sharing)
We are trying to render characters from the Indic Malayalam language
I have coded the example as both an .html and .java file. The example attempts to render two lines of Malayalam characters. The two lines differ only in the last character,
\u0D2C\u0D3E\u0D32\u0D28\u0D4D
and
\u0D2C\u0D3E\u0D32\u0D28\u0D4D\u200D
The last character, \u200D, (a "zero width joiner") should
trigger a ligature to be formed.
The .html example is rendered correctly using Internet Explorer.
The .java example does not render the second line correctly.
Both the java.awt.font.TextLayout and Font.layoutGlyphVector
fail to render correctly.
The bug has attachments two PNG files
jdk_kartika.png : JDK rendering via the Java program below
ie_kartika.ong : IE rendering of the HTML
Java :-
-------
import java.awt.*;
import java.awt.font.*;
import java.util.*;
import javax.swing.*;
public class MalayalamTest extends JFrame
{
private static String[] TEXT =
{
"Testing glyph substitution for Malayalam language.",
"\u0D2C\u0D3E\u0D32\u0D28\u0D4D",
"0D2C 0D3E 0D32 0D28 0D4D",
"\u0D2C\u0D3E\u0D32\u0D28\u0D4D\u200D",
"0D2C 0D3E 0D32 0D28 0D4D 200D"
};
private static Font font;
public static void main(String[] args)
throws Exception
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
// set the language to Malayalam
Locale.setDefault(new Locale("ml"));
// create the rendering font
HashMap attrs = new HashMap();
attrs.put(TextAttribute.LIGATURES, TextAttribute.LIGATURES_ON);
attrs.put(TextAttribute.KERNING, TextAttribute.KERNING_ON);
font = new Font("Kartika", Font.PLAIN, 24).deriveFont(attrs);
System.out.println("using " + font);
// display the test JFrame
MalayalamTest f = new MalayalamTest();
f.setTitle("Malayalam Test");
f.setSize(600, 300);
f.setForeground(Color.black);
f.show();
}
public void paint(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);
FontRenderContext frc = g2.getFontRenderContext();
for (int i = 0; i < TEXT.length; i++)
{
String text = TEXT[i];
int x = 10;
int y = 60 + 40*i + 20*((i+1)/2);
// render using TextLayout
TextLayout layout = new TextLayout(text, font, frc);
layout.draw(g2, x, y);
}
}
}
---
HTML :-
<html>
<head>
<title>Malayalam Test</title>
</head>
<body>
<h3>Testing glyph substitution for Malayalam language</h3>
<br>
<font size="32" face="Kartika">ബാലന്</font>
<code>0D2C 0D3E 0D32 0D28 0D4D</code>
<br><br><br>
<font size="32" face="Kartika">ബാലന്‍</font>
<code>0D2C 0D3E 0D32 0D28 0D4D 200D</code>
<br>
The last three unicode characters form a ligature (glyph substitution)
</body>
</html>
java version "1.6.0_13"
Java(TM) SE Runtime Environment (build 1.6.0_13-b03)
Java HotSpot(TM) Client VM (build 11.3-b02, mixed mode, sharing)
We are trying to render characters from the Indic Malayalam language
I have coded the example as both an .html and .java file. The example attempts to render two lines of Malayalam characters. The two lines differ only in the last character,
\u0D2C\u0D3E\u0D32\u0D28\u0D4D
and
\u0D2C\u0D3E\u0D32\u0D28\u0D4D\u200D
The last character, \u200D, (a "zero width joiner") should
trigger a ligature to be formed.
The .html example is rendered correctly using Internet Explorer.
The .java example does not render the second line correctly.
Both the java.awt.font.TextLayout and Font.layoutGlyphVector
fail to render correctly.
The bug has attachments two PNG files
jdk_kartika.png : JDK rendering via the Java program below
ie_kartika.ong : IE rendering of the HTML
Java :-
-------
import java.awt.*;
import java.awt.font.*;
import java.util.*;
import javax.swing.*;
public class MalayalamTest extends JFrame
{
private static String[] TEXT =
{
"Testing glyph substitution for Malayalam language.",
"\u0D2C\u0D3E\u0D32\u0D28\u0D4D",
"0D2C 0D3E 0D32 0D28 0D4D",
"\u0D2C\u0D3E\u0D32\u0D28\u0D4D\u200D",
"0D2C 0D3E 0D32 0D28 0D4D 200D"
};
private static Font font;
public static void main(String[] args)
throws Exception
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
// set the language to Malayalam
Locale.setDefault(new Locale("ml"));
// create the rendering font
HashMap attrs = new HashMap();
attrs.put(TextAttribute.LIGATURES, TextAttribute.LIGATURES_ON);
attrs.put(TextAttribute.KERNING, TextAttribute.KERNING_ON);
font = new Font("Kartika", Font.PLAIN, 24).deriveFont(attrs);
System.out.println("using " + font);
// display the test JFrame
MalayalamTest f = new MalayalamTest();
f.setTitle("Malayalam Test");
f.setSize(600, 300);
f.setForeground(Color.black);
f.show();
}
public void paint(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);
FontRenderContext frc = g2.getFontRenderContext();
for (int i = 0; i < TEXT.length; i++)
{
String text = TEXT[i];
int x = 10;
int y = 60 + 40*i + 20*((i+1)/2);
// render using TextLayout
TextLayout layout = new TextLayout(text, font, frc);
layout.draw(g2, x, y);
}
}
}
---
HTML :-
<html>
<head>
<title>Malayalam Test</title>
</head>
<body>
<h3>Testing glyph substitution for Malayalam language</h3>
<br>
<font size="32" face="Kartika">ബാലന്</font>
<code>0D2C 0D3E 0D32 0D28 0D4D</code>
<br><br><br>
<font size="32" face="Kartika">ബാലന്‍</font>
<code>0D2C 0D3E 0D32 0D28 0D4D 200D</code>
<br>
The last three unicode characters form a ligature (glyph substitution)
</body>
</html>
- backported by
-
JDK-8212140 Malayalam glyph substitution is failing for Malayalam with Windows Kartika font.
-
- Resolved
-