in commons-geometry-io-euclidean/src/main/java/org/apache/commons/geometry/io/euclidean/threed/obj/PolygonObjParser.java [244:273]
private int readNormalizedVertexAttributeIndex(final String type, final int available) {
final SimpleTextParser parser = getTextParser();
final int objIndex = parser
.nextWithLineContinuation(ObjConstants.LINE_CONTINUATION_CHAR, SimpleTextParser::isIntegerPart)
.getCurrentTokenAsInt();
final int normalizedIndex = objIndex < 0 ?
available + objIndex :
objIndex - 1;
if (normalizedIndex < 0 || normalizedIndex >= available) {
final StringBuilder err = new StringBuilder();
err.append(type)
.append(" index ");
if (available < 1) {
err.append("cannot be used because no values of that type have been defined");
} else {
err.append("must evaluate to be within the range [1, ")
.append(available)
.append("] but was ")
.append(objIndex);
}
throw parser.tokenError(err.toString());
}
return normalizedIndex;
}