# cli

* [ ] implémenter les arguments avancés avec le préfixe "++" sur la description
* [ ] pour le nombre d'arguments, supporter l'alias `*` pour `0..N` et `+` pour `1..N`
* [ ] transformer un schéma en définition d'arguments, un tableau en liste d'arguments, et vice-versa

actuellement, même si la surcharge d'option fonctionne, l'affichage de l'aide est incorrecte
* possibilité de merger *une définition d'option*
* lors de la surcharge d'une définition d'option, certaines options sont supprimées. quand toutes les options sont supprimées, la définition disparait.
* possibilité de modifier une précédente définition, notamment en rajoutant "disabled" => true pour désactiver (supprimer) la définition
  * cela implique d'avoir un moyen de sélectionner une précédente définition, e.g
    ~~~php
    const ARGS = [
      ## exemple n°1
      ["-o", "--option"],
      ["extends" => "-o", "disabled" => true],
      # effet: la définition -o,--option est supprimée

      ## exemple n°2
      # étendre une précédente définition
      ["-a", "--first"],
      ["extends" => "-a", "extends_delete" => ["--first"], "--second"],
      # résultat final: ["-a", "--second"]

      ## exemple n°3
      # créer une définition à partir d'une autre
      ["merge" => ["-b", "--premier"], "merge_delete" => ["--premier"], "--deuxieme"],
      # résultat final: ["-b", "--deuxieme"]
    ];
    ~~~
* pour faciliter l'implémentation de toutes ces fonctionnalités, faire une classe Option qui contient toutes les méthodes appropriées

faire une implémentation SimpleArgsParser qui ne supporte pas les commandes, uniquement les options

puis faire une implémentation ArgsParser qui supporte les commandes, et les options dynamiques

-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary