public static String format(Argument[] args, int... width) {
            StringBuilder sb = new StringBuilder();
            int size = (width.length == 0 ? 80 : width[0]);

            int flags = 0;
//            boolean hasVal = false;

            for (Argument a : args) {
                if (a.flags != null && a.allFlags.length() > flags) flags = a.allFlags
                        .length();
//                hasVal |= a.hasValue;
            }

            //-6 represents "<val> " or the empty space
            int descSize = size - flags - 6;

            for (int i = 0; i < args.length; i++) {
                sb.append(String.format("%-" + flags + "s "
                        + (args[i].hasValue ? "<val> " : "      "),
                args[i].allFlags));

                // wrap shortHelp (
                wrap(args[i].shortHelp, descSize, String.format("%"
                        + (size - descSize - 2) + "s", " "), sb);
            }
            return sb.toString();
        }