X-Git-Url: http://git.efficios.com/?p=argpar.git;a=blobdiff_plain;f=argpar%2Fargpar.h;h=3340d90f593031756a6e8d80f5a704ddff6f89a1;hp=22ecaabe89526c98aa2259375bc79d3ed2604e42;hb=10197dcc488abe5287c501bc4bfc8e23f1bc2538;hpb=9e2c879bb10c35749cab090dbc89161698caf4e5 diff --git a/argpar/argpar.h b/argpar/argpar.h index 22ecaab..3340d90 100644 --- a/argpar/argpar.h +++ b/argpar/argpar.h @@ -211,7 +211,7 @@ const char *argpar_item_opt_arg(const struct argpar_item *item); /*! @brief Returns the complete original argument, pointing to one of the - entries of the original arguments (\p argv as passed to + entries of the original arguments (in \p argv, as passed to argpar_iter_create()), of the non-option parsing item \p item. @param[in] item @@ -233,9 +233,9 @@ const char *argpar_item_non_opt_arg(const struct argpar_item *item); /*! @brief - Returns the index, within \em all the original arguments (\p argv - as passed to argpar_iter_create()), of the non-option parsing item - \p item. + Returns the index, within \em all the original arguments (in + \p argv, as passed to argpar_iter_create()), of the non-option + parsing item \p item. For example, with the following command line (all options have no argument): @@ -333,6 +333,123 @@ void argpar_item_destroy(const struct argpar_item *item); /// @} +/*! +@name Error API +@{ +*/ + +/*! +@struct argpar_error + +@brief + Opaque parsing error type +*/ +struct argpar_error; + +/*! +@brief + Returns the index of the original argument (in \p argv, as passed to + argpar_iter_create()) for which the parsing error described by + \p error occurred. + +@param[in] error + Parsing error of which to get the original argument index. + +@returns + Original argument index of \p error. + +@pre + \p error is not \c NULL. +*/ +/// @cond hidden_macro +ARGPAR_HIDDEN +/// @endcond +unsigned int argpar_error_orig_index(const struct argpar_error *error); + +/*! +@brief + Returns the name of the unknown option for which the parsing error + described by \p error occurred. + +The returned name includes any - or \-- +prefix. + +With the long option with argument form, for example +\--mireille=deyglun, this function only returns the name +part (\--mireille in the last example). + +You may only call this function if the call to argpar_iter_next() which +set \p error returned #ARGPAR_ITER_NEXT_STATUS_ERROR_UNKNOWN_OPT. + +@param[in] error + Parsing error of which to get the name of the unknown option. + +@returns + Name of the unknown option of \p error. + +@pre + \p error is not \c NULL. +@pre + The call to argpar_iter_next() which set \p error returned + #ARGPAR_ITER_NEXT_STATUS_ERROR_UNKNOWN_OPT. +*/ +/// @cond hidden_macro +ARGPAR_HIDDEN +/// @endcond +const char *argpar_error_unknown_opt_name(const struct argpar_error *error); + +/*! +@brief + Returns the descriptor of the option for which the parsing error + described by \p error occurred. + +You may only call this function if the call to argpar_iter_next() which +set \p error returned #ARGPAR_ITER_NEXT_STATUS_ERROR_MISSING_OPT_ARG or +#ARGPAR_ITER_NEXT_STATUS_ERROR_UNEXPECTED_OPG_ARG. + +@param[in] error + Parsing error of which to get the option descriptor. +@param[out] is_short + @parblock + If not \c NULL, this function sets \p *is_short to: + + - \c true if the option for which \p error occurred is a short + option. + + - \c false if the option for which \p error occurred is a long + option. + @endparblock + +@returns + Descriptor of the option of \p error. + +@pre + \p error is not \c NULL. +@pre + The call to argpar_iter_next() which set \p error returned + #ARGPAR_ITER_NEXT_STATUS_ERROR_MISSING_OPT_ARG or + #ARGPAR_ITER_NEXT_STATUS_ERROR_UNEXPECTED_OPG_ARG. +*/ +/// @cond hidden_macro +ARGPAR_HIDDEN +/// @endcond +const struct argpar_opt_descr *argpar_error_opt_descr( + const struct argpar_error *error, bool *is_short); + +/*! +@brief + Destroys the parsing error \p error. + +@param[in] error + Parsing error to destroy (may be \c NULL). +*/ +/// @cond hidden_macro +ARGPAR_HIDDEN +/// @endcond +void argpar_error_destroy(const struct argpar_error *error); + +/// @} + /*! @name Iterator API @{ @@ -412,10 +529,18 @@ and \&argv[1] as \p argv from what main() receives, or ignore the parsing item of the first call to argpar_iter_next(). -\p *argv and \p *descrs must \em not change for the lifetime of the -returned iterator (until you call argpar_iter_destroy()) and for the -lifetime of any parsing item (until you call argpar_item_destroy()) -which argpar_iter_next() creates from the returned iterator. +\p *argv and \p *descrs must \em not change for all of: + +- The lifetime of the returned iterator (until you call + argpar_iter_destroy()). + +- The lifetime of any parsing item (until you call + argpar_item_destroy()) which argpar_iter_next() creates from the + returned iterator. + +- The lifetime of any parsing error (until you call + argpar_error_destroy()) which argpar_iter_next() creates from the + returned iterator. @param[in] argc Number of original arguments to parse in \p argv. @@ -468,6 +593,8 @@ void argpar_iter_destroy(struct argpar_iter *iter); /*! @brief Return type of argpar_iter_next(). + +Error status enumerators have a negative value. */ enum argpar_iter_next_status { /// Success @@ -477,16 +604,16 @@ enum argpar_iter_next_status { ARGPAR_ITER_NEXT_STATUS_END, /// Unknown option error - ARGPAR_ITER_NEXT_STATUS_ERROR_UNKNOWN_OPT, + ARGPAR_ITER_NEXT_STATUS_ERROR_UNKNOWN_OPT = -1, /// Missing option argument error - ARGPAR_ITER_NEXT_STATUS_ERROR_MISSING_OPT_ARG, + ARGPAR_ITER_NEXT_STATUS_ERROR_MISSING_OPT_ARG = -2, /// Unexpected option argument error - ARGPAR_ITER_NEXT_STATUS_ERROR_UNEXPECTED_OPT_ARG, + ARGPAR_ITER_NEXT_STATUS_ERROR_UNEXPECTED_OPT_ARG = -3, /// Memory error - ARGPAR_ITER_NEXT_STATUS_ERROR_MEMORY, + ARGPAR_ITER_NEXT_STATUS_ERROR_MEMORY = -12, }; /*! @@ -512,9 +639,9 @@ If there are no more original arguments to parse, this function returns #ARGPAR_ITER_NEXT_STATUS_ERROR_MISSING_OPT_ARG, or #ARGPAR_ITER_NEXT_STATUS_ERROR_UNEXPECTED_OPG_ARG, if this parameter is not \c NULL, - \p *error is a string which explains the parsing error in English. + \p *error contains details about the error. - Free \p *error with free(). + Destroy \p *error with argpar_error_destroy(). @endparblock @returns @@ -530,7 +657,7 @@ ARGPAR_HIDDEN /// @endcond enum argpar_iter_next_status argpar_iter_next( struct argpar_iter *iter, const struct argpar_item **item, - char **error); + const struct argpar_error **error); /* * Returns the number of ingested elements from `argv`, as passed to @@ -541,7 +668,7 @@ enum argpar_iter_next_status argpar_iter_next( /*! @brief Returns the number of ingested original arguments (in - \p argv as passed to argpar_iter_create() to create \p iter) that + \p argv, as passed to argpar_iter_create() to create \p iter) that the parser ingested to produce the \em previous parsing items. @param[in] iter