public static int parse()

in yoko-core/src/main/java/org/apache/yoko/orb/OB/ParseParams.java [41:143]


    public static int parse(String str, int start, java.util.Vector params) {
        int pos = start;
        final int strLen = str.length();
        boolean error = false;
        int result = -1;
        while (pos < strLen && result == -1 && !error) {
            //
            // Skip leading whitespace
            //
            char ch = str.charAt(pos);
            while (ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r') {
                pos++;
                ch = str.charAt(pos);
            }

            int startPos = pos;
            int endPos = 0;
            char quote = 0;
            boolean done = false;
            while (!done && !error) {
                if (pos == strLen) {
                    endPos = pos;
                    done = true;
                } else {
                    ch = str.charAt(pos);
                    switch (ch) {
                    case ',':
                        if (quote == 0) {
                            endPos = pos;
                            result = pos + 1;
                            done = true;
                        } else
                            pos++;
                        break;

                    case ' ':
                    case '\t':
                    case '\n':
                    case '\r':
                        if (quote == 0) {
                            endPos = pos;
                            done = true;
                        } else
                            pos++;
                        break;

                    case '\\':
                        pos++;
                        if (pos == strLen)
                            error = true;
                        else
                            pos++;
                        break;

                    case '\'':
                    case '"':
                        if (quote == 0) {
                            if (pos > startPos) {
                                done = true;
                                endPos = pos;
                            } else {
                                quote = ch;
                                pos++;
                            }
                        } else if (quote == ch) {
                            quote = 0;
                            done = true;
                            endPos = pos;
                            pos++;
                        } else
                            error = true; // mismatched quotes
                        break;

                    default:
                        pos++;
                        break;
                    }
                }
            }

            if (quote != 0)
                error = true;

            if (!error && pos > startPos) {
                ch = str.charAt(startPos);
                if (ch == '\'' || ch == '"')
                    startPos++;

                int len = endPos - startPos;
                StringBuffer buf = new StringBuffer(len);
                int s = startPos;
                while (s < endPos) {
                    ch = str.charAt(s);
                    if (ch != '\\')
                        buf.append(ch);
                    s++;
                }
                params.addElement(buf.toString());
            }
        }

        return result;
    }