2 *******************************************************************************
\r
3 * Copyright (C) 1998-2006, International Business Machines Corporation and *
\r
4 * others. All Rights Reserved. *
\r
5 *******************************************************************************
\r
7 package com.ibm.icu.dev.tool.layout;
\r
9 public class ScriptTagModuleWriter extends ScriptModuleWriter
\r
11 public ScriptTagModuleWriter(ScriptData theScriptData, LanguageData theLanguageData)
\r
13 super(theScriptData, theLanguageData);
\r
16 private void writeTagValueHeader(TagValueData data, String kind)
\r
18 int min = data.getMinValue();
\r
19 int max = data.getMaxValue();
\r
21 for (int value = min; value <= max; value += 1) {
\r
22 output.print("const LETag ");
\r
23 output.print(data.getTagLabel(value));
\r
25 output.print("Tag = ");
\r
26 output.print(data.makeTag(value));
\r
27 output.print("; /* '");
\r
28 output.print(data.getTag(value));
\r
29 output.print("' (");
\r
30 output.print(data.getName(value));
\r
31 output.println(") */");
\r
35 public void writeHeaderFile(String fileName)
\r
38 writeHeader("__SCRIPTANDLANGUAGES_H", hIncludes, hPreamble);
\r
40 writeTagValueHeader(scriptData, "Script");
\r
42 output.println(hScriptPostamble);
\r
44 writeTagValueHeader(languageData, "Language");
\r
46 output.println(hPostamble);
\r
50 private void writeTagValueCPP(TagValueData data, String kind)
\r
52 int min = data.getMinValue();
\r
53 int max = data.getMaxValue();
\r
55 for (int value = min; value <= max; value += 1) {
\r
57 output.print(data.getTagLabel(value));
\r
59 output.print("Tag");
\r
60 output.print((value == max? " " : ","));
\r
61 output.print(" /* '");
\r
62 output.print(data.getTag(value));
\r
63 output.print("' (");
\r
64 output.print(data.getName(value));
\r
65 output.println(") */");
\r
69 public void writeCPPFile(String fileName)
\r
72 writeHeader(null, cppIncludes);
\r
73 output.println(cppPreamble);
\r
75 writeTagValueCPP(scriptData, "Script");
\r
77 output.println(cppScriptPostamble);
\r
79 writeTagValueCPP(languageData, "Language");
\r
81 output.println(cppPostamble);
\r
87 public void writeScriptTags(String fileName)
\r
89 writeHeaderFile(fileName + ".h");
\r
90 writeCPPFile(fileName + ".cpp");
\r
93 private static final String[] hIncludes = {"LETypes.h"};
\r
95 private static final String hPreamble =
\r
102 private static final String hScriptPostamble =
\r
104 "const LETag nullScriptTag = 0x00000000; /* '' (NULL) */\n" +
\r
107 private static final String hPostamble =
\r
110 "U_NAMESPACE_END\n" +
\r
113 private static final String[] cppIncludes =
\r
114 {"LETypes.h", "ScriptAndLanguageTags.h", "OpenTypeLayoutEngine.h"};
\r
116 private static final String cppPreamble =
\r
117 "const LETag OpenTypeLayoutEngine::scriptTags[] = {";
\r
119 private static final String cppScriptPostamble =
\r
122 "const LETag OpenTypeLayoutEngine::languageTags[] = {";
\r
124 private static final String cppPostamble =
\r