libclap 1.0.0
Command Line Argument Parser for C
Loading...
Searching...
No Matches
clap.h
Go to the documentation of this file.
1
9#ifndef CLAP_H
10#define CLAP_H
11
12#include <stdbool.h>
13#include <stddef.h>
14#include <stdio.h>
15#include <clap/clap_version.h>
16#include <clap/clap_error.h>
17#include <clap/clap_types.h>
18#include <clap/clap_action.h>
19#include <clap/clap_allocator.h>
20#include <clap/clap_export.h>
21
22#ifdef __cplusplus
23extern "C" {
24#endif
25
26/* ============================================================================
27 * nargs Specifiers
28 * ============================================================================ */
29
30#define CLAP_NARGS_ZERO_OR_ONE (-3)
31#define CLAP_NARGS_ZERO_OR_MORE (-4)
32#define CLAP_NARGS_ONE_OR_MORE (-5)
33#define CLAP_NARGS_OPTIONAL CLAP_NARGS_ZERO_OR_ONE
34#define CLAP_NARGS_REMAINDER (-1)
35/* ============================================================================
36 * Parser API
37 * ============================================================================ */
38
50 const char *prog_name,
51 const char *description,
52 const char *epilog
53);
54
64
86CLAP_EXPORT void clap_parser_set_version(clap_parser_t *parser, const char *version);
87
88/* ============================================================================
89 * Argument API
90 * ============================================================================ */
91
110 clap_parser_t *parser,
111 const char *name_or_flags
112);
113
164CLAP_EXPORT clap_argument_t* clap_argument_choices(clap_argument_t *arg, const char **choices, size_t count);
241
242/* ============================================================================
243 * Mutually Exclusive Groups
244 * ============================================================================ */
245
272
273/* ============================================================================
274 * Argument Groups
275 * ============================================================================ */
276
290CLAP_EXPORT int clap_add_argument_group(clap_parser_t *parser, const char *title, const char *description);
299
300/* ============================================================================
301 * Subparsers
302 * ============================================================================ */
303
320 clap_parser_t *parser,
321 const char *dest,
322 const char *help_text
323);
324
337 clap_parser_t *subparsers,
338 const char *name,
339 const char *help_text
340);
341
348CLAP_EXPORT void clap_subparsers_metavar(clap_parser_t *parser, const char *metavar);
356CLAP_EXPORT bool clap_print_subcommand_help(clap_parser_t *parser, const char *command_name, FILE *stream);
357
373CLAP_EXPORT void clap_print_help_on_error(clap_parser_t *parser, const clap_error_t *error, FILE *stream);
374
375/* ============================================================================
376 * Parsing
377 * ============================================================================ */
378
401 clap_parser_t *parser,
402 int argc,
403 char *argv[],
404 clap_namespace_t **out_namespace,
405 clap_error_t *error
406);
407
408/* ============================================================================
409 * Namespace API
410 * ============================================================================ */
411
417
425CLAP_EXPORT bool clap_namespace_get_string(clap_namespace_t *ns, const char *name, const char **value);
433CLAP_EXPORT bool clap_namespace_get_int(clap_namespace_t *ns, const char *name, int *value);
441CLAP_EXPORT bool clap_namespace_get_float(clap_namespace_t *ns, const char *name, double *value);
449CLAP_EXPORT bool clap_namespace_get_bool(clap_namespace_t *ns, const char *name, bool *value);
460 const char ***values, size_t *count);
461
469CLAP_EXPORT bool clap_namespace_set_string(clap_namespace_t *ns, const char *name, const char *value);
477CLAP_EXPORT bool clap_namespace_set_int(clap_namespace_t *ns, const char *name, int value);
485CLAP_EXPORT bool clap_namespace_set_float(clap_namespace_t *ns, const char *name, double value);
493CLAP_EXPORT bool clap_namespace_set_bool(clap_namespace_t *ns, const char *name, bool value);
502CLAP_EXPORT bool clap_namespace_append_string(clap_namespace_t *ns, const char *name, const char *value);
503
516
517/* ============================================================================
518 * Help and Version
519 * ============================================================================ */
520
531CLAP_EXPORT void clap_print_help(clap_parser_t *parser, FILE *stream);
541CLAP_EXPORT void clap_print_version(clap_parser_t *parser, FILE *stream);
542
543/* ============================================================================
544 * Extension APIs
545 * ============================================================================ */
546
572 clap_parser_t *parser,
573 const char *type_name,
574 clap_type_handler_t handler,
575 size_t output_size
576);
577
578/* ============================================================================
579 * Dependency API
580 * ============================================================================ */
581
595 clap_argument_t *arg,
596 clap_argument_t *required_arg,
597 const char *error_msg
598);
599
613 clap_argument_t *arg,
614 clap_argument_t *conflicting_arg,
615 const char *error_msg
616);
617
618#ifdef __cplusplus
619}
620#endif
621
622#endif /* CLAP_H */
CLAP_EXPORT int clap_add_mutually_exclusive_group(clap_parser_t *parser, bool required)
Create a mutually exclusive group.
CLAP_EXPORT void clap_parser_free(clap_parser_t *parser)
Destroy a parser and all resources it owns.
CLAP_EXPORT void clap_subparsers_metavar(clap_parser_t *parser, const char *metavar)
Override the metavar shown for subcommands in the usage line.
CLAP_EXPORT bool clap_namespace_get_float(clap_namespace_t *ns, const char *name, double *value)
Retrieve a float value from the namespace.
CLAP_EXPORT clap_argument_t * clap_argument_choices(clap_argument_t *arg, const char **choices, size_t count)
Restrict an argument to a fixed set of choices.
CLAP_EXPORT bool clap_namespace_append_string(clap_namespace_t *ns, const char *name, const char *value)
Append a string to an array value in the namespace. Creates the array if the key does not exist yet.
CLAP_EXPORT clap_parse_result_t clap_parse_args(clap_parser_t *parser, int argc, char *argv[], clap_namespace_t **out_namespace, clap_error_t *error)
Parse command-line arguments.
CLAP_EXPORT clap_argument_t * clap_argument_default(clap_argument_t *arg, const char *default_value)
Set a default value for an argument.
CLAP_EXPORT clap_parser_t * clap_subparser_add(clap_parser_t *subparsers, const char *name, const char *help_text)
Register a subcommand.
CLAP_EXPORT clap_argument_t * clap_argument_const(clap_argument_t *arg, const char *const_value)
Set the constant value for STORE_CONST / APPEND_CONST actions.
CLAP_EXPORT int clap_add_argument_group(clap_parser_t *parser, const char *title, const char *description)
Create a display group to organize arguments in help output.
CLAP_EXPORT void clap_print_help_on_error(clap_parser_t *parser, const clap_error_t *error, FILE *stream)
Print "<prog>: error: <message>" and contextual help.
CLAP_EXPORT clap_argument_t * clap_argument_dest(clap_argument_t *arg, const char *dest)
Override the destination key (dest) in the namespace.
CLAP_EXPORT bool clap_namespace_get_bool(clap_namespace_t *ns, const char *name, bool *value)
Retrieve a bool value from the namespace.
CLAP_EXPORT clap_argument_t * clap_argument_type(clap_argument_t *arg, const char *type_name)
Set the type name for an argument.
CLAP_EXPORT bool clap_mutex_group_add_argument(clap_parser_t *parser, int mutex_group_id, clap_argument_t *arg)
Add an argument to a mutually exclusive group.
CLAP_EXPORT bool clap_namespace_set_float(clap_namespace_t *ns, const char *name, double value)
Set a float value in the namespace.
CLAP_EXPORT clap_argument_t * clap_argument_metavar(clap_argument_t *arg, const char *metavar)
Override the metavar shown in help/usage for this argument.
CLAP_EXPORT bool clap_namespace_get_string_array(clap_namespace_t *ns, const char *name, const char ***values, size_t *count)
Retrieve a string array from the namespace (APPEND action).
CLAP_EXPORT bool clap_namespace_set_bool(clap_namespace_t *ns, const char *name, bool value)
Set a bool value in the namespace.
CLAP_EXPORT bool clap_namespace_has(clap_namespace_t *ns, const char *name)
Check if a key exists in the namespace.
CLAP_EXPORT clap_argument_t * clap_argument_help(clap_argument_t *arg, const char *help_text)
Set the help text for an argument.
CLAP_EXPORT bool clap_print_subcommand_help(clap_parser_t *parser, const char *command_name, FILE *stream)
Print help for a specific subcommand to a stream.
CLAP_EXPORT void clap_namespace_free(clap_namespace_t *ns)
Free a namespace and all values it contains. NULL-safe.
CLAP_EXPORT void clap_print_version(clap_parser_t *parser, FILE *stream)
Print "progname version X.Y.Z" to a stream.
CLAP_EXPORT bool clap_register_type(clap_parser_t *parser, const char *type_name, clap_type_handler_t handler, size_t output_size)
Register a custom type validator/converter.
CLAP_EXPORT void clap_parser_set_help_width(clap_parser_t *parser, int width)
Set help output width (default: 100).
CLAP_EXPORT clap_argument_t * clap_argument_handler(clap_argument_t *arg, clap_action_handler_t handler)
Register a custom action handler for CLAP_ACTION_CUSTOM.
CLAP_EXPORT bool clap_namespace_get_string(clap_namespace_t *ns, const char *name, const char **value)
Retrieve a string value from the namespace.
CLAP_EXPORT clap_argument_t * clap_argument_required(clap_argument_t *arg, bool required)
Mark an optional argument as required or not.
CLAP_EXPORT bool clap_namespace_get_int(clap_namespace_t *ns, const char *name, int *value)
Retrieve an int value from the namespace.
CLAP_EXPORT clap_argument_t * clap_argument_action(clap_argument_t *arg, clap_action_t action)
Set the action type for an argument.
CLAP_EXPORT clap_argument_t * clap_argument_data(clap_argument_t *arg, void *data)
Set user data pointer for a CLAP_ACTION_CUSTOM argument.
CLAP_EXPORT void clap_parser_set_allow_abbrev(clap_parser_t *parser, bool allow)
Enable or disable abbreviated option matching.
CLAP_EXPORT bool clap_argument_group_add_argument(clap_parser_t *parser, int display_group_id, clap_argument_t *arg)
Add an argument to a display group.
CLAP_EXPORT clap_argument_t * clap_add_argument(clap_parser_t *parser, const char *name_or_flags)
Register a new argument (positional or optional).
CLAP_EXPORT clap_parser_t * clap_parser_new(const char *prog_name, const char *description, const char *epilog)
Create a new argument parser.
CLAP_EXPORT bool clap_argument_conflicts(clap_argument_t *arg, clap_argument_t *conflicting_arg, const char *error_msg)
Declare that arg and conflicting_arg cannot both appear.
CLAP_EXPORT bool clap_argument_requires(clap_argument_t *arg, clap_argument_t *required_arg, const char *error_msg)
Declare that arg requires required_arg to also be present.
CLAP_EXPORT clap_argument_t * clap_argument_nargs(clap_argument_t *arg, int nargs)
Set the number of values consumed by this argument.
CLAP_EXPORT clap_parser_t * clap_add_subparsers(clap_parser_t *parser, const char *dest, const char *help_text)
Enable subcommand support.
CLAP_EXPORT void clap_parser_set_version(clap_parser_t *parser, const char *version)
Set the version string printed by clap_print_version().
CLAP_EXPORT void clap_print_help(clap_parser_t *parser, FILE *stream)
Print the full help text (usage + all sections) to a stream.
CLAP_EXPORT bool clap_namespace_set_int(clap_namespace_t *ns, const char *name, int value)
Set an int value in the namespace.
CLAP_EXPORT bool clap_namespace_set_string(clap_namespace_t *ns, const char *name, const char *value)
Set a string value in the namespace.
Action types and handlers for libclap.
clap_action_t
Action types for argument processing.
Definition clap_action.h:16
Custom memory allocator support.
Error handling for libclap.
Symbol export/import macros for libclap.
#define CLAP_EXPORT
Definition clap_export.h:42
Type definitions for libclap.
bool(* clap_type_handler_t)(const char *input, void *output, size_t output_size, clap_error_t *error)
Type validation / conversion handler function pointer.
Definition clap_types.h:89
bool(* clap_action_handler_t)(clap_parser_t *parser, clap_argument_t *argument, clap_namespace_t *namespace, const char **values, size_t value_count, void *user_data, clap_error_t *error)
Custom action handler function pointer.
Definition clap_types.h:134
clap_parse_result_t
Parse result codes returned by clap_parse_args()
Definition clap_types.h:60
Version information for libclap.
Argument definition (positional or optional).
Error information structure.
Definition clap_error.h:36
Container for parsed argument values.
Parsing engine state and configuration.