--- /dev/null
+<?php
+
+/**
+ * Output formatter 'table'
+ *
+ * @param $data
+ * The $data parameter is expected to be an array (keys ignored) of
+ * rows; each row, in turn, is an array of key / value pairs. Every
+ * row is expected to have the same set of keys. The data is rendered
+ * as a formatted word-wrapped table with rows of data cells aligned in
+ * columns.
+ * @param $metadata
+ * 'field-labels' - If present, contains an array of key / value pairs
+ * that map from the keys in the row columns to the label for the
+ * column header.
+ * 'column-widths' - If present, contains an array of key / value pairs,
+ * where the key is the integer column number, and the value is the
+ * width that column should be formatted to.
+ *
+ * Code:
+ *
+ * return array(
+ * "a" => array("b" => 2, "c" => 3),
+ * "d" => array("b" => 5, "c" => 6)
+ * );
+ *
+ * Output with --format=table:
+ *
+ * b c
+ * 2 3
+ * 5 6
+ */
+class drush_outputformat_table extends drush_outputformat {
+ function format($input, $metadata) {
+ $field_list = isset($metadata['field-labels']) ? $metadata['field-labels'] : array();
+ $widths = array();
+ $col = 0;
+ foreach($field_list as $key => $label) {
+ if (isset($metadata['column-widths'][$key])) {
+ $widths[$col] = $metadata['column-widths'][$key];
+ }
+ ++$col;
+ }
+ $rows = drush_rows_of_key_value_to_array_table($input, $field_list, $metadata);
+ $field_labels = array_key_exists('include-field-labels', $metadata) && $metadata['include-field-labels'];
+ if (!$field_labels) {
+ array_shift($rows);
+ }
+ return drush_format_table($rows, $field_labels, $widths);
+ }
+}