public class KeyTypeData {
public enum ValueType {
- single, multiple, incremental, any
+ single, multiple, incremental, languageTag, any
}
private static abstract class SpecialTypeHandler {
}
}
+ private static class LanguageTagTypeHandler extends SpecialTypeHandler {
+ private static final Pattern pat = Pattern.compile("[a-zA-Z]{3,8}");
+ @Override
+ boolean isWellFormed(String value) {
+ return pat.matcher(value).matches();
+ }
+ }
+
private static class ReorderCodeTypeHandler extends SpecialTypeHandler {
private static final Pattern pat = Pattern.compile("[a-zA-Z]{3,8}(-[a-zA-Z]{3,8})*");
@Override
private enum SpecialType {
CODEPOINTS(new CodepointsTypeHandler()),
+ LANGUAGE_TAG(new LanguageTagTypeHandler()),
REORDER_CODE(new ReorderCodeTypeHandler()),
RG_KEY_VALUE(new RgKeyValueTypeHandler()),
SUBDIVISION_CODE(new SubdivisionKeyValueTypeHandler()),
}
valueType{
ca{"incremental"}
+ h0{"language-tag"}
+ h1{"language-tag"}
kr{"multiple"}
vt{"multiple"}
x0{"any"}
_deprecatedKeys.add(key2);
break;
case valueType:
- _valueTypes.put(key2, ValueType.valueOf(value2));
+ if (value2.equals("language-tag")) {
+ _valueTypes.put(key2, ValueType.languageTag);
+ } else {
+ _valueTypes.put(key2, ValueType.valueOf(value2));
+ }
break;
}
}