anchor.diff:  
   enum ALIGNMENT { left, center, right }
   enum TEXTBEHAVIOUR { truncateLeft, truncateRight, wrap }
  +
  +/// [OutputTable] defines a base class for outputting tabular data to outputs.
  +abstract class OutputTable {
  +  void addHeader(Column column, CellTextCallback callback);
  +  void print(List items);
  +  void printToSink(List items, StringSink sink);
  +}
  +
  +/// [ScripTable] outputs items without any formatting except tabs for
  +/// separators.
  +class ScriptTable extends OutputTable {
  +  final Map<Column, CellTextCallback> _columns = {};
  +  @override
  +  void addHeader(Column column, CellTextCallback callback) {
  +    _columns[column] = callback;
  +  }
  +
  +  @override
  +  void print(List items) {
  +    printToSink(items, io.stdout);
  +  }
  +
  +  @override
  +  void printToSink(List items, StringSink sink) {
  +    if (_columns.length == 0) {
  +      return;
  +    }
  +    // Print headers.
  +    var columns = _columns.keys.toList();
  +    columns.forEach((column) {
  +      if (column != columns[0]) {
  +        sink.write("\t");
  +      }
  +      sink.write(column.header);
  +    });
  +    sink.writeln("");
  +
  +    // Print items.
  +    items.forEach((item) {
  +      columns.forEach((column) {
  +        if (column != columns[0]) {
  +          sink.write("\t");
  +        }
  +        sink.write(_columns[column](item));
  +      });
  +      sink.writeln("");
  +    });
  +  }
  +}
   
   /// [ConsoleTable] outputs a list of items as a table, width a default width of
   /// 80 units. Column sizes can be set individually. If zero-width for a column
   /// is specified, the free available space is distributed equally amongst these.
   /// The table can be styled by giving it a custom template.
  -class ConsoleTable {
  +class ConsoleTable extends OutputTable {
     final int width;
     final Template template;
   
  
positive.code: 
    /// [addHeader] adds a new column to the table. When a row is processed the
    /// callback given will be invoked with the item for the row.
    void addHeader(Column column, CellTextCallback callback) {
      _columns[column] = callback;
    }
  
    /// Prints the [items] as a table in columns given by [addHeader] to stdout.
    void print(List items) {
      printToSink(items, io.stdout);
    }
  
    /// Prints the [items] as a table in columns given by [addHeader] to [sink].
    void printToSink(List items, StringSink sink) {
      if (_columns.length == 0) {
        return;
  
negative.code:     var regexpAddHyphon = new RegExp(r"[_]");
      while (finger + width < text.length) {
        var nicerIndex = text.lastIndexOf(regexpBlank, finger + width);
        if (nicerIndex > finger) {
          wrappedStrings.add(text.substring(finger, nicerIndex));
          finger = nicerIndex + 1; // change space for return;
          continue;
        }
        nicerIndex = text.lastIndexOf(regexpIncludeChars, finger + width - 1);
        if (nicerIndex > finger) {
          wrappedStrings.add(text.substring(finger, nicerIndex + 1));
          finger = nicerIndex + 1;
          continue;
        }
        nicerIndex = text.lastIndexOf(regexpAddHyphon, finger + width - 2);
        if (nicerIndex > finger) {
          wrappedStrings.add(text.substring(finger, nicerIndex + 1) + '-');
          finger = nicerIndex + 1;
          continue;
  