8073893: Enable charsets build system to configure euc_tw into java.base module/sun.nio.cs

To enable charsets build system to configure euc_tw into java.base module/sun.nio.cs

Reviewed-by: alanb, mchung
This commit is contained in:
Xueming Shen 2015-02-25 13:04:31 -08:00
parent c90f8b8839
commit ece4e20848
14 changed files with 66 additions and 32 deletions
jdk
make
src
java.desktop/unix/classes/sun/awt/motif
jdk.charsets/share/classes/sun/nio/cs/ext
test/sun/nio/cs

@ -503,7 +503,7 @@ charset x-windows-874 MS874
charset x-EUC-TW EUC_TW
package sun.nio.cs.ext
type source
type template
alias euc_tw # JDK historical
alias euctw
alias cns11643
@ -1816,3 +1816,17 @@ charset x-JIS0212_MS5022X JIS_X_0212_MS5022X
ascii false
minmax 0x21 0x7e 0x21 0x7e
internal true # "internal implementation
########################################################
#
# platform specific charsets, to be registered into spi
##
########################################################
charset x-COMPOUND_TEXT COMPOUND_TEXT
package sun.nio.cs.ext
type source
os unix
alias COMPOUND_TEXT # JDK historical
alias x11-compound_text
alias x-compound-text

@ -9,6 +9,7 @@ EUC_KR
EUC_JP
EUC_JP_LINUX
EUC_JP_Open
EUC_TW
GBK
ISO_8859_11
ISO_8859_3

@ -50,7 +50,9 @@ $(CHARSET_DONE_CS)-extcs: $(CHARSET_DATA_DIR)/charsets \
$(TOOL_CHARSETMAPPING) $(CHARSET_DATA_DIR) $(CHARSET_GENSRC_JAVA_DIR_CS) \
extcs charsets $(CHARSET_STANDARD_OS) \
$(CHARSET_EXTENDED_JAVA_TEMPLATES) \
$(CHARSET_EXTENDED_JAVA_DIR) $(LOG_INFO)
$(CHARSET_EXTENDED_JAVA_DIR) \
$(CHARSET_COPYRIGHT_HEADER) \
$(LOG_INFO)
$(TOUCH) '$@'
$(CHARSET_DONE_CS)-hkscs: $(CHARSET_COPYRIGHT_HEADER)/HKSCS.java \

@ -32,6 +32,7 @@ CHARSET_DATA_DIR := $(JDK_TOPDIR)/make/data/charsetmapping
CHARSET_EXTSRC_DIR := $(JDK_TOPDIR)/src/jdk.charsets/share/classes/sun/nio/cs/ext
CHARSET_GENSRC_JAVA_DIR_BASE := $(SUPPORT_OUTPUTDIR)/gensrc/java.base/sun/nio/cs
CHARSET_DONE_BASE := $(CHARSET_GENSRC_JAVA_DIR_BASE)/_the.charsetmapping
CHARSET_COPYRIGHT_HEADER := $(JDK_TOPDIR)/make/src/classes/build/tools/charsetmapping
CHARSET_TEMPLATES := \
$(CHARSET_DATA_DIR)/SingleByte-X.java.template \
$(CHARSET_DATA_DIR)/DoubleByte-X.java.template
@ -46,7 +47,9 @@ $(CHARSET_DONE_BASE)-stdcs: $(CHARSET_DATA_DIR)/charsets \
$(MKDIR) -p $(@D)
$(TOOL_CHARSETMAPPING) $(CHARSET_DATA_DIR) $(CHARSET_GENSRC_JAVA_DIR_BASE) \
stdcs charsets $(CHARSET_STANDARD_OS) \
$(CHARSET_STANDARD_JAVA_TEMPLATES) $(CHARSET_EXTSRC_DIR) $(LOG_INFO)
$(CHARSET_STANDARD_JAVA_TEMPLATES) $(CHARSET_EXTSRC_DIR) \
$(CHARSET_COPYRIGHT_HEADER) \
$(LOG_INFO)
$(TOUCH) '$@'
GENSRC_JAVA_BASE += $(CHARSET_DONE_BASE)-stdcs

@ -31,6 +31,7 @@ class Charset {
String csName;
String hisName;
String type;
String os;
boolean isASCII;
int b1Min;
int b1Max;

@ -80,12 +80,12 @@ public class EUC_TW {
private static Pattern euctw = Pattern.compile("(?:8ea)?(\\p{XDigit}++)\\s++(\\p{XDigit}++)?\\s*+.*");
static void genClass(String args[]) throws Exception
static void genClass(String pkg, String args[]) throws Exception
{
InputStream is = new FileInputStream(new File(args[0], "euc_tw.map"));
PrintStream ps = new PrintStream(new File(args[1], "EUC_TWMapping.java"),
"ISO-8859-1");
String copyright = getCopyright(new File(args[3]));
String copyright = getCopyright(new File(args[7], "EUC_TW.java"));
// ranges of byte1 and byte2, something should come from a "config" file
@ -128,7 +128,7 @@ public class EUC_TW {
out.format(copyright);
out.format("%n// -- This file was mechanically generated: Do not edit! -- //%n");
out.format("package sun.nio.cs.ext;%n%n");
out.format("package %s;%n%n", pkg);
out.format("class EUC_TWMapping {%n%n");
// boundaries

@ -42,7 +42,7 @@ public class HKSCS {
private static Pattern hkscs =
Pattern.compile("(?:0x)?+(\\p{XDigit}++)\\s++(?:0x|U\\+)?+(\\p{XDigit}++)?\\s*+(?:0x|U\\+)?(\\p{XDigit}++)?\\s*+.*");
static void genClass2008(String srcDir, String dstDir, String pkgName)
static void genClass2008(String srcDir, String dstDir, String pkgName, File copyright)
throws Exception
{
// hkscs2008
@ -53,10 +53,11 @@ public class HKSCS {
pkgName,
"HKSCSMapping",
true,
"");
getCopyright(copyright));
}
static void genClassXP(String srcDir, String dstDir, String pkgName)
static void genClassXP(String srcDir, String dstDir, String pkgName, File copyright)
throws Exception
{
genClass0(new FileInputStream(new File(srcDir, "HKSCS_XP.map")),
@ -66,7 +67,7 @@ public class HKSCS {
pkgName,
"HKSCS_XPMapping",
false,
"");
getCopyright(copyright));
}
static void genClass2001(String args[]) throws Exception {

@ -41,6 +41,7 @@ public class Main {
int OS = 4;
int TEMPLATE = 5;
int EXT_SRC = 6;
int COPYRIGHT_SRC = 7;
if (args.length < 3 ) {
System.out.println("Usage: java -jar charsetmapping.jar src dst spiType charsets os [template]");
@ -54,6 +55,7 @@ public class Main {
String[] osStdcs = getOSStdCSList(new File(args[SRC_DIR], args[OS]));
boolean hasBig5_HKSCS = false;
boolean hasMS950_HKSCS_XP = false;
boolean hasEUC_TW = false;
for (String name : osStdcs) {
Charset cs = charsets.get(name);
if (cs != null) {
@ -63,6 +65,8 @@ public class Main {
hasBig5_HKSCS = true;
} else if (name.equals("MS950_HKSCS_XP")) {
hasMS950_HKSCS_XP = true;
} else if (name.equals("EUC_TW")) {
hasEUC_TW = true;
}
}
for (Charset cs : charsets.values()) {
@ -89,19 +93,28 @@ public class Main {
}
}
// provider StandardCharsets.java / ExtendedCharsets.java
SPI.genClass(args[TYPE], charsets, args[SRC_DIR], args[DST_DIR], args[TEMPLATE]);
SPI.genClass(args[TYPE], charsets,
args[SRC_DIR], args[DST_DIR],
args[TEMPLATE],
args[OS].endsWith("windows") ? "windows" : "unix");
// HKSCSMapping2008/XP.java goes together with Big5/MS950XP_HKSCS
if (isStandard && hasBig5_HKSCS || isExtended && !hasBig5_HKSCS) {
HKSCS.genClass2008(args[SRC_DIR], args[DST_DIR],
isStandard ? "sun.nio.cs" : "sun.nio.cs.ext");
isStandard ? "sun.nio.cs" : "sun.nio.cs.ext",
new File(args[COPYRIGHT_SRC], "HKSCS.java"));
}
if (isStandard && hasMS950_HKSCS_XP || isExtended && !hasMS950_HKSCS_XP) {
HKSCS.genClassXP(args[SRC_DIR], args[DST_DIR],
isStandard ? "sun.nio.cs" : "sun.nio.cs.ext");
isStandard ? "sun.nio.cs" : "sun.nio.cs.ext",
new File(args[COPYRIGHT_SRC], "HKSCS.java"));
}
if (isStandard && hasEUC_TW) {
EUC_TW.genClass("sun.nio.cs", args);
}
if (!isStandard && !hasEUC_TW) {
EUC_TW.genClass("sun.nio.cs.ext", args);
}
} else if ("euctw".equals(args[TYPE])) {
EUC_TW.genClass(args);
} else if ("sjis0213".equals(args[TYPE])) {
JIS0213.genClass(args);
} else if ("hkscs".equals(args[TYPE])) {
@ -157,6 +170,9 @@ public class Main {
case "type":
cs.type = tokens[2];
break;
case "os":
cs.os = tokens[2];
break;
case "hisname":
cs.hisName = tokens[2];
break;

@ -33,8 +33,10 @@ import java.util.Scanner;
public class SPI {
public static void genClass(String type, LinkedHashMap<String, Charset> charsets,
String srcDir, String dstDir, String template)
public static void genClass(String type,
LinkedHashMap<String, Charset> charsets,
String srcDir, String dstDir, String template,
String os)
throws Exception
{
try (Scanner s = new Scanner(new File(template));
@ -50,7 +52,8 @@ public class SPI {
charsets.values()
.stream()
.filter(cs -> cs.pkgName.equals("sun.nio.cs.ext") &&
!cs.isInternal)
!cs.isInternal &&
(cs.os == null || cs.os.equals(os)))
.forEach( cs -> {
out.printf(" charset(\"%s\", \"%s\",%n", cs.csName, cs.clzName);
out.printf(" new String[] {%n");

@ -28,7 +28,8 @@ package sun.awt.motif;
import java.nio.CharBuffer;
import java.nio.ByteBuffer;
import java.nio.charset.*;
import sun.nio.cs.ext.EUC_TW;
import sun.nio.cs.*;
import sun.nio.cs.ext.*;
public abstract class X11CNS11643 extends Charset {
private final int plane;

@ -23,7 +23,7 @@
* questions.
*/
package sun.nio.cs.ext;
package $PACKAGE$;
import java.io.*;
import java.nio.CharBuffer;
@ -79,7 +79,7 @@ public class EUC_TW extends Charset implements HistoricallyNamedCharset
*/
public EUC_TW() {
super("x-EUC-TW", ExtendedCharsets.aliasesFor("x-EUC-TW"));
super("x-EUC-TW", $ALIASES$);
}
public String historicalName() {

@ -222,16 +222,6 @@ public class ExtendedCharsets extends AbstractCharsetProvider {
}
}
String osName = getProperty("os.name");
if ("SunOS".equals(osName) || "Linux".equals(osName) || "AIX".equals(osName)
|| osName.contains("OS X")) {
charset("x-COMPOUND_TEXT", "COMPOUND_TEXT",
new String[] {
"COMPOUND_TEXT", // JDK historical
"x11-compound_text",
"x-compound-text"
});
}
initialized = true;
}

@ -35,6 +35,7 @@ import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CoderResult;
import sun.nio.cs.HistoricallyNamedCharset;
import sun.nio.cs.*;
public class ISO2022_CN_CNS extends ISO2022 implements HistoricallyNamedCharset
{

@ -24,7 +24,8 @@
import java.nio.CharBuffer;
import java.nio.ByteBuffer;
import java.nio.charset.*;
import sun.nio.cs.ext.EUC_TW;
import sun.nio.cs.*;
import sun.nio.cs.ext.*;
public abstract class X11CNS11643 extends Charset {
private final int plane;