151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/* 22c87ad3a45cecf9e344487cad1abfdebe79f2c7cNarayan Kamath * Copyright (C) 2014 The Android Open Source Project 36e42190c7f7d7cf3d8b787c918de0d797c6ddbbaPaul Duffin * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. 451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This code is free software; you can redistribute it and/or modify it 751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * under the terms of the GNU General Public License version 2 only, as 851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * published by the Free Software Foundation. Oracle designates this 951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * particular file as subject to the "Classpath" exception as provided 1051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * by Oracle in the LICENSE file that accompanied this code. 1151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 1251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This code is distributed in the hope that it will be useful, but WITHOUT 1351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 1451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * version 2 for more details (a copy is included in the LICENSE file that 1651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * accompanied this code). 1751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 1851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * You should have received a copy of the GNU General Public License version 1951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 2 along with this work; if not, write to the Free Software Foundation, 2051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 2151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 2251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 2351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * or visit www.oracle.com if you need additional information or have any 2451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * questions. 2551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 2651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 2751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/* 2851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * (C) Copyright Taligent, Inc. 1996-1998 - All Rights Reserved 2951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * (C) Copyright IBM Corp. 1996-1998 - All Rights Reserved 3051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 3151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The original version of this source code and documentation is copyrighted 3251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * and owned by Taligent, Inc., a wholly-owned subsidiary of IBM. These 3351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * materials are provided under terms of a License Agreement between Taligent 3451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * and Sun. This technology is protected by multiple US and International 3551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * patents. This notice and attribution to Taligent may not be removed. 3651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Taligent is a registered trademark of Taligent, Inc. 3751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 3851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 3951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 4051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskipackage java.text; 4151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 4251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.util.Locale; 4351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 441ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmeraimport libcore.icu.ICU; 4551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 4651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/** 4751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The <code>Collator</code> class performs locale-sensitive 4851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>String</code> comparison. You use this class to build 4951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * searching and sorting routines for natural language text. 5051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 5151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> 5251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>Collator</code> is an abstract base class. Subclasses 5351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * implement specific collation strategies. One subclass, 5451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>RuleBasedCollator</code>, is currently provided with 5551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the Java Platform and is applicable to a wide set of languages. Other 5651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * subclasses may be created to handle more specialized needs. 5751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 5851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> 5951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Like other locale-sensitive classes, you can use the static 6051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * factory method, <code>getInstance</code>, to obtain the appropriate 6151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>Collator</code> object for a given locale. You will only need 6251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * to look at the subclasses of <code>Collator</code> if you need 6351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * to understand the details of a particular collation strategy or 6451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * if you need to modify that strategy. 6551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 6651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> 6751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The following example shows how to compare two strings using 6851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the <code>Collator</code> for the default locale. 6951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <blockquote> 706e42190c7f7d7cf3d8b787c918de0d797c6ddbbaPaul Duffin * <pre>{@code 7151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * // Compare two strings in the default locale 7251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Collator myCollator = Collator.getInstance(); 7351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * if( myCollator.compare("abc", "ABC") < 0 ) 7451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * System.out.println("abc is less than ABC"); 7551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * else 7651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * System.out.println("abc is greater than or equal to ABC"); 776e42190c7f7d7cf3d8b787c918de0d797c6ddbbaPaul Duffin * }</pre> 7851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * </blockquote> 7951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 8051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> 8151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * You can set a <code>Collator</code>'s <em>strength</em> property 8251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * to determine the level of difference considered significant in 8351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * comparisons. Four strengths are provided: <code>PRIMARY</code>, 8451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>SECONDARY</code>, <code>TERTIARY</code>, and <code>IDENTICAL</code>. 8551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The exact assignment of strengths to language features is 8651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * locale dependant. For example, in Czech, "e" and "f" are considered 8751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * primary differences, while "e" and "ě" are secondary differences, 8851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * "e" and "E" are tertiary differences and "e" and "e" are identical. 8951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The following shows how both case and accents could be ignored for 9051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * US English. 9151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <blockquote> 9251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <pre> 9351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * //Get the Collator for US English and set its strength to PRIMARY 9451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Collator usCollator = Collator.getInstance(Locale.US); 9551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * usCollator.setStrength(Collator.PRIMARY); 9651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * if( usCollator.compare("abc", "ABC") == 0 ) { 9751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * System.out.println("Strings are equivalent"); 9851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * } 9951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * </pre> 10051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * </blockquote> 10151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> 10251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * For comparing <code>String</code>s exactly once, the <code>compare</code> 10351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * method provides the best performance. When sorting a list of 10451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>String</code>s however, it is generally necessary to compare each 10551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>String</code> multiple times. In this case, <code>CollationKey</code>s 10651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * provide better performance. The <code>CollationKey</code> class converts 10751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * a <code>String</code> to a series of bits that can be compared bitwise 10851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * against other <code>CollationKey</code>s. A <code>CollationKey</code> is 10951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * created by a <code>Collator</code> object for a given <code>String</code>. 11051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <br> 11151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <strong>Note:</strong> <code>CollationKey</code>s from different 11251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>Collator</code>s can not be compared. See the class description 11351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * for {@link CollationKey} 11451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * for an example using <code>CollationKey</code>s. 11551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 11651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see RuleBasedCollator 11751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see CollationKey 11851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see CollationElementIterator 11951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see Locale 12051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @author Helena Shih, Laura Werner, Richard Gillam 12151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 12251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 12351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskipublic abstract class Collator 1244c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin implements java.util.Comparator<Object>, Cloneable 1254c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin{ 12651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 12751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Collator strength value. When set, only PRIMARY differences are 12851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * considered significant during comparison. The assignment of strengths 12951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * to language features is locale dependant. A common example is for 13051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * different base letters ("a" vs "b") to be considered a PRIMARY difference. 13151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.Collator#setStrength 13251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.Collator#getStrength 13351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 13451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public final static int PRIMARY = 0; 13551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 13651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Collator strength value. When set, only SECONDARY and above differences are 13751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * considered significant during comparison. The assignment of strengths 13851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * to language features is locale dependant. A common example is for 13951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * different accented forms of the same base letter ("a" vs "\u00E4") to be 14051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * considered a SECONDARY difference. 14151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.Collator#setStrength 14251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.Collator#getStrength 14351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 14451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public final static int SECONDARY = 1; 14551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 14651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Collator strength value. When set, only TERTIARY and above differences are 14751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * considered significant during comparison. The assignment of strengths 14851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * to language features is locale dependant. A common example is for 14951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * case differences ("a" vs "A") to be considered a TERTIARY difference. 15051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.Collator#setStrength 15151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.Collator#getStrength 15251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 15351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public final static int TERTIARY = 2; 15451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 15551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 15651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Collator strength value. When set, all differences are 15751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * considered significant during comparison. The assignment of strengths 15851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * to language features is locale dependant. A common example is for control 15951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * characters ("\u0001" vs "\u0002") to be considered equal at the 16051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * PRIMARY, SECONDARY, and TERTIARY levels but different at the IDENTICAL 16151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * level. Additionally, differences between pre-composed accents such as 16251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * "\u00C0" (A-grave) and combining accents such as "A\u0300" 16351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * (A, combining-grave) will be considered significant at the IDENTICAL 16451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * level if decomposition is set to NO_DECOMPOSITION. 16551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 16651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public final static int IDENTICAL = 3; 16751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 16851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 16951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Decomposition mode value. With NO_DECOMPOSITION 17051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * set, accented characters will not be decomposed for collation. This 17151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * is the default setting and provides the fastest collation but 17251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * will only produce correct results for languages that do not use accents. 17351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.Collator#getDecomposition 17451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.Collator#setDecomposition 17551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 17651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public final static int NO_DECOMPOSITION = 0; 17751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 17851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 17951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Decomposition mode value. With CANONICAL_DECOMPOSITION 18051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * set, characters that are canonical variants according to Unicode 18151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * standard will be decomposed for collation. This should be used to get 18251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * correct collation of accented characters. 18351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> 18451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * CANONICAL_DECOMPOSITION corresponds to Normalization Form D as 18551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * described in 18651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <a href="http://www.unicode.org/unicode/reports/tr15/tr15-23.html">Unicode 18751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Technical Report #15</a>. 18851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.Collator#getDecomposition 18951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.Collator#setDecomposition 19051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 19151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public final static int CANONICAL_DECOMPOSITION = 1; 19251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 19351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 19451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Decomposition mode value. With FULL_DECOMPOSITION 19551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * set, both Unicode canonical variants and Unicode compatibility variants 19651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * will be decomposed for collation. This causes not only accented 19751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * characters to be collated, but also characters that have special formats 19851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * to be collated with their norminal form. For example, the half-width and 19951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * full-width ASCII and Katakana characters are then collated together. 20051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * FULL_DECOMPOSITION is the most complete and therefore the slowest 20151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * decomposition mode. 20251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> 20351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * FULL_DECOMPOSITION corresponds to Normalization Form KD as 20451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * described in 20551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <a href="http://www.unicode.org/unicode/reports/tr15/tr15-23.html">Unicode 20651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Technical Report #15</a>. 20751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.Collator#getDecomposition 20851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.Collator#setDecomposition 20951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 21051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public final static int FULL_DECOMPOSITION = 2; 21151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 21251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 21351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Gets the Collator for the current default locale. 21451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The default locale is determined by java.util.Locale.getDefault. 21551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the Collator for the default locale.(for example, en_US) 21651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Locale#getDefault 21751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 21851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public static synchronized Collator getInstance() { 21951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return getInstance(Locale.getDefault()); 22051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 22151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 22251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 22351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Gets the Collator for the desired locale. 22451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param desiredLocale the desired locale. 22551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the Collator for the desired locale. 22651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Locale 22751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.ResourceBundle 22851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 229fb7057723ccbfb9412fdf3159eb6c5403397efbfJoachim Sauer // Android-changed: Switched to ICU. 230fb7057723ccbfb9412fdf3159eb6c5403397efbfJoachim Sauer public static synchronized Collator getInstance(Locale desiredLocale) 2314c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin { 232595b4de8f2f9744cba2d73a5e7e50278d86ec65fPiotr Jastrzebski if (desiredLocale == null) { 233595b4de8f2f9744cba2d73a5e7e50278d86ec65fPiotr Jastrzebski throw new NullPointerException("locale == null"); 23451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 2351ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera return new RuleBasedCollator((android.icu.text.RuleBasedCollator) 2361ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera android.icu.text.Collator.getInstance(desiredLocale)); 2371ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera } 2381ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera 2391ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera /** 24051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Compares the source string to the target string according to the 24151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * collation rules for this Collator. Returns an integer less than, 24251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * equal to or greater than zero depending on whether the source String is 24351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * less than, equal to or greater than the target string. See the Collator 24451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * class description for an example of use. 24551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> 24651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * For a one time comparison, this method has the best performance. If a 24751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * given String will be involved in multiple comparisons, CollationKey.compareTo 24851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * has the best performance. See the Collator class description for an example 24951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * using CollationKeys. 25051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param source the source string. 25151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param target the target string. 25251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return Returns an integer value. Value is less than zero if source is less than 25351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * target, value is zero if source and target are equal, value is greater than zero 25451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * if source is greater than target. 25551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.CollationKey 25651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.Collator#getCollationKey 25751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 25851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public abstract int compare(String source, String target); 25951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 26051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 26151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Compares its two arguments for order. Returns a negative integer, 26251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * zero, or a positive integer as the first argument is less than, equal 26351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * to, or greater than the second. 26451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> 26551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This implementation merely returns 2664c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * <code> compare((String)o1, (String)o2) </code>. 26751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 26851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return a negative integer, zero, or a positive integer as the 2694c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * first argument is less than, equal to, or greater than the 2704c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * second. 2714c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * @exception ClassCastException the arguments cannot be cast to Strings. 27251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.util.Comparator 2734c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * @since 1.2 27451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 2754c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin @Override 27651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public int compare(Object o1, Object o2) { 2774c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin return compare((String)o1, (String)o2); 27851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 27951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 28051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 28151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Transforms the String into a series of bits that can be compared bitwise 28251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * to other CollationKeys. CollationKeys provide better performance than 28351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Collator.compare when Strings are involved in multiple comparisons. 28451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * See the Collator class description for an example using CollationKeys. 28551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param source the string to be transformed into a collation key. 28651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the CollationKey for the given String based on this Collator's collation 28751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * rules. If the source String is null, a null CollationKey is returned. 28851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.CollationKey 28951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.Collator#compare 29051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 29151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public abstract CollationKey getCollationKey(String source); 29251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 29351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 29451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Convenience method for comparing the equality of two strings based on 29551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * this Collator's collation rules. 29651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param source the source string to be compared with. 29751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param target the target string to be compared with. 29851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return true if the strings are equal according to the collation 29951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * rules. false, otherwise. 30051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.Collator#compare 30151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 3024c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin public boolean equals(String source, String target) 3034c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin { 304fb7057723ccbfb9412fdf3159eb6c5403397efbfJoachim Sauer // Android-changed: remove use of unnecessary EQUAL constant. 3051ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera return (compare(source, target) == 0); 30651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 30751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 30851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 30951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns this Collator's strength property. The strength property determines 31051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the minimum level of difference considered significant during comparison. 31151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * See the Collator class description for an example of use. 31251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return this Collator's current strength property. 31351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.Collator#setStrength 31451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.Collator#PRIMARY 31551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.Collator#SECONDARY 31651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.Collator#TERTIARY 31751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.Collator#IDENTICAL 31851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 3194c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin public synchronized int getStrength() 3204c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin { 32192924f23a03635bb194b6481c4a950e6414ca4e4Neil Fuller // Android-changed: Switched to ICU. 3221ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera // The value for IDENTICAL in ICU differs from that used in this class. 3231ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera int value = icuColl.getStrength(); 3241ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera return (value == android.icu.text.Collator.IDENTICAL) ? IDENTICAL : value; 32551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 32651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 32751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 32851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Sets this Collator's strength property. The strength property determines 32951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the minimum level of difference considered significant during comparison. 33051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * See the Collator class description for an example of use. 3314c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * @param newStrength the new strength value. 3324c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * @see java.text.Collator#getStrength 3334c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * @see java.text.Collator#PRIMARY 3344c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * @see java.text.Collator#SECONDARY 3354c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * @see java.text.Collator#TERTIARY 3364c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * @see java.text.Collator#IDENTICAL 3374c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * @exception IllegalArgumentException If the new strength value is not one of 3384c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * PRIMARY, SECONDARY, TERTIARY or IDENTICAL. 33951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 34051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public synchronized void setStrength(int newStrength) { 34192924f23a03635bb194b6481c4a950e6414ca4e4Neil Fuller // Android-changed: Switched to ICU. 3421ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera // The ICU value for IDENTICAL differs from that defined in this class. 3431ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera if (newStrength == IDENTICAL) { 3441ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera newStrength = android.icu.text.Collator.IDENTICAL; 345595b4de8f2f9744cba2d73a5e7e50278d86ec65fPiotr Jastrzebski } 3461ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera icuColl.setStrength(newStrength); 34751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 34851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 34951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 35051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Get the decomposition mode of this Collator. Decomposition mode 35151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * determines how Unicode composed characters are handled. Adjusting 35251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * decomposition mode allows the user to select between faster and more 35351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * complete collation behavior. 35451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p>The three values for decomposition mode are: 35551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <UL> 35651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <LI>NO_DECOMPOSITION, 35751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <LI>CANONICAL_DECOMPOSITION 35851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <LI>FULL_DECOMPOSITION. 35951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * </UL> 36051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * See the documentation for these three constants for a description 36151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * of their meaning. 36251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the decomposition mode 36351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.Collator#setDecomposition 36451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.Collator#NO_DECOMPOSITION 36551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.Collator#CANONICAL_DECOMPOSITION 36651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.Collator#FULL_DECOMPOSITION 36751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 3684c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin public synchronized int getDecomposition() 3694c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin { 37092924f23a03635bb194b6481c4a950e6414ca4e4Neil Fuller // Android-changed: Switched to ICU. 371595b4de8f2f9744cba2d73a5e7e50278d86ec65fPiotr Jastrzebski return decompositionMode_ICU_Java(icuColl.getDecomposition()); 372595b4de8f2f9744cba2d73a5e7e50278d86ec65fPiotr Jastrzebski } 37351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 37451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Set the decomposition mode of this Collator. See getDecomposition 37551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * for a description of decomposition mode. 3764c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * @param decompositionMode the new decomposition mode. 37751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.Collator#getDecomposition 37851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.Collator#NO_DECOMPOSITION 37951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.Collator#CANONICAL_DECOMPOSITION 38051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.text.Collator#FULL_DECOMPOSITION 3814c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * @exception IllegalArgumentException If the given value is not a valid decomposition 3824c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * mode. 38351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 38451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public synchronized void setDecomposition(int decompositionMode) { 38592924f23a03635bb194b6481c4a950e6414ca4e4Neil Fuller // Android-changed: Switched to ICU. 386595b4de8f2f9744cba2d73a5e7e50278d86ec65fPiotr Jastrzebski icuColl.setDecomposition(decompositionMode_Java_ICU(decompositionMode)); 387595b4de8f2f9744cba2d73a5e7e50278d86ec65fPiotr Jastrzebski } 388595b4de8f2f9744cba2d73a5e7e50278d86ec65fPiotr Jastrzebski 38992924f23a03635bb194b6481c4a950e6414ca4e4Neil Fuller // Android-changed: Removed references to CollatorProvider. 3904c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin /** 3914c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * Returns an array of all locales for which the 3924c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * <code>getInstance</code> methods of this class can return 3934c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * localized instances. 3944c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * 3954c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * @return An array of locales for which localized 3964c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * <code>Collator</code> instances are available. 3974c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin */ 3984c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin public static synchronized Locale[] getAvailableLocales() { 39992924f23a03635bb194b6481c4a950e6414ca4e4Neil Fuller // Android-changed: Removed reference to CollatorProvider. Switched to ICU. 4004c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin return ICU.getAvailableCollatorLocales(); 4014c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin } 4024c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin 403fb7057723ccbfb9412fdf3159eb6c5403397efbfJoachim Sauer // BEGIN Android-added: conversion method for decompositionMode constants. 404595b4de8f2f9744cba2d73a5e7e50278d86ec65fPiotr Jastrzebski private int decompositionMode_Java_ICU(int mode) { 405595b4de8f2f9744cba2d73a5e7e50278d86ec65fPiotr Jastrzebski switch (mode) { 4061ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera case Collator.CANONICAL_DECOMPOSITION: 4071ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera return android.icu.text.Collator.CANONICAL_DECOMPOSITION; 4081ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera case Collator.NO_DECOMPOSITION: 4091ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera return android.icu.text.Collator.NO_DECOMPOSITION; 410595b4de8f2f9744cba2d73a5e7e50278d86ec65fPiotr Jastrzebski } 411595b4de8f2f9744cba2d73a5e7e50278d86ec65fPiotr Jastrzebski throw new IllegalArgumentException("Bad mode: " + mode); 41251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 41351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 4141ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera private int decompositionMode_ICU_Java(int mode) { 4151ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera int javaMode = mode; 4161ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera switch (mode) { 4171ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera case android.icu.text.Collator.NO_DECOMPOSITION: 4181ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera javaMode = Collator.NO_DECOMPOSITION; 4191ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera break; 4201ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera case android.icu.text.Collator.CANONICAL_DECOMPOSITION: 4211ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera javaMode = Collator.CANONICAL_DECOMPOSITION; 4221ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera break; 42351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 4241ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera return javaMode; 42551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 426fb7057723ccbfb9412fdf3159eb6c5403397efbfJoachim Sauer // END Android-added: conversion method for decompositionMode constants. 42751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 428fb7057723ccbfb9412fdf3159eb6c5403397efbfJoachim Sauer // Android-changed: improve documentation. 42951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 4304c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * Returns a new collator with the same decomposition mode and 4314c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * strength value as this collator. 4321ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera * 4334c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * @return a shallow copy of this collator. 4344c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * @see java.lang.Cloneable 4354c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin */ 4364c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin @Override 4374c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin public Object clone() 4384c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin { 4394c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin try { 44092924f23a03635bb194b6481c4a950e6414ca4e4Neil Fuller // Android-changed: Switched to ICU. 4414c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin Collator clone = (Collator) super.clone(); 4424c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin clone.icuColl = (android.icu.text.Collator) icuColl.clone(); 4434c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin return clone; 4444c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin } catch (CloneNotSupportedException e) { 4454c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin throw new AssertionError(e); 4464c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin } 4474c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin } 4484c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin 4494c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin /** 4504c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * Compares the equality of two Collators. 45151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param that the Collator to be compared with this. 45251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return true if this Collator is the same as that Collator; 45351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * false otherwise. 45451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 4554c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin @Override 4564c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin public boolean equals(Object that) 4574c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin { 4586e42190c7f7d7cf3d8b787c918de0d797c6ddbbaPaul Duffin if (this == that) { 4596e42190c7f7d7cf3d8b787c918de0d797c6ddbbaPaul Duffin return true; 4606e42190c7f7d7cf3d8b787c918de0d797c6ddbbaPaul Duffin } 4616e42190c7f7d7cf3d8b787c918de0d797c6ddbbaPaul Duffin if (that == null) { 4626e42190c7f7d7cf3d8b787c918de0d797c6ddbbaPaul Duffin return false; 4636e42190c7f7d7cf3d8b787c918de0d797c6ddbbaPaul Duffin } 4646e42190c7f7d7cf3d8b787c918de0d797c6ddbbaPaul Duffin if (getClass() != that.getClass()) { 4656e42190c7f7d7cf3d8b787c918de0d797c6ddbbaPaul Duffin return false; 4666e42190c7f7d7cf3d8b787c918de0d797c6ddbbaPaul Duffin } 46751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski Collator other = (Collator) that; 46892924f23a03635bb194b6481c4a950e6414ca4e4Neil Fuller // Android-changed: Switched to ICU. 469595b4de8f2f9744cba2d73a5e7e50278d86ec65fPiotr Jastrzebski return icuColl == null ? other.icuColl == null : icuColl.equals(other.icuColl); 47051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 47151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 47251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 47351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Generates the hash code for this Collator. 47451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 4754c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin @Override 47651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski abstract public int hashCode(); 4774c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin 4784c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin /** 4794c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * Default constructor. This constructor is 4804c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * protected so subclasses can get access to it. Users typically create 4814c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * a Collator sub-class by calling the factory method getInstance. 4824c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin * @see java.text.Collator#getInstance 4834c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin */ 4844c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin protected Collator() 4854c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin { 48692924f23a03635bb194b6481c4a950e6414ca4e4Neil Fuller // Android-changed: Switched to ICU. 4874c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin icuColl = android.icu.text.RuleBasedCollator.getInstance(Locale.getDefault()); 4884c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin } 4894c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin 490fb7057723ccbfb9412fdf3159eb6c5403397efbfJoachim Sauer // Android-added: ICU Collator this delegates to. 4914c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin android.icu.text.Collator icuColl; 4924c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin 493fb7057723ccbfb9412fdf3159eb6c5403397efbfJoachim Sauer // Android-added: protected constructor taking a Collator. 4944c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin Collator(android.icu.text.Collator icuColl) { 4954c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin this.icuColl = icuColl; 4964c8d6d2a84cffba9a34ea03d534d77027fb1974ePaul Duffin } 497fb7057723ccbfb9412fdf3159eb6c5403397efbfJoachim Sauer 498fb7057723ccbfb9412fdf3159eb6c5403397efbfJoachim Sauer // Android-removed: Fields and constants. 4991ee1fbedc2e3f810a69d7a73a07f3f9a8388b488Shubham Ajmera} 500