diff options
author | Mattias Andrée <maandree@operamail.com> | 2013-08-18 13:05:32 +0200 |
---|---|---|
committer | Mattias Andrée <maandree@operamail.com> | 2013-08-18 13:05:32 +0200 |
commit | f8a5ac5337702119cb0f285879953cbdeceaeb20 (patch) | |
tree | 9e3d868dac98450e90ca8afd689424f26de603dd /src | |
parent | forgot to update the version (diff) | |
download | argparser-f8a5ac5337702119cb0f285879953cbdeceaeb20.tar.gz argparser-f8a5ac5337702119cb0f285879953cbdeceaeb20.tar.bz2 argparser-f8a5ac5337702119cb0f285879953cbdeceaeb20.tar.xz |
add alternative mode
Signed-off-by: Mattias Andrée <maandree@operamail.com>
Diffstat (limited to '')
-rw-r--r-- | src/argparser.bash | 4 | ||||
-rw-r--r-- | src/argparser.c | 11 | ||||
-rw-r--r-- | src/argparser.h | 21 | ||||
-rw-r--r-- | src/argparser.py | 9 | ||||
-rw-r--r-- | src/argparser/ArgParser.java | 15 | ||||
-rw-r--r-- | src/test.c | 2 |
6 files changed, 43 insertions, 19 deletions
diff --git a/src/argparser.bash b/src/argparser.bash index 3144f01..d8dc967 100644 --- a/src/argparser.bash +++ b/src/argparser.bash @@ -44,6 +44,7 @@ args_VARIADIC=2 # @param $3:str Long, multi-line, description of the program, empty for none # @param $4:str The name of the program, empty for automatic # @param $5:str Output channel, by fd +# @param $6:int Set to 1 to use single dash/plus for long options function args_init { test "$TERM" = linux @@ -67,6 +68,7 @@ function args_init fi args_out="$(realpath "/proc/$$/fd/${args_out}")" args_files=() + args_alternative="$6" } @@ -494,7 +496,7 @@ function args_parse elif [ "$arg" = "--" ]; then dashed=1 elif (( ${#arg} > 1 )) && [ "${_arg::1}" = "-" ]; then - if (( ${#arg} > 2 )) && [ "${arg::1}" = "${arg:1:1}" ]; then + if [ "${args_alternative}" = 1 ] || (( ${#arg} > 2 )) && [ "${arg::1}" = "${arg:1:1}" ]; then if [ ! $dontget = 0 ]; then (( dontget-- )) elif [ ! -e "${args_optmap}/${arg}" ]; then diff --git a/src/argparser.c b/src/argparser.c index 1b1c704..46b1509 100644 --- a/src/argparser.c +++ b/src/argparser.c @@ -46,6 +46,11 @@ static void** map_free(args_Map* map); static long args_linuxvt; /** + * Whether to use single dash/plus long options + */ +static long args_alternative; + +/** * Whether to free the member of `args_program` */ static long args_program_dispose; @@ -111,8 +116,9 @@ static long args_map_values_size; * @param longdescription Long, multi-line, description of the program, may be `null` * @param program The name of the program, `null` for automatic * @param usestderr Whether to use stderr instead of stdout + * @param alternative Whether to use single dash/plus long options */ -void args_init(char* description, char* usage, char* longdescription, char* program, long usestderr) +void args_init(char* description, char* usage, char* longdescription, char* program, long usestderr, long alternative) { char* term = getenv("TERM"); args_linuxvt = 0; @@ -135,6 +141,7 @@ void args_init(char* description, char* usage, char* longdescription, char* prog args_usage = usage; args_longdescription = longdescription; args_out = usestderr ? stderr : stdout; + args_alternative = alternative; args_arguments_count = args_unrecognised_count = args_files_count = 0; args_files = args_arguments = null; args_message = null; @@ -1200,7 +1207,7 @@ long args_parse(int argc, char** argv) else if ((*arg == '-') && (*(arg + 1) == '-') && (*(arg + 2) == 0)) dashed = true; else if (((*arg == '-') || (*arg == '+')) && (*(arg + 1) != 0)) - if (*arg == *(arg + 1)) + if (args_alternative || (*arg == *(arg + 1))) { if (dontget > 0) dontget--; diff --git a/src/argparser.h b/src/argparser.h index 580a68d..a3df727 100644 --- a/src/argparser.h +++ b/src/argparser.h @@ -168,14 +168,15 @@ long args_files_count; * @param longdescription Long, multi-line, description of the program, may be `null` * @param program The name of the program, `null` for automatic * @param usestderr Whether to use stderr instead of stdout + * @param alternative Whether to use single dash/plus long options */ -extern void args_init(char* description, char* usage, char* longdscription, char* program, long usestderr); +extern void args_init(char* description, char* usage, char* longdscription, char* program, long usestderr, long alternative); /** * Disposes of all resources, run this when you are done */ -extern void args_dispose(); +extern void args_dispose(void); /** @@ -213,14 +214,14 @@ extern args_Option args_new_variadic(char* argument, int standard, char* alterna * * @return All options */ -extern args_Option* args_get_options(); +extern args_Option* args_get_options(void); /** * Gets the number of elements in the array returned by `args_get_options` * * @return The number of elements in the array returned by `args_get_options` */ -extern long args_get_options_count(); +extern long args_get_options_count(void); /** * Gets the option with a specific index @@ -284,14 +285,14 @@ extern char* args_options_get_help(long index); * * @return The available options */ -extern char** args_get_opts(); +extern char** args_get_opts(void); /** * Gets the number of available options * * @return The number of available options */ -extern long args_get_opts_count(); +extern long args_get_opts_count(void); /** * Gets whether an option is available @@ -369,14 +370,14 @@ extern long args_opts_used(char* name); * * @return All alternativ names that exists for all options */ -extern char** args_get_optmap(); +extern char** args_get_optmap(void); /** * Gets the number of elements returned by `args_get_optmap` * * @return The number of elements returned by `args_get_optmap` */ -extern long args_get_optmap_count(); +extern long args_get_optmap_count(void); /** * Maps alternative name for a option @@ -489,12 +490,12 @@ extern long args_test_exclusiveness(char** exclusives, long exclusives_count); /** * Maps up options that are alternatives to the first alternative for each option */ -extern void args_support_alternatives(); +extern void args_support_alternatives(void); /** * Prints a colourful help message */ -extern void args_help(); +extern void args_help(void); /** * Parse arguments diff --git a/src/argparser.py b/src/argparser.py index d9f9d55..93b0287 100644 --- a/src/argparser.py +++ b/src/argparser.py @@ -176,12 +176,13 @@ class ArgParser(): self.optmap[alt] = (stdalt, ArgParser.VARIADIC) - def parse(self, argv = sys.argv): + def parse(self, argv = sys.argv, alternative = False): ''' Parse arguments - @param args:list<str> The command line arguments, should include the execute file at index 0, `sys.argv` is default - @return :bool Whether no unrecognised option is used + @param args:list<str> The command line arguments, should include the execute file at index 0, `sys.argv` is default + @param alternative:bool Use single dash/plus for long options + @return :bool Whether no unrecognised option is used ''' self.argcount = len(argv) - 1 self.arguments = argv[1:] @@ -220,7 +221,7 @@ class ArgParser(): elif arg == '++': tmpdashed = True elif arg == '--': dashed = True elif (len(arg) > 1) and (arg[0] in ('-', '+')): - if (len(arg) > 2) and (arg[:2] in ('--', '++')): + if alternative or ((len(arg) > 2) and (arg[:2] in ('--', '++'))): if dontget > 0: dontget -= 1 elif (arg in self.optmap) and (self.optmap[arg][1] == ArgParser.ARGUMENTLESS): diff --git a/src/argparser/ArgParser.java b/src/argparser/ArgParser.java index ddb09c5..a786f23 100644 --- a/src/argparser/ArgParser.java +++ b/src/argparser/ArgParser.java @@ -962,6 +962,19 @@ public class ArgParser */ public boolean parse(final String[] argv) { + return parse(argv, false); + } + + + /** + * Parse arguments + * + * @param args The command line arguments, however it should not include the execute file at index 0 + * @param alternative Use single dash/plus for long options + * @return Whether no unrecognised option is used + */ + public boolean parse(final String[] argv, final boolean alternative) + { this.arguments = argv; final ArrayList<String> argqueue = new ArrayList<String>(); @@ -987,7 +1000,7 @@ public class ArgParser else if (arg.equals("++")) tmpdashed = true; else if (arg.equals("--")) dashed = true; else if ((arg.length() > 1) && ((arg.charAt(0) == '-') || (arg.charAt(0) == '+'))) - if ((arg.length() > 2) && (arg.charAt(1) == arg.charAt(0))) + if (alternative || ((arg.length() > 2) && (arg.charAt(1) == arg.charAt(0)))) { Option opt = this.optmap.get(arg); if (dontget > 0) dontget--; @@ -41,7 +41,7 @@ int main(int argc, char** argv) "GNU Affero General Public License for more details.\n" "\n" "You should have received a copy of the GNU Affero General Public License\n" - "along with this library. If not, see <http://www.gnu.org/licenses/>.", 0, 1); + "along with this library. If not, see <http://www.gnu.org/licenses/>.", 0, 1, 0); args_add_option(args_new_argumentless(0, "-h", "-?", "--help", NULL), "Prints this help message\n(and exits)"); args_add_option(args_new_argumentless(0, "--hello", NULL), "Prints the text: hello world'"); |