1 // Copyright 2011 Google Inc. All Rights Reserved.
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
7 // http://www.apache.org/licenses/LICENSE-2.0
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
15 package com.hughes.android.dictionary.engine;
17 import java.util.Comparator;
18 import java.util.Locale;
20 import com.ibm.icu.text.Transliterator;
22 public class NormalizeComparator implements Comparator<String> {
24 private final Transliterator normalizer;
25 private final Comparator<Object> comparator;
26 private final int version;
28 public NormalizeComparator(final Transliterator normalizer,
29 final Comparator<Object> comparator, int version) {
30 this.normalizer = normalizer;
31 this.comparator = comparator;
32 this.version = version;
35 public static String withoutDash(final String a) {
36 return a.replace("-", "").replace("þ", "th").replace("Þ", "Th");
39 // Handles comparison between items containing "-".
40 // Also replaces other problematic cases like "thorn".
41 public static int compareWithoutDash(final String a, final String b, final Comparator<Object> c, int version) {
42 if (version < 7) return 0;
43 String s1 = withoutDash(a);
44 String s2 = withoutDash(b);
45 return c.compare(s1, s2);
48 public String normalize(String s) {
49 return normalizer == null ? s.toLowerCase(Locale.US) : normalizer.transform(s);
52 public int compareNormalized(final String s1, final String s2, final String n1, final String n2) {
53 int cn = compareWithoutDash(n1, n2, comparator, version);
57 cn = comparator.compare(n1, n2);
61 return comparator.compare(s1, s2);
65 public int compare(final String s1, final String s2) {
66 final String n1 = normalize(s1);
67 final String n2 = normalize(s2);
68 return compareNormalized(s1, s2, n1, n2);