blob: ee2e9792e2470c67c0bff71cdcbfa6facf8d7fce [file] [log] [blame]
package org.unicode.cldr.tool;
import java.io.File;
import java.io.PrintWriter;
import java.util.Set;
import java.util.TreeSet;
import java.util.regex.Matcher;
import org.unicode.cldr.draft.FileUtilities;
import org.unicode.cldr.util.CLDRFile;
import org.unicode.cldr.util.CLDRFile.DraftStatus;
import org.unicode.cldr.util.CLDRPaths;
import org.unicode.cldr.util.CldrUtility;
import org.unicode.cldr.util.Factory;
import org.unicode.cldr.util.PatternCache;
import org.unicode.cldr.util.SimpleFactory;
//import org.unicode.cldr.util.XPathParts.Comments;
import com.ibm.icu.dev.util.CollectionUtilities;
public class CLDRFormat {
public static void main(String[] args) throws Exception {
// TODO - make these parameters
String filter = CldrUtility.getProperty("filter", ".*");
Matcher matcher = PatternCache.get(filter).matcher("");
File src = new File(CLDRPaths.COMMON_DIRECTORY);
File dest = new File(CLDRPaths.BASE_DIRECTORY + "/common-test/");
File dtd = new File(dest + "/main/" + "../../common/dtd/ldmlSupplemental.dtd");
if (!dtd.exists()) {
throw new IllegalArgumentException("Can't access DTD\nas is: " + dtd + "\ncanonical: "
+ dtd.getCanonicalPath());
}
// Log.setLog(Utility.GEN_DIRECTORY + "logCldr.txt");
for (String subDir : src.list()) {
if (subDir.equals("CVS") || subDir.equals("posix") || subDir.equals("test")) continue;
final String srcSubdir = src + "/" + subDir;
final File srcDir = new File(srcSubdir);
if (!srcDir.isDirectory()) continue;
final String destSubdir = dest + "/" + subDir;
Factory cldrFactory = Factory.make(srcSubdir, ".*");
for (String key : cldrFactory.getAvailable()) {
String subDirKey = subDir + "/" + key;
if (!matcher.reset(subDirKey).find()) {
// System.out.println("Skipping " + srcSubdir);
continue;
}
CLDRFile cldrFile = cldrFactory.make(key, false);
// write
PrintWriter out = FileUtilities.openUTF8Writer(destSubdir, key + ".xml");
cldrFile.write(out);
out.close();
// StringWriter stringWriter = new StringWriter();
// PrintWriter pw = new PrintWriter(stringWriter);
// cldrFile.write(pw);
// pw.flush();
// final String results = stringWriter.toString();
// pw.close();
// check
try {
// byte[] utf8 = results.getBytes("utf-8");
// CLDRFile regenFile = CLDRFile.make(destSubdir + key, key, new ByteArrayInputStream(utf8),
// DraftStatus.unconfirmed);
CLDRFile regenFile = SimpleFactory.makeFile(key, destSubdir + key, DraftStatus.unconfirmed);
String diff = findFirstDifference(cldrFile, regenFile);
if (diff != null) {
System.out.println("\tERROR: difference introduced in reformatting " + srcSubdir + "/" + key
+ ".xml" + "\n" + diff);
}
} catch (Exception e) {
System.err.println("\tERROR: can't read reformatted file " + srcSubdir + "/" + key + ".xml");
// e.printStackTrace();
}
}
}
}
static Set<String> keys1 = new TreeSet<String>();
static Set<String> keys2 = new TreeSet<String>();
private static String findFirstDifference(CLDRFile cldrFile, CLDRFile regenFile) {
keys1.clear();
keys2.clear();
CollectionUtilities.addAll(cldrFile.iterator(), keys1);
CollectionUtilities.addAll(regenFile.iterator(), keys2);
if (!keys1.equals(keys2)) {
Set<String> missing = new TreeSet<String>(keys1);
missing.removeAll(keys2);
Set<String> extras = new TreeSet<String>(keys2);
extras.removeAll(keys1);
return "\tMissing: " + missing.toString().replace(", ", ",\n") + ";\n\tExtras: "
+ extras.toString().replace(", ", ",\n");
}
for (String path : keys1) {
if (path.startsWith("//ldml/identity/generation") || path.startsWith("//ldml/identity/version")) {
continue;
}
String full1 = cldrFile.getFullXPath(path);
String full2 = regenFile.getFullXPath(path);
if (!full1.equals(full2)) {
return "\tFull XPaths differ: " + full1 + "!=" + full2;
}
}
// Comments comments1 = cldrFile.getXpath_comments();
// Comments comments2 = regenFile.getXpath_comments();
// TODO fix later
return null;
}
}