xref: /aosp_15_r20/external/cldr/tools/cldr-code/src/main/java/org/unicode/cldr/tool/ToolUtilities.java (revision 912701f9769bb47905792267661f0baf2b85bed5)
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