blob: bda574cbb6bda73d3a2d1f8521e84f96b1b37aa5 [file] [log] [blame]
package com.ibm.text.UCD;
import com.ibm.icu.text.UnicodeSet;
import com.ibm.text.utility.*;
public abstract class UCDProperty implements UCD_Types {
// TODO: turn all of these into privates, and use setters only
protected UCD ucd;
protected boolean isStandard = true;
protected byte type = NOT_DERIVED;
private byte valueType = BINARY_PROP;
protected boolean hasUnassigned = false;
protected boolean isBinary = true;
protected byte defaultValueStyle = SHORT;
protected byte defaultPropertyStyle = LONG;
protected String valueName;
protected String numberValueName;
protected String shortValueName;
protected String header;
protected String subheader;
protected String name;
protected String shortName;
protected String numberName;
protected boolean skeletonize = true;
/**
* Return the UCD in use
*/
public UCD getUCD() { return ucd; }
/**
* Is it part of the standard, or just for my testing?
*/
public boolean isStandard() { return isStandard; }
public void setStandard(boolean in) { isStandard = in; }
public boolean skipInDerivedListing() {return false;}
public boolean isDefaultValue() {return false;}
/**
* What type is it? DERIVED..
*/
public byte getType() { return type; }
public void setType(byte in) { type = in; }
/**
* Does getProperty vary in contents? ENUMERATED,...
*/
public byte getValueType() { return valueType; }
public void setValueType(byte in) { valueType = in; }
/**
* Does it apply to any unassigned characters?
*/
public boolean hasUnassigned() { return hasUnassigned; }
public void setHasUnassigned(boolean in) { hasUnassigned = in; }
/** Header used in DerivedXXX files
*/
public String getHeader() { return header; }
public void setHeader(String in) { header = in; }
/** Header used in DerivedXXX files
*/
public String getSubHeader() { return subheader; }
public void setSubHeader(String in) { subheader = in; }
/**
* Get the full name. Style is SHORT, NORMAL, LONG
*/
public String getFullName(byte style) {
return getPropertyName(style) + "=" + getValue(style);
}
public String getFullName() {
return getFullName(NORMAL);
}
/**
* Get the property name. Style is SHORT, NORMAL, LONG
*/
public String getPropertyName(byte style) {
if (style == NORMAL) style = defaultPropertyStyle;
switch (style) {
case LONG: return skeletonize ? Utility.getUnskeleton(name.toString(), false) : name.toString();
case SHORT: return shortName.toString();
case NUMBER: return numberName.toString();
default: throw new IllegalArgumentException("Bad property: " + style);
}
}
public String getPropertyName() { return getPropertyName(NORMAL); }
public void setPropertyName(byte style, String in) {
if (style == NORMAL) style = defaultPropertyStyle;
switch (style) {
case LONG: name = Utility.getUnskeleton(in, false); break;
case SHORT: shortName = in; break;
case NUMBER: numberName = in; break;
default: throw new IllegalArgumentException("Bad property: " + style);
}
}
/**
* Get the value name. Style is SHORT, NORMAL, LONG
* "" if hasValue is false
* MUST OVERRIDE getValue(cp...) if valueVaries
*/
public String getValue(int cp, byte style) {
if (!hasValue(cp)) return "";
return getValue(style);
}
public String getValue(int cp) { return getValue(cp, NORMAL); }
public void setValue(byte style, String in) {
if (getValueType() < BINARY_PROP) throw new IllegalArgumentException("Can't set varying value: " + style);
if (style == NORMAL) style = defaultValueStyle;
switch (style) {
case LONG: valueName = Utility.getUnskeleton(in, false); break;
case SHORT: shortValueName = in; break;
case NUMBER: numberValueName = in; break;
default: throw new IllegalArgumentException("Bad value: " + style);
}
}
public String getValue(byte style) {
if (getValueType() < BINARY_PROP) throw new IllegalArgumentException(
"Value varies in " + getName(LONG) + "; call getValue(cp)");
try {
if (style == NORMAL) style = defaultValueStyle;
switch (style) {
case LONG: return Utility.getUnskeleton(valueName.toString(), false);
case SHORT: return shortValueName.toString();
case NUMBER: return numberValueName.toString();
default: throw new IllegalArgumentException("Bad property: " + style);
}
} catch (RuntimeException e) {
throw new com.ibm.text.utility.ChainException("Unset value string in " + getName(LONG), null, e);
}
}
/**
* special hack for NFD/NFKD
*/
public String getListingValue(int cp) {
if (getValueType() != BINARY_PROP) return getValue(cp, LONG);
return getPropertyName(LONG);
}
/**
* Does it have the propertyValue?
*/
abstract public boolean hasValue(int cp);
/**
* Get the set of characters it contains
*/
private UnicodeSet cache = null;
public UnicodeSet getSet() {
if (cache == null) {
cache = new UnicodeSet();
for (int cp = 0; cp <= 0x10FFFF; ++cp) {
if (hasValue(cp)) cache.add(cp);
}
}
return (UnicodeSet) cache.clone();
}
///////////////////////////////////////////
// Old Name for compatibility
boolean isTest() { return isStandard(); }
String getName(byte style) { return getPropertyName(style); }
String getName() { return getPropertyName(); }
}