private void printArg(ArgSpec arg, PrintWriter pw, String indent) { pw.printf("%sdescription: %s%n", indent, Arrays.toString(arg.description())); pw.printf("%sdescriptionKey: '%s'%n", indent, arg.descriptionKey()); pw.printf("%stypeInfo: %s%n", indent, arg.typeInfo()); pw.printf("%sarity: %s%n", indent, arg.arity()); pw.printf("%ssplitRegex: '%s'%n", indent, arg.splitRegex()); pw.printf("%sinteractive: %s%n", indent, arg.interactive()); pw.printf("%srequired: %s%n", indent, arg.required()); pw.printf("%shidden: %s%n", indent, arg.hidden()); pw.printf("%shideParamSyntax: %s%n", indent, arg.hideParamSyntax()); pw.printf("%sdefaultValue: '%s'%n", indent, arg.defaultValue()); pw.printf("%sshowDefaultValue: %s%n", indent, arg.showDefaultValue()); pw.printf("%shasInitialValue: %s%n", indent, arg.hasInitialValue()); pw.printf("%sinitialValue: '%s'%n", indent, arg.initialValue()); pw.printf("%sparamLabel: '%s'%n", indent, arg.paramLabel()); pw.printf("%sconverters: %s%n", indent, Arrays.toString(arg.converters())); pw.printf("%scompletionCandidates: %s%n", indent, iter(arg.completionCandidates())); pw.printf("%sgetter: %s%n", indent, arg.getter()); pw.printf("%ssetter: %s%n", indent, arg.setter()); }
String[] splitValue(String value, ParserSpec parser, Range arity, int consumed) { if (splitRegex().length() == 0) { return new String[] {value}; } int limit = parser.limitSplit() ? Math.max(arity.max - consumed, 0) : 0; if (parser.splitQuotedStrings()) { return debug(value.split(splitRegex(), limit), "Split (ignoring quotes)", value); } return debug(splitRespectingQuotedStrings(value, limit, parser, this, splitRegex()), "Split", value); } private String[] debug(String[] result, String msg, String value) {
private String[] debug(String[] result, String msg, String value) { Tracer t = new Tracer(); if (t.isDebug()) {t.debug("%s with regex '%s' resulted in %s parts: %s%n", msg, splitRegex(), result.length, Arrays.asList(result));} return result; } // @since 3.7
String split = argSpec.splitRegex(); String mandatorySep = empty(split) ? " " : split; String optionalSep = empty(split) ? " [" : "[" + split;
private boolean assertNoMissingParameters(ArgSpec argSpec, Range arity, Stack<String> args) { if (argSpec.interactive()) { return true; } int available = args.size(); if (available > 0 && commandSpec.parser().splitFirst() && argSpec.splitRegex().length() > 0) { available += argSpec.splitValue(args.peek(), commandSpec.parser(), arity, 0).length - 1;
temp.setLength(0); String[] result = splittable.toString().split(splitRegex(), limit); for (int i = 0; i < result.length; i++) { result[i] = restoreQuotedValues(result[i], quotedValues, parser); return value.split(splitRegex(), limit);
private String[] debug(String[] result, String msg, String value) { Tracer t = new Tracer(); if (t.isDebug()) {t.debug("%s with regex '%s' resulted in %s parts: %s%n", msg, splitRegex(), result.length, Arrays.asList(result));} return result; } // @since 3.7
String[] splitValue(String value, ParserSpec parser, Range arity, int consumed) { if (splitRegex().length() == 0) { return new String[] {value}; } int limit = parser.limitSplit() ? Math.max(arity.max - consumed, 0) : 0; if (parser.splitQuotedStrings()) { return debug(value.split(splitRegex(), limit), "Split (ignoring quotes)", value); } return debug(splitRespectingQuotedStrings(value, limit, parser), "Split", value); } private String[] debug(String[] result, String msg, String value) {
private String[] splitKeyValue(ArgSpec argSpec, String value) { String[] keyValue = value.split("=", 2); if (keyValue.length < 2) { String splitRegex = argSpec.splitRegex(); if (splitRegex.length() == 0) { throw new ParameterException(CommandLine.this, "Value for option " + optionDescription("", argSpec, 0) + " should be in KEY=VALUE format but was " + value, argSpec, value); } else { throw new ParameterException(CommandLine.this, "Value for option " + optionDescription("", argSpec, 0) + " should be in KEY=VALUE[" + splitRegex + "KEY=VALUE]... format but was " + value, argSpec, value); } } return keyValue; }
String split = argSpec.splitRegex(); String mandatorySep = empty(split) ? " " : split; String optionalSep = empty(split) ? " [" : "[" + split;
private boolean assertNoMissingParameters(ArgSpec argSpec, Range arity, Stack<String> args) { if (argSpec.interactive()) { return true; } int available = args.size(); if (available > 0 && commandSpec.parser().splitFirst() && argSpec.splitRegex().length() > 0) { available += argSpec.splitValue(args.peek(), commandSpec.parser(), arity, 0).length - 1;
private String[] splitKeyValue(ArgSpec argSpec, String value) { String[] keyValue = ArgSpec.splitRespectingQuotedStrings(value, 2, config(), argSpec, "="); if (keyValue.length < 2) { String splitRegex = argSpec.splitRegex(); if (splitRegex.length() == 0) { throw new ParameterException(CommandLine.this, "Value for option " + optionDescription("", argSpec, 0) + " should be in KEY=VALUE format but was " + value, argSpec, value); } else { throw new ParameterException(CommandLine.this, "Value for option " + optionDescription("", argSpec, 0) + " should be in KEY=VALUE[" + splitRegex + "KEY=VALUE]... format but was " + value, argSpec, value); } } return keyValue; }