]> gitweb.fperrin.net Git - Dictionary.git/blob - src/com/hughes/android/dictionary/Language.java
440a7d011be20d2032930d4d02b2b5f7ac66d478
[Dictionary.git] / src / com / hughes / android / dictionary / Language.java
1 package com.hughes.android.dictionary;\r
2 \r
3 import java.util.Comparator;\r
4 import java.util.LinkedHashMap;\r
5 import java.util.Locale;\r
6 import java.util.Map;\r
7 \r
8 import com.ibm.icu.text.Collator;\r
9 \r
10 public class Language {\r
11 \r
12   final String symbol;\r
13   final Locale locale;\r
14 \r
15   final Collator sortCollator;\r
16   final Comparator<String> sortComparator;\r
17 \r
18   final Collator findCollator;\r
19   final Comparator<String> findComparator;\r
20 \r
21   public Language(final String symbol, final Locale locale) {\r
22     this.symbol = symbol;\r
23     this.locale = locale;\r
24 \r
25     this.sortCollator = Collator.getInstance(locale);\r
26     this.sortCollator.setDecomposition(Collator.CANONICAL_DECOMPOSITION);\r
27     this.sortCollator.setStrength(Collator.IDENTICAL);\r
28     this.sortComparator = new Comparator<String>() {\r
29       public int compare(final String s1, final String s2) {\r
30         return sortCollator.compare(textNorm(s1), textNorm(s2));\r
31       }\r
32     };\r
33 \r
34     this.findCollator = Collator.getInstance(locale);\r
35     this.findCollator.setDecomposition(Collator.CANONICAL_DECOMPOSITION);\r
36     this.findCollator.setStrength(Collator.SECONDARY);\r
37     this.findComparator = new Comparator<String>() {\r
38       public int compare(final String s1, final String s2) {\r
39         return findCollator.compare(textNorm(s1), textNorm(s2));\r
40       }\r
41     };\r
42 \r
43   }\r
44 \r
45   public String textNorm(final String s) {\r
46     return s;\r
47   }\r
48 \r
49   @Override\r
50   public String toString() {\r
51     return symbol;\r
52   }\r
53 \r
54   // ----------------------------------------------------------------\r
55 \r
56   public static final Language EN = new Language("EN", Locale.ENGLISH);\r
57 \r
58   public static final Language DE = new Language("DE", Locale.GERMAN) {\r
59     @Override\r
60     public String textNorm(String token) {\r
61       boolean sub = false;\r
62       for (int ePos = token.indexOf('e', 1); ePos != -1; ePos = token.indexOf(\r
63           'e', ePos + 1)) {\r
64         final char pre = Character.toLowerCase(token.charAt(ePos - 1));\r
65         if (pre == 'a' || pre == 'o' || pre == 'u') {\r
66           sub = true;\r
67           break;\r
68         }\r
69       }\r
70       if (!sub) {\r
71         return token;\r
72       }\r
73       token = token.replaceAll("ae", "ä");\r
74       token = token.replaceAll("oe", "ö");\r
75       token = token.replaceAll("ue", "ü");\r
76 \r
77       token = token.replaceAll("Ae", "Ä");\r
78       token = token.replaceAll("Oe", "Ö");\r
79       token = token.replaceAll("Ue", "Ü");\r
80       return token;\r
81     }\r
82   };\r
83 \r
84   // ----------------------------------------------------------------\r
85 \r
86   private static final Map<String, Language> symbolToLangauge = new LinkedHashMap<String, Language>();\r
87 \r
88   static {\r
89     symbolToLangauge.put(EN.symbol, EN);\r
90     symbolToLangauge.put(DE.symbol, DE);\r
91   }\r
92 \r
93   static Language lookup(final String symbol) {\r
94     return symbolToLangauge.get(symbol);\r
95   }\r
96 \r
97 }\r