diff --git a/bash/src/base.args.sh b/bash/src/base.args.sh index a7e997c..c01f450 100644 --- a/bash/src/base.args.sh +++ b/bash/src/base.args.sh @@ -30,8 +30,10 @@ parse_args "$@"; set -- "${args[@]}" au retour de la fonction, args contient les arguments qui n'ont pas été traités automatiquement. -l'option --help est automatiquement gérée. les descriptions sont utilisées pour -l'affichage de l'aide. +les options --help et --help-all sont automatiquement gérées. avec --help, +seules les options standards sont affichées. --help-all affiche toutes les +options. les descriptions sont utilisées pour l'affichage de l'aide. une option +avancée est identifiée par une description qui commence par ++ desc : description de l'objet du script ou de la fonction. cette valeur est @@ -101,7 +103,8 @@ action l'option (avec ou sans argument, ajout ou non à un tableau) optdesc -: description de l'option. cette valeur est facultative" +: description de l'option. cette valeur est facultative. si la description + commence par ++, c'est une option avancée qui n'est pas affichée par défaut." function parse_args() { [ -z "$NULIB_NO_DISABLE_SET_X" ] && [[ $- == *x* ]] && { set +x; local NULIB_ARGS_SET_X=1; } local __r= @@ -169,7 +172,7 @@ function __parse_args() { __def="${__def#-}" __lopts="$__lopts${__lopts:+,}$__def$__witharg" fi - [ "$__def" == help ] && __autohelp= + [ "$__def" == help -o "$__def" == help-all ] && __autohelp= done # sauter l'action shift @@ -179,7 +182,7 @@ function __parse_args() { # __sopts ne doit pas être vide, rajouter ? si aucune option courte n'est # définie, indépendamment de la valeur de autohelp - [ -n "$__autohelp" ] && __lopts="$__lopts${__lopts:+,}help" + [ -n "$__autohelp" ] && __lopts="$__lopts${__lopts:+,}help,help-all" [ -n "$__sopts" ] || __sopts=? __sopts="$__popt$__sopts" @@ -236,7 +239,7 @@ function __parse_args() { fi } function showhelp@() { - local help="$MYNAME" + local help="$MYNAME" showadv="$1" if [ -n "$__DESC" ]; then help="$help: $__DESC" fi @@ -288,7 +291,7 @@ $prefix$usage" fi done # description de l'option - local first=1 + local first=1 thelp tdesc for __def in "${__defs[@]}"; do __def="${__def%%:*}" if [[ "$__def" == --* ]]; then @@ -301,20 +304,30 @@ $prefix$usage" fi if [ -n "$first" ]; then first= - help="$help${nl} " + thelp="${nl} " else - help="$help, " + thelp="$thelp, " fi - help="$help$__def" + thelp="$thelp$__def" done - [ -n "$__witharg" ] && help="$help VALUE" + [ -n "$__witharg" ] && thelp="$thelp VALUE" # sauter l'action shift # prendre la description le cas échéant if [ "${1#-}" == "$1" ]; then - help="$help${nl} ${1//$nl/$nl }" + tdesc="$1" + if [ "${tdesc#++}" != "$tdesc" ]; then + # option avancée + if [ -n "$showadv" ]; then + tdesc="${tdesc#++}" + else + thelp= + fi + fi + [ -n "$thelp" ] && thelp="$thelp${nl} ${tdesc//$nl/$nl }" shift fi + [ -n "$thelp" ] && help="$help$thelp" done uecho "$help" exit 0 @@ -413,6 +426,9 @@ function __parse_opt() { if [ "$option_" == --help -o "$option" == -? ]; then __action="showhelp@" return 0 + elif [ "$option_" == --help-all ]; then + __action="showhelp@ ++" + return 0 fi fi # ici, l'option n'a pas été trouvée, on ne devrait pas arriver ici diff --git a/bash/tests/test-args-help.sh b/bash/tests/test-args-help.sh index 2367d59..d8f41b9 100755 --- a/bash/tests/test-args-help.sh +++ b/bash/tests/test-args-help.sh @@ -8,6 +8,8 @@ args=( -f:,--input input= "spécifier le fichier en entrée il est possible de spécifier aussi un répertoire auquel cas un fichier par défaut est chargé nb: l'aide pour cette option doit faire 3 lignes indentées" + -a,--std . "cette option apparait dans les options standards" + -b,--adv . "++cette option apparait dans les options avancées" ) parse_args "$@"; set -- "${args[@]}"