blob: b1c6107cb9c55dfabcb504603379f504c4834f75 [file] [log] [blame]
/**
*******************************************************************************
* Copyright (C) 1996-2005, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*
*******************************************************************************
*/
package com.ibm.icu4jni.text;
/**
* Interface for storing ICU collation equivalent enum values.
* Constants with the prefix VALUE corresponds to ICU's UColAttributeValues,
* the rest corresponds to UColAttribute.
* @author syn wee quek
* @stable ICU 2.4
*/
public final class CollationAttribute
{
// Collation strength constants ----------------------------------
/**
* Default value, accepted by most attributes
* @stable ICU 2.4
*/
public static final int VALUE_DEFAULT = -1;
/**
* Primary collation strength
* @stable ICU 2.4
*/
public static final int VALUE_PRIMARY = 0;
/**
* Secondary collation strength
* @stable ICU 2.4
*/
public static final int VALUE_SECONDARY = 1;
/**
* Tertiary collation strength
* @stable ICU 2.4
*/
public static final int VALUE_TERTIARY = 2;
/**
* Default collation strength
* @stable ICU 2.4
*/
public static final int VALUE_DEFAULT_STRENGTH = VALUE_TERTIARY;
/**
* Quaternary collation strength
* @stable ICU 2.4
*/
public static final int VALUE_QUATERNARY = 3;
/**
* Identical collation strength
* @stable ICU 2.4
*/
public static final int VALUE_IDENTICAL = 15;
/**
* Turn the feature off - works for FRENCH_COLLATION, CASE_LEVEL,
* HIRAGANA_QUATERNARY_MODE and DECOMPOSITION_MODE
* @stable ICU 2.4
*/
public static final int VALUE_OFF = 16;
/** @stable ICU 2.4 */
public static final int VALUE_ON = 17;
/**
* ALTERNATE_HANDLING mode constants
* @stable ICU 2.4
*/
public static final int VALUE_SHIFTED = 20;
/** @stable ICU 2.4 */
public static final int VALUE_NON_IGNORABLE = 21;
/**
* CASE_FIRST mode constants
* @stable ICU 2.4
*/
public static final int VALUE_LOWER_FIRST = 24;
/** @stable ICU 2.4 */
public static final int VALUE_UPPER_FIRST = 25;
/**
* NORMALIZATION_MODE mode constants
* @deprecated ICU 2.4. Users advised to use VALUE_ON instead.
*/
public static final int VALUE_ON_WITHOUT_HANGUL = 28;
/**
* Number of attribute value constants
* @stable ICU 2.4
*/
public static final int VALUE_ATTRIBUTE_VALUE_COUNT = 29;
// Collation attribute constants -----------------------------------
/**
* Attribute for direction of secondary weights
* @stable ICU 2.4
*/
public static final int FRENCH_COLLATION = 0;
/**
* Attribute for handling variable elements
* @stable ICU 2.4
*/
public static final int ALTERNATE_HANDLING = 1;
/**
* Who goes first, lower case or uppercase.
* @stable ICU 2.4
*/
public static final int CASE_FIRST = 2;
/**
* Do we have an extra case level
* @stable ICU 2.4
*/
public static final int CASE_LEVEL = 3;
/**
* Attribute for normalization
* @stable ICU 2.4
*/
public static final int NORMALIZATION_MODE = 4;
/**
* Attribute for strength
* @stable ICU 2.4
*/
public static final int STRENGTH = 5;
/**
* Attribute count
* @stable ICU 2.4
*/
public static final int ATTRIBUTE_COUNT = 6;
// package methods --------------------------------------------------
/**
* Checks if argument is a valid collation strength
* @param strength potential collation strength
* @return true if strength is a valid collation strength, false otherwise
*/
static boolean checkStrength(int strength)
{
if (strength < VALUE_PRIMARY ||
(strength > VALUE_QUATERNARY && strength != VALUE_IDENTICAL))
return false;
return true;
}
/**
* Checks if argument is a valid collation type
* @param type collation type to be checked
* @return true if type is a valid collation type, false otherwise
*/
static boolean checkType(int type)
{
if (type < FRENCH_COLLATION || type > STRENGTH)
return false;
return true;
}
/**
* Checks if argument is a valid normalization type
* @param type normalization type to be checked
* @return true if type is a valid normalization type, false otherwise
*/
static boolean checkNormalization(int type)
{
if (type != VALUE_ON && type != VALUE_OFF
&& type != VALUE_ON_WITHOUT_HANGUL) {
return false;
}
return true;
}
/**
* Checks if attribute type and corresponding attribute value is valid
* @param type attribute type
* @param value attribute value
* @return true if the pair is valid, false otherwise
*/
static boolean checkAttribute(int type, int value)
{
if (value == VALUE_DEFAULT) {
return true;
}
switch (type)
{
case FRENCH_COLLATION :
if (value >= VALUE_OFF && value <= VALUE_ON)
return true;
break;
case ALTERNATE_HANDLING :
if (value >= VALUE_SHIFTED &&
value <= VALUE_NON_IGNORABLE)
return true;
break;
case CASE_FIRST :
if (value >= VALUE_LOWER_FIRST &&
value <= VALUE_UPPER_FIRST)
return true;
break;
case CASE_LEVEL :
return (value == VALUE_ON ||
value <= VALUE_OFF);
case NORMALIZATION_MODE :
return (value == VALUE_OFF || value == VALUE_ON ||
value == VALUE_ON_WITHOUT_HANGUL);
case STRENGTH :
checkStrength(value);
}
return false;
}
}