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