public String formatOptionHelp(BaseOption<?> o) {
        StringBuilder helpMessage = new StringBuilder();
        StringBuilder line = new StringBuilder();
        String callFormat = optionCallFormat(o);
        for (String name : o.getNames()) {
            line.append(name).append(" ").append(callFormat).append(", ");
        }
        // strip trailing ", "
        line.delete(line.length() - 2, line.length());
        String[] words = o.getHelpMessage().split("\\s+");
        int wordIndex = 0;
        if (line.length() < OPTION_FORMAT_MARGIN) {
            // padding with whitespaces till margin
            int tillMargin = OPTION_FORMAT_MARGIN - line.length();
            for (int i = 0; i < tillMargin; i++) {
                line.append(" ");
            }
            while (wordIndex < words.length && line.length() + words[wordIndex].length() < OPTION_HELP_MARGING) {
                line.append(words[wordIndex++]).append(" ");
            }
        }
        helpMessage.append(line.toString()).append("\n");
        while (wordIndex < words.length) {
            line = new StringBuilder(INDENT);
            do {
                line.append(words[wordIndex++]).append(" ");
            } while (wordIndex < words.length && line.length() + words[wordIndex].length() < OPTION_HELP_MARGING);
            helpMessage.append(line).append("\n");
        }
        return helpMessage.toString().trim();
    }