public int parseParameters()

in src/main/java/org/apache/sling/resourceresolver/impl/params/ParametersParser.java [52:137]


    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;
    }