/* ******************************************************************************* * Copyright (C) 1998-2008, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* */ package com.ibm.icu.dev.tool.layout; import java.util.Date; import com.ibm.icu.text.MessageFormat; import com.ibm.icu.util.VersionInfo; public class ScriptIDModuleWriter extends ScriptModuleWriter { public ScriptIDModuleWriter(ScriptData scriptData, LanguageData languageData) { super(scriptData, languageData); } public void writeScriptHeader(String fileName) { int minScript = scriptData.getMinValue(); int maxScript = scriptData.getMaxValue(); int verMajor = VersionInfo.ICU_VERSION.getMajor(); int verMinor = VersionInfo.ICU_VERSION.getMinor(); openFile(fileName); writeHeader("__LESCRIPTS_H", includeFiles, scriptBrief); totalScript = maxScript; what = "script"; readFile(ScriptAndLanguages, what); String checkICUVersion, previousVersion; int previousMajor, previousMinor, arrayListIndex=0, numberOfScripts; boolean initialheader = false; boolean newScripts = false; if(totalScript>previousTotalScripts){ newScripts = true; } //Processing old scripts MessageFormat format = new MessageFormat(scriptPreamble); for(int script=minScript;script<=previousTotalScripts;){ checkICUVersion = (String)scriptVersionNumber.get(arrayListIndex); checkICUVersion = checkICUVersion.substring(checkICUVersion.indexOf("_")+1); previousVersion = checkICUVersion.substring(0, checkICUVersion.indexOf("=")); previousMajor = Integer.parseInt(previousVersion.substring(0,previousVersion.indexOf("."))); previousMinor = Integer.parseInt(previousVersion.substring(previousVersion.indexOf(".")+1)); numberOfScripts = Integer.parseInt(checkICUVersion.substring(checkICUVersion.indexOf("=")+1)); Object args[] = {new Integer(previousMajor), new Integer(previousMinor)}; //Check for the initial header. It should be written only one time if(!initialheader){ output.println(format.format(args)); initialheader = true; }else{ if((verMajor-previousMajor)>=1){ format = new MessageFormat(scriptPreambleStable); output.println(format.format(args)); }else{ format = new MessageFormat(scriptPreambleDraft); output.println(format.format(args)); } } for(int i=0;ipreviousTotalLanguages){ newLanguage = true; } //Processing old languages MessageFormat format = new MessageFormat(languagePreamble); for(int language=minLanguage;language<=previousTotalLanguages;){ checkICUVersion = (String)languageVersionNumber.get(arrayListIndex); checkICUVersion = checkICUVersion.substring(checkICUVersion.indexOf("_")+1); previousVersion = checkICUVersion.substring(0, checkICUVersion.indexOf("=")); previousMajor = Integer.parseInt(previousVersion.substring(0,previousVersion.indexOf("."))); previousMinor = Integer.parseInt(previousVersion.substring(previousVersion.indexOf(".")+1)); numberOfLanguages = Integer.parseInt(checkICUVersion.substring(checkICUVersion.indexOf("=")+1)); Object args[] = {new Integer(previousMajor), new Integer(previousMinor)}; //Check for the initial header. It should be written only one time if(!initialheader){ output.println(format.format(args)); initialheader = true; }else{ if((verMajor-previousMajor)>=1){ format = new MessageFormat(languagePreambleStable); output.println(format.format(args)); }else{ format = new MessageFormat(languagePreambleDraft); output.println(format.format(args)); } } for(int i=0;iUScript class.\n" + " *\n" + " * @stable ICU {0}.{1}\n" + " */\n" + "\n" + "enum ScriptCodes '{'"; private static final String scriptBrief = "/**\n" + " * \\file\n" + " * \\brief C++ API: Constants for Unicode script values\n" + " */\n" + "\n"; private static final String languagePreamble = "/**\n" + " * A provisional list of language codes. For now,\n" + " * this is just a list of languages which the LayoutEngine\n" + " * supports.\n" + " *\n" + " * @stable ICU {0}.{1}\n" + " */\n" + "\n" + "enum LanguageCodes '{'"; private static final String languageBrief = "/**\n" + " * \\file\n" + " * \\brief C++ API: List of language codes for LayoutEngine\n" + " */\n" + "\n"; private static final String postamble = "};\n"; private static final String ScriptAndLanguages = "ScriptAndLanguages"; private static String ICUVersion = "ICU Version="+VersionInfo.ICU_VERSION.getMajor()+"."+VersionInfo.ICU_VERSION.getMinor(); private static int totalScript; private static int totalLanguage; private static String what; public void updateScriptAndLanguages(){ openScriptAndLanguages(ScriptAndLanguages); MessageFormat format = new MessageFormat(moduleHeader); Object args[] = {new Date(System.currentTimeMillis())}; System.out.print("Updating file "+ScriptAndLanguages); updateFile.print(format.format(args)); updateFile.println(ICUVersion); updateFile.println("Total Script="+totalScript); updateFile.println("Total Language="+totalLanguage); updateFile.println("Scripts={"); for(int i=0;ipreviousTotalScripts){ updateFile.println(" ICU_"+VersionInfo.ICU_VERSION.getMajor()+"."+VersionInfo.ICU_VERSION.getMinor()+"="+(totalScript-previousTotalScripts)); } updateFile.println(" }"); updateFile.println("Languages={"); for(int i=0;ipreviousTotalLanguages){ updateFile.println(" ICU_"+VersionInfo.ICU_VERSION.getMajor()+"."+VersionInfo.ICU_VERSION.getMinor()+"="+(totalLanguage-previousTotalLanguages)); } updateFile.println(" }"); scriptVersionNumber.clear(); languageVersionNumber.clear(); updateFile.close(); System.out.println("Done"); } private static final String scriptPreambleDraft = "/**\n" + " * @draft ICU {0}.{1}\n" + " */\n";// + private static final String scriptPreambleStable = "/**\n" + " * @stable ICU {0}.{1}\n" + " */\n";// + private static final String languagePreambleDraft = "/**\n" + " * @draft ICU {0}.{1}\n" + " */\n";// + private static final String languagePreambleStable = "/**\n" + " * @stable ICU {0}.{1}\n" + " */\n";// + }