]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/tools/misc/src/com/ibm/icu/dev/tool/layout/ScriptIDModuleWriter.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / tools / misc / src / com / ibm / icu / dev / tool / layout / ScriptIDModuleWriter.java
1 /*\r
2  *******************************************************************************\r
3  * Copyright (C) 1998-2008, 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 import java.util.Date;\r
10 \r
11 import com.ibm.icu.text.MessageFormat;\r
12 import com.ibm.icu.util.VersionInfo;\r
13 \r
14 public class ScriptIDModuleWriter extends ScriptModuleWriter\r
15 {\r
16     public ScriptIDModuleWriter(ScriptData scriptData, LanguageData languageData)\r
17     {\r
18         super(scriptData, languageData);\r
19     }\r
20 \r
21     public void writeScriptHeader(String fileName)\r
22     {\r
23         int minScript = scriptData.getMinValue();\r
24         int maxScript = scriptData.getMaxValue();\r
25         int verMajor  = VersionInfo.ICU_VERSION.getMajor();\r
26         int verMinor  = VersionInfo.ICU_VERSION.getMinor();\r
27         \r
28         openFile(fileName);\r
29         writeHeader("__LESCRIPTS_H", includeFiles, scriptBrief);\r
30         \r
31         totalScript = maxScript;\r
32         what = "script";\r
33         readFile(ScriptAndLanguages, what);\r
34         String checkICUVersion, previousVersion;\r
35         int previousMajor, previousMinor, arrayListIndex=0, numberOfScripts;\r
36         boolean initialheader = false;\r
37         boolean newScripts = false;\r
38         \r
39         if(totalScript>previousTotalScripts){\r
40             newScripts = true;\r
41         }\r
42         //Processing old scripts\r
43         MessageFormat format = new MessageFormat(scriptPreamble); \r
44         for(int script=minScript;script<=previousTotalScripts;){\r
45              checkICUVersion = (String)scriptVersionNumber.get(arrayListIndex);\r
46              checkICUVersion = checkICUVersion.substring(checkICUVersion.indexOf("_")+1);\r
47              previousVersion = checkICUVersion.substring(0, checkICUVersion.indexOf("="));\r
48              previousMajor = Integer.parseInt(previousVersion.substring(0,previousVersion.indexOf(".")));\r
49              previousMinor = Integer.parseInt(previousVersion.substring(previousVersion.indexOf(".")+1));\r
50              numberOfScripts = Integer.parseInt(checkICUVersion.substring(checkICUVersion.indexOf("=")+1));\r
51              \r
52              Object args[] = {new Integer(previousMajor), new Integer(previousMinor)};\r
53              //Check for the initial header. It should be written only one time\r
54              if(!initialheader){\r
55                  output.println(format.format(args));\r
56                  initialheader = true;\r
57              }else{\r
58                  if((verMajor-previousMajor)>=1){\r
59                      format = new MessageFormat(scriptPreambleStable); \r
60                      output.println(format.format(args));\r
61                  }else{\r
62                      format = new MessageFormat(scriptPreambleDraft); \r
63                      output.println(format.format(args));\r
64                  }\r
65              }\r
66              \r
67              for(int i=0;i<numberOfScripts;i++){\r
68                  output.print("    ");\r
69                  output.print(scriptData.getTagLabel(script));\r
70                  output.print("ScriptCode = ");\r
71                  \r
72                  if (script < 10) {\r
73                      output.print(" ");\r
74                  }\r
75                  \r
76                  output.print(script);\r
77                  output.println(",");\r
78                  script++;\r
79              }\r
80              arrayListIndex++;\r
81         }\r
82         \r
83         if(newScripts){//Processing newly added scripts\r
84             format = new MessageFormat(scriptPreambleDraft); \r
85             Object args[] = {new Integer(verMajor), new Integer(verMinor)};\r
86             output.println(format.format(args));\r
87             \r
88             for (int script = previousTotalScripts+1; script <= totalScript; script += 1) {\r
89                 output.print("    ");\r
90                 output.print(scriptData.getTagLabel(script));\r
91                 output.print("ScriptCode = ");\r
92                 \r
93                 if (script < 10) {\r
94                     output.print(" ");\r
95                 }\r
96                 \r
97                 output.print(script);\r
98                 output.println(",");\r
99             }\r
100         }\r
101         output.println();\r
102         output.print("    scriptCodeCount = ");\r
103         output.println(maxScript - minScript + 1);\r
104         output.println(postamble);\r
105         \r
106         writeTrailer();\r
107         closeFile();\r
108         \r
109     }\r
110     \r
111     public void writeLanguageHeader(String fileName)\r
112     {\r
113         int minLanguage = languageData.getMinValue();\r
114         int maxLanguage = languageData.getMaxValue();\r
115         int verMajor    = VersionInfo.ICU_VERSION.getMajor();\r
116         int verMinor    = VersionInfo.ICU_VERSION.getMinor();\r
117         \r
118         openFile(fileName);\r
119         writeHeader("__LELANGUAGES_H", includeFiles, languageBrief);\r
120 \r
121         totalLanguage = maxLanguage;\r
122         what = "languages";\r
123         readFile(ScriptAndLanguages, what);\r
124         String checkICUVersion, previousVersion;\r
125         int previousMajor, previousMinor, arrayListIndex=0, numberOfLanguages;\r
126         boolean initialheader = false;\r
127         boolean newLanguage = false;\r
128         \r
129         if(totalLanguage>previousTotalLanguages){\r
130             newLanguage = true;\r
131         }\r
132         //Processing old languages\r
133         MessageFormat format = new MessageFormat(languagePreamble); \r
134         for(int language=minLanguage;language<=previousTotalLanguages;){\r
135              checkICUVersion = (String)languageVersionNumber.get(arrayListIndex);\r
136              checkICUVersion = checkICUVersion.substring(checkICUVersion.indexOf("_")+1);\r
137              previousVersion = checkICUVersion.substring(0, checkICUVersion.indexOf("="));\r
138              previousMajor = Integer.parseInt(previousVersion.substring(0,previousVersion.indexOf(".")));\r
139              previousMinor = Integer.parseInt(previousVersion.substring(previousVersion.indexOf(".")+1));\r
140              numberOfLanguages = Integer.parseInt(checkICUVersion.substring(checkICUVersion.indexOf("=")+1));\r
141              \r
142              Object args[] = {new Integer(previousMajor), new Integer(previousMinor)};\r
143             \r
144              //Check for the initial header. It should be written only one time\r
145              if(!initialheader){\r
146                  output.println(format.format(args));\r
147                  initialheader = true;\r
148              }else{\r
149                  if((verMajor-previousMajor)>=1){\r
150                      format = new MessageFormat(languagePreambleStable); \r
151                      output.println(format.format(args));\r
152                  }else{\r
153                      format = new MessageFormat(languagePreambleDraft); \r
154                      output.println(format.format(args));\r
155                  }\r
156              }\r
157              \r
158              for(int i=0;i<numberOfLanguages;i++){\r
159                  output.print("    ");\r
160                  output.print(languageData.getTagLabel(language).toLowerCase());\r
161                  output.print("LanguageCode = ");\r
162                  \r
163                  if (language < 10) {\r
164                      output.print(" ");\r
165                  }\r
166                  \r
167                  output.print(language);\r
168                  output.println(",");\r
169                  language++;\r
170              }\r
171              arrayListIndex++;\r
172         }\r
173         if(newLanguage){\r
174             //Processing newly added languages\r
175             format = new MessageFormat(languagePreambleDraft); \r
176             Object args[] = {new Integer(verMajor), new Integer(verMinor)};\r
177             output.println(format.format(args));\r
178             \r
179             for (int langauge = previousTotalLanguages+1; langauge <= totalLanguage; langauge += 1) {\r
180                 output.print("    ");\r
181                 output.print(languageData.getTagLabel(langauge).toLowerCase());\r
182                 output.print("ScriptCode = ");\r
183                 \r
184                 if (langauge < 10) {\r
185                     output.print(" ");\r
186                 }\r
187                 \r
188                 output.print(langauge);\r
189                 output.println(",");\r
190             }  \r
191         }\r
192         output.println();\r
193         output.print("    languageCodeCount = ");\r
194         output.println(maxLanguage - minLanguage + 1);\r
195         \r
196         output.println(postamble);\r
197         \r
198         writeTrailer();\r
199         closeFile();\r
200     }\r
201     \r
202     private static final String[] includeFiles = {"LETypes.h"};\r
203     \r
204     private static final String scriptPreamble = \r
205     "/**\n" +\r
206     " * Constants for Unicode script values, generated using\n" +\r
207     " * ICU4J''s <code>UScript</code> class.\n" +\r
208     " *\n" +\r
209     " * @stable ICU {0}.{1}\n" +\r
210     " */\n" +\r
211     "\n" +\r
212     "enum ScriptCodes '{'";\r
213     \r
214     private static final String scriptBrief =\r
215     "/**\n" +\r
216     " * \\file\n" + \r
217     " * \\brief C++ API: Constants for Unicode script values\n" +\r
218     " */\n" +\r
219     "\n";\r
220 \r
221     \r
222     private static final String languagePreamble = \r
223     "/**\n" +\r
224     " * A provisional list of language codes. For now,\n" +\r
225     " * this is just a list of languages which the LayoutEngine\n" +\r
226     " * supports.\n" +\r
227     " *\n" +\r
228     " * @stable ICU {0}.{1}\n" +\r
229     " */\n" +\r
230     "\n" +\r
231     "enum LanguageCodes '{'";\r
232     \r
233     private static final String languageBrief =\r
234         "/**\n" +\r
235         " * \\file\n" + \r
236         " * \\brief C++ API: List of language codes for LayoutEngine\n" +\r
237         " */\n" +\r
238         "\n";\r
239 \r
240     private static final String postamble =\r
241     "};\n";\r
242     \r
243     private static final String ScriptAndLanguages = "ScriptAndLanguages";\r
244     private static String ICUVersion = "ICU Version="+VersionInfo.ICU_VERSION.getMajor()+"."+VersionInfo.ICU_VERSION.getMinor();\r
245     private static int totalScript;\r
246     private static int totalLanguage;\r
247     private static String what;\r
248     \r
249     public void updateScriptAndLanguages(){\r
250         openScriptAndLanguages(ScriptAndLanguages);\r
251         MessageFormat format = new MessageFormat(moduleHeader);\r
252         Object args[] = {new Date(System.currentTimeMillis())};\r
253 \r
254         System.out.print("Updating file "+ScriptAndLanguages);\r
255         \r
256         updateFile.print(format.format(args));\r
257         updateFile.println(ICUVersion);\r
258         updateFile.println("Total Script="+totalScript);\r
259         updateFile.println("Total Language="+totalLanguage);\r
260         updateFile.println("Scripts={");\r
261         for(int i=0;i<scriptVersionNumber.size();i++){\r
262             updateFile.println(scriptVersionNumber.get(i));\r
263         }\r
264         if(totalScript>previousTotalScripts){\r
265             updateFile.println("         ICU_"+VersionInfo.ICU_VERSION.getMajor()+"."+VersionInfo.ICU_VERSION.getMinor()+"="+(totalScript-previousTotalScripts));\r
266             \r
267         }\r
268         updateFile.println("        }");\r
269         updateFile.println("Languages={");\r
270         for(int i=0;i<languageVersionNumber.size();i++){\r
271             updateFile.println(languageVersionNumber.get(i));\r
272         }\r
273         if(totalLanguage>previousTotalLanguages){\r
274             updateFile.println("           ICU_"+VersionInfo.ICU_VERSION.getMajor()+"."+VersionInfo.ICU_VERSION.getMinor()+"="+(totalLanguage-previousTotalLanguages));\r
275         }\r
276         updateFile.println("          }");\r
277         scriptVersionNumber.clear();\r
278         languageVersionNumber.clear();\r
279         updateFile.close();\r
280         \r
281         System.out.println("Done");\r
282     }\r
283     \r
284     private static final String scriptPreambleDraft = \r
285         "/**\n" +\r
286         " * @draft ICU {0}.{1}\n" +\r
287         " */\n";// +\r
288         \r
289     private static final String scriptPreambleStable = \r
290         "/**\n" +\r
291         " * @stable ICU {0}.{1}\n" +\r
292         " */\n";// +\r
293         \r
294     private static final String languagePreambleDraft = \r
295         "/**\n" +\r
296         " * @draft ICU {0}.{1}\n" +\r
297         " */\n";// +\r
298         \r
299     private static final String languagePreambleStable = \r
300         "/**\n" +\r
301         " * @stable ICU {0}.{1}\n" +\r
302         " */\n";// +\r
303         \r
304 }