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