getArguments() as $a) { $arguments[] = strtoupper( // Wrap with square brackets if it's not required Flags\is_flag_set(Input\AbstractInputType::FLAG_OPTIONAL, $a->flags()) || !Flags\is_flag_set(Input\AbstractInputType::FLAG_REQUIRED, $a->flags()) ? "[{$a->name()}]" : $a->name() ); } $arguments = trim(implode($arguments, ' ')); return sprintf( 'Usage: %s [OPTIONS]... %s%s', $name, $arguments, strlen($arguments) > 0 ? '...' : '' ); } } if (!function_exists(__NAMESPACE__.'manpage')) { function manpage(string $name, string $version, string $description, string $example, Input\InputCollection $collection): string { $arguments = $options = []; foreach ($collection->getArguments() as $a) { $arguments[] = (string) $a; } foreach ($collection->getOptions() as $o) { $options[] = (string) $o; } $arguments = implode($arguments, PHP_EOL.' '); $options = implode($options, PHP_EOL.' '); return sprintf( '%s %s, %s %s Mandatory values for long options are mandatory for short options too. Arguments: %s Options: %s Examples: %s ', $name, $version, Strings\utf8_wordwrap($description), usage($name, $collection), $arguments, $options, $example ); } }