in tools/SymbolsRange.java [262:314]
public static void printRange(RangeType rangeType, Formatter formatter, Predicate predicate, String name) {
StringBuilder result = new StringBuilder(formatter.definition(name + rangeType.suffix()));
result.append(formatter.start());
boolean hasPrevious = false;
int max = rangeType.maxCodePoint();
int i = 0;
int firstAlpha = -1;
int lastAlpha = -1;
while (i <= max) {
while(i <= max) {
if (predicate.test(i)) {
firstAlpha = i;
break;
}
i++;
}
while(i <= max) {
boolean lastSymbol = i == max;
if(!predicate.test(i) || lastSymbol) {
lastAlpha = lastSymbol ? i : i-1;
if (firstAlpha > firstAlpha) {
throw new RuntimeException(firstAlpha + " > " + lastAlpha);
}
if (hasPrevious) {
result.append(formatter.separator());
}
if (lastAlpha != firstAlpha) {
result.append(formatter.range(firstAlpha, lastAlpha));
hasPrevious = true;
} else {
result.append(formatter.item(firstAlpha));
hasPrevious = true;
}
break;
}
i++;
}
i++;
}
result.append(formatter.end()).append(',');
System.out.println(result.toString());
}