diff --git a/ansi.go b/ansi.go index 4c41dbd..1b7d2e3 100644 --- a/ansi.go +++ b/ansi.go @@ -93,7 +93,7 @@ func (a *ansi) Write(text []byte) (int, error) { var background, foreground string params := a.csiParameter.String() fields := strings.Split(params, ";") - if len(params) == 0 || len(fields) == 1 && fields[0] == "0" { + if len(params) == 0 || fields[0] == "" || fields[0] == "0" { // Reset. a.attributes = "" if _, err := a.buffer.WriteString("[-:-:-]"); err != nil { @@ -135,6 +135,10 @@ func (a *ansi) Write(text []byte) (int, error) { if !strings.ContainsRune(a.attributes, 'd') { a.attributes += "d" } + case "3", "03": + if !strings.ContainsRune(a.attributes, 'i') { + a.attributes += "i" + } case "4", "04": if !strings.ContainsRune(a.attributes, 'u') { a.attributes += "u" @@ -143,6 +147,14 @@ func (a *ansi) Write(text []byte) (int, error) { if !strings.ContainsRune(a.attributes, 'l') { a.attributes += "l" } + case "7", "07": + if !strings.ContainsRune(a.attributes, 'r') { + a.attributes += "r" + } + case "9", "09": + if !strings.ContainsRune(a.attributes, 's') { + a.attributes += "s" + } case "22": if i := strings.IndexRune(a.attributes, 'b'); i >= 0 { a.attributes = a.attributes[:i] + a.attributes[i+1:] @@ -150,6 +162,10 @@ func (a *ansi) Write(text []byte) (int, error) { if i := strings.IndexRune(a.attributes, 'd'); i >= 0 { a.attributes = a.attributes[:i] + a.attributes[i+1:] } + case "23": + if i := strings.IndexRune(a.attributes, 'i'); i >= 0 { + a.attributes = a.attributes[:i] + a.attributes[i+1:] + } case "24": if i := strings.IndexRune(a.attributes, 'u'); i >= 0 { a.attributes = a.attributes[:i] + a.attributes[i+1:] @@ -158,6 +174,14 @@ func (a *ansi) Write(text []byte) (int, error) { if i := strings.IndexRune(a.attributes, 'l'); i >= 0 { a.attributes = a.attributes[:i] + a.attributes[i+1:] } + case "27": + if i := strings.IndexRune(a.attributes, 'r'); i >= 0 { + a.attributes = a.attributes[:i] + a.attributes[i+1:] + } + case "29": + if i := strings.IndexRune(a.attributes, 's'); i >= 0 { + a.attributes = a.attributes[:i] + a.attributes[i+1:] + } case "30", "31", "32", "33", "34", "35", "36", "37": colorNumber, _ := strconv.Atoi(field) foreground = lookupColor(colorNumber - 30)