in src/main/java/org/apache/commons/imaging/formats/xpm/XpmImageParser.java [308:354]
private void parsePaletteEntries(final XpmHeader xpmHeader, final BasicCParser cParser) throws IOException, ImagingException {
final StringBuilder row = new StringBuilder();
for (int i = 0; i < xpmHeader.numColors; i++) {
row.setLength(0);
final boolean hasMore = parseNextString(cParser, row);
if (!hasMore) {
throw new ImagingException("Parsing XPM file failed, " + "file ended while reading palette");
}
final String name = row.substring(0, xpmHeader.numCharsPerPixel);
final String[] tokens = BasicCParser.tokenizeRow(row.substring(xpmHeader.numCharsPerPixel));
final PaletteEntry paletteEntry = new PaletteEntry();
paletteEntry.index = i;
int previousKeyIndex = Integer.MIN_VALUE;
final StringBuilder colorBuffer = new StringBuilder();
for (int j = 0; j < tokens.length; j++) {
final String token = tokens[j];
boolean isKey = false;
if (previousKeyIndex < (j - 1) && "m".equals(token) || "g4".equals(token) || "g".equals(token) || "c".equals(token) || "s".equals(token)) {
isKey = true;
}
if (isKey) {
if (previousKeyIndex >= 0) {
final String key = tokens[previousKeyIndex];
final String color = colorBuffer.toString();
colorBuffer.setLength(0);
populatePaletteEntry(paletteEntry, key, color);
}
previousKeyIndex = j;
} else {
if (previousKeyIndex < 0) {
break;
}
if (colorBuffer.length() > 0) {
colorBuffer.append(' ');
}
colorBuffer.append(token);
}
}
if (previousKeyIndex >= 0 && colorBuffer.length() > 0) {
final String key = tokens[previousKeyIndex];
final String color = colorBuffer.toString();
colorBuffer.setLength(0);
populatePaletteEntry(paletteEntry, key, color);
}
xpmHeader.palette.put(name, paletteEntry);
}
}