]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/tools/misc/src/com/ibm/icu/dev/tool/layout/ScriptTagModuleWriter.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / tools / misc / src / com / ibm / icu / dev / tool / layout / ScriptTagModuleWriter.java
1 /*\r
2  *******************************************************************************\r
3  * Copyright (C) 1998-2006, International Business Machines Corporation and    *\r
4  * others. All Rights Reserved.                                                *\r
5  *******************************************************************************\r
6  */\r
7 package com.ibm.icu.dev.tool.layout;\r
8 \r
9 public class ScriptTagModuleWriter extends ScriptModuleWriter\r
10 {\r
11     public ScriptTagModuleWriter(ScriptData theScriptData, LanguageData theLanguageData)\r
12     {\r
13         super(theScriptData, theLanguageData);\r
14     }\r
15     \r
16     private void writeTagValueHeader(TagValueData data, String kind)\r
17     {\r
18         int min = data.getMinValue();\r
19         int max = data.getMaxValue();\r
20 \r
21         for (int value = min; value <= max; value += 1) {\r
22             output.print("const LETag ");\r
23             output.print(data.getTagLabel(value));\r
24             output.print(kind);\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
32         }\r
33     }\r
34     \r
35     public void writeHeaderFile(String fileName)\r
36     {\r
37         openFile(fileName);\r
38         writeHeader("__SCRIPTANDLANGUAGES_H", hIncludes, hPreamble);\r
39         \r
40         writeTagValueHeader(scriptData, "Script");\r
41         \r
42         output.println(hScriptPostamble);\r
43         \r
44         writeTagValueHeader(languageData, "Language");\r
45         \r
46         output.println(hPostamble);\r
47         closeFile();\r
48     }\r
49     \r
50     private void writeTagValueCPP(TagValueData data, String kind)\r
51     {\r
52         int min = data.getMinValue();\r
53         int max = data.getMaxValue();\r
54         \r
55         for (int value = min; value <= max; value += 1) {\r
56             output.print("    ");\r
57             output.print(data.getTagLabel(value));\r
58             output.print(kind);\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
66         }\r
67     }\r
68     \r
69     public void writeCPPFile(String fileName)\r
70     {\r
71         openFile(fileName);\r
72         writeHeader(null, cppIncludes);\r
73         output.println(cppPreamble);\r
74         \r
75         writeTagValueCPP(scriptData, "Script");\r
76         \r
77         output.println(cppScriptPostamble);\r
78         \r
79         writeTagValueCPP(languageData, "Language");\r
80         \r
81         output.println(cppPostamble);\r
82         \r
83         writeTrailer();\r
84         closeFile();\r
85     }\r
86     \r
87     public void writeScriptTags(String fileName)\r
88     {\r
89         writeHeaderFile(fileName + ".h");\r
90         writeCPPFile(fileName + ".cpp");\r
91     }\r
92 \r
93     private static final String[] hIncludes = {"LETypes.h"};\r
94 \r
95     private static final String hPreamble = \r
96     "/**\n" +\r
97     " * \\file\n" +\r
98     " * \\internal\n" +\r
99     " */\n" +\r
100     "\n";\r
101     \r
102     private static final String hScriptPostamble =\r
103     "\n" +\r
104     "const LETag nullScriptTag = 0x00000000; /* ''     (NULL) */\n" +\r
105     "\n";\r
106     \r
107     private static final String hPostamble =\r
108     "\n" +\r
109     "\n" +\r
110     "U_NAMESPACE_END\n" +\r
111     "#endif";\r
112     \r
113     private static final String[] cppIncludes =\r
114         {"LETypes.h", "ScriptAndLanguageTags.h", "OpenTypeLayoutEngine.h"};\r
115     \r
116     private static final String cppPreamble = \r
117     "const LETag OpenTypeLayoutEngine::scriptTags[] = {";\r
118     \r
119     private static final String cppScriptPostamble =\r
120     "};\n" +\r
121     "\n" +\r
122     "const LETag OpenTypeLayoutEngine::languageTags[] = {";\r
123     \r
124     private static final String cppPostamble =\r
125     "};\n";\r
126 }