001: /*
002: *******************************************************************************
003: * Copyright (C) 1998-2006, International Business Machines Corporation and *
004: * others. All Rights Reserved. *
005: *******************************************************************************
006: */
007: package com.ibm.icu.dev.tool.layout;
008:
009: public class ScriptTagModuleWriter extends ScriptModuleWriter {
010: public ScriptTagModuleWriter(ScriptData theScriptData,
011: LanguageData theLanguageData) {
012: super (theScriptData, theLanguageData);
013: }
014:
015: private void writeTagValueHeader(TagValueData data, String kind) {
016: int min = data.getMinValue();
017: int max = data.getMaxValue();
018:
019: for (int value = min; value <= max; value += 1) {
020: output.print("const LETag ");
021: output.print(data.getTagLabel(value));
022: output.print(kind);
023: output.print("Tag = ");
024: output.print(data.makeTag(value));
025: output.print("; /* '");
026: output.print(data.getTag(value));
027: output.print("' (");
028: output.print(data.getName(value));
029: output.println(") */");
030: }
031: }
032:
033: public void writeHeaderFile(String fileName) {
034: openFile(fileName);
035: writeHeader("__SCRIPTANDLANGUAGES_H", hIncludes, hPreamble);
036:
037: writeTagValueHeader(scriptData, "Script");
038:
039: output.println(hScriptPostamble);
040:
041: writeTagValueHeader(languageData, "Language");
042:
043: output.println(hPostamble);
044: closeFile();
045: }
046:
047: private void writeTagValueCPP(TagValueData data, String kind) {
048: int min = data.getMinValue();
049: int max = data.getMaxValue();
050:
051: for (int value = min; value <= max; value += 1) {
052: output.print(" ");
053: output.print(data.getTagLabel(value));
054: output.print(kind);
055: output.print("Tag");
056: output.print((value == max ? " " : ","));
057: output.print(" /* '");
058: output.print(data.getTag(value));
059: output.print("' (");
060: output.print(data.getName(value));
061: output.println(") */");
062: }
063: }
064:
065: public void writeCPPFile(String fileName) {
066: openFile(fileName);
067: writeHeader(null, cppIncludes);
068: output.println(cppPreamble);
069:
070: writeTagValueCPP(scriptData, "Script");
071:
072: output.println(cppScriptPostamble);
073:
074: writeTagValueCPP(languageData, "Language");
075:
076: output.println(cppPostamble);
077:
078: writeTrailer();
079: closeFile();
080: }
081:
082: public void writeScriptTags(String fileName) {
083: writeHeaderFile(fileName + ".h");
084: writeCPPFile(fileName + ".cpp");
085: }
086:
087: private static final String[] hIncludes = { "LETypes.h" };
088:
089: private static final String hPreamble = "/**\n" + " * \\file\n"
090: + " * \\internal\n" + " */\n" + "\n";
091:
092: private static final String hScriptPostamble = "\n"
093: + "const LETag nullScriptTag = 0x00000000; /* '' (NULL) */\n"
094: + "\n";
095:
096: private static final String hPostamble = "\n" + "\n"
097: + "U_NAMESPACE_END\n" + "#endif";
098:
099: private static final String[] cppIncludes = { "LETypes.h",
100: "ScriptAndLanguageTags.h", "OpenTypeLayoutEngine.h" };
101:
102: private static final String cppPreamble = "const LETag OpenTypeLayoutEngine::scriptTags[] = {";
103:
104: private static final String cppScriptPostamble = "};\n" + "\n"
105: + "const LETag OpenTypeLayoutEngine::languageTags[] = {";
106:
107: private static final String cppPostamble = "};\n";
108: }
|