1 package org.unicode.cldr.tool; 2 3 import static org.unicode.cldr.util.PathUtilities.getNormalizedPathString; 4 5 import java.io.BufferedReader; 6 import java.io.File; 7 import java.io.IOException; 8 import java.io.PrintWriter; 9 import org.unicode.cldr.draft.FileUtilities; 10 import org.unicode.cldr.util.CLDRPaths; 11 import org.unicode.cldr.util.CldrUtility; 12 import org.unicode.cldr.util.CldrUtility.LineComparer; 13 import org.unicode.cldr.util.FileReaders; 14 15 /** 16 * Utilities for CLDR tools. Not used in Survey Tool. Moved here from CldrUtilities 17 * 18 * @author srl 19 */ 20 public class ToolUtilities { 21 registerExtraTransliterators()22 public static void registerExtraTransliterators() { 23 // NOTE: UTIL_DATA_DIR is required here only because TransliteratorUtilities 24 // requires a file path. 25 // String tzadir = CLDRPaths.UTIL_DATA_DIR + File.separatorChar; // work around bad 26 // pattern (dir+filename) 27 // // HACK around lack of Armenian, Ethiopic 28 // TransliteratorUtilities.registerTransliteratorFromFile(tzadir, "Latin-Armenian"); 29 // // TransliteratorUtilities.registerTransliteratorFromFile(tzadir, 30 // "Latin-Ethiopic"); 31 // TransliteratorUtilities.registerTransliteratorFromFile(tzadir, "Cyrillic-Latin"); 32 // TransliteratorUtilities.registerTransliteratorFromFile(tzadir, "Arabic-Latin"); 33 // // needed 34 // TransliteratorUtilities.registerTransliteratorFromFile(tzadir, "Thaana-Latin"); 35 // TransliteratorUtilities.registerTransliteratorFromFile(tzadir, "Syriac-Latin"); 36 // TransliteratorUtilities.registerTransliteratorFromFile(tzadir, 37 // "Canadian_Aboriginal-Latin"); 38 // TransliteratorUtilities.registerTransliteratorFromFile(tzadir, "Georgian-Latin"); 39 // 40 // // do nothing, too complicated to do quickly 41 // TransliteratorUtilities.registerTransliteratorFromFile(tzadir, "Tibetan-Latin"); 42 // // needed 43 // TransliteratorUtilities.registerTransliteratorFromFile(tzadir, "Khmer-Latin"); // 44 // needed 45 // TransliteratorUtilities.registerTransliteratorFromFile(tzadir, "Lao-Latin"); 46 } 47 generateBat( String sourceDir, String sourceFile, String targetDir, String targetFile)48 public static void generateBat( 49 String sourceDir, String sourceFile, String targetDir, String targetFile) { 50 generateBat( 51 sourceDir, 52 sourceFile, 53 targetDir, 54 targetFile, 55 new CldrUtility.SimpleLineComparator(0)); 56 } 57 generateBat( String sourceDir, String sourceFile, String targetDir, String targetFile, LineComparer lineComparer)58 public static void generateBat( 59 String sourceDir, 60 String sourceFile, 61 String targetDir, 62 String targetFile, 63 LineComparer lineComparer) { 64 try { 65 String batDir = targetDir + "diff" + File.separator; 66 String batName = targetFile + ".bat"; 67 String[] failureLines = new String[2]; 68 69 String fullSource = sourceDir + File.separator + sourceFile; 70 String fullTarget = targetDir + File.separator + targetFile; 71 72 if (!new File(sourceDir, sourceFile).exists()) { 73 File f = new File(batDir, batName); 74 if (f.exists()) { 75 if (DEBUG_SHOW_BAT) 76 System.out.println("*Deleting old " + getNormalizedPathString(f)); 77 f.delete(); 78 } 79 } else if (!CldrUtility.areFileIdentical( 80 fullSource, fullTarget, failureLines, lineComparer)) { 81 PrintWriter bat = FileUtilities.openUTF8Writer(batDir, batName); 82 try { 83 bat.println( 84 CLDRPaths.COMPARE_PROGRAM 85 + " " 86 + getNormalizedPathString(fullSource) 87 + " " 88 + getNormalizedPathString(fullTarget)); 89 } finally { 90 bat.close(); 91 } 92 } else { 93 File f = new File(batDir, batName); 94 if (f.exists()) { 95 if (DEBUG_SHOW_BAT) 96 System.out.println("*Deleting old:\t" + getNormalizedPathString(f)); 97 f.delete(); 98 } 99 f = new File(fullTarget); 100 if (FileUtilities.SHOW_FILES) 101 System.out.println("*Deleting old:\t" + getNormalizedPathString(f)); 102 f.delete(); 103 } 104 } catch (IOException e) { 105 // TODO Auto-generated catch block 106 e.printStackTrace(); 107 } 108 } 109 110 /** 111 * Fetch data from jar 112 * 113 * @param name a name residing in the org/unicode/cldr/tool/ directory, or loading from a jar 114 * will break. 115 */ getUTF8Data(String name)116 public static BufferedReader getUTF8Data(String name) { 117 if (new File(name).isAbsolute()) { 118 throw new IllegalArgumentException( 119 "Path must be relative to org/unicode/cldr/tool such as 'file.txt' or 'casing/file.txt', but got '" 120 + name 121 + "'."); 122 } 123 124 return FileReaders.openFile(ToolUtilities.class, name); 125 } 126 127 static final boolean DEBUG_SHOW_BAT = false; 128 } 129