X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=src%2Fcom%2Fhughes%2Fandroid%2Fdictionary%2Fengine%2FLanguage.java;h=42ad7b60c43b758399db8a4e59a95de773ea6578;hb=7570dd30c59e1fa56758af1e3b97b531df47fe9e;hp=b4d8558358a86a91ff4513fa2381c5fe6d13727f;hpb=daed9b15f5ae067f0c03fc2bb942b3171aed9b4f;p=Dictionary.git diff --git a/src/com/hughes/android/dictionary/engine/Language.java b/src/com/hughes/android/dictionary/engine/Language.java index b4d8558..42ad7b6 100755 --- a/src/com/hughes/android/dictionary/engine/Language.java +++ b/src/com/hughes/android/dictionary/engine/Language.java @@ -1,6 +1,5 @@ package com.hughes.android.dictionary.engine; -import java.util.Comparator; import java.util.LinkedHashMap; import java.util.Locale; import java.util.Map; @@ -13,36 +12,18 @@ public class Language { final String symbol; final Locale locale; - - Collator sortCollator; - final Comparator sortComparator; - - private Collator findCollator; - final Comparator findComparator; + + final Collator collator; public Language(final Locale locale) { this.symbol = locale.getLanguage(); this.locale = locale; + this.collator = Collator.getInstance(locale); + this.collator.setStrength(Collator.IDENTICAL); - this.sortComparator = new Comparator() { - public int compare(final String s1, final String s2) { - return getSortCollator().compare(textNorm(s1, false), textNorm(s2, false)); - } - }; - - this.findComparator = new Comparator() { - public int compare(final String s1, final String s2) { - return getFindCollator().compare(textNorm(s1, false), textNorm(s2, false)); - } - }; - symbolToLangauge.put(symbol.toLowerCase(), this); } - public String textNorm(final String s, final boolean toLower) { - return toLower ? s.toLowerCase() : s; - } - @Override public String toString() { return locale.toString(); @@ -52,24 +33,13 @@ public class Language { return symbol; } - public synchronized Collator getFindCollator() { - if (findCollator == null) { - findCollator = Collator.getInstance(locale); - findCollator.setDecomposition(Collator.CANONICAL_DECOMPOSITION); - findCollator.setStrength(Collator.SECONDARY); - } - return findCollator; + public Collator getCollator() { + return collator; } - - public synchronized Collator getSortCollator() { - if (sortCollator == null) { - sortCollator = Collator.getInstance(locale); - sortCollator.setDecomposition(Collator.CANONICAL_DECOMPOSITION); - sortCollator.setStrength(Collator.IDENTICAL); - } - return sortCollator; + + public String getDefaultNormalizerRules() { + return ":: Any-Latin; :: Lower; :: NFD; :: [:Nonspacing Mark:] Remove; :: NFC ;"; } - // ---------------------------------------------------------------- public static final Language en = new Language(Locale.ENGLISH); @@ -78,37 +48,8 @@ public class Language { public static final Language de = new Language(Locale.GERMAN) { @Override - public String textNorm(String token, final boolean toLower) { - if (toLower) { - token = token.toLowerCase(); - } - boolean sub = false; - // This is meant to be fast: occurrences of ae, oe, ue are probably rare. - for (int ePos = token.indexOf('e', 1); ePos != -1; ePos = token.indexOf( - 'e', ePos + 1)) { - final char pre = Character.toLowerCase(token.charAt(ePos - 1)); - if (pre == 'a' || pre == 'o' || pre == 'u') { - sub = true; - break; - } - } - if (!sub) { - return token; - } - - token = token.replaceAll("ae", "ä"); - token = token.replaceAll("oe", "ö"); - token = token.replaceAll("ue", "ü"); - - token = token.replaceAll("Ae", "Ä"); - token = token.replaceAll("Oe", "Ö"); - token = token.replaceAll("Ue", "Ü"); - - token = token.replaceAll("AE", "Ä"); - token = token.replaceAll("OE", "Ö"); - token = token.replaceAll("UE", "Ü"); - - return token; + public String getDefaultNormalizerRules() { + return ":: Lower; 'ae' > 'ä'; 'oe' > 'ö'; 'ue' > 'ü'; 'ß' > 'ss'; "; } };