in main/src/main/java/org/apache/james/jdkim/tagvalue/TagValue.java [140:188]
protected void parse(String data) {
for (int i = 0; i < data.length(); i++) {
int equal = data.indexOf('=', i);
if (equal == -1) {
// TODO check whether this is correct or not
// this allow FWS/WSP after the final ";"
String rest = data.substring(i);
if (!rest.isEmpty()
&& trimFWS(rest, 0, rest.length() - 1, true).length() > 0) {
throw new IllegalStateException(
"Unexpected termination at position " + i + ": "
+ data + " | [" + rest + "]");
}
i = data.length();
continue;
}
// we could start from "equals" but we start from "i" in
// order to spot invalid values before validation.
int next = data.indexOf(';', i);
if (next == -1) {
next = data.length();
}
if (equal > next) {
throw new IllegalStateException("Found ';' before '=' in "
+ data);
}
CharSequence tag = trimFWS(data, i, equal - 1, true).toString();
if (VALIDATION && !tagPattern.matcher(tag).matches()) {
throw new IllegalStateException("Syntax error in tag: " + tag);
}
String tagString = tag.toString();
if (tagValues.containsKey(tagString)) {
throw new IllegalStateException(
"Syntax error (duplicate tag): " + tag);
}
CharSequence value = trimFWS(data, equal + 1, next - 1, true);
if (VALIDATION && !valuePattern.matcher(value).matches()) {
throw new IllegalStateException("Syntax error in value: "
+ value);
}
tagValues.put(tagString, value);
i = next;
}
this.stringRepresentation = data;
}