in modules/print/src/main/java/common/org/apache/harmony/x/print/MimeType.java [119:465]
private void parseString(String aString) {
String errMsg = "Illegal mime-type string format!";
int state = 1; // state for parser
int nextState = 0; // next state after the comments end
// convert String to char array
char s[] = new char[aString.length()];
aString.getChars(0, aString.length(), s, 0);
int len = s.length - 1;
int cnt1 = 1; // nesting comments level
// Position of type and subtype in the string:
int startTypeIndex = 0;
int startSubtypeIndex = 0;
// Analized parameter name and value variables:
int startParamNameIndex = 0;
int startParamValueIndex = 0;
String paramName = null;
String paramValue = null;
Vector nameVector = new Vector(); // parameter names vector
Vector valueVector = new Vector(); // parameter values vector
// string should not be empty, should have at least three characters
if (len <= 1) {
throw new IllegalArgumentException(errMsg);
}
for (int i = 0; i <= len; i++) {
switch (state) {
case 1:
if (i == len) {
throw new IllegalArgumentException(errMsg);
}
if (isOKTokenChar(s[i])) {
startTypeIndex = i;
state = 2;
break;
}
if (isSpaceChar(s[i])) {
break;
}
if (s[i] == '(') {
nextState = 1;
state = 50;
break;
}
throw new IllegalArgumentException(errMsg);
case 2:
if (i == len) {
throw new IllegalArgumentException(errMsg);
}
if (isOKTokenChar(s[i])) {
break;
}
if (s[i] == '/') {
state = 3;
aType = newLowercaseString(s, startTypeIndex, i);
break;
}
if (s[i] == '(') {
nextState = 4;
state = 50;
aType = newLowercaseString(s, startTypeIndex, i);
break;
}
if (isSpaceChar(s[i])) {
state = 4;
aType = newLowercaseString(s, startTypeIndex, i);
break;
}
throw new IllegalArgumentException(errMsg);
case 3:
if (i == len) {
throw new IllegalArgumentException(errMsg);
}
if (isOKTokenChar(s[i])) {
startSubtypeIndex = i;
state = 5;
break;
}
if (s[i] == '(') {
nextState = 3;
state = 50;
break;
}
if (isSpaceChar(s[i])) {
break;
}
throw new IllegalArgumentException(errMsg);
case 4:
if (i == len) {
throw new IllegalArgumentException(errMsg);
}
if (s[i] == '(') {
nextState = 4;
state = 50;
break;
}
if (isSpaceChar(s[i])) {
break;
}
if (s[i] == '/') {
startSubtypeIndex = i + 1;
state = 3;
break;
}
throw new IllegalArgumentException(errMsg);
case 5:
if (isOKTokenChar(s[i])) {
if (i == len) {
aSubtype = newLowercaseString(s, startSubtypeIndex,
i + 1);
}
break;
}
if ((s[i] == ';') && (i != len)) {
aSubtype = newLowercaseString(s, startSubtypeIndex, i);
state = 7;
break;
}
if ((s[i] == '(') && (i != len)) {
aSubtype = newLowercaseString(s, startSubtypeIndex, i);
nextState = 6;
state = 50;
break;
}
if (isSpaceChar(s[i])) {
aSubtype = newLowercaseString(s, startSubtypeIndex, i);
state = 6;
break;
}
throw new IllegalArgumentException(errMsg);
case 6:
if (isSpaceChar(s[i])) {
break;
}
if ((s[i] == '(') && (i != len)) {
nextState = 6;
state = 50;
break;
}
if ((s[i] == ';') && (i != len)) {
state = 7;
break;
}
throw new IllegalArgumentException(errMsg);
case 7:
if (i == len) {
throw new IllegalArgumentException(errMsg);
}
if (isSpaceChar(s[i])) {
break;
}
if (s[i] == '(') {
state = 50;
nextState = 7;
break;
}
startParamNameIndex = i;
if (isOKTokenChar(s[i])) {
state = 8;
break;
}
throw new IllegalArgumentException(errMsg);
case 8:
if (i == len) {
throw new IllegalArgumentException(errMsg);
}
if (isOKTokenChar(s[i])) {
break;
}
if (isSpaceChar(s[i])) {
paramName = newLowercaseString(s, startParamNameIndex, i);
state = 10;
break;
}
if (s[i] == '(') {
paramName = newLowercaseString(s, startParamNameIndex, i);
state = 50;
nextState = 10;
break;
}
if (s[i] == '=') {
paramName = newLowercaseString(s, startParamNameIndex, i);
state = 9;
break;
}
throw new IllegalArgumentException(errMsg);
case 9:
if (isOKTokenChar(s[i])) {
if (i == len) {
paramValue = new String(s, i, 1);
addParameter(paramName, paramValue, nameVector,
valueVector);
} else {
startParamValueIndex = i;
state = 11;
}
break;
}
if (i == len) {
throw new IllegalArgumentException(errMsg);
}
if (isSpaceChar(s[i])) {
break;
}
if (s[i] == '(') {
state = 50;
nextState = 9;
break;
}
if (s[i] == '"') {
startParamValueIndex = i + 1;
state = 13;
break;
}
throw new IllegalArgumentException(errMsg);
case 10:
if (i == len) {
throw new IllegalArgumentException(errMsg);
}
if (isSpaceChar(s[i])) {
break;
}
if (s[i] == '=') {
state = 9;
break;
}
throw new IllegalArgumentException(errMsg);
case 11:
if (isOKTokenChar(s[i])) {
if (i == len) {
paramValue = new String(s, startParamValueIndex, i + 1
- startParamValueIndex);
addParameter(paramName, paramValue, nameVector,
valueVector);
}
break;
}
if ((s[i] == ';') && (i != len)) {
paramValue = new String(s, startParamValueIndex, i
- startParamValueIndex);
addParameter(paramName, paramValue, nameVector, valueVector);
state = 7;
break;
}
if (isSpaceChar(s[i])) {
paramValue = new String(s, startParamValueIndex, i
- startParamValueIndex);
addParameter(paramName, paramValue, nameVector, valueVector);
state = 12;
break;
}
if ((s[i] == '(') && (i != len)) {
paramValue = new String(s, startParamValueIndex, i
- startParamValueIndex);
addParameter(paramName, paramValue, nameVector, valueVector);
state = 50;
nextState = 12;
break;
}
throw new IllegalArgumentException(errMsg);
case 12:
if (isSpaceChar(s[i])) {
break;
}
if ((s[i] == '(') && (i != len)) {
state = 50;
nextState = 12;
break;
}
if ((s[i] == ';') && (i != len)) {
state = 7;
break;
}
throw new IllegalArgumentException(errMsg);
case 13:
if ((s[i] == '"') && (s[i - 1] != '\\')) {
paramValue = new String(s, startParamValueIndex, i
- startParamValueIndex);
addParameter(paramName, paramValue, nameVector, valueVector);
state = 14;
break;
}
if (i == len) {
throw new IllegalArgumentException(errMsg);
}
if (isPrintableASCIIChar(s[i])) {
break;
}
throw new IllegalArgumentException(errMsg);
case 14:
if ((s[i] == ';') && (i != len)) {
state = 7;
break;
}
if (isSpaceChar(s[i])) {
break;
}
if ((s[i] == '(') && (i != len)) {
state = 50;
nextState = 14;
break;
}
throw new IllegalArgumentException(errMsg);
case 50:
if (s[i] == '(') {
cnt1++;
}
if (s[i] == ')') {
cnt1--;
}
if (cnt1 == 0) {
cnt1 = 1;
state = nextState;
break;
}
if (i == len) {
throw new IllegalArgumentException(errMsg);
}
if (isPrintableASCIIChar(s[i])) {
break;
}
throw new IllegalArgumentException(errMsg);
}
}
makeParamsArray(nameVector, valueVector);
}