in src/main/java/org/apache/sling/resourceresolver/impl/params/ParametersParser.java [48:133]
public int parseParameters(final char[] chars, final int from, final boolean dotAllowed) {
resetCurrentParameter();
parameters.clear();
invalid = false;
ParamsState state = ParamsState.INIT;
for (int i = from; i <= chars.length; i++) {
final char c;
if (i == chars.length) {
c = 0;
} else {
c = chars[i];
}
switch (state) {
case INIT:
if (c == ';') {
state = ParamsState.NAME;
} else if (c == '.' || c == '/' || c == 0) {
invalid = true;
return i;
}
break;
case NAME:
if (c == '=') {
state = ParamsState.EQUALS;
} else if (c == '.' || c == '/' || c == 0) {
invalid = true;
return i;
} else if (c == ';') {
resetCurrentParameter();
} else {
name.append(c);
}
break;
case EQUALS:
if (c == '\'') {
state = ParamsState.QUOTED_VALUE;
} else if (c == '.' || c == '/' || c == 0) {
addParameter(); // empty one
return i;
} else if (c == ';') {
state = ParamsState.NAME; // empty one
addParameter();
} else {
state = ParamsState.VALUE;
value.append(c);
}
break;
case QUOTED_VALUE:
if (c == '\'') {
state = ParamsState.QUOTE_END;
addParameter();
} else if (c == 0) {
invalid = true;
return i;
} else {
value.append(c);
}
break;
case VALUE:
if (c == ';') {
state = ParamsState.NAME;
addParameter();
} else if ((c == '.' && !dotAllowed) || c == '/' || c == 0) {
addParameter();
return i;
} else {
value.append(c);
}
break;
case QUOTE_END:
if (c == ';') {
state = ParamsState.NAME;
} else {
return i;
}
}
}
return chars.length;
}