ICU-2253 Changes to generate langauge data as well as script data.

X-SVN-Rev: 11545
This commit is contained in:
Eric Mader 2003-04-15 01:23:49 +00:00
parent 7bf253f27f
commit 883a9b9000
8 changed files with 344 additions and 56 deletions

View file

@ -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();
}
}

View file

@ -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";
}

View file

@ -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) {

View file

@ -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 <code>UScript</code> 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" +

View file

@ -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");

View file

@ -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)

View file

@ -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" +

View file

@ -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();
}
}
}