• 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<>();
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         Comparator<String> comp = DtdData.getInstance(DtdType.supplementalData).getDtdComparator(null);
25 
26         for (Iterator<String> it = characterFallbacks.iterator("//supplementalData/characters/", comp); it.hasNext();) {
27             String path = it.next();
28             String fullPath = characterFallbacks.getFullXPath(path);
29             XPathParts parts = XPathParts.getFrozenInstance(fullPath);
30             /*
31              * <character value = "―">
32              * <substitute>—</substitute>
33              * <substitute>-</substitute>
34              */
35             String value = parts.getAttributeValue(-2, "value");
36             if (value.codePointCount(0, value.length()) != 1) {
37                 throw new IllegalArgumentException("Illegal value in " + fullPath);
38             }
39             int cp = value.codePointAt(0);
40             String substitute = characterFallbacks.getStringValue(path);
41 
42             List<String> substitutes = data.get(cp);
43             if (substitutes == null) {
44                 data.put(cp, substitutes = new ArrayList<>());
45             }
46             substitutes.add(substitute);
47         }
48         CldrUtility.protectCollection(data);
49     }
50 }
51