2 *******************************************************************************
3 * Copyright (C) 1998-2008, International Business Machines Corporation and *
4 * others. All Rights Reserved. *
5 *******************************************************************************
7 package com.ibm.icu.dev.tool.layout;
11 import com.ibm.icu.text.MessageFormat;
12 import com.ibm.icu.util.VersionInfo;
14 public class ScriptIDModuleWriter extends ScriptModuleWriter
16 public ScriptIDModuleWriter(ScriptData scriptData, LanguageData languageData)
18 super(scriptData, languageData);
21 public void writeScriptHeader(String fileName)
23 int minScript = scriptData.getMinValue();
24 int maxScript = scriptData.getMaxValue();
25 int verMajor = VersionInfo.ICU_VERSION.getMajor();
26 int verMinor = VersionInfo.ICU_VERSION.getMinor();
29 writeHeader("__LESCRIPTS_H", includeFiles, scriptBrief);
31 totalScript = maxScript;
33 readFile(ScriptAndLanguages, what);
34 String checkICUVersion, previousVersion;
35 int previousMajor, previousMinor, arrayListIndex=0, numberOfScripts;
36 boolean initialheader = false;
37 boolean newScripts = false;
39 if(totalScript>previousTotalScripts){
42 //Processing old scripts
43 MessageFormat format = new MessageFormat(scriptPreamble);
44 for(int script=minScript;script<=previousTotalScripts;){
45 checkICUVersion = (String)scriptVersionNumber.get(arrayListIndex);
46 checkICUVersion = checkICUVersion.substring(checkICUVersion.indexOf("_")+1);
47 previousVersion = checkICUVersion.substring(0, checkICUVersion.indexOf("="));
48 previousMajor = Integer.parseInt(previousVersion.substring(0,previousVersion.indexOf(".")));
49 previousMinor = Integer.parseInt(previousVersion.substring(previousVersion.indexOf(".")+1));
50 numberOfScripts = Integer.parseInt(checkICUVersion.substring(checkICUVersion.indexOf("=")+1));
52 Object args[] = {new Integer(previousMajor), new Integer(previousMinor)};
53 //Check for the initial header. It should be written only one time
55 output.println(format.format(args));
58 if((verMajor-previousMajor)>=1){
59 format = new MessageFormat(scriptPreambleStable);
60 output.println(format.format(args));
62 format = new MessageFormat(scriptPreambleDraft);
63 output.println(format.format(args));
67 for(int i=0;i<numberOfScripts;i++){
69 output.print(scriptData.getTagLabel(script));
70 output.print("ScriptCode = ");
83 if(newScripts){//Processing newly added scripts
84 format = new MessageFormat(scriptPreambleDraft);
85 Object args[] = {new Integer(verMajor), new Integer(verMinor)};
86 output.println(format.format(args));
88 for (int script = previousTotalScripts+1; script <= totalScript; script += 1) {
90 output.print(scriptData.getTagLabel(script));
91 output.print("ScriptCode = ");
102 output.print(" scriptCodeCount = ");
103 output.println(maxScript - minScript + 1);
104 output.println(postamble);
111 public void writeLanguageHeader(String fileName)
113 int minLanguage = languageData.getMinValue();
114 int maxLanguage = languageData.getMaxValue();
115 int verMajor = VersionInfo.ICU_VERSION.getMajor();
116 int verMinor = VersionInfo.ICU_VERSION.getMinor();
119 writeHeader("__LELANGUAGES_H", includeFiles, languageBrief);
121 totalLanguage = maxLanguage;
123 readFile(ScriptAndLanguages, what);
124 String checkICUVersion, previousVersion;
125 int previousMajor, previousMinor, arrayListIndex=0, numberOfLanguages;
126 boolean initialheader = false;
127 boolean newLanguage = false;
129 if(totalLanguage>previousTotalLanguages){
132 //Processing old languages
133 MessageFormat format = new MessageFormat(languagePreamble);
134 for(int language=minLanguage;language<=previousTotalLanguages;){
135 checkICUVersion = (String)languageVersionNumber.get(arrayListIndex);
136 checkICUVersion = checkICUVersion.substring(checkICUVersion.indexOf("_")+1);
137 previousVersion = checkICUVersion.substring(0, checkICUVersion.indexOf("="));
138 previousMajor = Integer.parseInt(previousVersion.substring(0,previousVersion.indexOf(".")));
139 previousMinor = Integer.parseInt(previousVersion.substring(previousVersion.indexOf(".")+1));
140 numberOfLanguages = Integer.parseInt(checkICUVersion.substring(checkICUVersion.indexOf("=")+1));
142 Object args[] = {new Integer(previousMajor), new Integer(previousMinor)};
144 //Check for the initial header. It should be written only one time
146 output.println(format.format(args));
147 initialheader = true;
149 if((verMajor-previousMajor)>=1){
150 format = new MessageFormat(languagePreambleStable);
151 output.println(format.format(args));
153 format = new MessageFormat(languagePreambleDraft);
154 output.println(format.format(args));
158 for(int i=0;i<numberOfLanguages;i++){
160 output.print(languageData.getTagLabel(language).toLowerCase());
161 output.print("LanguageCode = ");
167 output.print(language);
174 //Processing newly added languages
175 format = new MessageFormat(languagePreambleDraft);
176 Object args[] = {new Integer(verMajor), new Integer(verMinor)};
177 output.println(format.format(args));
179 for (int langauge = previousTotalLanguages+1; langauge <= totalLanguage; langauge += 1) {
181 output.print(languageData.getTagLabel(langauge).toLowerCase());
182 output.print("ScriptCode = ");
188 output.print(langauge);
193 output.print(" languageCodeCount = ");
194 output.println(maxLanguage - minLanguage + 1);
196 output.println(postamble);
202 private static final String[] includeFiles = {"LETypes.h"};
204 private static final String scriptPreamble =
206 " * Constants for Unicode script values, generated using\n" +
207 " * ICU4J''s <code>UScript</code> class.\n" +
209 " * @stable ICU {0}.{1}\n" +
212 "enum ScriptCodes '{'";
214 private static final String scriptBrief =
217 " * \\brief C++ API: Constants for Unicode script values\n" +
222 private static final String languagePreamble =
224 " * A provisional list of language codes. For now,\n" +
225 " * this is just a list of languages which the LayoutEngine\n" +
228 " * @stable ICU {0}.{1}\n" +
231 "enum LanguageCodes '{'";
233 private static final String languageBrief =
236 " * \\brief C++ API: List of language codes for LayoutEngine\n" +
240 private static final String postamble =
243 private static final String ScriptAndLanguages = "ScriptAndLanguages";
244 private static String ICUVersion = "ICU Version="+VersionInfo.ICU_VERSION.getMajor()+"."+VersionInfo.ICU_VERSION.getMinor();
245 private static int totalScript;
246 private static int totalLanguage;
247 private static String what;
249 public void updateScriptAndLanguages(){
250 openScriptAndLanguages(ScriptAndLanguages);
251 MessageFormat format = new MessageFormat(moduleHeader);
252 Object args[] = {new Date(System.currentTimeMillis())};
254 System.out.print("Updating file "+ScriptAndLanguages);
256 updateFile.print(format.format(args));
257 updateFile.println(ICUVersion);
258 updateFile.println("Total Script="+totalScript);
259 updateFile.println("Total Language="+totalLanguage);
260 updateFile.println("Scripts={");
261 for(int i=0;i<scriptVersionNumber.size();i++){
262 updateFile.println(scriptVersionNumber.get(i));
264 if(totalScript>previousTotalScripts){
265 updateFile.println(" ICU_"+VersionInfo.ICU_VERSION.getMajor()+"."+VersionInfo.ICU_VERSION.getMinor()+"="+(totalScript-previousTotalScripts));
268 updateFile.println(" }");
269 updateFile.println("Languages={");
270 for(int i=0;i<languageVersionNumber.size();i++){
271 updateFile.println(languageVersionNumber.get(i));
273 if(totalLanguage>previousTotalLanguages){
274 updateFile.println(" ICU_"+VersionInfo.ICU_VERSION.getMajor()+"."+VersionInfo.ICU_VERSION.getMinor()+"="+(totalLanguage-previousTotalLanguages));
276 updateFile.println(" }");
277 scriptVersionNumber.clear();
278 languageVersionNumber.clear();
281 System.out.println("Done");
284 private static final String scriptPreambleDraft =
286 " * @draft ICU {0}.{1}\n" +
289 private static final String scriptPreambleStable =
291 " * @stable ICU {0}.{1}\n" +
294 private static final String languagePreambleDraft =
296 " * @draft ICU {0}.{1}\n" +
299 private static final String languagePreambleStable =
301 " * @stable ICU {0}.{1}\n" +