]> gitweb.fperrin.net Git - Dictionary.git/blobdiff - src/com/hughes/android/dictionary/engine/Language.java
Added Apache license.
[Dictionary.git] / src / com / hughes / android / dictionary / engine / Language.java
old mode 100755 (executable)
new mode 100644 (file)
index b4d8558..5aae782
@@ -1,6 +1,19 @@
+// Copyright 2011 Google Inc. All Rights Reserved.\r
+//\r
+// Licensed under the Apache License, Version 2.0 (the "License");\r
+// you may not use this file except in compliance with the License.\r
+// You may obtain a copy of the License at\r
+//\r
+//     http://www.apache.org/licenses/LICENSE-2.0\r
+//\r
+// Unless required by applicable law or agreed to in writing, software\r
+// distributed under the License is distributed on an "AS IS" BASIS,\r
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+// See the License for the specific language governing permissions and\r
+// limitations under the License.\r
+\r
 package com.hughes.android.dictionary.engine;\r
 \r
-import java.util.Comparator;\r
 import java.util.LinkedHashMap;\r
 import java.util.Locale;\r
 import java.util.Map;\r
@@ -13,36 +26,16 @@ public class Language {
 \r
   final String symbol;\r
   final Locale locale;\r
-\r
-  Collator sortCollator;\r
-  final Comparator<String> sortComparator;\r
-\r
-  private Collator findCollator;\r
-  final Comparator<String> findComparator;\r
+  \r
+  private Collator collator;\r
 \r
   public Language(final Locale locale) {\r
     this.symbol = locale.getLanguage();\r
     this.locale = locale;\r
 \r
-    this.sortComparator = new Comparator<String>() {\r
-      public int compare(final String s1, final String s2) {\r
-        return getSortCollator().compare(textNorm(s1, false), textNorm(s2, false));\r
-      }\r
-    };\r
-\r
-    this.findComparator = new Comparator<String>() {\r
-      public int compare(final String s1, final String s2) {\r
-        return getFindCollator().compare(textNorm(s1, false), textNorm(s2, false));\r
-      }\r
-    };\r
-    \r
     symbolToLangauge.put(symbol.toLowerCase(), this);\r
   }\r
 \r
-  public String textNorm(final String s, final boolean toLower) {\r
-    return toLower ? s.toLowerCase() : s;\r
-  }\r
-\r
   @Override\r
   public String toString() {\r
     return locale.toString();\r
@@ -52,24 +45,17 @@ public class Language {
     return symbol;\r
   }\r
   \r
-  public synchronized Collator getFindCollator() {\r
-    if (findCollator == null) {\r
-      findCollator = Collator.getInstance(locale);\r
-      findCollator.setDecomposition(Collator.CANONICAL_DECOMPOSITION);\r
-      findCollator.setStrength(Collator.SECONDARY);\r
+  public synchronized Collator getCollator() {\r
+    if (collator == null) {\r
+      this.collator = Collator.getInstance(locale);\r
+      this.collator.setStrength(Collator.IDENTICAL);\r
     }\r
-    return findCollator;\r
+    return collator;\r
   }\r
-\r
-  public synchronized Collator getSortCollator() {\r
-    if (sortCollator == null) {\r
-      sortCollator = Collator.getInstance(locale);\r
-      sortCollator.setDecomposition(Collator.CANONICAL_DECOMPOSITION);\r
-      sortCollator.setStrength(Collator.IDENTICAL);\r
-    }\r
-    return sortCollator;\r
+  \r
+  public String getDefaultNormalizerRules() {\r
+    return ":: Any-Latin; :: Lower; :: NFD; :: [:Nonspacing Mark:] Remove; :: NFC ;";\r
   }\r
-\r
   // ----------------------------------------------------------------\r
 \r
   public static final Language en = new Language(Locale.ENGLISH);\r
@@ -78,52 +64,19 @@ public class Language {
 \r
   public static final Language de = new Language(Locale.GERMAN) {\r
     @Override\r
-    public String textNorm(String token, final boolean toLower) {\r
-      if (toLower) {\r
-        token = token.toLowerCase();\r
-      }\r
-      boolean sub = false;\r
-      // This is meant to be fast: occurrences of ae, oe, ue are probably rare.\r
-      for (int ePos = token.indexOf('e', 1); ePos != -1; ePos = token.indexOf(\r
-          'e', ePos + 1)) {\r
-        final char pre = Character.toLowerCase(token.charAt(ePos - 1));\r
-        if (pre == 'a' || pre == 'o' || pre == 'u') {\r
-          sub = true;\r
-          break;\r
-        }\r
-      }\r
-      if (!sub) {\r
-        return token;\r
-      }\r
-      \r
-      token = token.replaceAll("ae", "ä");\r
-      token = token.replaceAll("oe", "ö");\r
-      token = token.replaceAll("ue", "ü");\r
-\r
-      token = token.replaceAll("Ae", "Ä");\r
-      token = token.replaceAll("Oe", "Ö");\r
-      token = token.replaceAll("Ue", "Ü");\r
-\r
-      token = token.replaceAll("AE", "Ä");\r
-      token = token.replaceAll("OE", "Ö");\r
-      token = token.replaceAll("UE", "Ü");\r
-      \r
-      return token;   \r
+    public String getDefaultNormalizerRules() {\r
+      return ":: Lower; 'ae' > 'ä'; 'oe' > 'ö'; 'ue' > 'ü'; 'ß' > 'ss'; ";\r
     }\r
   };\r
   \r
-  static {\r
-    for (final String lang : Locale.getISOLanguages()) {\r
-      if (lookup(lang) == null) {\r
-        new Language(new Locale(lang));\r
-      }\r
-    }\r
-  }\r
-\r
   // ----------------------------------------------------------------\r
 \r
-  public static Language lookup(final String symbol) {\r
-    return symbolToLangauge.get(symbol.toLowerCase());\r
+  public static synchronized Language lookup(final String symbol) {\r
+    Language lang = symbolToLangauge.get(symbol.toLowerCase());\r
+    if (lang == null) {\r
+      lang = new Language(new Locale(symbol));\r
+    }\r
+    return lang;\r
   }\r
 \r
 }\r