Details
Backports
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8135150 | Mikhail Cherkasov | P3 | Closed | Won't Fix |
Description
SYNOPSIS
--------
Changes to fontconfig.properties required on Windows
OPERATING SYSTEM
----------------
Windows 7 x64
Windows XP
FULL JDK VERSION
----------------
java version "1.7.0_07"
Java(TM) SE Runtime Environment (build 1.7.0_07-b10)
Java HotSpot(TM) Client VM (build 23.3-b01, mixed mode)
DESCRIPTION from Licensee
-------------------------
With the current fontconfig.properties file, no characters are displayed for the following Unicode ranges by logical fonts such as Dialog:
Gurmukhi, Gujarati, Tamil, Telugu, Kannada
The following Windows fonts should be added to the fallback sequence in fontconfig.properties:
* Raavi (raavi.ttf)
* Shruti (shruti.ttf)
* Latha (latha.ttf)
* Vijaya (vijaya.ttf)
* Gautami (gautami.ttf)
* Vani (Vani.ttf)
* Tunga (tunga.ttf)
Because these fonts can display some of the characters in these Unicode ranges.
REPRODUCTION INSTRUCTIONS
-------------------------
To see this situation, please apply following patch into FontPanel.java for demo\jfc\Font2DTest\src.zip
============================================================================================
--- demo/jfc/Font2DTest/src/FontPanel.java.orig Wed Aug 29 12:09:42 2012
+++ demo/jfc/Font2DTest/src/FontPanel.java Sat Sep 15 10:11:07 2012
@@ -1119,7 +1119,9 @@
currMouseOverChar = mouseOverChar;
/// Update status bar
f2dt.fireChangeStatus( "Pointing to" + MS_OPENING[textToUse] +
- modeSpecificNumStr( mouseOverChar ), false );
+ modeSpecificNumStr( mouseOverChar ) +
+ (null == Character.getName(mouseOverChar) ?
+ "" : " ("+Character.getName(mouseOverChar)+")"), false );
return true;
}
}
============================================================================================
Now follow these steps:
1. Apply above patch and compile and run Font2DTest
2. On Font, select "Dialog"
3. On "Range" JComboBox, select "Tamil"
4. Nothing displayed, on bottom area
5. On Font, select "Latha"
6. Some characters are displayed, and square characters are displayed
This square character means no font glyph is assigned or no character
is defined. Please move mouse cursor on square character, If you can
see glyph name, this character is defined on Unicode
The attached testcase demonstrates that the characters are in fact present in an example font (Dialog):
java FontCheckTest7 | findstr /i Gurmukhi
java FontCheckTest7 | findstr /i Gujarati
java FontCheckTest7 | findstr /i Tamil
java FontCheckTest7 | findstr /i Telugu
java FontCheckTest7 | findstr /i Kannada
For example, the Latha and Vijaya fonts have glyphs for Tamil:
c:\> java FontCheckTest7 | findstr /i Tamil
0xB82: TAMIL SIGN ANUSVARA [Latha,Vijaya]
0xB83: TAMIL SIGN VISARGA [Latha,Vijaya]
0xB85: TAMIL LETTER A [Latha,Vijaya]
0xB86: TAMIL LETTER AA [Latha,Vijaya]
0xB87: TAMIL LETTER I [Latha,Vijaya]
0xB88: TAMIL LETTER II [Latha,Vijaya]
0xB89: TAMIL LETTER U [Latha,Vijaya]
0xB8A: TAMIL LETTER UU [Latha,Vijaya]
0xB8E: TAMIL LETTER E [Latha,Vijaya]
0xB8F: TAMIL LETTER EE [Latha,Vijaya]
0xB90: TAMIL LETTER AI [Latha,Vijaya]
0xB92: TAMIL LETTER O [Latha,Vijaya]
0xB93: TAMIL LETTER OO [Latha,Vijaya]
...
TESTCASE
--------
import java.awt.*;
import java.util.*;
public class FontCheckTest7 {
public static void main(String[] args) throws Exception {
Font font = new Font("Dialog", Font.PLAIN, 12);
Font[] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
for (int i=Character.MIN_VALUE; i<=Character.MAX_VALUE; i++) {
if (!Character.isDefined(i)) continue;
if (Character.isHighSurrogate((char)i) || Character.isLowSurrogate((char)i)) continue;
String s =Character.UnicodeBlock.of(i).toString();
if (s.indexOf("PRIVATE_USE_AREA") > -1) continue;
if (s.indexOf("VARIATION_SELECTORS") > -1) continue;
if (!font.canDisplay(i)) {
TreeSet<String> list = new TreeSet<String>();
for (int j=0; j<fonts.length; j++) {
if (fonts[j].canDisplay(i)) {
list.add(fonts[j].getFamily(Locale.ENGLISH));
}
}
StringBuffer fname = new StringBuffer();
for (String family : list) fname.append(","+family);
System.out.printf("0x%X: %s%s%n", i, Character.getName(i), fname.length() != 0 ? " ["+fname.substring(1)+"]" : "");
}
}
}
}
SUGGESTED FIX
-------------
Diffs relative to 7u11:
--- C:/temp/jdk7_11/jdk1.7.0_11/jre/lib/fontconfig.properties.src Sat Jan 12 02:37:28 2013
+++ C:/temp/jdk7_11/jdk1.7.0_11/jre/lib/fontconfig.properties Tue Jan 22 11:30:11 2013
@@ -43,6 +43,12 @@
allfonts.thai=Lucida Sans Regular
allfonts.georgian=Sylfaen
+allfonts.gujarati=Shruti
+allfonts.kannada=Tunga
+allfonts.gurmuhi=Raavi
+allfonts.tamil=Latha
+allfonts.telugu=Gautami
+
serif.plain.alphabetic=Times New Roman
serif.plain.chinese-ms950=MingLiU
serif.plain.chinese-ms950-extb=MingLiU-ExtB
@@ -238,7 +244,8 @@
sequence.fallback=lucida,\
chinese-ms950,chinese-hkscs,chinese-ms936,chinese-gb18030,\
- japanese,korean,chinese-ms950-extb,chinese-ms936-extb,georgian
+ japanese,korean,chinese-ms950-extb,chinese-ms936-extb,georgian,\
+ devanagari,gurmuhi,gujarati,tamil,telugu,kannada
# Exclusion Ranges
@@ -298,3 +305,9 @@
filename.Wingdings=WINGDING.TTF
filename.Sylfaen=sylfaen.ttf
+
+filename.Shruti=SHRUTI.TTF
+filename.Tunga=TUNGA.TTF
+filename.Raavi=RAAVI.TTF
+filename.Latha=LATHA.TTF
+filename.Gautami=GAUTAMI.TTF
--------
Changes to fontconfig.properties required on Windows
OPERATING SYSTEM
----------------
Windows 7 x64
Windows XP
FULL JDK VERSION
----------------
java version "1.7.0_07"
Java(TM) SE Runtime Environment (build 1.7.0_07-b10)
Java HotSpot(TM) Client VM (build 23.3-b01, mixed mode)
DESCRIPTION from Licensee
-------------------------
With the current fontconfig.properties file, no characters are displayed for the following Unicode ranges by logical fonts such as Dialog:
Gurmukhi, Gujarati, Tamil, Telugu, Kannada
The following Windows fonts should be added to the fallback sequence in fontconfig.properties:
* Raavi (raavi.ttf)
* Shruti (shruti.ttf)
* Latha (latha.ttf)
* Vijaya (vijaya.ttf)
* Gautami (gautami.ttf)
* Vani (Vani.ttf)
* Tunga (tunga.ttf)
Because these fonts can display some of the characters in these Unicode ranges.
REPRODUCTION INSTRUCTIONS
-------------------------
To see this situation, please apply following patch into FontPanel.java for demo\jfc\Font2DTest\src.zip
============================================================================================
--- demo/jfc/Font2DTest/src/FontPanel.java.orig Wed Aug 29 12:09:42 2012
+++ demo/jfc/Font2DTest/src/FontPanel.java Sat Sep 15 10:11:07 2012
@@ -1119,7 +1119,9 @@
currMouseOverChar = mouseOverChar;
/// Update status bar
f2dt.fireChangeStatus( "Pointing to" + MS_OPENING[textToUse] +
- modeSpecificNumStr( mouseOverChar ), false );
+ modeSpecificNumStr( mouseOverChar ) +
+ (null == Character.getName(mouseOverChar) ?
+ "" : " ("+Character.getName(mouseOverChar)+")"), false );
return true;
}
}
============================================================================================
Now follow these steps:
1. Apply above patch and compile and run Font2DTest
2. On Font, select "Dialog"
3. On "Range" JComboBox, select "Tamil"
4. Nothing displayed, on bottom area
5. On Font, select "Latha"
6. Some characters are displayed, and square characters are displayed
This square character means no font glyph is assigned or no character
is defined. Please move mouse cursor on square character, If you can
see glyph name, this character is defined on Unicode
The attached testcase demonstrates that the characters are in fact present in an example font (Dialog):
java FontCheckTest7 | findstr /i Gurmukhi
java FontCheckTest7 | findstr /i Gujarati
java FontCheckTest7 | findstr /i Tamil
java FontCheckTest7 | findstr /i Telugu
java FontCheckTest7 | findstr /i Kannada
For example, the Latha and Vijaya fonts have glyphs for Tamil:
c:\> java FontCheckTest7 | findstr /i Tamil
0xB82: TAMIL SIGN ANUSVARA [Latha,Vijaya]
0xB83: TAMIL SIGN VISARGA [Latha,Vijaya]
0xB85: TAMIL LETTER A [Latha,Vijaya]
0xB86: TAMIL LETTER AA [Latha,Vijaya]
0xB87: TAMIL LETTER I [Latha,Vijaya]
0xB88: TAMIL LETTER II [Latha,Vijaya]
0xB89: TAMIL LETTER U [Latha,Vijaya]
0xB8A: TAMIL LETTER UU [Latha,Vijaya]
0xB8E: TAMIL LETTER E [Latha,Vijaya]
0xB8F: TAMIL LETTER EE [Latha,Vijaya]
0xB90: TAMIL LETTER AI [Latha,Vijaya]
0xB92: TAMIL LETTER O [Latha,Vijaya]
0xB93: TAMIL LETTER OO [Latha,Vijaya]
...
TESTCASE
--------
import java.awt.*;
import java.util.*;
public class FontCheckTest7 {
public static void main(String[] args) throws Exception {
Font font = new Font("Dialog", Font.PLAIN, 12);
Font[] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
for (int i=Character.MIN_VALUE; i<=Character.MAX_VALUE; i++) {
if (!Character.isDefined(i)) continue;
if (Character.isHighSurrogate((char)i) || Character.isLowSurrogate((char)i)) continue;
String s =Character.UnicodeBlock.of(i).toString();
if (s.indexOf("PRIVATE_USE_AREA") > -1) continue;
if (s.indexOf("VARIATION_SELECTORS") > -1) continue;
if (!font.canDisplay(i)) {
TreeSet<String> list = new TreeSet<String>();
for (int j=0; j<fonts.length; j++) {
if (fonts[j].canDisplay(i)) {
list.add(fonts[j].getFamily(Locale.ENGLISH));
}
}
StringBuffer fname = new StringBuffer();
for (String family : list) fname.append(","+family);
System.out.printf("0x%X: %s%s%n", i, Character.getName(i), fname.length() != 0 ? " ["+fname.substring(1)+"]" : "");
}
}
}
}
SUGGESTED FIX
-------------
Diffs relative to 7u11:
--- C:/temp/jdk7_11/jdk1.7.0_11/jre/lib/fontconfig.properties.src Sat Jan 12 02:37:28 2013
+++ C:/temp/jdk7_11/jdk1.7.0_11/jre/lib/fontconfig.properties Tue Jan 22 11:30:11 2013
@@ -43,6 +43,12 @@
allfonts.thai=Lucida Sans Regular
allfonts.georgian=Sylfaen
+allfonts.gujarati=Shruti
+allfonts.kannada=Tunga
+allfonts.gurmuhi=Raavi
+allfonts.tamil=Latha
+allfonts.telugu=Gautami
+
serif.plain.alphabetic=Times New Roman
serif.plain.chinese-ms950=MingLiU
serif.plain.chinese-ms950-extb=MingLiU-ExtB
@@ -238,7 +244,8 @@
sequence.fallback=lucida,\
chinese-ms950,chinese-hkscs,chinese-ms936,chinese-gb18030,\
- japanese,korean,chinese-ms950-extb,chinese-ms936-extb,georgian
+ japanese,korean,chinese-ms950-extb,chinese-ms936-extb,georgian,\
+ devanagari,gurmuhi,gujarati,tamil,telugu,kannada
# Exclusion Ranges
@@ -298,3 +305,9 @@
filename.Wingdings=WINGDING.TTF
filename.Sylfaen=sylfaen.ttf
+
+filename.Shruti=SHRUTI.TTF
+filename.Tunga=TUNGA.TTF
+filename.Raavi=RAAVI.TTF
+filename.Latha=LATHA.TTF
+filename.Gautami=GAUTAMI.TTF
Attachments
Issue Links
- backported by
-
JDK-8135150 Changes to fontconfig.properties required on Windows
- Closed
- duplicates
-
JDK-8208179 Devanagari not shown with logical fonts on Windows after removal of Lucida Sans from JDK
- Resolved
- relates to
-
JDK-8031992 Add Kannada support to the JDK
- Resolved