* @return The parsed, storable property value.
* @throws PropertyException For an invalid property value.
*/
private PropertyValue createPropertyValue(final FObj fobj,
final String value) throws PropertyException {
final PropertyValue pv = this.standardParse(fobj, value);
if (pv.canEvalKeyword()) {
return pv;
}
/* The value is a list of voice families. The above only parses for
* "inherit", so even if the first token is a keyword, it will not be
* parsed that way. We need to tokenize and parse each token, even if
* there is only one token. */
final StringTokenizer tokenizer = new StringTokenizer(value);
if (tokenizer.countTokens() < 1) {
throw this.unexpectedValue(value, fobj);
}
final ValueCollection collection = new ValueCollection();
while (tokenizer.hasMoreTokens()) {
final String token = tokenizer.nextToken();
final PropertyValue parsedToken = this.standardParse(fobj, token,
PdVoiceFamily.VALID_TOKEN_KEYWORDS);
if (parsedToken.canEvalKeyword()
|| parsedToken instanceof DtName) {
collection.addItem(parsedToken);
} else {
throw this.unexpectedValue(token, fobj);
}