X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=sidebyside;f=src%2Fpharext%2FCli%2FArgs%2FHelp.php;h=907a40d9aeb6959bec53de071034a7a65e556c95;hb=3bab80c9541fce30bec2f69f41ad931ea4db7880;hp=50883b1773616778f63b17b43b884fb323ee6b1d;hpb=9ac92a57ed6b3cea5906fd5f0bf1db91ed3d4018;p=pharext%2Fpharext diff --git a/src/pharext/Cli/Args/Help.php b/src/pharext/Cli/Args/Help.php index 50883b1..907a40d 100644 --- a/src/pharext/Cli/Args/Help.php +++ b/src/pharext/Cli/Args/Help.php @@ -2,6 +2,7 @@ namespace pharext\Cli\Args; +use function array_column; use pharext\Cli\Args; class Help @@ -44,12 +45,10 @@ class Help foreach ($this->args->getSpec() as $spec) { if (is_numeric($spec[0])) { $positional[] = $spec; - } elseif ($spec[3] & Args::REQARG) { - if ($spec[3] & Args::REQUIRED) { - $required[] = $spec; - } else { - $optional[] = $spec; - } + } elseif ($spec[3] & Args::REQUIRED) { + $required[] = $spec; + } elseif ($spec[3] & (Args::OPTARG|Args::REQARG)) { + $optional[] = $spec; } else { $flags[] = $spec; } @@ -72,22 +71,75 @@ class Help } function dumpOptional(array $optional) { - return sprintf(" [-%s ]", implode("|-", array_column($optional, 0))); + $req = array_filter($optional, function($a) { + return $a[3] & Args::REQARG; + }); + $opt = array_filter($optional, function($a) { + return $a[3] & Args::OPTARG; + }); + + $dump = ""; + if ($req) { + $short = array_filter($req, function($a) { + return is_string($a[0]); + }); + if ($short) { + $dump .= sprintf(" [-%s ]", implode("|-", array_column($short, 0))); + } + $long = array_filter($req, function($a) { + return !is_string($a[0]); + }); + if ($long) { + $dump .= sprintf(" [--%s ]", implode("|--", array_column($long, 1))); + } + } + if ($opt) { + $short = array_filter($opt, function($a) { + return is_string($a[0]); + }); + if ($short) { + $dump .= sprintf(" [-%s []]", implode("|-", array_column($short, 0))); + } + $long = array_filter($opt, function($a) { + return !is_string($a[0]); + }); + if ($long) { + $dump .= sprintf(" [--%s []]", implode("|--", array_column($long, 1))); + } + } + return $dump; } function dumpPositional(array $positional) { $dump = " [--]"; + $conv = []; foreach ($positional as $pos) { - if ($pos[3] & Args::MULTI) { - $multi = " ..."; + $conv[$pos[0]][] = $pos; + } + $opts = []; + foreach ($conv as $positional) { + $args = implode("|", array_column($positional, 1)); + if ($positional[0][3] & Args::REQUIRED) { + $dump .= sprintf(" <%s>", $args); } else { - $multi = ""; + $dump .= sprintf(" [<%s>]", $args); } - if ($pos[3] & Args::REQUIRED) { - $dump .= sprintf(" <%s%s>", $pos[1], $multi); - } else { - $dump .= sprintf(" [%s%s]", $pos[1], $multi); + if ($positional[0][3] & Args::MULTI) { + $dump .= sprintf(" [<%s>]...", $args); + } + /* + foreach ($positional as $pos) { + if ($pos[3] & Args::REQUIRED) { + $dump .= sprintf(" <%s>", $pos[1]); + } else { + $opts[] = $pos; + //$dump .= sprintf(" [<%s>]", $pos[1]); + } + if ($pos[3] & Args::MULTI) { + $dump .= sprintf(" [<%s>]...", $pos[1]); + } } + */ } return $dump; } @@ -101,12 +153,11 @@ class Help function dumpHelp() { $max = $this->calcMaxLen(); - $parg = ""; $dump = ""; foreach ($this->args->getSpec() as $spec) { $dump .= " "; if (is_numeric($spec[0])) { - $dump .= sprintf("-- %s ", $spec[1]); + $dump .= sprintf(" <%s> ", $spec[1]); } elseif (isset($spec[0])) { $dump .= sprintf("-%s|", $spec[0]); } @@ -121,8 +172,9 @@ class Help $dump .= " "; } - $dump .= str_repeat(" ", $max-strlen($spec[1])+3*!isset($spec[0])); - $dump .= $spec[2]; + $space = str_repeat(" ", $max-strlen($spec[1])+3*!isset($spec[0])); + $dump .= $space; + $dump .= str_replace("\n", "\n $space", $spec[2]); if ($spec[3] & Args::REQUIRED) { $dump .= " (REQUIRED)";