2 *******************************************************************************
\r
3 * Copyright (C) 1998-2008, International Business Machines Corporation and *
\r
4 * others. All Rights Reserved. *
\r
5 *******************************************************************************
\r
7 package com.ibm.icu.dev.tool.layout;
\r
9 import java.util.Date;
\r
11 import com.ibm.icu.text.MessageFormat;
\r
12 import com.ibm.icu.util.VersionInfo;
\r
14 public class ScriptIDModuleWriter extends ScriptModuleWriter
\r
16 public ScriptIDModuleWriter(ScriptData scriptData, LanguageData languageData)
\r
18 super(scriptData, languageData);
\r
21 public void writeScriptHeader(String fileName)
\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
29 writeHeader("__LESCRIPTS_H", includeFiles, scriptBrief);
\r
31 totalScript = maxScript;
\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
39 if(totalScript>previousTotalScripts){
\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
52 Object args[] = {new Integer(previousMajor), new Integer(previousMinor)};
\r
53 //Check for the initial header. It should be written only one time
\r
55 output.println(format.format(args));
\r
56 initialheader = true;
\r
58 if((verMajor-previousMajor)>=1){
\r
59 format = new MessageFormat(scriptPreambleStable);
\r
60 output.println(format.format(args));
\r
62 format = new MessageFormat(scriptPreambleDraft);
\r
63 output.println(format.format(args));
\r
67 for(int i=0;i<numberOfScripts;i++){
\r
69 output.print(scriptData.getTagLabel(script));
\r
70 output.print("ScriptCode = ");
\r
76 output.print(script);
\r
77 output.println(",");
\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
88 for (int script = previousTotalScripts+1; script <= totalScript; script += 1) {
\r
90 output.print(scriptData.getTagLabel(script));
\r
91 output.print("ScriptCode = ");
\r
97 output.print(script);
\r
98 output.println(",");
\r
102 output.print(" scriptCodeCount = ");
\r
103 output.println(maxScript - minScript + 1);
\r
104 output.println(postamble);
\r
111 public void writeLanguageHeader(String fileName)
\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
118 openFile(fileName);
\r
119 writeHeader("__LELANGUAGES_H", includeFiles, languageBrief);
\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
129 if(totalLanguage>previousTotalLanguages){
\r
130 newLanguage = true;
\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
142 Object args[] = {new Integer(previousMajor), new Integer(previousMinor)};
\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
149 if((verMajor-previousMajor)>=1){
\r
150 format = new MessageFormat(languagePreambleStable);
\r
151 output.println(format.format(args));
\r
153 format = new MessageFormat(languagePreambleDraft);
\r
154 output.println(format.format(args));
\r
158 for(int i=0;i<numberOfLanguages;i++){
\r
160 output.print(languageData.getTagLabel(language).toLowerCase());
\r
161 output.print("LanguageCode = ");
\r
163 if (language < 10) {
\r
167 output.print(language);
\r
168 output.println(",");
\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
179 for (int langauge = previousTotalLanguages+1; langauge <= totalLanguage; langauge += 1) {
\r
181 output.print(languageData.getTagLabel(langauge).toLowerCase());
\r
182 output.print("ScriptCode = ");
\r
184 if (langauge < 10) {
\r
188 output.print(langauge);
\r
189 output.println(",");
\r
193 output.print(" languageCodeCount = ");
\r
194 output.println(maxLanguage - minLanguage + 1);
\r
196 output.println(postamble);
\r
202 private static final String[] includeFiles = {"LETypes.h"};
\r
204 private static final String scriptPreamble =
\r
206 " * Constants for Unicode script values, generated using\n" +
\r
207 " * ICU4J''s <code>UScript</code> class.\n" +
\r
209 " * @stable ICU {0}.{1}\n" +
\r
212 "enum ScriptCodes '{'";
\r
214 private static final String scriptBrief =
\r
217 " * \\brief C++ API: Constants for Unicode script values\n" +
\r
222 private static final String languagePreamble =
\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
228 " * @stable ICU {0}.{1}\n" +
\r
231 "enum LanguageCodes '{'";
\r
233 private static final String languageBrief =
\r
236 " * \\brief C++ API: List of language codes for LayoutEngine\n" +
\r
240 private static final String postamble =
\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
249 public void updateScriptAndLanguages(){
\r
250 openScriptAndLanguages(ScriptAndLanguages);
\r
251 MessageFormat format = new MessageFormat(moduleHeader);
\r
252 Object args[] = {new Date(System.currentTimeMillis())};
\r
254 System.out.print("Updating file "+ScriptAndLanguages);
\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
264 if(totalScript>previousTotalScripts){
\r
265 updateFile.println(" ICU_"+VersionInfo.ICU_VERSION.getMajor()+"."+VersionInfo.ICU_VERSION.getMinor()+"="+(totalScript-previousTotalScripts));
\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
273 if(totalLanguage>previousTotalLanguages){
\r
274 updateFile.println(" ICU_"+VersionInfo.ICU_VERSION.getMajor()+"."+VersionInfo.ICU_VERSION.getMinor()+"="+(totalLanguage-previousTotalLanguages));
\r
276 updateFile.println(" }");
\r
277 scriptVersionNumber.clear();
\r
278 languageVersionNumber.clear();
\r
279 updateFile.close();
\r
281 System.out.println("Done");
\r
284 private static final String scriptPreambleDraft =
\r
286 " * @draft ICU {0}.{1}\n" +
\r
289 private static final String scriptPreambleStable =
\r
291 " * @stable ICU {0}.{1}\n" +
\r
294 private static final String languagePreambleDraft =
\r
296 " * @draft ICU {0}.{1}\n" +
\r
299 private static final String languagePreambleStable =
\r
301 " * @stable ICU {0}.{1}\n" +
\r