• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package org.unicode.cldr.util;
2 
3 import java.util.ArrayList;
4 import java.util.Comparator;
5 import java.util.HashMap;
6 import java.util.Iterator;
7 import java.util.List;
8 
9 public class CharacterFallbacks {
10     private static CharacterFallbacks SINGLETON = new CharacterFallbacks();
11     private HashMap<Integer, List<String>> data = new HashMap<Integer, List<String>>();
12 
make()13     static public CharacterFallbacks make() {
14         return SINGLETON;
15     }
16 
getSubstitutes(int cp)17     public List<String> getSubstitutes(int cp) {
18         return data.get(cp);
19     }
20 
CharacterFallbacks()21     private CharacterFallbacks() {
22         Factory cldrFactory = Factory.make(CLDRPaths.DEFAULT_SUPPLEMENTAL_DIRECTORY, ".*");
23         CLDRFile characterFallbacks = cldrFactory.make("characters", false);
24         XPathParts parts = new XPathParts();
25         Comparator<String> comp = DtdData.getInstance(DtdType.supplementalData).getDtdComparator(null);
26 
27         for (Iterator<String> it = characterFallbacks.iterator("//supplementalData/characters/", comp); it.hasNext();) {
28             String path = it.next();
29             String fullPath = characterFallbacks.getFullXPath(path);
30             parts.set(fullPath);
31             /*
32              * <character value = "―">
33              * <substitute>—</substitute>
34              * <substitute>-</substitute>
35              */
36             String value = parts.getAttributeValue(-2, "value");
37             if (value.codePointCount(0, value.length()) != 1) {
38                 throw new IllegalArgumentException("Illegal value in " + fullPath);
39             }
40             int cp = value.codePointAt(0);
41             String substitute = characterFallbacks.getStringValue(path);
42 
43             List<String> substitutes = data.get(cp);
44             if (substitutes == null) {
45                 data.put(cp, substitutes = new ArrayList<String>());
46             }
47             substitutes.add(substitute);
48         }
49         CldrUtility.protectCollection(data);
50     }
51 }
52