func Styler(attrs ...attribute) func(interface{}) string {
	attrstrs := make([]string, len(attrs))
	for i, v := range attrs {
		attrstrs[i] = strconv.Itoa(int(v))
	}

	seq := strings.Join(attrstrs, ";")

	return func(v interface{}) string {
		end := ""
		s, ok := v.(string)
		if !ok || !strings.HasSuffix(s, ResetCode) {
			end = ResetCode
		}
		return fmt.Sprintf("%s%sm%v%s", esc, seq, v, end)
	}
}
func Styler(attrs ...attribute) func(interface{}) string {
	attrstrs := make([]string, len(attrs))
	for i, v := range attrs {
		attrstrs[i] = strconv.Itoa(int(v))
	}

	seq := strings.Join(attrstrs, ";")

	return func(v interface{}) string {
		end := ""
		s, ok := v.(string)
		if !ok || !strings.HasSuffix(s, ResetCode) {
			end = ResetCode
		}
		return fmt.Sprintf("%s%sm%v%s", esc, seq, v, end)
	}
}
func Styler ( attrs ... attribute ) func ( interface { } ) string { attrstrs := make ( [ ] string , len ( attrs ) ) for i , v := range attrs { attrstrs [ i ] = strconv . Itoa ( int ( v ) ) } seq := strings . Join ( attrstrs , " " ) return func ( v interface { } ) string { end := " " s , ok := v . ( string ) if ! ok || ! strings . HasSuffix ( s , ResetCode ) { end = ResetCode } return fmt . Sprintf ( " " , esc , seq , v , end ) } }
// Styler is a function that accepts multiple possible styling transforms from the state,
// color and background colors constants and transforms them into a templated string
// to apply those styles in the CLI.
//
// The returned styling function accepts a string that will be extended with
// the wrapping function's styling attributes.
Styler is a function that accepts multiple possible styling transforms from the state color and background colors constants and transforms them into a templated string to apply those styles in the CLI . The returned styling function accepts a string that will be extended with the wrapping function s styling attributes .