X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fbin%2Fargparser%2FArgParser.java;fp=src%2Fjalview%2Fbin%2Fargparser%2FArgParser.java;h=907b1fa5911717be31bbbb3b635940371a9df787;hb=cfd38a33612b73a5b050c9f19d0fb0d81a7b646a;hp=f08e678112d83ba1221b6f05f293ad1f1397c5ff;hpb=de9592c0781569ccefd4c115bb36524d6c9deaab;p=jalview.git diff --git a/src/jalview/bin/argparser/ArgParser.java b/src/jalview/bin/argparser/ArgParser.java index f08e678..907b1fa 100644 --- a/src/jalview/bin/argparser/ArgParser.java +++ b/src/jalview/bin/argparser/ArgParser.java @@ -48,81 +48,115 @@ public class ArgParser protected static final String DOUBLEDASH = "--"; - protected static final char EQUALS = '='; + public static final char EQUALS = '='; protected static final String NEGATESTRING = "no"; - // the default linked id prefix used for no id (not even square braces) + /** + * the default linked id prefix used for no id (ie when not even square braces + * are provided) + */ protected static final String DEFAULTLINKEDIDPREFIX = "JALVIEW:"; - // the linkedId string used to match all linkedIds seen so far + /** + * the linkedId string used to match all linkedIds seen so far + */ protected static final String MATCHALLLINKEDIDS = "*"; - // the linkedId string used to match all of the last --open'ed linkedIds + /** + * the linkedId string used to match all of the last --open'ed linkedIds + */ protected static final String MATCHOPENEDLINKEDIDS = "open*"; - // the counter added to the default linked id prefix + /** + * the counter added to the default linked id prefix + */ private int defaultLinkedIdCounter = 0; - // the substitution string used to use the defaultLinkedIdCounter + /** + * the substitution string used to use the defaultLinkedIdCounter + */ private static final String DEFAULTLINKEDIDCOUNTER = "{}"; - // the counter added to the default linked id prefix. NOW using - // linkedIdAutoCounter - // private int openLinkedIdCounter = 0; - - // the linked id prefix used for --open files. NOW the same as DEFAULT + /** + * the linked id prefix used for --open files. NOW the same as DEFAULT + */ protected static final String OPENLINKEDIDPREFIX = DEFAULTLINKEDIDPREFIX; - // the counter used for {n} substitutions + /** + * the counter used for {n} substitutions + */ private int linkedIdAutoCounter = 0; - // the linked id substitution string used to increment the idCounter (and use - // the incremented value) + /** + * the linked id substitution string used to increment the idCounter (and use + * the incremented value) + */ private static final String INCREMENTLINKEDIDAUTOCOUNTER = "{++n}"; - // the linked id substitution string used to use the idCounter + /** + * the linked id substitution string used to use the idCounter + */ private static final String LINKEDIDAUTOCOUNTER = "{n}"; - // the linked id substitution string used to use the filename extension of - // --append - // or --open + /** + * the linked id substitution string used to use the filename extension of + * --append or --open + */ private static final String LINKEDIDEXTENSION = "{extension}"; - // the linked id substitution string used to use the base filename of --append - // or --open + /** + * the linked id substitution string used to use the base filename of --append + */ + /** or --open */ private static final String LINKEDIDBASENAME = "{basename}"; - // the linked id substitution string used to use the dir path of --append - // or --open + /** + * the linked id substitution string used to use the dir path of --append or + * --open + */ private static final String LINKEDIDDIRNAME = "{dirname}"; - // the current argfile + /** + * the current argfile + */ private String argFile = null; - // the linked id substitution string used to use the dir path of the latest - // --argfile name + /** + * the linked id substitution string used to use the dir path of the latest + */ + /** --argfile name */ private static final String ARGFILEBASENAME = "{argfilebasename}"; - // the linked id substitution string used to use the dir path of the latest - // --argfile name + /** + * the linked id substitution string used to use the dir path of the latest + * --argfile name + */ private static final String ARGFILEDIRNAME = "{argfiledirname}"; - // flag to say whether {n} subtitutions in output filenames should be made. - // Turn on and off with --substitutions and --nosubstitutions - // Start with it on + /** + * flag to say whether {n} subtitutions in output filenames should be made. + * Turn on and off with --substitutions and --nosubstitutions Start with it on + */ private boolean substitutions = true; - // flag to say whether the default linkedId is the current default linked id - // or ALL linkedIds + /** + * flag to say whether the default linkedId is the current default linked id + * + * or ALL linkedIds + */ private boolean allLinkedIds = false; - // flag to say whether the default linkedId is the current default linked id - // or OPENED linkedIds + /** + * flag to say whether the default linkedId is the current default linked id + * or OPENED linkedIds + */ private boolean openedLinkedIds = false; - // flag to say whether the structure arguments should be applied to all - // structures with this linked id + /** + * flag to say whether the structure arguments should be applied to all + * structures with this linked id + */ private boolean allStructures = false; protected static final Map argMap; @@ -302,12 +336,34 @@ public class ArgParser Arg a = argMap.get(argName); // check for boolean prepended by "no" e.g. --nowrap boolean negated = false; - if (a == null && argName.startsWith(NEGATESTRING) && argMap - .containsKey(argName.substring(NEGATESTRING.length()))) + if (a == null) { - argName = argName.substring(NEGATESTRING.length()); - a = argMap.get(argName); - negated = true; + if (argName.startsWith(NEGATESTRING) && argMap + .containsKey(argName.substring(NEGATESTRING.length()))) + { + argName = argName.substring(NEGATESTRING.length()); + a = argMap.get(argName); + negated = true; + } + else + { + // after all other args, look for Opt.PREFIXKEV args if still not + // found + for (Arg potentialArg : EnumSet.allOf(Arg.class)) + { + if (potentialArg.hasOption(Opt.PREFIXKEV) && argName != null + && argName.startsWith(potentialArg.getName()) + && equalPos > -1) + { + val = argName.substring(potentialArg.getName().length()) + + EQUALS + val; + argName = argName.substring(0, + potentialArg.getName().length()); + a = potentialArg; + break; + } + } + } } // check for config errors @@ -464,7 +520,8 @@ public class ArgParser val = LINKEDIDDIRNAME + File.separator + LINKEDIDBASENAME + val.substring(MATCHALLLINKEDIDS.length()); } - else if (a.hasOption(Opt.OUTPUTFILE) && a.hasOption(Opt.ALLOWALL) + else if (a.hasOption(Opt.OUTPUTFILE) + && a.hasOption(Opt.ALLOWALL) && val.startsWith(MATCHOPENEDLINKEDIDS)) { // --output=open*.ext is shorthand for --opened --output @@ -902,15 +959,19 @@ public class ArgParser FIRST, BEFORE, AFTER } - // get from following Arg of type a or subval of same name (lowercase) + /** + * get from following Arg of type a or subval of same name (lowercase) + */ public static String getValueFromSubValOrArg(ArgValuesMap avm, ArgValue av, Arg a, SubVals sv) { return getFromSubValArgOrPref(avm, av, a, sv, null, null, null); } - // get from following Arg of type a or subval key or preference pref or - // default def + /** + * get from following Arg of type a or subval key or preference pref or + * default def + */ public static String getFromSubValArgOrPref(ArgValuesMap avm, ArgValue av, Arg a, SubVals sv, String key, String pref, String def) { @@ -918,8 +979,10 @@ public class ArgParser def); } - // get from following(AFTER), first occurence of (FIRST) or previous (BEFORE) - // Arg of type a or subval key or preference pref or default def + /** + * get from following(AFTER), first occurence of (FIRST) or previous (BEFORE) + * Arg of type a or subval key or preference pref or default def + */ public static String getFromSubValArgOrPref(ArgValuesMap avm, Arg a, Position pos, ArgValue av, SubVals sv, String key, String pref, String def) @@ -1048,7 +1111,9 @@ public class ArgParser // the following methods look for the "*" linkedId and add the argvalue to all // linkedId ArgValues if it does. - // This version inserts the subvals sv into all created values + /** + * This version inserts the subvals sv into all created values + */ private void addValue(String linkedId, Type type, ArgValues avs, SubVals sv, String v, int argIndex, boolean doSubs) { @@ -1096,21 +1161,32 @@ public class ArgParser doSubs); } - /* + /** * The following operations look for the "*" and "open*" linkedIds and add the - * argvalue to all appropriate linkedId ArgValues if it does. - * If subvals are supplied, they are inserted into all new set values. + * argvalue to all appropriate linkedId ArgValues if it does. If subvals are + * supplied, they are inserted into all new set values. * - * @param op The ArgParser.Op operation - * @param linkedId The String linkedId from the ArgValuesMap - * @param type The Arg.Type to attach to this ArgValue - * @param avs The ArgValues for this linkedId - * @param sv Use these SubVals on the ArgValue - * @param merge Merge the SubVals with any existing on the value. False will replace unless sv is null - * @param v The value of the ArgValue (may contain subvals). - * @param b The boolean value of the ArgValue. - * @param argIndex The argIndex for the ArgValue. - * @param doSubs Whether to perform substitutions on the subvals and value. + * @param op + * The ArgParser.Op operation + * @param linkedId + * The String linkedId from the ArgValuesMap + * @param type + * The Arg.Type to attach to this ArgValue + * @param avs + * The ArgValues for this linkedId + * @param sv + * Use these SubVals on the ArgValue + * @param merge + * Merge the SubVals with any existing on the value. False will + * replace unless sv is null + * @param v + * The value of the ArgValue (may contain subvals). + * @param b + * The boolean value of the ArgValue. + * @param argIndex + * The argIndex for the ArgValue. + * @param doSubs + * Whether to perform substitutions on the subvals and value. */ private void argValueOperation(Op op, String linkedId, Type type, ArgValues avs, SubVals sv, boolean merge, String v, boolean b,