writeln($data['description']);
if (array_key_exists('help', $data) && $data['help'] != $data['description']) {
$output->writeln('');
$output->writeln($data['help']);
}
if (array_key_exists('examples', $data)) {
$output->writeln('');
$output->writeln('Examples:');
foreach ($data['examples'] as $example) {
$rows[] = [' ' . $example['usage'], $example['description']];
}
$formatterManager->write($output, 'table', new RowsOfFields($rows), $options);
}
if (array_key_exists('arguments', $data)) {
$rows = [];
$output->writeln('');
$output->writeln('Arguments:');
foreach ($data['arguments'] as $argument) {
$formatted = $this->formatArgumentName($argument);
$description = $argument['description'];
// @todo No argument default in Helpdocument
// if ($argument['default']) {
// $description .= ' [default: ' . $argument->getDefault() . ']';
// }
$rows[] = [' ' . $formatted, $description];
}
$formatterManager->write($output, 'table', new RowsOfFields($rows), $options);
}
$this->cleanOptions($data);
if (!empty($data['options'])) {
$rows = [];
$output->writeln('');
$output->writeln('Options:');
foreach ($data['options'] as $option) {
if (substr($option['name'], 0, 8) !== '--notify' && substr($option['name'], 0, 5) !== '--xh-' && substr($option['name'], 0, 11) !== '--druplicon') {
$rows[] = [$this->formatOptionKeys($option), $this->formatOptionDescription($option)];
}
}
$formatterManager->write($output, 'table', new RowsOfFields($rows), $options);
}
if (array_key_exists('topics', $data)) {
$rows = [];
$output->writeln('');
$output->writeln('Topics:');
foreach ($data['topics'] as $topic) {
$topic_command = Drush::getApplication()->find($topic);
$rows[] = [' drush topic ' . $topic, $topic_command->getDescription()];
}
$formatterManager->write($output, 'table', new RowsOfFields($rows), $options);
}
// @todo Fix this variability in key name upstream.
if (array_key_exists('aliases', $data) ? $data['aliases'] : (array_key_exists('alias', $data) ? [$data['alias']] : [])) {
$output->writeln('');
$output->writeln('Aliases: ' . implode(', ', $data['aliases']));
}
}
/**
* @param array $option
* @return string
*/
public static function formatOptionKeys($option)
{
// Remove leading dashes.
$option['name'] = substr($option['name'], 2);
$value = '';
if ($option['accept_value']) {
$value = '='.strtoupper($option['name']);
if (!$option['is_value_required']) {
$value = '['.$value.']';
}
}
$synopsis = sprintf(
'%s%s',
$option['shortcut'] ? sprintf('-%s, ', $option['shortcut']) : ' ',
sprintf('--%s%s', $option['name'], $value)
);
return $synopsis;
}
public static function formatOptionDescription($option)
{
$defaults = array_key_exists('defaults', $option) ? ' [default: "' . implode(' ', $option['defaults']) . '"]' : '';
return $option['description'] . $defaults;
}
public function formatArgumentName($argument)
{
$element = $argument['name'];
if (!$argument['is_required']) {
$element = '['.$element.']';
} elseif ($argument['is_array']) {
$element = $element.' ('.$element.')';
}
if ($argument['is_array']) {
$element .= '...';
}
return $element;
}
protected function cleanOptions(&$data)
{
if (array_key_exists('options', $data)) {
foreach ($data['options'] as $key => $option) {
if (substr($option['name'], 0, 8) == '--notify' || substr($option['name'], 0, 5) == '--xh-' || substr($option['name'], 0, 11) == '--druplicon') {
unset($data['options'][$key]);
}
}
}
}
}