blob: 6d77f709d8f59fdb03fe8f8ba39e50b8f352832f [file] [log] [blame]
/*
*******************************************************************************
* Copyright (C) 1998-2006, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*/
package com.ibm.icu.dev.tool.layout;
public class ScriptTagModuleWriter extends ScriptModuleWriter
{
public ScriptTagModuleWriter(ScriptData theScriptData, LanguageData theLanguageData)
{
super(theScriptData, theLanguageData);
}
private void writeTagValueHeader(TagValueData data, String kind)
{
int min = data.getMinValue();
int max = data.getMaxValue();
for (int value = min; value <= max; value += 1) {
output.print("const LETag ");
output.print(data.getTagLabel(value));
output.print(kind);
output.print("Tag = ");
output.print(data.makeTag(value));
output.print("; /* '");
output.print(data.getTag(value));
output.print("' (");
output.print(data.getName(value));
output.println(") */");
}
}
public void writeHeaderFile(String fileName)
{
openFile(fileName);
writeHeader("__SCRIPTANDLANGUAGES_H", hIncludes, hPreamble);
writeTagValueHeader(scriptData, "Script");
output.println(hScriptPostamble);
writeTagValueHeader(languageData, "Language");
output.println(hPostamble);
closeFile();
}
private void writeTagValueCPP(TagValueData data, String kind)
{
int min = data.getMinValue();
int max = data.getMaxValue();
for (int value = min; value <= max; value += 1) {
output.print(" ");
output.print(data.getTagLabel(value));
output.print(kind);
output.print("Tag");
output.print((value == max? " " : ","));
output.print(" /* '");
output.print(data.getTag(value));
output.print("' (");
output.print(data.getName(value));
output.println(") */");
}
}
public void writeCPPFile(String fileName)
{
openFile(fileName);
writeHeader(null, cppIncludes);
output.println(cppPreamble);
writeTagValueCPP(scriptData, "Script");
output.println(cppScriptPostamble);
writeTagValueCPP(languageData, "Language");
output.println(cppPostamble);
writeTrailer();
closeFile();
}
public void writeScriptTags(String fileName)
{
writeHeaderFile(fileName + ".h");
writeCPPFile(fileName + ".cpp");
}
private static final String[] hIncludes = {"LETypes.h"};
private static final String hPreamble =
"/**\n" +
" * \\file\n" +
" * \\internal\n" +
" */\n" +
"\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[] cppIncludes =
{"LETypes.h", "ScriptAndLanguageTags.h", "OpenTypeLayoutEngine.h"};
private static final String cppPreamble =
"const LETag OpenTypeLayoutEngine::scriptTags[] = {";
private static final String cppScriptPostamble =
"};\n" +
"\n" +
"const LETag OpenTypeLayoutEngine::languageTags[] = {";
private static final String cppPostamble =
"};\n";
}