]> gitweb.fperrin.net Git - Dictionary.git/blobdiff - src/com/hughes/android/dictionary/Language.java
go
[Dictionary.git] / src / com / hughes / android / dictionary / Language.java
index 947eba1031c006d1d513175ded459a3609b66c66..122372de6815d99a0230f901ee99a2b9488652d2 100755 (executable)
@@ -21,7 +21,7 @@ public abstract class Language {
         if (c != 0) {\r
           return c;\r
         }\r
-        return StringUtil.reverse(s1).compareTo(StringUtil.reverse(s2));\r
+        return StringUtil.flipCase(StringUtil.reverse(s1)).compareTo(StringUtil.flipCase(StringUtil.reverse(s2)));\r
       }};\r
   }\r
   \r
@@ -34,23 +34,48 @@ public abstract class Language {
 \r
 \r
   // ----------------------------------------------------------------\r
+  \r
+  static final String normalizeTokenForSort(final String token, final boolean vowelETranslation) {\r
+    final StringBuilder result = new StringBuilder();\r
+    for (int i = 0; i < token.length(); ++i) {\r
+      Character c = token.charAt(i);\r
+      c = Character.toLowerCase(c);\r
+      // only check for lowercase 'e' in subsequent position means don't treat acronyms as umlauted: SAE.\r
+      if (vowelETranslation && (c == 'a' || c == 'o' || c == 'u') && i + 1 < token.length() && token.charAt(i + 1) == 'e') {\r
+        if (c == 'a') {\r
+          result.append('ä');\r
+        } else if (c == 'o') {\r
+          result.append('ö');\r
+        } else if (c == 'u') {\r
+          result.append('ü');\r
+        }\r
+        ++i;\r
+      } else if (c >= 'a' && c <= 'z' || c >= '0' && c <= '9') {\r
+        result.append(c);\r
+      } else if (c == 'ß') {\r
+        result.append("ss");\r
+      } else if (c == 'ä') {\r
+        result.append(c);\r
+      } else if (c == 'ö') {\r
+        result.append(c);\r
+      } else if (c == 'ü') {\r
+        result.append(c);\r
+      }\r
+    }\r
+    return result.toString();\r
+  }\r
 \r
   public static final Language EN = new Language("EN") {\r
     @Override\r
     public String normalizeTokenForSort(final String token) {\r
-      return token.toLowerCase().replaceAll("ß", "ss").replaceAll("ä", "a")\r
-          .replaceAll("ö", "o").replaceAll("ü", "u").replaceAll("[^A-Za-z0-9]",\r
-              "");\r
+      return Language.normalizeTokenForSort(token, false);\r
     }\r
   };\r
-\r
+    \r
   public static final Language DE = new Language("DE") {\r
     @Override\r
     String normalizeTokenForSort(final String token) {\r
-      return token.toLowerCase().replaceAll("ß", "ss").replaceAll("ä", "a")\r
-          .replaceAll("ae", "a").replaceAll("ö", "o").replaceAll("oe", "o")\r
-          .replaceAll("ü", "u").replaceAll("ue", "u").replaceAll(\r
-              "[^A-Za-z0-9]", "");\r
+      return Language.normalizeTokenForSort(token, true);\r
     }\r
   };\r
 \r