public String nextToken()

in src/main/java/org/apache/commons/imaging/common/BasicCParser.java [36:112]


    public String nextToken() throws IOException, ImageReadException
    {
        // I don't know how complete the C parsing in an XPM file
        // is meant to be, this is just the very basics...

        boolean inString = false;
        boolean inIdentifier = false;
        boolean hadBackSlash = false;
        StringBuilder token = new StringBuilder();
        for (int c = is.read(); c != -1; c = is.read())
        {
            if (inString)
            {
                if (c == '\\')
                {
                    token.append('\\');
                    hadBackSlash = !hadBackSlash;
                }
                else if (c == '"')
                {
                    token.append('"');
                    if (!hadBackSlash)
                        return token.toString();
                    hadBackSlash = false;
                }
                else if (c == '\r' || c == '\n')
                    throw new ImageReadException("Unterminated string in XPM file");
                else
                {
                    token.append((char)c);
                    hadBackSlash = false;
                }
            }
            else if (inIdentifier)
            {
                if (Character.isLetterOrDigit(c) || c == '_')
                    token.append((char)c);
                else
                {
                    is.unread(c);
                    return token.toString();
                }
            }
            else
            {
                if (c == '"')
                {
                    token.append('"');
                    inString = true;
                }
                else if (Character.isLetterOrDigit(c) || c == '_')
                {
                    token.append((char)c);
                    inIdentifier = true;
                }
                else if (c == '{' || c == '}' ||
                        c == '[' || c == ']' ||
                        c == '*' || c == ';' ||
                        c == '=' || c == ',')
                {
                    token.append((char)c);
                    return token.toString();
                }
                else if (c == ' ' || c == '\t' || c == '\r' || c == '\n')
                { /* do nothing */ }
                else
                    throw new ImageReadException("Unhandled/invalid character '" +
                            ((char)c) + "' found in XPM file");
            }
        }

        if (inIdentifier)
            return token.toString();
        if (inString)
            throw new ImageReadException("Unterminated string ends XMP file");
        return null;
    }