diff --git a/bash/src/base.args.sh b/bash/src/base.args.sh index 835944f..a81f5a3 100644 --- a/bash/src/base.args.sh +++ b/bash/src/base.args.sh @@ -146,7 +146,9 @@ function parse_args() { } function __parse_args() { ## tout d'abord, construire la liste des options - local __popt __sopts __lopts __autohelp=1 + local __AUTOHELP=1 # faut-il gérer automatiquement l'affichage de l'aide? + local __ADVHELP # y a-t-il des options avancées? + local __popt __sopts __lopts local -a __defs set -- "${__DEFS[@]}" while [ $# -gt 0 ]; do @@ -181,17 +183,20 @@ function __parse_args() { __def="${__def#-}" __lopts="$__lopts${__lopts:+,}$__def$__witharg" fi - [ "$__def" == help -o "$__def" == help++ ] && __autohelp= + [ "$__def" == help -o "$__def" == help++ ] && __AUTOHELP= done # sauter l'action shift # sauter la description le cas échéant - [ "${1#-}" == "$1" ] && shift + if [ "${1#-}" == "$1" ]; then + [ "${1#++}" != "$1" ] && __ADVHELP=1 + shift + fi done # __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,help++" + [ -n "$__AUTOHELP" ] && __lopts="$__lopts${__lopts:+,}help,help++" [ -n "$__sopts" ] || __sopts=? __sopts="$__popt$__sopts" @@ -287,6 +292,11 @@ $prefix$usage" if [ -n "$first" ]; then first= help="$help${nl}${nl}OPTIONS" + if [ -n "$__AUTOHELP" -a -n "$__ADVHELP" ]; then + help="$help + --help++ + Afficher l'aide avancée" + fi fi # est-ce que l'option prend un argument? __witharg= @@ -434,7 +444,7 @@ function __parse_opt() { [ -n "$__found" ] && return 0 done - if [ -n "$__autohelp" ]; then + if [ -n "$__AUTOHELP" ]; then if [ "$option_" == --help -o "$option" == -? ]; then __action="showhelp@" return 0 diff --git a/bash/tests/test-args-autohelp.sh b/bash/tests/test-args-autohelp.sh new file mode 100755 index 0000000..bd2cf98 --- /dev/null +++ b/bash/tests/test-args-autohelp.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname -- "$0")/../src/nulib.sh" || exit 1 +#NULIB_NO_DISABLE_SET_X=1 + +args=("tester l'affichage de l'aide") + +case "$1" in +s|std) + # NB: seul l'affichage standard est disponible... + args+=( + -h,--help,--hstd '$showhelp@' "afficher l'aide de base" + ) + shift + ;; +a|adv) + # NB: seul l'affichage avancé est disponible... + args+=( + -H,--help++,--hadv '$showhelp@ ++' "afficher l'aide avancée" + ) + shift + ;; +sa|std+adv) + args+=( + -h,--help,--hstd '$showhelp@' "afficher l'aide de base" + -H,--help++,--hadv '$showhelp@ ++' "afficher l'aide avancée" + ) + shift + ;; +esac + +args+=( + -a,--std . "cette option apparait dans les options standards" + -b,--adv . "++cette option apparait dans les options avancées" +) +parse_args "$@"; set -- "${args[@]}" + +enote "lancer le script +- avec --help pour afficher les options standards uniquement +- avec --help++ pour afficher toutes les options"