]> gitweb.fperrin.net Git - Dictionary.git/blob - src/com/hughes/android/dictionary/Language.java
go
[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.Map;\r
6 \r
7 import com.hughes.util.StringUtil;\r
8 \r
9 public abstract class Language {\r
10 \r
11   final String symbol;\r
12   final Comparator<String> tokenComparator;\r
13 \r
14   public Language(final String symbol) {\r
15     this.symbol = symbol;\r
16     this.tokenComparator = new Comparator<String>() {\r
17       public int compare(final String s1, final String s2) {\r
18         final String norm1 = normalizeTokenForSort(s1);\r
19         final String norm2 = normalizeTokenForSort(s2);\r
20         final int c = norm1.compareTo(norm2);\r
21         if (c != 0) {\r
22           return c;\r
23         }\r
24         return StringUtil.reverse(s1).compareTo(StringUtil.reverse(s2));\r
25       }};\r
26   }\r
27   \r
28   @Override\r
29   public String toString() {\r
30     return symbol;\r
31   }\r
32 \r
33   abstract String normalizeTokenForSort(final String token);\r
34 \r
35 \r
36   // ----------------------------------------------------------------\r
37 \r
38   public static final Language EN = new Language("EN") {\r
39     @Override\r
40     public String normalizeTokenForSort(final String token) {\r
41       return token.toLowerCase().replaceAll("ß", "ss").replaceAll("ä", "a")\r
42           .replaceAll("ö", "o").replaceAll("ü", "u").replaceAll("[^A-Za-z0-9]",\r
43               "");\r
44     }\r
45   };\r
46 \r
47   public static final Language DE = new Language("DE") {\r
48     @Override\r
49     String normalizeTokenForSort(final String token) {\r
50       return token.toLowerCase().replaceAll("ß", "ss").replaceAll("ä", "a")\r
51           .replaceAll("ae", "a").replaceAll("ö", "o").replaceAll("oe", "o")\r
52           .replaceAll("ü", "u").replaceAll("ue", "u").replaceAll(\r
53               "[^A-Za-z0-9]", "");\r
54     }\r
55   };\r
56 \r
57   // ----------------------------------------------------------------\r
58 \r
59   private static final Map<String, Language> symbolToLangauge = new LinkedHashMap<String, Language>();\r
60 \r
61   static {\r
62     symbolToLangauge.put(EN.symbol, EN);\r
63     symbolToLangauge.put(DE.symbol, DE);\r
64   }\r
65   \r
66   static Language lookup(final String symbol) {\r
67     return symbolToLangauge.get(symbol);\r
68   }\r
69 \r
70 \r
71 }\r