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