blob: 2e69616a80709441ee7d68c53d6dd887f69fb6a6 [file] [log] [blame]
package com.ibm.text.UCD;
import com.ibm.icu.text.UnicodeSet;
import com.ibm.text.utility.*;
import java.util.*;
// Enumerated properties will be IntCodePointProperty.
// The string values they return will be the property value names.
// Binary properties are Enumerated properties. They return 0 or 1
abstract public class CodePointProperty {
// styles for names and string values
static final byte SHORT = 0, DEFAULT = 1, LONG = 2, NORMAL_LIMIT = 3;
// gets the property name
abstract public String getName(byte style);
// value may also be numeric, etc, but this returns string equivalent.
abstract public String getValue(int codePoint, byte style);
// returns true if the code point has the value
// works with any style that getValue takes
abstract public boolean hasValue(int codePoint, String value);
// returns the set of all code points with that value.
// same effect as using hasValue one by one, but faster internal implementation
abstract public UnicodeSet getSet(String value);
// returns a list of all possible values
// logically the same as looping from 0..10FFFF with getValue and getStyleLimit,
// and throwing out duplicates, but much faster.
static Iterator getAllValues(byte style) {
return null;
}
// gets top value style available for this property
public byte getStyleLimit(byte style) {
return NORMAL_LIMIT;
}
// returns true if the value is known to be uniform over a type.
// this is used for various optimizations, especially for Cn & Co
public boolean isUniformOverCategory(byte generalCategory) {
return false;
}
// subclasses
static abstract public class IntCodePointProperty extends CodePointProperty {
abstract int getNumericValue(int codePoint);
abstract int getMaxValue();
abstract int getMinValue();
static Iterator getAllNumericValues() {
return null;
}
}
static abstract public class DoubleCodePointProperty extends CodePointProperty {
abstract double getNumericValue(int codePoint);
abstract double getMaxValue();
abstract double getMinValue();
static Iterator getAllNumericValues() {
return null;
}
}
// registration and lookup
// register a new property
static void register(CodePointProperty newProp) {
//...
}
// finds a registered property by name
static CodePointProperty getInstance(String name) {
return null;
}
// returns a list of all registered properties
static Iterator getAllRegistered() {
return null;
}
// UnicodeSet would use these internally to handle properties. That is, when
// it encountered ... [:name=value:] ...
// it would do:
// CodePointProperty x = getInstance(name);
// if (x != null) doError(name, value);
// UnicodeSet s = x.getSet(value);
// and then use s.
// open issue: we could have a property like: contains("dot")
// in that case, we would register "contains" as the 'base' name,
// but allow lookup with string parameters ("dot")
// Maybe just adding:
public boolean hasParameters() {
return false;
}
public void setParameters(String parameters) {}
public String getParameters() {
return null;
}
// that way we could have [[:letter:]&[:contains(dot):]]
}