// Copyright 2016 Canonical Ltd. // Licensed under the LGPLv3, see LICENCE file for details. package ansiterm import ( "io" "github.com/juju/ansiterm/tabwriter" ) // NewTabWriter returns a writer that is able to set colors and styels. // The ansi escape codes are stripped for width calculations. func NewTabWriter(output io.Writer, minwidth, tabwidth, padding int, padchar byte, flags uint) *TabWriter { return new(TabWriter).Init(output, minwidth, tabwidth, padding, padchar, flags) } // TabWriter is a filter that inserts padding around tab-delimited // columns in its input to align them in the output. // // It also setting of colors and styles over and above the standard // tabwriter package. type TabWriter struct { Writer tw tabwriter.Writer } // Flush should be called after the last call to Write to ensure // that any data buffered in the Writer is written to output. Any // incomplete escape sequence at the end is considered // complete for formatting purposes. // func (t *TabWriter) Flush() error { return t.tw.Flush() } // SetColumnAlignRight will mark a particular column as align right. // This is reset on the next flush. func (t *TabWriter) SetColumnAlignRight(column int) { t.tw.SetColumnAlignRight(column) } // A Writer must be initialized with a call to Init. The first parameter (output) // specifies the filter output. The remaining parameters control the formatting: // // minwidth minimal cell width including any padding // tabwidth width of tab characters (equivalent number of spaces) // padding padding added to a cell before computing its width // padchar ASCII char used for padding // if padchar == '\t', the Writer will assume that the // width of a '\t' in the formatted output is tabwidth, // and cells are left-aligned independent of align_left // (for correct-looking results, tabwidth must correspond // to the tab width in the viewer displaying the result) // flags formatting control // func (t *TabWriter) Init(output io.Writer, minwidth, tabwidth, padding int, padchar byte, flags uint) *TabWriter { writer, colorCapable := colorEnabledWriter(output) t.Writer = Writer{ Writer: t.tw.Init(writer, minwidth, tabwidth, padding, padchar, flags), noColor: !colorCapable, } return t }