// Copyright 2016 Canonical Ltd. // Licensed under the LGPLv3, see LICENCE file for details. package ansiterm import ( "fmt" "sort" "strings" ) type attribute int const ( unknownAttribute attribute = -1 reset attribute = 0 ) // sgr returns the escape sequence for the Select Graphic Rendition // for the attribute. func (a attribute) sgr() string { if a < 0 { return "" } return fmt.Sprintf("\x1b[%dm", a) } type attributes []attribute func (a attributes) Len() int { return len(a) } func (a attributes) Less(i, j int) bool { return a[i] < a[j] } func (a attributes) Swap(i, j int) { a[i], a[j] = a[j], a[i] } // sgr returns the combined escape sequence for the Select Graphic Rendition // for the sequence of attributes. func (a attributes) sgr() string { switch len(a) { case 0: return "" case 1: return a[0].sgr() default: sort.Sort(a) var values []string for _, attr := range a { values = append(values, fmt.Sprint(attr)) } return fmt.Sprintf("\x1b[%sm", strings.Join(values, ";")) } }