1 package org.unicode.cldr.unittest; 2 3 import com.ibm.icu.impl.Relation; 4 import com.ibm.icu.text.Collator; 5 import com.ibm.icu.text.RuleBasedCollator; 6 import com.ibm.icu.text.Transliterator; 7 import com.ibm.icu.text.UnicodeSet; 8 import com.ibm.icu.util.ULocale; 9 import java.io.IOException; 10 import java.util.Comparator; 11 import java.util.Map; 12 import java.util.TreeMap; 13 import java.util.TreeSet; 14 import org.unicode.cldr.tool.GenerateTransformCharts; 15 import org.unicode.cldr.util.CLDRPaths; 16 import org.unicode.cldr.util.CaseIterator; 17 import org.unicode.cldr.util.CldrUtility; 18 import org.unicode.cldr.util.CollationMapMaker; 19 import org.unicode.cldr.util.Log; 20 import org.unicode.cldr.util.UnicodeSetPrettyPrinter; 21 22 public class TestCollationMapMaker { 23 static Transliterator javaEscape = 24 Transliterator.getInstance("[^ \\u0009 \\u000A \\u000D \\u0020-\\u007F] hex/java"); 25 main(String[] args)26 public static void main(String[] args) throws IOException { 27 testTranslit(); 28 Log.setLog(CLDRPaths.GEN_DIRECTORY + "CollationMapLog.txt"); 29 CaseIterator caseIterator = new CaseIterator(); 30 caseIterator.reset("aa"); 31 while (true) { 32 String item = caseIterator.next(); 33 if (item == null) break; 34 System.out.println(item); 35 } 36 RuleBasedCollator col = (RuleBasedCollator) Collator.getInstance(new ULocale("da_DK")); 37 col.setStrength(Collator.SECONDARY); 38 col.setAlternateHandlingShifted(true); 39 40 Comparator c = 41 new org.unicode.cldr.util.MultiComparator( 42 new Comparator[] { 43 col, new com.ibm.icu.text.UTF16.StringComparator(true, false, 0) 44 }); 45 Map mapping = 46 new CollationMapMaker() 47 .generateCollatorFolding(col, new TreeMap<CharSequence, String>()); 48 Relation<String, String> inverse = new Relation(new TreeMap(c), TreeSet.class); 49 inverse.addAllInverted(mapping); 50 UnicodeSet unicodeSet = new UnicodeSet(); 51 UnicodeSetPrettyPrinter pretty = 52 UnicodeSetPrettyPrinter.fromIcuLocale(ULocale.ROOT.toString()); 53 for (String target : inverse.keySet()) { 54 unicodeSet.clear(); 55 unicodeSet.addAll(inverse.getAll(target)); 56 if (target.length() > 0) { 57 unicodeSet.add(target); 58 } 59 String unicodeSetName = pretty.format(unicodeSet); 60 String name = GenerateTransformCharts.getName(target, ", "); 61 Log.logln( 62 com.ibm.icu.impl.Utility.hex(target) 63 + " ( " 64 + target 65 + " ) " 66 + name 67 + "\t" 68 + unicodeSetName); 69 } 70 } 71 testTranslit()72 private static void testTranslit() { 73 System.out.println( 74 javaEscape.transform( 75 "\u0001\u001F" 76 + CldrUtility.LINE_SEPARATOR 77 + "\u0061\u00A5\uFFFF\uD800\uDC00")); 78 } 79 } 80