in apache-rat-tasks/src/main/java/org/apache/rat/anttasks/Help.java [170:231]
protected StringBuffer renderOptions(final StringBuffer sb, final int width, final Options options, final int leftPad, final int descPad) {
final String lpad = createPadding(leftPad);
final String dpad = createPadding(descPad);
// first create list containing only <lpad>-a,--aaa where
// -a is opt and --aaa is long opt; in parallel look for
// the longest opt string this list will be then used to
// sort options ascending
String optionTitle = " -- Option --";
String exampleTitle = " -- Example --";
String descriptionTitle = " -- Description --";
int max = optionTitle.length();
int maxExample = exampleTitle.length();
final List<AntOption> optList = options.getOptions().stream().filter(Option::hasLongOpt)
.map(AntOption::new).collect(Collectors.toList());
if (getOptionComparator() != null) {
optList.sort(Comparator.comparing(AbstractOption::getName));
}
List<String> exampleList = new ArrayList<>();
for (final AntOption option : optList) {
String argName = StringUtils.defaultIfEmpty(option.getArgName(), "value");
String fmt = option.isAttribute() ? "<rat:report %s='%s'>" : "<%1$s>%2$s</%1$s>";
String example = format(fmt, option.getName(), argName);
exampleList.add(example);
max = Math.max(option.cleanupName().length(), max);
maxExample = Math.max(example.length(), maxExample);
}
sb.append(optionTitle).append(createPadding(max - optionTitle.length()))
.append(dpad)
.append(exampleTitle).append(createPadding(maxExample - exampleTitle.length()))
.append(dpad)
.append(descriptionTitle)
.append(getNewLine());
int x = 0;
for (final Iterator<AntOption> it = optList.iterator(); it.hasNext();) {
final AntOption option = it.next();
String name = option.cleanupName();
String example = exampleList.get(x++);
final StringBuilder optBuf = new StringBuilder(name);
if (name.length() < max) {
optBuf.append(createPadding(max - name.length()));
}
optBuf.append(dpad).append(example);
if (example.length() < maxExample) {
optBuf.append(createPadding(maxExample - example.length()));
}
optBuf.append(dpad);
final int nextLineTabStop = max + maxExample + 2 * descPad;
if (option.isDeprecated()) {
optBuf.append(option.getDeprecated());
} else if (option.getDescription() != null) {
optBuf.append(option.getDescription());
}
renderWrappedText(sb, width, nextLineTabStop, optBuf.toString());
if (it.hasNext()) {
sb.append(getNewLine());
}
}
return sb;
}