changeset 55361:1e6f7f30943d

8208179: Devanagari not shown with logical fonts on Windows after removal of Lucida Sans from JDK Reviewed-by: jdv, naoto
author prr
date Fri, 26 Apr 2019 12:31:37 -0700
parents 3464146f4a1c
children 6b1bac001aaf
files make/data/fontconfig/windows.fontconfig.properties src/java.desktop/share/classes/sun/font/SunFontManager.java test/jdk/java/awt/font/WindowsIndicFonts.java
diffstat 3 files changed, 113 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/make/data/fontconfig/windows.fontconfig.properties	Thu Apr 25 15:18:59 2019 -0700
+++ b/make/data/fontconfig/windows.fontconfig.properties	Fri Apr 26 12:31:37 2019 -0700
@@ -37,7 +37,17 @@
 allfonts.chinese-hkscs=MingLiU_HKSCS
 allfonts.chinese-ms950-extb=MingLiU-ExtB
 allfonts.devanagari=Mangal
+allfonts.bengali=Vrinda
+allfonts.gujarati=Shruti
+allfonts.gurmukhi=Raavi
 allfonts.kannada=Tunga
+allfonts.malayalam=Kartika
+allfonts.oriya=Kalinga
+allfonts.sinhala=Iskoola Pota
+allfonts.tamil=Latha
+allfonts.telugu=Gautami
+allfonts.khmer=Khmer UI
+allfonts.mongolian=Mongolian Baiti
 allfonts.dingbats=Wingdings
 allfonts.symbol=Symbol
 allfonts.symbols=Segoe UI Symbol
@@ -219,7 +229,7 @@
 sequence.dialoginput.x-MS950-HKSCS-XP=alphabetic,chinese-ms950,chinese-hkscs,dingbats,symbol,chinese-ms950-extb
 
 sequence.allfonts.UTF-8.hi=alphabetic/1252,devanagari,dingbats,symbol
-sequence.allfonts.UTF-8.ja=alphabetic,japanese,devanagari,dingbats,symbol
+sequence.allfonts.UTF-8.ja=alphabetic,japanese,dingbats,symbol
 
 sequence.allfonts.windows-1255=hebrew,alphabetic/1252,dingbats,symbol
 
@@ -239,7 +249,9 @@
 
 sequence.fallback=symbols,\
                   chinese-ms950,chinese-hkscs,chinese-ms936,chinese-gb18030,\
-                  japanese,korean,chinese-ms950-extb,chinese-ms936-extb,georgian,kannada
+                  japanese,korean,chinese-ms950-extb,chinese-ms936-extb,\
+                  georgian,devanagari,bengali,gujarati,gurmukhi,kannada,\
+                  malayalam,oriya,sinhala,tamil,telugu,thai,khmer,mongolian
 
 # Exclusion Ranges
 
@@ -293,9 +305,19 @@
 filename.Batang=batang.TTC
 filename.GulimChe=gulim.TTC
 
+filename.Gautami=gautami.ttf
+filename.Iskoola_Pota=iskpota.ttf
+filename.Kalinga=kalinga.ttf
+filename.Kartika=kartika.ttf
+filename.Latha=latha.ttf
+filename.Mangal=MANGAL.TTF
+filename.Raavi=raavi.ttf
+filename.Shruti=shruti.ttf
+filename.Tunga=TUNGA.TTF
+filename.Vrinda=vrinda.ttf
 filename.DokChampa=dokchamp.ttf
-filename.Mangal=MANGAL.TTF
-filename.Tunga=TUNGA.TTF
+filename.Khmer_UI=KhmerUI.ttf
+filename.Mongolian_Baiti=monbaiti.ttf
 filename.Symbol=SYMBOL.TTF
 filename.Wingdings=WINGDING.TTF
 
--- a/src/java.desktop/share/classes/sun/font/SunFontManager.java	Thu Apr 25 15:18:59 2019 -0700
+++ b/src/java.desktop/share/classes/sun/font/SunFontManager.java	Fri Apr 26 12:31:37 2019 -0700
@@ -1981,6 +1981,9 @@
                 font = findDeferredFont(name, style);
             }
             if (font == null) {
+                font = findFontFromPlatform(lowerCaseName, style);
+            }
+            if (font == null) {
                 font = family.getFont(style);
             }
             if (font == null) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/awt/font/WindowsIndicFonts.java	Fri Apr 26 12:31:37 2019 -0700
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+/*
+ * @test
+ * @bug 8208179
+ * @summary Verifies logical fonts support Indic + other Asian code points
+ * @requires (os.family == "windows")
+ */
+
+/*
+ * This isn't just testing Indic fonts, a few other Asian scripts are
+ * also being verified.
+ * Oracle JDK for Windows had supported Devanagari and Thai in the logical
+ * fonts using a proprietary font, since Windows did not have such fonts.
+ * Since that was first added Microsoft added into Windows 7 a
+ * number of fonts to support Indic + other Asian scripts.
+ * By referencing these in the fontconfig.properties files we can enure that
+ * these scripts are supported by the logical fonts when using OpenJDK for
+ * Windows.
+ * The test here just verifies that at least one required code point from each
+ * of these scripts is available to make sure we don't regress, or to catch
+ * and understand cases where those fonts may not be installed.
+ */
+import java.awt.Font;
+
+public class WindowsIndicFonts {
+
+  static boolean failed = false;
+  static Font dialog = new Font(Font.DIALOG, Font.PLAIN, 12);
+
+  public static void main(String args[]) {
+
+     if (!System.getProperty("os.name").toLowerCase().contains("windows")) {
+         return;
+     }
+
+     test("\u0905", "Devanagari"); // from Mangal font
+     test("\u0985", "Bengali");    // from Vrinda font
+     test("\u0a05", "Gurmukhi");   // from Raavi font
+     test("\u0a85", "Gujurati");   // from Shruti font
+     test("\u0b05", "Oriya");      // from Kalinga font
+     test("\u0b85", "Tamil");      // from Latha font
+     test("\u0c05", "Telugu");     // from Gautami font
+     test("\u0c85", "Kannada");    // from Tunga font
+     test("\u0d05", "Malayalam");  // from Kartika font
+     test("\u0c05", "Sinhala");    // from Iskoola Pota font
+     test("\u0e05", "Thai");       // from DokChampa font
+     test("\u0e87", "Lao");        // from DokChampa font
+     test("\u0e05", "Khmer");      // from Khmer UI font
+     test("\u1820", "Mongolian");  // from Mongolian Baiti font
+
+     if (failed) {
+         throw new RuntimeException("Missing support for a script");
+     }
+  }
+
+  static void test(String text, String script) {
+     if (dialog.canDisplayUpTo(text) != -1) {
+         failed = true;
+         System.out.println("No codepoint for " + script);
+     }
+  }
+
+}