diff options
author | Mattias Andrée <maandree@operamail.com> | 2013-06-18 15:51:23 +0200 |
---|---|---|
committer | Mattias Andrée <maandree@operamail.com> | 2013-06-18 15:51:23 +0200 |
commit | 92025a894b9357e75c7cb06164cd4f61185f1751 (patch) | |
tree | 94f15085f2e30afbf66a65f3abf432e9eddd421d /src/ArgParser.java | |
parent | implement help for bash version (diff) | |
download | argparser-92025a894b9357e75c7cb06164cd4f61185f1751.tar.gz argparser-92025a894b9357e75c7cb06164cd4f61185f1751.tar.bz2 argparser-92025a894b9357e75c7cb06164cd4f61185f1751.tar.xz |
misc
Signed-off-by: Mattias Andrée <maandree@operamail.com>
Diffstat (limited to 'src/ArgParser.java')
-rw-r--r-- | src/ArgParser.java | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/ArgParser.java b/src/ArgParser.java index 6ea7e65..e75ba91 100644 --- a/src/ArgParser.java +++ b/src/ArgParser.java @@ -164,6 +164,11 @@ public class ArgParser public int unrecognisedCount = 0; /** + * The concatination of {@link #files} with blankspaces as delimiters, {@code null} if no files + */ + public String message = null; + + /** * Options, in order */ private final ArrayList<Option> options = new ArrayList<Option>(); @@ -1002,6 +1007,62 @@ public class ArgParser this.files.add(arg); } + int i = 0, n = optqueue.size(); + while (i < n) + { + final String opt = this.optmap.get(optqueue.get(i)).standard; + final String arg = argqueue.size() > i ? argqueue.get(i) : null; + i++; + if (this.opts.get(opt) == null) + this.opts.put(opt, new String[] {}); + if (argqueue.size() >= i) + this.opts.put(opt, append(this.opts.get(opt), arg)); + } + + for (final Option opt : this.options) + if (opt.getClass() == Variadic.class) + { final String[] varopt = this.opts.get(opt.standard); + if (varopt != null) + { + final String[] additional = new String[this.files.size()]; + this.files.toArray(additional); + if (varopt[0] == null) + this.opts.put(opt.standard, additional); + else + this.opts.put(opt.standard, append(varopt, additional)); + this.files.clear(); + break; + } } + + final StringBuilder sb = new StringBuilder(); + for (final String file : this.files) + { sb.append(' '); + sb.append(file); + } + this.message = sb.toString().substring(1); + + if (this.unrecognisedCount > 5) + { int more = this.unrecognisedCount - 5; + this.print(this.program + ": warning: " + more + " more unrecognised "); + this.println(more == 1 ? "option" : "options"); + } + + return rc; + } + + + /** + * Create a new identical array, except with extra items at the end + * + * @param array The array + * @param items The new items + * @return The new array + */ + private String[] append(final String[] array, final String... items) + { + final String[] rc = new String[array.length + items.length]; + System.arraycopy(array, 0, rc, 0, array.length); + System.arraycopy(items, 0, rc, array.length, items.length); return rc; } |