blob: a7df1c9cc3482ccfb022cfa5a00951d53e919a1b [file] [log] [blame]
/*
*******************************************************************************
* Copyright (C) 1998-2003, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*
* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptTagModuleWriter.java,v $
* $Date: 2003/06/03 18:49:32 $
* $Revision: 1.6 $
*
*******************************************************************************
*/
package com.ibm.icu.dev.tool.layout;
public class ScriptTagModuleWriter extends ModuleWriter
{
private int scriptTag(String tag)
{
int result = 0;
for (int i = 0; i < 4; i += 1) {
result <<= 8;
result += (int) (tag.charAt(i) & 0xFF);
}
return result;
}
public ScriptTagModuleWriter(ScriptData theScriptData, LanguageData theLanguageData)
{
super(theScriptData, theLanguageData);
}
public void writeHeaderFile(String fileName)
{
int min = scriptData.getMinScript();
int max = scriptData.getMaxScript();
openFile(fileName);
writeHeader();
output.println(hPreamble);
for (int script = min; script <= max; script += 1) {
output.print("const LETag ");
output.print(scriptData.getScriptTagLabel(script));
output.print("ScriptTag = ");
output.print(scriptData.makeScriptTag(script));
output.print("; /* '");
output.print(scriptData.getScriptTag(script));
output.print("' (");
output.print(scriptData.getScriptName(script));
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.getLanguageTag(language));
output.print("' (");
output.print(languageData.getLanguageName(language));
output.println(") */");
}
output.println(hPostamble);
closeFile();
}
public void writeCPPFile(String fileName)
{
int min = scriptData.getMinScript();
int max = scriptData.getMaxScript();
openFile(fileName);
writeHeader();
output.println(cppPreamble);
for (int script = min; script <= max; script += 1) {
String tag = scriptData.getScriptTag(script);
output.print(" ");
output.print(tag);
output.print("ScriptTag");
output.print((script == max? " " : ","));
output.print(" /* '");
output.print(tag);
output.print("' (");
output.print(scriptData.getScriptName(script));
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();
}
public void writeScriptTags(String fileName)
{
writeHeaderFile(fileName + ".h");
writeCPPFile(fileName + ".cpp");
}
private static final String hPreamble =
"#ifndef __SCRIPTANDLANGUAGES_H\n" +
"#define __SCRIPTANDLANGUAGES_H\n" +
"\n" +
"/**\n" +
" * \\file\n" +
" * \\internal\n" +
" */\n" +
"\n" +
"#include \"LETypes.h\"\n" +
"\n" +
"U_NAMESPACE_BEGIN\n";
private static final String hScriptPostamble =
"\n" +
"const LETag nullScriptTag = 0x00000000; /* '' (NULL) */\n" +
"\n";
private static final String hPostamble =
"\n" +
"\n" +
"U_NAMESPACE_END\n" +
"#endif";
private static final String cppPreamble =
"#include \"LETypes.h\"\n" +
"#include \"ScriptAndLanguageTags.h\"\n" +
"#include \"OpenTypeLayoutEngine.h\"\n" +
"\n" +
"U_NAMESPACE_BEGIN\n" +
"\n" +
"const LETag OpenTypeLayoutEngine::scriptTags[] = {";
private static final String cppScriptPostamble =
"};\n" +
"\n" +
"const LETag OpenTypeLayoutEngine::languageTags[] = {";
private static final String cppPostamble =
"};\n" +
"\n" +
"U_NAMESPACE_END";
}