Blender V5.0
BLI_args.cc File Reference

A general argument parsing module. More...

#include <cctype>
#include <cstdio>
#include "MEM_guardedalloc.h"
#include "BLI_args.h"
#include "BLI_ghash.h"
#include "BLI_listbase.h"
#include "BLI_string.h"
#include "BLI_utildefines.h"

Go to the source code of this file.

Classes

struct  bArgDoc
struct  bAKey
struct  bArgument
struct  bArgs

Macros

#define USE_DUPLICATE_ARG_WORKAROUND

Functions

static uint case_strhash (const void *ptr)
static uint keyhash (const void *ptr)
static bool keycmp (const void *a, const void *b)
static bArgumentlookUp (bArgs *ba, const char *arg, int pass, int case_str)
static void args_print_wrapper (void *, const char *format, va_list args)
bArgsBLI_args_create (int argc, const char **argv)
void BLI_args_destroy (bArgs *ba)
void BLI_args_printf (bArgs *ba, const char *format,...)
void BLI_args_print_fn_set (bArgs *ba, bArgPrintFn print_fn, void *user_data)
void BLI_args_pass_set (bArgs *ba, int current_pass)
void BLI_args_print (const bArgs *ba)
static bArgDocinternalDocs (bArgs *ba, const char *short_arg, const char *long_arg, const char *doc)
static void internalAdd (bArgs *ba, const char *arg, int case_str, BA_ArgCallback cb, void *data, bArgDoc *d)
void BLI_args_add_case (bArgs *ba, const char *short_arg, int short_case, const char *long_arg, int long_case, const char *doc, BA_ArgCallback cb, void *data)
void BLI_args_add (bArgs *ba, const char *short_arg, const char *long_arg, const char *doc, BA_ArgCallback cb, void *data)
static void internalDocPrint (bArgs *ba, bArgDoc *d)
void BLI_args_print_arg_doc (bArgs *ba, const char *arg)
void BLI_args_print_other_doc (bArgs *ba)
bool BLI_args_has_other_doc (const bArgs *ba)
void BLI_args_parse (bArgs *ba, int pass, BA_ArgCallback default_cb, void *default_data)

Variables

static char NO_DOCS [] = "NO DOCUMENTATION SPECIFIED"

Detailed Description

A general argument parsing module.

Definition in file BLI_args.cc.

Macro Definition Documentation

◆ USE_DUPLICATE_ARG_WORKAROUND

#define USE_DUPLICATE_ARG_WORKAROUND

Needed so printing --help doesn't cause a naming collision with: The -a argument which is used twice. This works for argument parsing because the arguments are used in different passes, but causes problems when printing documentation which matches all passes.

NOTE(@ideasman42): Longer term we might want to avoid duplicating arguments because it's confusing and not especially helpful.

Definition at line 30 of file BLI_args.cc.

Function Documentation

◆ args_print_wrapper()

void args_print_wrapper ( void * ,
const char * format,
va_list args )
static

Default print function.

Definition at line 119 of file BLI_args.cc.

References args_print_wrapper().

Referenced by args_print_wrapper(), and BLI_args_create().

◆ BLI_args_add()

void BLI_args_add ( struct bArgs * ba,
const char * short_arg,
const char * long_arg,
const char * doc,
BA_ArgCallback cb,
void * data )

Pass starts at 1, -1 means valid all the time short_arg or long_arg can be null to specify no short or long versions

Definition at line 262 of file BLI_args.cc.

References BLI_args_add_case(), and data.

Referenced by main_args_setup().

◆ BLI_args_add_case()

void BLI_args_add_case ( struct bArgs * ba,
const char * short_arg,
int short_case,
const char * long_arg,
int long_case,
const char * doc,
BA_ArgCallback cb,
void * data )

Short_case and long_case specify if those arguments are case specific

Definition at line 242 of file BLI_args.cc.

References data, internalAdd(), and internalDocs().

Referenced by BLI_args_add(), and main_args_setup().

◆ BLI_args_create()

◆ BLI_args_destroy()

void BLI_args_destroy ( bArgs * ba)

◆ BLI_args_has_other_doc()

bool BLI_args_has_other_doc ( const bArgs * ba)

Definition at line 326 of file BLI_args.cc.

References bArgs::docs, and LISTBASE_FOREACH.

◆ BLI_args_parse()

void BLI_args_parse ( bArgs * ba,
int pass,
BA_ArgCallback default_cb,
void * default_data )

◆ BLI_args_pass_set()

void BLI_args_pass_set ( struct bArgs * ba,
int current_pass )

The pass to use for BLI_args_add.

Definition at line 166 of file BLI_args.cc.

References BLI_assert, bArgs::current_pass, and bArgs::pass_max.

Referenced by main_args_setup().

◆ BLI_args_print()

void BLI_args_print ( const bArgs * ba)

Definition at line 176 of file BLI_args.cc.

References bArgs::argc, bArgs::argv, i, and printf.

◆ BLI_args_print_arg_doc()

void BLI_args_print_arg_doc ( bArgs * ba,
const char * arg )

Definition at line 287 of file BLI_args.cc.

References bArgument::doc, bArgDoc::done, internalDocPrint(), lookUp(), and bArgs::pass_max.

Referenced by print_help().

◆ BLI_args_print_fn_set()

void BLI_args_print_fn_set ( bArgs * ba,
bArgPrintFn print_fn,
void * user_data )

Definition at line 160 of file BLI_args.cc.

References bArgs::print_fn, and bArgs::print_user_data.

Referenced by BLI_args_create().

◆ BLI_args_print_other_doc()

void BLI_args_print_other_doc ( bArgs * ba)

Definition at line 317 of file BLI_args.cc.

References bArgs::docs, internalDocPrint(), and LISTBASE_FOREACH.

Referenced by print_help().

◆ BLI_args_printf()

void BLI_args_printf ( bArgs * ba,
const char * format,
... )

Definition at line 152 of file BLI_args.cc.

References bArgs::print_fn, and bArgs::print_user_data.

Referenced by internalDocPrint().

◆ case_strhash()

uint case_strhash ( const void * ptr)
static

Definition at line 74 of file BLI_args.cc.

References i, and ptr.

Referenced by keyhash().

◆ internalAdd()

void internalAdd ( bArgs * ba,
const char * arg,
int case_str,
BA_ArgCallback cb,
void * data,
bArgDoc * d )
static

◆ internalDocPrint()

void internalDocPrint ( bArgs * ba,
bArgDoc * d )
static

◆ internalDocs()

bArgDoc * internalDocs ( bArgs * ba,
const char * short_arg,
const char * long_arg,
const char * doc )
static

◆ keycmp()

bool keycmp ( const void * a,
const void * b )
static

Definition at line 93 of file BLI_args.cc.

References bAKey::arg, b, BLI_ghashutil_intcmp(), BLI_strcasecmp(), bAKey::case_str, bAKey::pass, and STREQ.

Referenced by BLI_args_create().

◆ keyhash()

uint keyhash ( const void * ptr)
static

Definition at line 87 of file BLI_args.cc.

References bAKey::arg, case_strhash(), and ptr.

Referenced by BLI_args_create().

◆ lookUp()

bArgument * lookUp ( bArgs * ba,
const char * arg,
int pass,
int case_str )
static

Variable Documentation

◆ NO_DOCS

char NO_DOCS[] = "NO DOCUMENTATION SPECIFIED"
static

Definition at line 32 of file BLI_args.cc.

Referenced by internalDocs().