diff --git a/icu4j/src/com/ibm/icu/dev/tool/layout/LanguageData.java b/icu4j/src/com/ibm/icu/dev/tool/layout/LanguageData.java new file mode 100644 index 00000000000..342295b71ec --- /dev/null +++ b/icu4j/src/com/ibm/icu/dev/tool/layout/LanguageData.java @@ -0,0 +1,130 @@ +/* + ******************************************************************************* + * Copyright (C) 1998-2003, International Business Machines Corporation and * + * others. All Rights Reserved. * + ******************************************************************************* + * + * Created on Apr 4, 2003 + * + * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/icu/dev/tool/layout/LanguageData.java,v $ $Date: 2003/04/15 01:23:49 $ $Revision: 1.1 $ + * + ******************************************************************************* + */ +package com.ibm.icu.dev.tool.layout; + +/** + * This class holds the list of languages. + * + * @author emader + * + */ +public class LanguageData +{ + public static class Record + { + private String tag; + private String name; + + public Record(String tag, String name) + { + this.tag = tag; + this.name = name; + } + + public String tag() + { + return tag; + } + + public String name() + { + return name; + } + } + + /* + * This is temporary data until there is some resolution between + * the OpenType language system tags and the ISO and RFC standards... + */ + private Record[] languages = + { + new Record("", "(Default)"), + new Record("ARA", "Arabic"), + new Record("ASM", "Assamese"), + new Record("BEN", "Bengali"), + new Record("FAR", "Farsi"), + new Record("GUJ", "Gujarati"), + new Record("HIN", "Hindi"), + new Record("IWR", "Hebrew"), + new Record("JII", "Yiddish"), + new Record("JAN", "Japanese"), + new Record("KAN", "Kannada"), + new Record("KOK", "Konkani"), + new Record("KOR", "Korean"), + new Record("KSH", "Kashmiri"), + new Record("MAL", "Malayalam (Traditional)"), + new Record("MAR", "Marathi"), + new Record("MLR", "Malayalam (Reformed)"), + new Record("MNI", "Manipuri"), + new Record("ORI", "Oriya"), + new Record("SAN", "Sanscrit"), + new Record("SND", "Sindhi"), + new Record("SNH", "Sinhalese"), + new Record("SYR", "Syriac"), + new Record("TAM", "Tamil"), + new Record("TEL", "Telugu"), + new Record("THA", "Thai"), + new Record("URD", "Urdu"), + new Record("ZHP", "Chinese (Phonetic)"), + new Record("ZHS", "Chinese (Simplified)"), + new Record("ZHT", "Chinese (Traditional)") + }; + + private int minLanguage = 0; + private int maxLanguage = languages.length - 1; + + public int getMinLanguage() + { + return minLanguage; + } + + public int getMaxLanguage() + { + return maxLanguage; + } + + public String getLanguageTag(int i) + { + if (i < minLanguage || i > maxLanguage) { + return null; + } + + return languages[i - minLanguage].tag(); + } + + public String getLanguageTagLabel(int i) + { + if (i < minLanguage || i > maxLanguage) { + return null; + } + + return TagUtilities.tagLabel(languages[i - minLanguage].tag()); + } + + public String makeLanguageTag(int i) + { + if (i < minLanguage || i > maxLanguage) { + return null; + } + + return TagUtilities.makeTag(languages[i - minLanguage].tag()); + } + + public String getLanguageName(int i) { + if (i < minLanguage || i > maxLanguage) { + return "UNKNOWN"; + } + + return languages[i - minLanguage].name(); + } +} diff --git a/icu4j/src/com/ibm/icu/dev/tool/layout/ModuleWriter.java b/icu4j/src/com/ibm/icu/dev/tool/layout/ModuleWriter.java index 5b3ca4b10f7..08317a566dd 100644 --- a/icu4j/src/com/ibm/icu/dev/tool/layout/ModuleWriter.java +++ b/icu4j/src/com/ibm/icu/dev/tool/layout/ModuleWriter.java @@ -5,8 +5,8 @@ ******************************************************************************* * * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/icu/dev/tool/layout/ModuleWriter.java,v $ - * $Date: 2003/01/14 19:05:23 $ - * $Revision: 1.1 $ + * $Date: 2003/04/15 01:23:49 $ + * $Revision: 1.2 $ * ******************************************************************************* */ @@ -18,9 +18,10 @@ import java.io.IOException; public class ModuleWriter { - public ModuleWriter(ScriptData theScriptData) + public ModuleWriter(ScriptData theScriptData, LanguageData theLanguageData) { scriptData = theScriptData; + languageData = theLanguageData; output = null; } @@ -59,17 +60,18 @@ public class ModuleWriter } protected ScriptData scriptData; + protected LanguageData languageData; protected PrintStream output; protected static final String moduleHeader = "/*\n" + - " * %W% %E%\n" + " *\n" + " * (C) Copyright IBM Corp. 1998 - 2003. All Rights Reserved.\n" + " *\n" + " * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS\n" + " * YOU REALLY KNOW WHAT YOU'RE DOING.\n" + " *\n" + + " * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/icu/dev/tool/layout/ModuleWriter.java,v $ $Date: 2003/04/15 01:23:49 $ $Revision: 1.2 $\n" + " */\n" + "\n"; } \ No newline at end of file diff --git a/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptData.java b/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptData.java index 45d460142f6..b6b1b5a2796 100644 --- a/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptData.java +++ b/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptData.java @@ -5,8 +5,8 @@ ******************************************************************************* * * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptData.java,v $ - * $Date: 2003/01/14 19:05:23 $ - * $Revision: 1.1 $ + * $Date: 2003/04/15 01:23:49 $ + * $Revision: 1.2 $ * ******************************************************************************* */ @@ -162,6 +162,20 @@ public class ScriptData return "zyyx"; } + public String getScriptTagLabel(int scriptCode) + { + return getScriptTag(scriptCode); + } + + public String makeScriptTag(int scriptCode) + { + if (scriptCode >= fMinScript && scriptCode <= fMaxScript) { + return TagUtilities.makeTag(fScriptTags[scriptCode - fMinScript]); + } else { + return "0x00000000"; + } + } + public String getScriptName(int scriptCode) { if (scriptCode >= fMinScript && scriptCode <= fMaxScript) { diff --git a/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptModuleWriter.java b/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptModuleWriter.java index 74d45eb0dd9..47917754981 100644 --- a/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptModuleWriter.java +++ b/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptModuleWriter.java @@ -5,8 +5,8 @@ ******************************************************************************* * * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptModuleWriter.java,v $ - * $Date: 2003/01/14 19:05:23 $ - * $Revision: 1.1 $ + * $Date: 2003/04/15 01:23:49 $ + * $Revision: 1.2 $ * ******************************************************************************* */ @@ -14,42 +14,72 @@ package com.ibm.icu.dev.tool.layout; public class ScriptModuleWriter extends ModuleWriter { - public ScriptModuleWriter(ScriptData scriptData) + public ScriptModuleWriter(ScriptData scriptData, LanguageData languageData) { - super(scriptData); + super(scriptData, languageData); } + + public void writeScriptHeader(String fileName) + { + int minScript = scriptData.getMinScript(); + int maxScript = scriptData.getMaxScript(); + + openFile(fileName); + writeHeader(); + output.println(scriptPreamble); + + for (int script = minScript; script <= maxScript; script += 1) { + output.print(" "); + output.print(scriptData.getScriptTag(script)); + output.print("ScriptCode = "); + + if (script < 10) { + output.print(" "); + } + + output.print(script); + output.println(","); + } + + output.println(); + output.print(" scriptCodeCount = "); + output.println(maxScript - minScript + 1); + + output.println(postamble); + closeFile(); + } - public void writeScriptHeader(String fileName) + public void writeLanguageHeader(String fileName) { - int minScript = scriptData.getMinScript(); - int maxScript = scriptData.getMaxScript(); + int minLanguage = languageData.getMinLanguage(); + int maxLanguage = languageData.getMaxLanguage(); openFile(fileName); writeHeader(); - output.println(preamble); + output.println(languagePreamble); - for (int script = minScript; script <= maxScript; script += 1) { + for (int language = minLanguage; language <= maxLanguage; language += 1) { output.print(" "); - output.print(scriptData.getScriptTag(script)); - output.print("ScriptCode = "); + output.print(languageData.getLanguageTagLabel(language).toLowerCase()); + output.print("LanguageCode = "); - if (script < 10) { + if (language < 10) { output.print(" "); } - output.print(script); + output.print(language); output.println(","); } output.println(); - output.print(" scriptCodeCount = "); - output.println(maxScript - minScript + 1); + output.print(" languageCodeCount = "); + output.println(maxLanguage - minLanguage + 1); output.println(postamble); closeFile(); } - private static final String preamble = + private static final String scriptPreamble = "#ifndef __LESCRIPTS_H\n" + "#define __LESCRIPTS_H\n" + "\n" + @@ -59,10 +89,27 @@ public class ScriptModuleWriter extends ModuleWriter " * Constants for Unicode script values, generated using\n" + " * ICU4J's UScript class.\n" + " *\n" + - " * @draft ICU 2.4\n" + + " * @draft ICU 2.6\n" + " */\n" + + "\n" + "enum ScriptCodes {"; + private static final String languagePreamble = + "#ifndef __LELANGUAGES_H\n" + + "#define __LELANGUAGES_H\n" + + "\n" + + "U_NAMESPACE_BEGIN\n" + + "\n" + + "/**\n" + + " * A provisional list of language codes. For now,\n" + + " * this is just a list of languages which the LayoutEngine\n" + + " * supports.\n" + + " *\n" + + " * @draft ICU 2.6\n" + + " */\n" + + "\n" + + "enum LanguageCodes {"; + private static final String postamble = "};\n" + "\n" + diff --git a/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptNameBuilder.java b/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptNameBuilder.java index bbab4db2b70..2804a80d61b 100644 --- a/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptNameBuilder.java +++ b/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptNameBuilder.java @@ -5,8 +5,8 @@ ******************************************************************************* * * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptNameBuilder.java,v $ - * $Date: 2003/01/14 19:05:23 $ - * $Revision: 1.1 $ + * $Date: 2003/04/15 01:23:49 $ + * $Revision: 1.2 $ * ******************************************************************************* */ @@ -23,11 +23,14 @@ public class ScriptNameBuilder public static void main(String[] args) { ScriptData scriptData = new ScriptData(); - ScriptModuleWriter scriptModuleWriter = new ScriptModuleWriter(scriptData); + LanguageData languageData = new LanguageData(); + + ScriptModuleWriter scriptModuleWriter = new ScriptModuleWriter(scriptData, languageData); scriptModuleWriter.writeScriptHeader("LEScripts.h"); + scriptModuleWriter.writeLanguageHeader("LELanguages.h"); - ScriptTagModuleWriter scriptTagModuleWriter = new ScriptTagModuleWriter(scriptData); + ScriptTagModuleWriter scriptTagModuleWriter = new ScriptTagModuleWriter(scriptData, languageData); scriptTagModuleWriter.writeScriptTags("ScriptAndLanguageTags"); diff --git a/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptRunModuleWriter.java b/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptRunModuleWriter.java index 999d8434259..98c6e63ee21 100644 --- a/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptRunModuleWriter.java +++ b/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptRunModuleWriter.java @@ -5,8 +5,8 @@ ******************************************************************************* * * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptRunModuleWriter.java,v $ - * $Date: 2003/01/14 19:05:23 $ - * $Revision: 1.1 $ + * $Date: 2003/04/15 01:23:49 $ + * $Revision: 1.2 $ * ******************************************************************************* */ @@ -19,7 +19,7 @@ public class ScriptRunModuleWriter extends ModuleWriter { public ScriptRunModuleWriter(ScriptData theScriptData) { - super(theScriptData); + super(theScriptData, null); } public void writeScriptRuns(String fileName) diff --git a/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptTagModuleWriter.java b/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptTagModuleWriter.java index b656d6583bb..dd1ceb23096 100644 --- a/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptTagModuleWriter.java +++ b/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptTagModuleWriter.java @@ -5,15 +5,13 @@ ******************************************************************************* * * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptTagModuleWriter.java,v $ - * $Date: 2003/01/14 19:05:23 $ - * $Revision: 1.1 $ + * $Date: 2003/04/15 01:23:49 $ + * $Revision: 1.2 $ * ******************************************************************************* */ package com.ibm.icu.dev.tool.layout; -import com.ibm.icu.impl.Utility; - public class ScriptTagModuleWriter extends ModuleWriter { @@ -29,32 +27,43 @@ public class ScriptTagModuleWriter extends ModuleWriter return result; } - public ScriptTagModuleWriter(ScriptData theScriptData) + public ScriptTagModuleWriter(ScriptData theScriptData, LanguageData theLanguageData) { - super(theScriptData); + super(theScriptData, theLanguageData); } public void writeHeaderFile(String fileName) { - int minScript = scriptData.getMinScript(); - int maxScript = scriptData.getMaxScript(); + int min = scriptData.getMinScript(); + int max = scriptData.getMaxScript(); openFile(fileName); writeHeader(); output.println(hPreamble); - for (int script = minScript; script <= maxScript; script += 1) { - String tag = scriptData.getScriptTag(script); - + for (int script = min; script <= max; script += 1) { output.print("const LETag "); - output.print(tag); - output.print("ScriptTag = 0x"); - output.print(Utility.hex(scriptTag(tag), 8)); - output.print("; /* '"); - output.print(tag); - output.print("' ("); + output.print(scriptData.getScriptTagLabel(script)); + output.print("ScriptTag = "); + output.print(scriptData.makeScriptTag(script)); + output.print("; /* "); output.print(scriptData.getScriptName(script)); - output.println(") */"); + output.println(" */"); + } + + output.println(hScriptPostamble); + + min = languageData.getMinLanguage(); + max = languageData.getMaxLanguage(); + + for (int language = min; language <= max; language += 1) { + output.print("const LETag "); + output.print(languageData.getLanguageTagLabel(language)); + output.print("LanguageTag = "); + output.print(languageData.makeLanguageTag(language)); + output.print("; /* "); + output.print(languageData.getLanguageName(language)); + output.println(" */"); } output.println(hPostamble); @@ -63,20 +72,20 @@ public class ScriptTagModuleWriter extends ModuleWriter public void writeCPPFile(String fileName) { - int minScript = scriptData.getMinScript(); - int maxScript = scriptData.getMaxScript(); + int min = scriptData.getMinScript(); + int max = scriptData.getMaxScript(); openFile(fileName); writeHeader(); output.println(cppPreamble); - for (int script = minScript; script <= maxScript; script += 1) { + for (int script = min; script <= max; script += 1) { String tag = scriptData.getScriptTag(script); output.print(" "); output.print(tag); output.print("ScriptTag"); - output.print((script == maxScript? " " : ",")); + output.print((script == max? " " : ",")); output.print(" /* '"); output.print(tag); output.print("' ("); @@ -84,6 +93,25 @@ public class ScriptTagModuleWriter extends ModuleWriter output.println(") */"); } + output.println(cppScriptPostamble); + + min = languageData.getMinLanguage(); + max = languageData.getMaxLanguage(); + + for (int language = min; language <= max; language += 1) { + String tag = languageData.getLanguageTag(language); + + output.print(" "); + output.print(languageData.getLanguageTagLabel(language)); + output.print("LanguageTag"); + output.print((language == max? " " : ",")); + output.print(" /* '"); + output.print(languageData.getLanguageTag(language)); + output.print("' ("); + output.print(languageData.getLanguageName(language)); + output.println(") */"); + } + output.println(cppPostamble); closeFile(); } @@ -93,7 +121,7 @@ public class ScriptTagModuleWriter extends ModuleWriter writeHeaderFile(fileName + ".h"); writeCPPFile(fileName + ".cpp"); } - + private static final String hPreamble = "#ifndef __SCRIPTANDLANGUAGES_H\n" + "#define __SCRIPTANDLANGUAGES_H\n" + @@ -104,15 +132,17 @@ public class ScriptTagModuleWriter extends ModuleWriter " */\n" + "\n" + "#include \"LETypes.h\"\n" + - "#include \"LEScripts.h\"\n" + "\n" + "U_NAMESPACE_BEGIN\n"; - private static final String hPostamble = + private static final String hScriptPostamble = "\n" + "const LETag nullScriptTag = 0x00000000; /* '' (NULL) */\n" + + "\n"; + + private static final String hPostamble = "\n" + - "const LETag noLangSysTag = 0x00000000; /* '' (NONE) */\n" + + "const LETag nullLanguageTag = 0x00000000; /* '' (NONE) */\n" + "\n" + "U_NAMESPACE_END\n" + "#endif"; @@ -126,6 +156,11 @@ public class ScriptTagModuleWriter extends ModuleWriter "\n" + "const LETag OpenTypeLayoutEngine::scriptTags[] = {"; + private static final String cppScriptPostamble = + "};\n" + + "\n" + + "const LETag OpenTypeLayoutEngine::languageTags[] = {"; + private static final String cppPostamble = "};\n" + "\n" + diff --git a/icu4j/src/com/ibm/icu/dev/tool/layout/TagUtilities.java b/icu4j/src/com/ibm/icu/dev/tool/layout/TagUtilities.java new file mode 100644 index 00000000000..ba678a8efee --- /dev/null +++ b/icu4j/src/com/ibm/icu/dev/tool/layout/TagUtilities.java @@ -0,0 +1,57 @@ +/* + ******************************************************************************* + * Copyright (C) 1998-2003, International Business Machines Corporation and * + * others. All Rights Reserved. * + ******************************************************************************* + * + * Created on Apr 14, 2003 + * + * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/icu/dev/tool/layout/TagUtilities.java,v $ $Date: 2003/04/15 01:23:49 $ $Revision: 1.1 $ + * + ******************************************************************************* + */ +package com.ibm.icu.dev.tool.layout; + +/** + * This class contains utility methods for dealing with + * four-letter tags. + * + * @author emader + * + */ +public class TagUtilities +{ + public static String makeTag(String tag) + { + if (tag == null || tag.length() == 0) { + return "0x00000000"; + } + + StringBuffer result = new StringBuffer("LE_MAKE_TAG("); + + for (int i = 0; i < 4; i += 1) { + if (i > 0) { + result.append(", "); + } + + result.append('\''); + result.append(i < tag.length()? tag.charAt(i) : ' '); + result.append('\''); + } + + result.append(")"); + + return result.toString(); + } + + public static String tagLabel(String tag) + { + if (tag == null || tag.length() == 0) { + return "default"; + } else { + return tag.toLowerCase(); + } + } + +} +