• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package org.unicode.cldr.util;
2 
3 import com.ibm.icu.dev.util.UnicodeMap;
4 
5 public class ApproximateWidth {
6     static UnicodeMap<Integer> data = new UnicodeMap<>();
7     static Integer defaultWidth;
8 
getWidth(int cp)9     public static Integer getWidth(int cp) {
10         Integer result = data.get(cp);
11         return result == null ? defaultWidth : result;
12     }
13 
14     /**
15      * Return # of ems * 10
16      */
getWidth(CharSequence s)17     public static int getWidth(CharSequence s) {
18         int result = 0;
19         int cp;
20         for (int i = 0; i < s.length(); i += Character.charCount(cp)) {
21             cp = Character.codePointAt(s, i);
22             result += getWidth(cp);
23         }
24         return result;
25     }
26 
27     static {
28         SemiFileReader MyFileHander = new SemiFileReader() {
29             @Override
30             public void handleComment(String line, int commentCharPosition) {
31                 if (line.contains("@missing")) {
32                     String[] items = SPLIT.split(line);
33                     defaultWidth = Integer.parseInt(items[1]);
34                 }
35             }
36 
37             @Override
38             protected boolean handleLine(int lineCount, int start, int end, String[] items) {
39                 data.putAll(start, end, Integer.parseInt(items[1]));
40                 return true;
41             }
42 
43         };
44 
MyFileHander.process(ApproximateWidth.class, "data/ApproximateWidth.txt")45         MyFileHander.process(ApproximateWidth.class, "data/ApproximateWidth.txt");
46     }
47 
main(String[] args)48     public static void main(String[] args) {
49         for (String arg : args) {
50             System.out.println(arg + ":\t" + getWidth(arg));
51         }
52     }
53 }
54